ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    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 ]:=         

    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.

    Виберіть пункт меню Formatl_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

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status