Vba autocad выделить объект

Обновлено: 02.07.2024

Option Explicit
Sub LineRotate()
Dim lineObj As AcadLine
Dim Pt1(0 To 2) As Double
Dim Pt2(0 To 2) As Double
Dim BasePt(0 To 2) As Double
Dim RotAngle As Double
'Указываем начальную и конечную точку
Pt1(0) = 1: Pt1(1) = 1: Pt1(2) = 0
Pt2(0) = 5: Pt2(1) = 1: Pt2(2) = 0
'Добавляем линию в пространство модели
Set lineObj = ThisDrawing.ModelSpace.AddLine(Pt1, Pt2)
'Указываем базовую точку
BasePt(0) = 1: BasePt(1) = 1: BasePt(2) = 0
'Указываем угол поворота
RotAngle = 0.7853981
'Здесь угол задан в радианах, что бы перевести в градусы
'Нужно воспользоваться формулой: Градусы = радианы/180*Pi
'Поворачиваем линию
lineObj.Rotate BasePt, RotAngle
'Обновляем объект
lineObj.Update
End Sub

Как видно не чего сложного. Единственное, немного поясню, для тех, кто не знает или забыл:
Option Explicit -оператор, который требует, чтобы все переменные в данном модуле должны быть предварительно объявлены.
Double –число с плавающей точкой двойной точности (от 4,940 656 458 412 47е-324 до 1,797 693 134 862 32е308)

Итак, все это конечно интересно, но сразу возникают вопросы: Как повернуть линию с помощью выбора в чертеже, и не линию, а вообще любой выбранный объект? Как, сделать, чтобы базовая точка была указана в чертеже, а угол в командной строке? Для рассмотрения этих вопросов перейдем к следующему шагу.

Шаг второй

Для, того чтобы выбирать объекты в чертеже, мы будем использовать наборы выбора(AcadSelectionSet) методом указания на экране объекта(SelectOnScreen).
Указывать базовую точку – методом GetPoint (возвращает значение типа Variant, содержащее трехмерный массив). Пользователь может указать точку или задать ее координаты.
Для ввода угла поворота применим метод GetInteger ( Integer – целые числа в диапазоне от -32768 до +32767).Пользователю выдается приглашение ввести число. Смотрим код:

Option Explicit
Sub ObjRotate()
Dim Obj As AcadEntity
Dim BasePt As Variant
Dim SelSet As AcadSelectionSet
Dim GradAngle As Integer
Dim RotAngle As Integer
On Error GoTo Control
'Создаем новый набор выбора, например с именем "Set"
Set SelSet = ThisDrawing.SelectionSets.Add("Set")
'Запрос на выбор примитивов
SelSet.SelectOnScreen
'Если не чего не выбрано, переходим к "Control"
If SelSet.Count = 0 Then GoTo Control
'Указываем базовую точку
BasePt = ThisDrawing.Utility.GetPoint(, "Укажите базовую точку: ")
'Вводим угол поворота(в градусах)
GradAngle = ThisDrawing.Utility.GetInteger("Введите угол поворота:")
'Переводим градусы в радианы
RotAngle = GradAngle / 180 * 3.141592653
For Each Obj In SelSet
'Выполняем поворот объекта
Obj.Rotate BasePt, RotAngle
'Обновляем объект
Obj.Update
Next Obj
Control:
SelSet.Delete 'Удаляем набор выбора
End Sub

Некоторые пояснения:
AcadEntity-объект AutoCAD
Variant - Переменная, которая может содержать данные любого типа. Если, есть возможность, рекомендуется воздерживаться от применения этого типа и объявлять тип явно(например:Integer, Double и т.д.), так как программе требуется больше времени на считывание данных.
On Error GoTo Control- один из операторов, с помощью которого можно контролировать работу программы при возникновении ошибок. Если обнаружена ошибка, то происходит переход к метке“Control:” В нашем случае это удаление набора выбора и выход.
If SelSet.Count = 0 Then GoTo Control- условный оператор. Если выражение истинно, то Оператор выполнится, если ложно, то нет. Здесь SelSet.Count - количество объектов в наборе.
For Each Obj In SelSet - форма цикла предназначенная для выполнения какой-либо операции с каждым объектом, входящим в состав некоторой коллекции объектов:
For Each ИмяОбъекта In ИмяКоллекции
Операции над объектами
Next ИмяОбъекта

Ну вот, с этим мы вроде как разобрались. Давайте немного разнообразим код, а заодно получим некоторые навыки при работе с формами.

