Статья

Статья IT-практикум DELPHI и AutoCAD

Работа добавлена на сайт bukvasha.net: 2015-10-29

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 13.1.2025



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» (вы можете найти чертеж в исходниках программы, он называется Планировка.dwg), рис. 6.

Выберите пункт меню Format\l_ayer, появится окно Layer Property Manager. Нажмите кнопку New и введите текст FirstRoom, рис. 7. Точно таким же образом создаются слои SecondRoom и ThirdRoom. После двойного клика на первой комнате появится окно PROPERTIES. В свойстве Layer установим для выбранной фигуры слой FirstRoom, назначим остальным фигурам одноименные слои. Последний штрих —в целях эксперимента начертим простую линию и круг. Все, подготовительные действия выполнены, приступаем к кодингу— нашей задачей будет получение в программе данных столько что созданном чертеже. Разместим на форме TListBox и кнопку «Прочитать чертеж» (полный листинг обработчика— в исходниках, здесь мы рассмотрим только самые важные моменты). Сначала нужно организовать цикл, перебирающий все графические объекты, принадлежащие чертежу:

for i:=0 to AcadDocumentl.ModelSpace. Count-1 do

Проверяя название фигуры, мы будем осуществлять необходимые действия. Так как отдельные фигуры имеют разный набор свойств и количество координат, например, линия задается двумя точками, каждая из которых проецируется в трехмерной системе (ось X,Y,Z), а вот каждая точка полилинии позиционируется лишь в оси X и Y, то эти моменты обязательно надо учитывать. Поэтому для каждой фигуры придется писать свой собственный обработчик. Я рассмотрю описанный выше момент на следующем примере:

if AutoCadObject.

EntityName='AcDbCircle' then begin

//Координаты центра круга

t:=(AutoCadObject as lAcadCircle). Center;

ListBoxl.Items.Add('06beKT — Круг');

Li stBoxl. Items. Add ('Координаты центра X-'+IntToStr(t[0])+' Y-'+IntToStr (t [1]) +' Z-'+IntToStr (t [2])) ;

t:=(AutoCadObject as lAcadCircle). Radius;

ListBoxl.Items.АсШСРадиус круга R='+IntToStr(t)); end;

Круг по понятиям AutoCAD называется AcDBCircle. Чтобы обратиться к его свойствам, нужно привести объект AutoCADObject, который ссылается на обрабатываемую в данный момент фигуру к типу lAcadCircle, а далее все просто: из свойства Center вытаскиваем координаты центра, из свойства Radius — длину радиуса. Обратите внимание, в процессе обработки полилинии перед нами встанет практически философский вопрос: «Как узнать количество точек, из которых она состоит?». Дело в том, что это может быть обычный прямоугольник, который будет содержать 4 точки или ломаная фигура, состоящая из 10. Способ решения прост — для вариантного массива есть специальная функция VarArrayHighBoundQ, которой в качестве первого параметра передаем имя массива, а в качестве второго — единицу.

Полезные возможности

Предлагаю не останавливаться на достигнутом. Нарисуем круг и заштрихуем его. Для этого служит метод AddHatch(), принадлежащий коллекции ModelSpace. Итак, разместим на форме кнопку, назовем ее

«Штриховка» и впишем в ее обработчик следующий код:

AutoCADHatch, Zalivka: OleVariant;

TypeColorl, TypeColor2: OleVariant;

Points:01eVariant; begin

Points:= VarArrayCreate([0, 2], VarDouble);

Points[0]:= 400; Points[l]:= 700; Points[2]:= 500;

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

Zalivka:= VarArrayCreate([0, 0], varDispatch);

Zalivka[0]:= AcadDocumentl. ModelSpace.AddCircle(Points,500);

//Задаем параметры штриховки

AutoCADHatch:= AcadDocumentl. ModelSpace. AddHatch (acPreDefinedGradie nt, 'LINEAR', True, acGradientObject);

//Задаем цвета заливки

TypeColorl:= AutoCADHatch. GradientColorl;

TypeColorl.SetRGB(200, 50, 200);

AutoCADHatch.GradientColorl:= TypeColorl;

TypeColor2:= AutoCADHatch. GradientColor2;

TypeColor2.SetRGB(0, 250, 0);

