Лабораторна робота №5
Міжпрограмний взаємодія - включає в себе безліч способів обміну інформацією між додатками. В основі більшості цих методів лежить COM технологія, яка є однією з головних складових операційних систем Windows. Ми розглянемо один з таких способів званий OLEAutomation. На російську мову цей термін зазвичай перекладається як «контролер автоматизації», хоча частіше його залишають без перекладу.
Наше додаток буде контролером (контролер управляє іншими додатками), а в якості другого додатка (об'єкта управління) буде використовуватися сервер автоматизації AutoCAD. Більшість сучасних додатків, в тому числі і AutoCAD, підтримують COM - технологію за рахунок використання специфікації, розробленої компанією Microsoft. і підтримки стандартних інтерфейсів, через які можна отримати доступ до функцій цих додатків. У цьому посібнику буде описана методика роботи з технологією OLEAutomation на прикладі AutoCAD. проте все це може бути перенесено і на інші додатки підтримують COM.
Знайдіть на своєму комп'ютері файл acax16enu.tlb (цифри в назві цього файлу визначають версію AutoCAD. Тому у вас воно може дещо відрізнятися). Цей файл зазвичай знаходитися або в каталозі в якому встановлений AutoCAD. або в каталозі C: \ Program Files \ Common Files \ Autodesk Shared. Файли з розширеннями tlb є бібліотеками типів, вони містять опис COM - моделі програми.
Відкрийте C ++ Builder і в його меню виберіть команду Project-> ImportTypeLibrary. У отрившемся діалоговому вікні натисніть кнопку Add і виберіть знайдену раніше бібліотеку типів AutoCAD. Builder зареєструє обрану вами бібліотеку типів, потім вам необхідно її проинсталлировать (кнопка Install).


Після компіляції на палітрі компонентів будуть проинсталлировать кілька нових компонентів (за замовчуванням вони поміщаються на сторінку ActiveX), з усіх цих компонентів нам знадобитися тільки AcadDocument. який дозволяє взаємодіяти з графічною оболонкою AutoCAD. Тут ми скористалися технологією так званого раннього зв'язування з сервером, в принципі, можна обійтися без імпортування бібліотеки типів, використовуючи технологію пізнього зв'язування, однак перший варіант кращий за рахунок більшої швидкості взаємодії і зручності при програмуванні.
Отримавши в розпорядження компонент для роботи з AutoCAD ми повинні навчитися з ним працювати, тобто вивчити які функції і яким чином можна викликати. Знайдіть на своєму комп'ютері файл acadauto. він повинен знаходитися в каталозі C: \ Program Files \ AutoCAD \ Help. Це файл довідки, що містить повну інформацію про об'єктної моделі AutoCAD. тут міститься опис всіх об'єктів їх полів методів і подій (приклади роботи з об'єктами наведені на VisualBasic).
Для роботи з серверами автоматизації необхідно дотримуватися наступного алгоритму дій:
· Підключення до сервера:
· Виконання функцій на цьому сервері
· Збереження створеного документа:
· Відключення від сервера:
Для роботи з сервером автоматизації та виклику його функцій вам знадобитися особливий тип даних OleVariant. практично всі параметри, що передаються серверу, повинні мати цей тип. Для прикладу розглянемо функцію AddCircle. в довідці ви можете знайти наступний опис цієї функції.
Creates a circle given a center point and radius.
RetVal = object.AddCircle (Center, Radius)
ModelSpace Collection, PaperSpace Collection, Block
The object or objects this method applies to.
Variant (three-element array of doubles); input-only
The 3D WCS coordinates specifying the circle's center.
The radius of the circle. Must be a positive number.
Circleobject
The newly created Circle object.
This circle is created on the XY plane of the WCS.
Параметр Center визначає точку центра кола. Він являє собою масив з трьох елементів типу Double. На C ++ такий масив можна створити в такий спосіб:
Задати значення елементів масиву можна наступним чином:
Для двовимірного випадку третю координату задавати не обов'язково. Параметр Radius повинен мати тип Double. повертається покажчик на створений об'єкт RetVal можна не використовувати. Задавши всі необхідні параметри можна викликати функцію:
Аналогічним способом можна скористатися будь-який інший функцією. Перевірка правильності параметрів переданих сервера здійснюється не на стадії компіляції, а при виконанні даної функції, тому зверніть увагу на можливі run-time помилки.
1. Побудувати изометрического зображення куба за заданою стороні (нахил осей в ізометрії 45 0)
2. Побудувати трикутник за трьома заданим сторонам.
3. Побудувати зображення куба в диметрії по заданій стороні (нахил осі в диметрії 60 0)
4. Побудувати трикутник за двома сторонами і кутом між ними
5. Побудувати трикутник по одній стороні і двом прилеглим до неї кутам.
6. Побудувати циліндр по двох точках, що визначають центри кіл і їх радіусу.
7. Побудувати квадрат по заданій стороні і заштрихувати його (крок штрихування задається користувачем).
8. Побудувати трикутник за трьома точкам і провести бісектрису до одного з кутів.
9. Побудувати правильний n-кутник (число сторін багатокутника задається користувачем).