Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Топ:
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Дисциплины:
2021-06-30 | 33 |
5.00
из
|
Заказать работу |
|
|
Метод 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!