Шаг третий

Допустим, нам нужно, чтобы на экране появлялось диалоговое окно, в котором можно было бы ввести угол поворота.
Для начала вставим форму. В окне свойств(Properties Window) формы, значение в поле Name изменим на “Form1”. Значение в поле Caption изменим, например, на “Поворот объекта“
Добавим на форму несколько элементов:

Label(Надпись), который используется для отображения текста. В свойствах изменим значение Caption на “Угол:” Кстати, так же в свойствах можно изменить цвет и размеры элемента, выравнивание, шрифт и т.д.

TextBox(Текстовое поле)- служит для ввода или вывода информации, которая используется в программе. Изменим свойство Name на “Text1”.
(Если нужно запретить изменение содержимого текстового поля, когда форма появляется на экране в свойствах значение Locked надо поставить на True.Если нужно, чтобы в текстовом поле при появлении формы постоянно находилось какое-либо значение, в свойствах в поле Value надо указать это значение. Если нужно ограничить количество введенных символов, то его можно указать в свойстве MaxLength.)

SpinButton(Счетчик)-дает возможность пользователю указывать числовое значение. Он используется вместе с элементом TextBox. В его свойствах задаются:
Max - определяет максимальное значение элемента SpinButton
Min - минимальное значение
Value - текущее значение
Пусть у нас будет задано:Max=360,Min= -360,Value=0

CommandButton(командная кнопка) - используется для выполнения какого-либо действия, например, запуск какой-то опперации. В нашем примере мы будем использовать два этих элемента:
Первый для запуска. В свойствах, в поле Name зададим ему имя cmdApply,в поле Caption – “OK”.
Второй для выхода. Name-“cmdCancel”, Caption – “Cancel”.
Короче, говоря, должно получиться что-то похожее как на рисунке.

Form VBA

Идем дальше. Дважды щелкнем(кликнем) на кнопке”OK”(элемент cmdApply) и добавим в процедуру “Private Sub cmdApply_Click()”знакомый нам, но немного измененный код:

С элементом TextBox думаю все понятно, теперь заставим работать элемент SpinButton. Дважды щелкнем(кликнем) на нем и добавим в процедуру “Private Sub SpinButton1_Change()” следующее:

Private Sub SpinButton1_Change()
Text1.Text = SpinButton1.Value
'Значение TextBox = Значению SpinButton
End Sub

Рассмотрим кнопку Cancel. Снова дважды щелкнем(кликнем), на кнопке“Cancel”(элемент cmdCancel),чтобы добавим в процедуру”Private Sub cmdCancel_Click()” следующий код:

Private Sub cmdCancel_Click()
Unload Me 'Закрываем окно(см.выше)
End Sub

Теперь осталось добавить в проект модуль, для вызова формы. И вставить в него такой код:

Sub Rotate()
Form1.Show
End Sub

Здесь “Form1”-имя нашей формы.
Show-метод, загружающий и показывающий форму на экране.

COM-автоматизация – технология, с помощью которой приложения, написанные на различных языках программирования, могут получать функциональность программных систем (AutoCAD, Word, Excel и др.). Объектная модель приложения определяет иерархию объектов. Доступ к какому-либо свойству (или методу) конкретного объекта осуществляется через указание всех объектов в иерархической последовательности от корневого объекта (Application) и ниже.

Например, возможность обращения к командной строке из программы, написанной на языке VB, реализуется через метод SendCommand объекта ActiveDocument:

Ниже рассматривается простейший пример программы с загрузкой системы AutoCAD и управление через свойства и методы объекта Circle непосредственно из VB приложения.

В Visual Studio создайте VB проект c прототипом Windows Forms Application. На форме разместите 4 командных кнопки. При запуске VB приложения загружается диалоговое окно и запускается AutoCAD. При выборе кнопок в последовательности сверху вниз соответственно выполняются действия:


Постановка задачи. Разработать программный продукт, обеспечивающий создание в системе AutoCAD комплексного чертежа из 3-х проекций и аксонометрии.


Для решения задачи создается VB проект, который обеспечивает запуск AutoCAD, загрузку и запуск 2-х VLisp приложений.

В файле mod3d.lsp описывается создание 3D модели объекта, файле pro3.lsp – создание комплексного чертежа из 3-х проекций и аксонометрии объекта.


Структура приложения позволяет разрабатывать комплексный чертеж для любого пространственного объекта. При этом модифицируется только лишь файл mod3d.lsp.

Задание: Модифицируйте файл mod3d.lsp, обеспечив создание в AutoCAD модели в соответствии с вариантом задания.