AutoCADHatch.GradientColor2:= TypeColor2;

//Передаем границы заливки

AutoCADHatch. AppendOuterLoop(Zal ivka);

//Осуществляем заливку

AutoCADHatch.Evaluate;

//Сообщаем о совершенных изменениях в AutoCAD

AcadDocumentl.Application.Update; end;

Обратите внимание на второй параметр функции AddHatch(). Он отвечает за шаблон штриховки и может принимать следующие значения:

- LINEAR

- CYLINDER

- INVCYLINDER

- SPHERICAL

- HEMISPHERICAL

- CURVED

- INVSPHERICAL

- INVHEMISPHERICAL

- INVCURVED

Методом RGB() мы задаем два цвета штриховки, которые затем смешаются в соответствии с указанным шаблоном. Рассмотрим создание собственного слоя с возможностью рисования в нем фигуры. В решении этой задачи нам поможет следующая строчка кода:

AcadDo cumentl. Layers. AddTMyLayer');

Вот и все — разве чтоперед рисованием будет нужно его активировать. Для нашего следующего примера понадобится кнопка с названием «Выберите объект», нажатие на нее позволит пользователю простым щелчком мыши указывать фигуру на чертеже, после чего она будет выделена желтым цветом. Необходимый листинг вы найдете в исходниках программы. И на закуску: разместите две кнопки «Проверить наличие изменений» и «Сохранить». С помощью первой мы будем узнавать, был ли изменен текущий чертеж с момента его открытия,используя системную переменную AutoCAD — DBMOD. Если она содержит 0, то чертеж не был изменен, иначе — был. Вторая кнопка позволит нам сохранить чертеж.

Из истории создания AutoCAD

В апреле 1982 года была организованна компания Autodesk - автор ныне популярного программного продукта для автоматизированного проектирования AutoCAD. В то время она состояла всего лишь из 15 программистов. Новый продукт кардинально изменил положение дел в сфере разработки конструкторской документации. В настоящее время AutoCAD используют миллионы людей по всему миру, он переведен более чем на 18 языков. Кстати, одним из факторов популярности, которую AutoCAD приобрел в России, является то обстоятельство, что компания Autodesk перевела свой продукт на русский язык еще в начале продвижения первых версий программы.

Версии AutoCAD

Версия 1.0 (Release 1)Декабрь1982г

Версия 1.2 (Release 2) Апрель 1983 г

Версия 1.3 (Release 3)Август1983г

Версия 1.4 (Release 4) Октябрь 1983 г

Версия 2.0 (Release 5) Октябрь 1984 г

Версия 2.1 (Release 6) Май 1985 г

Версия 2.5 (Release 7) Июнь 1986 г

Версия 2.6 (Release 8) Апрель 1987 г

Версия 9 - Сентябрь 1987 г

Версия 10 - Октябрь 1988 г

Версия 11 - Октябрь 1990 г

Версия 12-Июнь 1992 г (последний выпуск для Apple Macintosh)

Версия 13-Ноябрь 1994 г (последний выпуск для Unix, MS-DOS и Windows 3.11)

Версия 14 - Февраль 1997 г

AutoCAD 2000 (R15.0)- Март 1999г

AutoCAD 2000I (R15.1)- Июль 2000г

AutoCAD 2002 (R15.6)- Июнь 2001г

AutoCAD 2004 (R16.0)- Март 2003г

AutoCAD 2005 (R16.1)- Март 2004г

AutoCAD 2006 (R16.2)- Март 2005г

AutoCAD 2007 (R17.0)- Март 2006г

AutoCAD 2008 (R17.1)- Март 2007г

Список литературы

IT спец № 07 ИЮЛЬ 2007



1. Реферат на тему Гражданин Бонапарт
2. Реферат на тему АВ Суворов жизненный путь и военно-теоретические взгляды
3. Реферат Отчет по преддипломной практике 7
4. Реферат Макросфера. Внешняя среда организации
5. Курсовая на тему Конструирование ГИМС
6. Реферат на тему Вторая мировая война ход боевых действий расстановка сил итоги и последствия
7. Реферат на тему Critical Response To The Yellow WallPaper Essay
8. Статья Психологические смещения при принятии решения
9. Реферат на тему Nisa The Life And Words Of Kung
10. Реферат Язык программирования С 2