IT-практикум: DELPHI и AutoCAD
IT-практикум: DELPHI и AutoCAD
Андрей Шкрыль
Организация
связи двух популярных программных комплексов
Autocad
- широко известный графический пакет для построения чертежей. Не секрет, что
autocad очень удобен для предприятий, специализирующихся на строительстве,
продаже или аренде коммерческих и жилых площадей. В данной статье мы поговорим
о ситуации, когда требуется расширить стандартные возможности пакета за счет
написания программы на языке delphi. Например, это очень удобно, когда
необходимо хранить информацию по чертежу в базе данных, осуществить привязку к
чертежу документации, отражающей сдачу в аренду площадей различным организациям
или предоставить рядовому пользователю, не владеющему знаниями autocad, простой
механизм получения точной информации о размере площади, предоставляемой
клиенту, и различные сопутствующие числовые показатели. Объектная модель
autocad базируется на visual basic for application, ее использование позволяет
получить доступ ко всем элементам как чертежа, так и самой оболочки autocad. В
данной статье рассматривается связка delphi 7 и autocad 2004. Если у вас более
поздняя версия какого-то из программных продуктов, то это не страшно, так как
принцип работы останется тем же самым.
Подготовительный этап
Сначала
импортируем библиотеку AutoCAD в Delphi. Для этого выберем пункт меню
ProjectMmportType Library, нажмем кнопку Add и добавим файл acax16enu.tlb
(найти его можно по адресу C:Program Files Common FilesAutodesk Shared),
после чего инсталлируем новый набор ActiveX компонентов в систему (рис. 1).
Нам
станет доступно 5 новых компонентов:
1. AcadAcCmColor
2. AcadDataBase
3. AcadSecurityParams
4. AcadLayerStateManager
5. AcadDocument
Простые примеры
Разместим
на форме компонент TAcadDocument, далее создадим обработчик события OnCreate
для формы. В нем мы проверим, запущен ли на машине AutoCAD или нет (если нет,
его придется запускать). Обязательно подключим модуль ComObj.
Подключение
к AutoCAD
procedure TForml.Formereate(Sender:
TObject);
var
AutoCAD:
OleVariant; begin
//Если
AutoCAD запущен, то подсоединяемся к нему
AutoCAD := GetActive01eObject('Aut ~
oCAD. Application');
AcadDocument l.ConnectTo((IDisp atch
(AutoCAD) as lAcadApplication). ActiveDocument) ; ZI except
//Иначе запускаем его
AcadDocument 1. Connect; end; ZZ end;
Поговорим
о следующей строчке кода:
AcadDocumentl.ConnectTo((IDispat
К сведению
Обязательно
загляните в модуль AutoCADJLB.pas, который появится после установки новых
компонентов: как разработчик, вы сможете почерпнуть из него много полезной
информации, а также в файл справки AutoCAD-acad. chm. Особенное внимание
уделите разделам ActiveX and VBA Developer's Guide и ActiveX and VBA Reference,
где можно найти сведения о методах, свойствах и объектах AutoCAD (рис.2).
ch(AutoCAD) as lAcadApplication).
ActiveDocument);
В
ней мы приводим переменную AutoCAD к типу lACadApplication, используя для этого
специальный интерфейс IDispatch. Теперь разместите на форме кнопку, назовите ее
«Имя текущего документа» и напишите для нее в обработчике: ShowMessage('l/ta
текущего документа: '+AcadDocument1 .Name); Идем дальше — начертим линию с
помощью стандартного метода AutoCAD -AddLine():
АddLine(НачальныеКоординаты,
КонечныеКоординаты), где НачальныеКоординаты — массив из трех точек (ось X, Y,
I), определяющий координаты начала линии, где КонечныеКоординаты — массив из
трех точек (ось X, Y, I), определяющий координаты конца линии.
Прежде
чем передать массив в качестве аргумента, воспользуемся функцией
VarArrayCreate, которая создаст его:
УаrАrrауСrеаtе([Размерность],Тип
данных) Создание массива с заданной размерностью и заданным типом значений его
элементов. Пример:
V:=
VarArrayCreate([0,2], varDouble) Создание массива, состоящего из трех элементов
типа Double.
Итак,
необходимо разместить на форме еще одну кнопку. Назовем ее «Линия» и объявим
две переменные FirstPoint и SecondPoint типа OleVariant. Теперь нам понадобится
следующий код:
FirstPoint:=VarArrayCreate([0,
2],
varDouble);
//массив начальной точки SecondPoint:=VarArrayCreate([0, 2],
varDouble);
//массив конечной точки
А
сейчас можно задать и сами координаты линий, делается это таким образом:
FirstPoint[0]:=10;
//начальная X координата
FirstPoint
[1] :=10; //начальная Y координата
FirstPoint[2]:=10;
//начальная Z координата
Далее
нам будет нужна переменная AutoCadLine типа lAcadLine (хотя можно ее сделать и
OleVariant, такой вариант тоже будет работать). В ней мы сохраним ссылку на
созданную линию, чтобы в дальнейшем обращаться к этой фигуре, внося нужные изменения
(о том, как это сделать, вы обязательно узнаете далее). А пока осталось
начертить линию с помощью следующей строчки кода:
AutoCadLine:=AcadDocumentl.
ModelSpace.AddLine(FirstPoint, SecondPoint);
Стоит
отметить, что для работы с графическими объектами я использовал коллекцию
ModelSpace, которая позволяет обращаться ко всем графическим объектами чертежа.
Можно также воспользоваться коллекцией PaperSpace, правда, в этом случае нам
будут доступны только объекты, содержащиеся в активном на данный момент слое.
На рисунке 3 вы можете видеть упрощенную схему объектной структуры AutoCAD.
Итак,
продолжаем. Линия у нас уже есть, теперь проведем над ней одну манипуляцию:
покрасим ее в красный цвет с помощью всего одной строчки кода:
AutoCadLine.
color:=acRed;
После
того как работа с чертежом окончена, нужно сообщить об этом AutoCAD. Делается
это следующим образом:
AcadDocumentl.
Application. Update;
Полный
листинг для обработчика события OnClick кнопки «Линия» вы найдете в исходнике
программы, расположенной на компакт-диске.
Разместим
на форме еще одну кнопку, назовем ее «Линия с запросом». С помощью нее мы
нарисуем такую же обычную линию, предварительно запросив координаты у
пользователя. Для этого используется объект Utility и его метод GetPointQ.
Снова зададим две локальные переменные StartPoint и SecondPoint с типом
OleVariant. Сделаем для них такие же массивы и напишем код:
FirstPoint
:=AcadDocumentl. Utility.
GetPoint(EmptyParam,
'Укажите начальную координату: ');
SecondPoint :=AcadDocumentl.
Utility. GetPoint(EmptyParam, 'Укажите конечную координату: ');
Как
начертить линию, имея ее координаты, вы уже знаете, и разбирать этот процесс
нет смысла, поэтому протестируем готовый код. Запустите программу, нажмите
кнопку «Линия с запросом» и переключитесь в окно AutoCAD. Обратите внимание: в
командной строке, расположенной в нижней части окна AutoCAD, появился текст
«Укажите начальную координату», рис. 4.
Сделаем
это, щелкнув мышью в понравившемся нам месте на холсте чертежа. Появится
надпись «Укажите конечную координату». В результате из указанных нами точек
появится линия. Вот оно, чудо взаимодействия программы и программиста! Однако
не будем отступать от главного — перейдем на следующий уровень. На подходе
фигура посложнее — полилиния. С помощью нее можно строить всевозможные
многоугольники. Для начала построим четырехугольник. Стоит отметить, что в этом
случае нам достаточно задать две координаты X и Y. Размещаем на форме кнопку,
назовем ее «Четырехугольник», далее создадим вариантный массив Points,
рассчитанный на 10 значений, и зададим нужные координаты, например:
Points[0]:=
Похожие работы на - IT-практикум: DELPHI и AutoCAD
|