Ниже описывается программа, обеспечивающая моделирование процесса нарезания резьбы с использованием методов и свойств объектов AutoCAD.

Откройте в AutoCAD чертеж Винт.dwg.

Создайте VB проект с формой, на которой размещены две командные кнопки. Одна из кнопок запускает процесс нарезания резьбы, вторая выгружает AutoCAD и закрывает форму. Подключите к проекту библиотеку AutoCAD. Для этого выберите кнопки меню Project>References и отметьте флажок AutoCAD 20… Type Library.

Скопируйте листинг программы (см. ниже) в окно кода. Ознакомьтесь с описанием программы, модифицируйте ее, если необходимо. Протестируйте программу.

Запустите AutoCAD и откройте чертеж-прототип Винт.dwg. При запуске программы (загрузке формы) и нажатии кнопки cmdStart устанавливается связь с этим чертежом-прототипом.

Язык программирования VisualBasic for Applications (VBA) является такой же встроенной в AutoCAD средой, как и VisualLISP среда. VBA обеспечивает более удобную среду для создания диалоговых окон по сравнению с совместным использованием для этой цели языков VLISP и DCL. Однако, VLISP более прост для программирования графических операций. К тому же графические действия выполняются на VBA медленнее, поскольку они осуществляются опосредовано через интерфейс COM-автоматизации.

Различия между VBA и VB:

  • VBA запускается в том же самом рабочем пространстве, как и AutoCAD, обеспечивая очень быструю среду программирования.
  • VBA имеет собственный набор объектов, ключевых слов, констант, и т. д., который обеспечивает управление, отладку и выполнение программы.
  • VBA не поддерживает создание выполнимых (executables) программ.
  • VBA обеспечивает связь с активным рисунком в текущем AutoCAD сеансе через объект ThisDrawing. Используя ThisDrawing Вы получаете непосредственный доступ к текущему объекту Document, всем методам, свойствам, и другим объектам в иерархии.

Если VBA не поддерживает создание выполнимых (executables) программ. Тогда возникает вопрос, каким образом запускается VBA приложение? Прежде всего, введем новый термин Макрокоманда (Macros) – это VBA подпрограмма, записанная в модуле ThisDrawing или Module. Каждая подпрограмма, записанная в этих модулях, может запускать VBA приложение. Для запуска приложения необходимо выделить имя макроса в диалоговом окне Macros (вызывается из среды AutoCAD кнопками меню Tools>Macro>Macros) и щелкнуть на кнопке Run.

Макросы можно запустить не только из диалогового окна, но и с командной строки, например:

Предварительно командой VBALOAD должен быть загружен проект, запускаемый макросом.

VLISP также позволяет запустить VBA (функция vl-vbarun), однако данные одной среды (переменные и константы) не могут быть видимы из другой среды. В этом случае существует единственная возможность обмена информацией – запись данных в файл одной программой и считывание данных из другой программы.

Я инженер-проектировщик ОВиК, не программист. И не хочу, да и некогда, вникать в серьезное программирование. Чаще всего появляется ситуация, что нужно как-то автоматизировать рутину здесь и сейчас. На помощь приходит простой язык VBA.

Далее я покажу, как можно без особых забот сделать самому то, за что серьезные ребята берут не плохие денежки. А именно перенос данных из Excel в AutoCAD и обратно. Заинтересованных прошу под кат.

Программировать будем на стороне Excel — мне так проще. Для подключения нужно войти в режим разработчика: Alt+F8 Либо можно открыть вкладку «разработчик» из настроек ленты.

В окне разработчика VBA входим в верхнее меню: Tools/References. В этом окне нужно поставить галочку на вашей версии AutoCAD


В моем случае это AutoCAD 2014 Type Library. Далее нужно в левом окне создать в вашей книге модуль, как на скриншоте (Module)


И в модуль вставляем нижеприведенный код:


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


Код обновления текста по хэндлу — написан ниже: 'получаем хэндл из ячейки, в которую мы записали кодом выше.

entHandle = ActiveCell.Offset(0, 3).Value 'получили наш блок по хэндлу
Set blockObj = acadDoc.HandleToObject(entHandle)

А дальше делаем всё то же самое, что и выше.

Для того, чтобы немного разъяснить как это работает вживую — записал видео:

Как видите, кода минимум, однако на больших объектах мне экономит по несколько часов работы. И снижается риск ошибки. Т.к. обычно это выглядит следующим образом у проектировщиков — открываются два окна на разных экранах, и или вручную, или через буфер обмена начинается заполнение выносок или блоков на чертеже.

