Создание прямоугольного массива — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Создание прямоугольного массива

2021-06-30 33
Создание прямоугольного массива 0.00 из 5.00 0 оценок
Заказать работу

Метод ArrayRectangular позволяет создать двумерный или трехмерный прямоугольный массив. Он требует число строк, столбцов, расстояния между ними, при создании трехмерного массива требуется так же указать количество уровней и расстояния между ними. Если задать одну строку, то следует указать несколько столбцов и наоборот. Предполагается что оригинальный объект расположен в левом нижнем углу массива, а сам массив создается вверх и вправо. Если нужно вниз и влево, задавай отрицательные расстояния между строками и столбцами.

AutoCAD строит прямоугольный массив вдоль базовой линии, определенной текущим углом привязки. По умолчанию равен нулю, столбцы и строки ортогональны в соответствии с расположением осей XY. Для изменения этого угла есть свойство SnapRotationAngle. Пример трехмерного прямоугольного массива

Sub ArrayRectangularExample() Dim circleObj As AcadCircle Dim center(0 To 2) As Double, radius As Double center(0) = 2#: center(1) = 2#: center(2) = 0#: radius = 0.5 Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius) ZoomExtents ' Определимпрямоугольныймассив Dim numOfRows As Long, numOfColumns As Long, numOfLevels As Long Dim distBwtnRows As Double, distBwtnColumns As Double, distBwtnLevels As Double numOfRows = 5: numOfColumns = 5: numOfLevels = 2 distBwtnRows = 1: distBwtnColumns = 1: distBwtnLevels = 1 ' Создадиммассив Dim retObj As Variant retObj = circleObj.ArrayRectangular(numOfRows, numOfColumns, numOfLevels,_ distBwtnRows, distBwtnColumns, distBwtnLevels) ZoomExtentsEnd Sub

Перемещение объектов

Объекты можно перемещать вдоль вектора без изменения размера и ориентации, а так же вращать вокруг базовой точки. Метод Move требует двух координат, задающих вектор - как далеко и в каком направлении будет движение.

Sub MoveCircle() Dim circleObj As AcadCircle Dim center(0 To 2) As Double Dim radius As Double center(0) = 2#: center(1) = 2#: center(2) = 0#: radius = 0.5 Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)ZoomExtents ' Определим точки задающие вектор перемещения. ' (на 2 единицы вдоль оси X)Dim point1(0 To 2) As Double,point2(0 To 2) As Double point1(0) = 0: point1(1) = 0: point1(2) = 0 point2(0) = 2: point2(1) = 0: point2(2) = 0 circleObj.Move point1, point2 circleObj.UpdateEnd Sub

Вращение объектов

Метод Rotate требует координаты базовой точки в виде переменной типа Variant, содержащей массив из 3-х координат и угол в радианах - на какой повернуть от текущего положения. Пример вращения полилини относительно базовой точки

Sub RotatePolyline() Dim plineObj As AcadLWPolylineDim points(0 To 11) As Double points(0) = 1: points(1) = 2: points(2) = 1: points(3) = 3 points(4) = 2: points(5) = 3: points(6) = 3: points(7) = 3 points(8) = 4: points(9) = 4: points(10) = 4: points(11) = 2 Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) plineObj.Closed = True ZoomExtents msgbox "Атеперьна 45 градусов"' Зададим угол в 45 градусов и базовую точку (4, 4.25, 0)Dim basePoint(0 To 2) As Double Dim rotationAngle As Double basePoint(0) = 4: basePoint(1) = 4.25: basePoint(2) = 0 rotationAngle = 0.7853981 ' 45 градусов ' Повернем plineObj.Rotate basePoint, rotationAngle plineObj.Update ZoomExtents End Sub

Удалениеобъектов

Отдельный объект можно удалить методом Delete. Нельзя удалить только объекты-коллекции ModelSpace, Layers, Dictionaries.

