IT-практикум: DELPHI и AutoCAD

Autocad - широко известный графический пакет для построения чертежей. Не секрет, что autocad очень удобен для предприятий, специализирующихся на строительстве,

IT-практикум: DELPHI и AutoCAD

Статья

Компьютеры, программирование

Другие статьи по предмету

Компьютеры, программирование

Сдать работу со 100% гаранией

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 Files\Autodesk 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]:=646.0351;Points [1]: =847.318;Points[2]:=1167.2274;Points[3]:=847.318;Points[4]:=1167.2274;Points[5]: =542.6844;Points[6]:=646.0351;Points[7]:=542.6844;Points[8]:=646.0351;Points[9]:=847.318;Объявим переменную AutoCADPolyline типа OleVariant и последний штрих:

AutoCADPolyline:= AcadDocumentl.

ModelSpace.AddLightWeightPolyline(Po

ints);

Протестируем программу и нарисуем новую фигуру. Пришло время поговорить немного и о самом AutoCAD. Кликнем по только что сформированному прямоугольнику (в чертеже), он станет активным и на экране появиться окно свойств, рис.5. Обратите внимание на содержимое выпадающего списка, расположенного в самом верху. В нем мы имеем честь наблюдать тип своей фигуры: в данном случае это polyline, т.е. что мы и рисовали. Если кликнуть мышкой по свойству Vertex, в нем появятся две стрелки, с помощью которых вы можете переключаться между отдельными вершинами фигуры. Соответственно, в этот момент будут меняться свойства VertexX и VertexY, отвечающие за координаты. А вот в свойстве Area можно получить значение площади созданной вами фигуры, удобно, не так ли? Я думаю, имеет смысл вывести эту информацию в окне нашей программы:

ShowMessage('Площадь фигуры: :'+FloatT oStr(AutoCADPolyline.Area));

Добавим еще одну кнопку на форму, назовем ее «Круг». Для работы с этой фигурой надо задать три точки координаты центра круга и его радиус, а затем использовать следующий метод:

AddCircle (КоординатыЦентра, Радиус) ;

Разнообразим чертеж текстом, добавляющимся с помощью процедуры AddText():

AddText(Teкст, Координаты, Высота), где Текст выводимый текст, заключенный в кавычки, где Координаты это две точки: X и Y, в которых начнется вывод текста, где Высота высота текста.

Слои

При работе с чертежом может возникнуть необходимость присвоения имени отдельным объектам или их группам, что позволит быстро обращаться к ним в дальнейшем. Этот механизм реализован в AutoCAD посредством слоев. Итак, создайте новый чертеж, нарисуйте в нем два прямоугольника и многогранник (с помощью полилинии), а в каждой фигуре проставьте текст «Комната1», «Комната2», «Комната 3&#

Похожие работы

1 2 >