Опять же чем хорош VBA — что он всегда под рукой :) Excel-то основной инструмент у инженера.

Имитировать ввод команд в командную строку с возможностью передачи параметров команде позволяет метод SendCommand . Пробел в данной строке эквивалентен нажатию Enter . Вызов данного метода без аргументов не допускается.

Следующий пример создает окружность с центром (2,2,0) и радиусом 4.

Обратите внимание на пробел в конце каждой строки.

Если не открыт ни один документ

Несмотря на то, что Autocad всегда стартует с пустым или открытым документом существует возможность закрыть все документы, при этом главное меню сократится до 4-х пунктов ( File, View, Window, Help ), а также пропадет командная строка. Интерфейс ActiveX в данном случае позволяет выполнять только следующие действия

  • Открыть документ
  • Создать документ
  • Импортировать документ
  • Выйти из Autocad

Эти действия доступны для всей коллекции Documents , кроме того методы и свойства данной коллекции ограничены набором методов и свойств объекта Application . Свойство Count коллекции Documents открыт ли хоть один документ .If Documents.Count > 0 Then открыт как минимум один документ. Здесь важно также заметить, что объект ThisDrawing не определен, если не открыт ни один документ, поэтому попытка выполнить макрос с ThisDrawing приведет к ошибке периода выполнения. Вместо этого используй функцию GetObject .

Импорт файлов других форматов

Метод Import позволяет импортировать файлы форматов DXF , SAT, BMP, PostScript . Он принимает три параметра: имя файла, точку вставки и фактор масштабирования.

Экспорт в другие форматы

Метод Export поддерживает следующие форматы: WMF, SAT, EPS, DXF , DWF , BMP . Он принимает три параметра: имя создаваемого файла, тип создаваемого файла и набор экспортируемых объектов. При экспорте в WMF, SAT или BMP должен существовать непустой набор. В EPS и DXF экспортируется весь рисунок.

Пример эскпорта-импорта в DXF

Создание и редактирование примитивов и наборов объектов

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

Создание объектов

Несмотря, на то что Autocad > может создать один и тот же объект разными путями, ActiveX автоматизация допускает только один метод на объект. Например, для создания окружности можно указать 1. центр и радиус 2. две точки, задающие диаметр, 3. три точки определяющие окружность, 4. два тангенса и радиус. Однако ActiveX позволят воспользоваться только первым из них.

Примечание: метод VB и VBA CreateObject или Dim позволяют создать только объект Autocad Application , все остальные объекты создаются методами Add и Add[Object] .

Определение объекта-контейнера

Объекты создаются в коллекциях ModelSpace, PaperSpace или объекте Block . На объект можно сослаться непосредственно или через объектную переменную. Непосредственная ссылка включает всю иерархию:

Для ссылки на объект через объектную переменную следует создать переменную типа AcadModelSpace или AcadPaperSpace . И установить ссылку на нужное свойство активного документа. В следующем примере две объектные переменные ссылаются на Model Space и PaperSpace соответственно:

В следующей строке в пространство модели добавляется линия через объектную переменную:

Создание линий

Возможно создание различных типов линий - проcто линия, мультилиния , мультилиния с дуговыми сегментами. Обычно для обрисовки линий задаются координаты вершин. Тип линии по умолчанию непрерывный. Методы для создания линий:

  • AddLine - создает линию по двум точкам;
  • AddLightWeightPolyline - создает двумерную полилинию ;
  • AddMLine - создает мультилинию;
  • AddPolyLine - создает двумерную или трехмерную полилинию .

Стандартные линии и мультилини создаются в плоскости XY полилинии создаются в Object Coordinat System . Пример создания полилини :

Создание криволинейных объектов

Все подобные объекты (эллипсы, сплайны, дуги, окружности) строятся в плоскости XY мировой системы координат. Для их создания используется один из следующих методов:

  • AddArc - дуга через центр, радиус, начальная точка и конечный угол;
  • AddCircle - окружность через центр и радиус;
  • Addellipse - эллипс через центр, точку на главной оси и радиус кривизны;
  • AddSpline - кривая.

Пример создания сплайна

Более подробная информация о сплайнах в AutoCAD ActiveX and VBA Reference .

Создание точки

