Створення креслення в КОМПАС з DELPHI

Інтерфейс ksDocumentParam описує параметри графічного документа Отримати його можна за допомогою методу GetParamStruct інтерфейсу KompasObject для цього йому (методу) як аргумент потрібно передати значення ko_DocumentParam Нижче наводиться приклад програми демонструє отримання цього інтерфейсу:

var

DocumentParam: ksDocumentParam

…………

begin

…………

DocumentParam := ksDocumentParam(kompasGetParamStruct(ko_DocumentParam))

Розглянемо властивості та методи даного інтерфейсу (їх небагато) Почнемо зі властивостей, їх всього пять:

author – Рядок з імям автора документа comment – Рядок з коментарем до документа fileName – Рядок з імям файлу документа

regime – Режим редагування Якщо дана властивість дорівнює одиниці, то редагований документ не відображається на екрані Якщо ж воно дорівнює нулю, то він (документ) відображається на екрані користувача, як і при звичайній роботі з цим документом

type_1 – тип документа

У таблиці нижче представлені основні типи документів системи КОМПАС:

Імя типу

Опис

ksDocumentUnknown

Невідомий тип

ksDocumentDrawing

Креслення

ksDocumentFragment

Фрагмент

ksDocumentSpecification

Специфікація

ksDocumentPart

Деталь

ksDocumentAssembly

Збірка

ksDocumentTextual

Текстовий документ

З методів даного інтерфейсу нас буде цікавити тільки один: метод Init () Даний метод скидає всі налаштування креслення Він не має вхідних параметрів і повертає true у разі успішного завершення або false, якщо сталася якась помилка Рекомендую викликати цей метод відразу після отримання інтерфейсу параметрів документів

1 У документації КОМПАС дана властивість описується як «type» (без знака підкреслення на кінці), а от у заголовному файлі воно описано як «type_» (зі знаком підкреслення на кінці)

Для роботи з кресленням служить інтерфейс ksDocument2D Отримати його можна з інтерфейсу KompasObject за допомогою методу Document2D останнього Даний метод не має вхідних параметрів і повертає потрібний нам інтерфейс (або nil у разі помилки)

Іншим способом отримання цього інтерфейсу є використання методу ActiveDocument2D інтерфейсу KompasObject Даний метод не має параметрів і повертає інтерфейс активного креслення КОМПАС Однак тут є дві проблеми

По-перше, не факт у користувача відкрито якийсь креслення У цьому випадку даний метод поверне значення nil При такому положенні справ ми не зможемо потрібний нам інтерфейс

По-друге, у користувача активним може бути якийсь свій документ, ніяк не повязаний з вашою програмою Я не думаю, що користувач сильно зрадіє тому, що ваша програма, не запитавши його на те дозвіл, почне вносити якісь зміни (нехай і чисто

косметичного характеру) в його особистий креслення, що коштував йому безліч сил А нервові клітини користувачів потрібно берегти, як-не вони не відновлюються

Виходячи з усього вищесказаного, можна зробити висновок, що метод ActiveDocument2D без спеціальних застережних заходів не може бути використаний для отримання інтерфейсу ksDocument2D Тому ми, як основного способу отримання потрібного нам інтерфейсу будемо використовувати перший спосіб (використання методу Document2D)

Добре Будемо вважати, що з отриманням інтерфейсу документа розібралися Але як створити креслення Для цього використовується метод ksCreateDocument інтерфейсу ksDocument2D Ось його прототип:

ksCreateDocument(const par: IDispatch): WordBool

В якості єдиного параметра він приймає інтерфейс ksDocumentParam, який ми розглянули в минулому розділі

Даний метод повертає значення true у разі успішного створення креслення і false у разі, якщо створити документ з якоїсь причини не вдалося

Нижче наводиться фрагмент програми, що демонструє створення нового креслення

var

/ / Змінні

Document2D: ksDocument2D DocumentParam: ksDocumentParam

………………………

begin

………………………

/ / Отримуємо і заповнюємо інтерфейс параметрів документа DocumentParam:=ksDocumentParam(kompasGetParamStruct(ko_DocumentParam)) DocumentParamInit()

DocumentParamtype_:=ksDocumentDrawing