Sub DeletePolyline() Dim lwpolyObj As AcadLWPolyline Dim vertices(0 To 5) As Double vertices(0) = 2: vertices(1) = 4 vertices(2) = 4: vertices(3) = 2 vertices(4) = 6: vertices(5) = 4 Set lwpolyObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(vertices) ZoomExtents lwpolyObj.Delete ThisDrawing.Regen acActiveViewportEnd Sub

Масштабирование объектов

Масштабирование объектов возможно указанием базовой точки и длины которые берутся как фактор масштабирования основываясь на текущих единицах измерения. Метод ScaleEntity масштабирует объект пропорционально по всем осям. Он требует укaзания базовой точки и фактора масштабирования. Базовая точка как обычно переменная типа Variant. Фактор масштабирования - величина на которую умножаются размеры объекта. Может быть от нуля до 1 (уменьшение) и больше 1 (увеличение). Пример масштабирования полилинии.

Sub ScalePolyline() Dim plineObj As AcadLWPolyline Dim points(0 To 11) As Double points(0) = 1: points(1) = 2: points(2) = 1: points(3) = 3 points(4) = 2: points(5) = 3: points(6) = 3: points(7) = 3 points(8) = 4: points(9) = 4: points(10) = 4: points(11) = 2 Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) plineObj.Closed = True ZoomExtents ' Зададиммасштабирование Dim basePoint(0 To 2) As Double Dim scalefactor As Double basePoint(0) = 4: basePoint(1) = 4.25: basePoint(2) = 0: scalefactor = 0.5 ' Масштабируем plineObj.ScaleEntity basePoint, scalefactor plineObj.UpdateEnd Sub

Трансформировние объектов

Конфигурация матрицы трансформации

R00 R01 R02 T0
R10 R11 R12 T1
R20 R21 R22 T2
0 0 0 1

Перед трансформацией объекта следует заполнить матрицу трансформации. В следующем примере объект вращается на 90 градусов вокруг точки (0,0,0) используя матрицу трансформации.

Sub TransformBy() Dim lineObj As AcadLine Dim startPt(0 To 2) As Double, endPt(0 To 2) As Double startPt(0) = 2: startPt(1) = 1 startPt(2) = 0: endPt(0) = 5 endPt(1) = 1: endPt(2) = 0 Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt) ZoomAll ' Заполняемматрицу Dim transMat(0 To 3, 0 To 3) As Double transMat(0, 0) = 0#: transMat(0, 1) = -1# transMat(0, 2) = 0#: transMat(0, 3) = 0# transMat(1, 0) = 1#: transMat(1, 1) = 0# transMat(1, 2) = 0#: transMat(1, 3) = 0# transMat(2, 0) = 0#: transMat(2, 1) = 0# transMat(2, 2) = 1#: transMat(2, 3) = 0# transMat(3, 0) = 0#: transMat(3, 1) = 0# transMat(3, 2) = 0#: transMat(3, 3) = 1# ' Трансформируемлинию lineObj.TransformBy transMat lineObj.Update ZoomExtentsEnd Sub

Еще ряд примеров матриц трансформации:

1. Вращение на 45 градусов вокруг точки (5,5,0)

0.707107

-0.707107

0.0

5.0

0.707107

0.707107

0.0

-2.071068

0.0

0.0

1.0

0.0

0.0

0.0

0.0

1.0

2. Перемещение в точку (10,10,0)

1.0

0.0

0.0

10.0

0.0

1.0

0.0

10.0

0.0

0.0

1.0

0.0

0.0

0.0

0.0

1.0

               

 

3. Масштабирование в 10,10 на точке (0,0,0)

10.0

0.0

0.0

0.0

0.0

10.0

0.0

0.0

0.0

0.0

10.0

0.0

0.0

0.0

0.0

1.0

4. Масштабирование в 10,10 на точке (2,2,0)

10.0

0.0

0.0

-18.0

0.0

10.0

0.0

-18.0

0.0

0.0

10.0

0.0

0.0

0.0

0.0

1.0

             

Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.