Стиль создаваемой точки и ее размер можно указать в относительных единицах к размеру экрана или в абсолютных. Управление видом точек делается через системные переменные PDMODE, PDSIZE . Значения переменной PDMODE равные 0,2,3,4 представляют разные формы точки, значение равное 1 - означает невидимую точку. Добавление 32, 64 или 96 означает вокруг точки фигуру (окружность, квадрат, окружность вписанную в квадрат). Значение переменной PDSIZE равное нулю задает размер точки 5% от размера экрана, а любые положительные значения - абсолютный размер . Отрицательные же значения интерпретируются как процент от размера видового экрана . Размер всех точек пересчитывается при регенерации, т.е. изменение PDMODE, PDSIZE сразу не заметно. Для установки значений системных переменных используется метод SetVariable , ниже приведен пример его применения:

Создание сплошной заливки

Возможно создание треугольной и прямоугольной области со сплошной заливкой. Наиболее быстрый способ - создание области при выключенной системной переменной FILLMODE и затем включение ее. Последовательность второй и четвертой точки области определяют способ заливки (слева направо и сверху вниз - если 1,2,3,4 то прямоугольная, если 1,2,4,3 то треугольная). Первые две точки задают сторону полигона. Для создания области со сплошной заливкой есть метод AddSolid . Пример объекта с заливкой.

Создание регионов

Регион представляет двухмерную замкнутую фигуру, границы которой не имеют внутренних пересечений. Может состоять из комбинации линий, окружностей, дуг, эллипсов, эллиптических дуг, сплайнов и некоторых других объектов. Весь объект должен лежать в одной плоскости. Трехмерная полилиния может быть преобразована в регион путем "взрыва". К региону применима штриховка и тень, у него есть свойства - площадь и момент инерции. Создав фигуры можно выбрав их создать регион, используя метод AddRegion. AutoCAD преобразует замкнутые двумерные и трехмерные планарные полилинии в отдельные регионы, а полилинии , линии и кривые образуют замкнутые планарные петли. Если более двух кривых разделяют конечную точку результирующий регион может быть присужден. ( arbitrary ) используйте Variant для хранения вновь создаваемых массивов регионов. Для подсчета количества созданных объектов Region используйте UBound(objRegions) - LBound(objRegions) + 1 , где objRegions переменная Variant содержащая массив возвращенный методом AddRegion . Пример простого региона из одной окружности:

Создание составных регионов

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

Для объединения регионов вызывайте метод Boolean и вводите константу acUnion , для операции вместо acSubtraction , а для пересечения acIntersection .

Создание штриховок

Штриховки заполняют указанную область рисунка образцом. При ее создании сначала следует создать объект Hatch методом AddHatch . Ассоциированная штриховка привязана к определенным границам и меняется вместе с ними. Привязка может быть задана только при создании штриховки, после этого штриховку можно отвязать, но нельзя привязать снова. Чтобы сделать штриховку ассоциированной следует использовать параметр Associativity=TRUE для метода AddHatch , а для разрыва связи Associativity=FALSE .

Назначение имени и типа штриховке

В AutoCAD есть сплошная заливка и более 15 штриховок применяемых в производстве. Штриховка подчеркивает отельную часть рисунка или области. Поддерживаются внешние библиотеки с образцами штриховок. Для указания уникального образца следует давать полное имя и тип штриховки. Тип штриховки указывает местоположение образцов штриховки. acHatchPatternTypePredefined (в acad.pat ), acHatchPatternTypeUserDefined (используя текущий тип линий), acHatchPatternTypeCustomDefined (из другого pat -файла).

Задание границ штриховки

Как только создан объект Hatch можно добавлять границы штриховки. Они могут задаваться комбинацией линий, дуг, окружностей, двумерных полилиний , эллипсов, сплайнов и регионов. Первая граница должна быть внешней границей штриховки, (метод AppendOuterLoop ). Внутренние границы задаются методом AppendInnerLoop. Они определяют незаштрихованные "островки" внутри штрихованной области. Пример штриховки.

Редактирование объектов

Для изменения существующего объекта применяют методы и свойства соответствующих объектов, для видимых объектов нужно еще применять метод Update .

Работа с именованными объектами и их переименование

Именованные объекты это блоки, слои, группы, размерные стили и т.п. Чистка именованных объектов на которые в текущем рисунке нет ссылок осуществляется методом ThisDrawing.PurgeAll .