/ / Отримуємо інтерфейс документа

Document2D:=ksDocument2D(kompasDocument2D)

/ / Створюємо новий креслення

Document2DksCreateDocument(DocumentParam)

Звертаю вашу увагу на те, що тут ми явно вказуємо тип документа креслення (константа ksDocumentDrawing) Спроба створити документ будь-якого іншого типу (наприклад, складання або деталі) завершиться невдачею, так як для роботи з ними призначені інші інтерфейси

Важливим моментом також є те, що створюваний вами документ не буде рамки і якого-небудь формату Це повязано з тим, що формат креслення задається окремо У наступному розділі ми обговоримо як

Припустимо, що ваша програма використовує якийсь заздалегідь підготовлений креслення в якості якогось шаблону Тобто ваша програма бере цей заздалегідь підготовлений файл і в процесі своєї роботи вносить в нього якісь зміни Після чого нове креслення (з доробками вашої програми) зберігається в окремому файлі, а шаблон залишається незмінним

Для здійснення цього вам потрібно якось відкрити креслення з шаблону в компас і отримати його інтерфейс Для цієї мети у інтерфейсу ksDocument2D передбачений спеціальний метод: ksOpenDocument Ось його прототип:

ksOpenDocument(const nameDoc: WideString regim: WordBool): WordBool

Розглянемо параметри:

nameDoc – рядок з імям файлу, в якому зберігається відкривається нами креслення

regim – режим відкриття файлу Якщо значення даного параметра дорівнює true1, то документ відкривається в невидимому режимі, тобто його не видно Якщо ж значення цього одно false, то документ відкривається в звичайному видимому режимі

Даний метод повертає true, якщо документ успішно відкритий, і false –

якщо відкрити документ не вдалося

Наводити приклад використання цього методу я не буду, так як тут все гранично просто

1 Незважаючи на те, що цей параметр має тип boolean, його можливі значення в документації описуються як цілі числа (0 і 1), по всій видимості, орієнтуючись на програмістів, які пишуть на Сі, де тип bool зявився не відразу Хоча повертаються методом значення вона описує як TRUE і FALSE

Зі своєї програми ви можете закрити документ, який став вам більше не потрібне Для цього використовується метод ksCloseDocument все того ж інтерфейсу ksDocument2D Даний метод не має вхідних параметрів У разі успішного закриття документа він повертає true, а в разі помилки false

Звертаю вашу увагу на те, що даний метод закриває даний документ без пропозиції зберегти документ Це означає, що якщо ваша програма вносила в документ якісь зміни, а потім закрила його цим методом, то всі зроблені зміни будуть втрачені

Тому краще або взагалі не закривати документ, надавши користувачу можливість самому визначити його подальшу долю, або зберегти в якесь зумовлене місце Причому, найкращим варіантом буде такий, при якому користувач сам вирішує куди найкраще зберегти даний креслення Хоча це вже питання етичності

програміста

Для збереження креслення передбачено два методи ksSaveDocument і ksSaveDocumentEx інтерфейсу ksDocument2D Почнемо з першого, от його прототип:

ksSaveDocument(const fileName: WideString): WordBool

У нього всього один параметр – це рядок з імям файлу, в який слід зберегти даний креслення

Якщо файл успішно збережений, то повертається значення true, у противному випадку повертається значення false

Якщо імя файлу (параметр fileName) не задано, то використовується імя файлу з документа (див інтерфейс ksDocumentParam) Якщо воно також не задано, то відбувається помилка

Метод ksSaveDocumentEx схожий на метод ksSaveDocument і, по суті, є його розширеною версією Ось його прототип:

ksSaveDocumentEx(const fileName: WideString SaveMode: Integer): WordBool

Як бачите, тут додався ще один параметр SaveMode, який вказує, в якій версії КОМПАС слід зберегти даний креслення:

-1 – Креслення зберігається в попередню версію КОМПАС, по

відношенню до тієї, в якій він востаннє редагувався 0 – у поточну версію компасів

1 – в КОМПАС версії 511

У всьому іншому даний метод повністю ідентичний методу ksSaveDocument, розглянутому раніше

Джерело: Норсеев Сергій, «розробка програм під КОМПАС У DELPHI»

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*