По мере усложнения чертежа может возникать необходимость давать объектам другие более осмысленные имена. Переименовать можно почти все, кроме, например, 0 слоя и типа линий continuose . Имя может быть длиной до 255 символов (буквы, цифры, спецсимволы кроме тех которые используются самим AutoCADом < > / \ " : ; ? * | = ' и запятая). Пример переименования

Выбор объектов

Набор представляет собой группу объектов AutoCAD указанных для обработки как одно целое. Набор может состоять из объектов разных слоев, разных цветов и т.п. Создание набора двухступенчатый процесс. Сначала создается набор и включается в коллекцию SelectionSets . Затем идет работа с объектами, входящими в набор. Для создания именованного набора используем метод Add .

Добавление объектов в набор

Добавление объектов в набор может осуществляется одним из следующих методов:

  • AddItem - добавляет один или более объектов в набор;
  • Select - выбирает объекты и помещает в активный набор, можно выбрать все объекты, выбрать секущей или прямоугольной рамкой, последний созданный, из последнего созданного набора, окном или полигоном;
  • SelectAtPoint - выбрать объекты проходящие через данную точку;
  • SelectByPolygon - выбрать объекты полигоном;
  • SelectOnScreen - запросить у пользователя указания объектов.

Фильтрация набора

Фильтрация набора объектов (например по цвету, типу объекта) осуществляется через список фильтров. При этом фильтрация по цвету различает только цвета явно назначенные объектам, но не унаследованные от слоя (!). Для применения механизма фильтрации используется тип фильтра и данные фильтра, которые сортируются. AutoCAD ActiveX автоматизация использует DXF -коды групп для указания типа фильтров. Наиболее часто используемые фильтры перечислены ниже.

Примеры различных фильтров

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

При выборе всех объектов в набор может быть необходимость исключить объекты, это делается следующими методами:

  • RemoveItems - удаляет один или более объект из набора, но не из рисунка;
  • Clear - очищает набор, не удаляя его;
  • Erase - удаляет объекты из рисунка, очищая набор;
  • Delete - удаляет набор, не трогая объекты.

Копирование объектов

Объекты рисунка могут быть копированы, в том числе на определенное смещение от оригинала. Можно так же создать зеркальное отображение объекта относительно заданной линии. Объекты могут размножаться через прямоугольный или округлый шаблон. Нельзя только использовaть эти методы одновременно с перебором элементов коллекции, сначала следует завершить перебор. Для копирования единичного объекта метод Copy позволяет создать его дубликат по тем же координатам.

Копирование нескольких объектов или в другой документ

Для этого есть метод CopyObjects или копирование через создание массива а потом методом Copy . Для копирования объектов набора, перебором его элементы засылаются в массив. Перебирая элементы массива, каждый копируется по отдельности в другой массив. Пример копирования нескольких:

Смещение объектов

Смещение объекта создает его копию на определенном расстоянии от оригинала. Смещению могут подвергаться дуги, окружности, эллипсы, линии, полилинии , сплайны и некоторые другие. Метод Offset принимает единственный параметр - это дистанция на которую следует сместить объект. Если его значение отрицательное, AutoCAD пытается построить уменьшенный объект (для окружностей), если это не имеет смысла, то объект строится с координатами меньшими текущего. Для многих объектов результат операции - новая кривая, которая может не быть подобной оригиналу. Например при смещении эллипса образуется сплайн. В некоторых случаях может потребоваться чтобы смещение создало несколько кривых, поэтому метод может создавать массив объектов. Пример смещения полилини

Отражение объекта

Данный метод создает зеркальную копию объекта относительно координатной оси или заданной линии. Действует на любые объекты. В отличие от команды Mirror метод Mirror не удаляет оригинальный объект, для удаления следует воспользоваться методом Erase . Принимает два параметра - координаты точек принадлежащих линии относительно которой будет отражаться объект.

Для управления свойствами отражения текстовых объектов используется системная переменная MIRRTEXT . Значение по умолчанию 1, говорит о том, что текст отражается как и другие объекты, а значение 0 приводит к тому, что текст не меняется при отражении объекта его содержащего. Пример отражения полилини по оси:

Создание массива объектов

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

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

Метод ArrayPolar выбранного объекта требует количество объектов, угол и центральную точку массива. Число объектов должно быть не меньше 1, угол в радианах не равный нулю (положительный угол против часовой стрелки), центр массива - переменная типа Variant , содержащая массив координат Double. AutoCAD определяет расстояние от центральной точки массива до референс-точки исходного объекта. Референс-точка зависит от типа объекта. (Для окружности и дуги это центр, для блока - точка вставки, для текста - начальная точка и т.д) Данный метод не поддерживает вращение в процессе копирования в отличие от команды ARRAY . Пример создания полярного массива

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

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

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

Читайте также: