Ієрархія інтерфейсів в 3D – КОМПАС в DELPHI

Як вже говорилося, в попередньому розділі інтерфейс ksDocument3D служить для опису документа, що містить 3D-модель (деталь) або складання

Для визначення того, що саме описує конкретний інтерфейс ksDocument3D, використовується метод IsDetail () цього інтерфейсу У тому випадку, якщо описуваний інтерфейсом документ містить 3D-модель (Деталь),

метод повертає значення TRUE Якщо ж документ містить збірку, то даний метод повертає значення FALSE

Важливим методом інтерфейсу ksDocument3D також є метод RebuildDocument () 1 Даний метод служить для перемальовування документа після внесення до нього змін

Для опису самої 3D-моделі (деталі) використовується інтерфейс ksPart Отримати його можна за допомогою методу GetPart інтерфейсу ksDocument3D Даний метод вимагає зазначення номера одержуваної 3D-моделі або її типу У таблиці нижче перераховані існуючі типи моделей

Тип 3D-моделі2

Числове значення

Опис

pInPlace_Part

-4

3D-модель, редагована на

місці

pNew_Part

-3

Нова 3D-модель

pEdit_Part

-2

Редагована 3D-модель

pTop_Part

-1

Головна 3D-модель, в складі

якої знаходиться нова або редагована або зазначена 3D-модель

Зверніть увагу, що всі значення в цій таблиці менше нуля Зроблено це спеціально Справа в тому, що якщо в якості значення єдиного параметра методу GetPart передається позитивне число Те це число інтерпретується як порядковий номер 3D-моделі в збірці, що міститься в документі ksDocument3D

1 У документації КОМПАС 8 даний метод не описаний, хоча в модулі ksTLBpas він описаний

2 На жаль в модулі ksConstTLB дані константи не описані, тому наводжу їх чисельні значення

Згідно документації КОМПАС інтерфейс ksPart також служить для опису збірки, що складається з деталей Якщо це дійсно так, то виникає два питання

По-перше, як отримати інтерфейс ksPart деталі, що входить до складу

збірки, описуваної наявними інтерфейсом ksPart Згідно з тією ж документації КОМПАС у інтерфейсу ksPart немає відповідних методів і властивостей для цього

По-друге, якщо інтерфейси деталей зборки виходять на основі інтерфейсу, що описує саму збірку, тоді для чого потрібна нумерація компонентів в методі GetPart інтерфейсу ksDocument3D Чому за допомогою цього методу не отримувати єдиний інтерфейс збірки, а вже з нього інтерфейси окремих деталей, що входять до складу цієї збірки Тоді нумерація компонентів не нужна1

Все це мимоволі наводить на думку про те, що насправді інтерфейс ksPart служить для опису 3D-моделі (деталі), але не збірки Для складання окремого інтерфейсу немає

Однак, стосовно до документа збірки (ksDocument3D) можливе

отримання інтерфейсу ksPart так званої головної 3D-моделі (pTop_Part) Цей інтерфейс не описує ніяку реальну модель Він служить для отримання доступу до координатних осях, площинах і точці центру координат глобальної системи координат збірки Більш докладно про системи координат збірки дивись у главі 83

Одним з найважливіших методів інтерфейсу ksPart є метод RebuildModel () Даний метод перебудовує 3D-модель (деталь) після зміни Він не має вхідних параметрів і, у разі успіху, повертає значення TRUE

Деякі інші методи цього інтерфейсу будуть розглянуті пізніше

Інтерфейс ksEntity служить для опису окремо взятого обєкта В якості обєкта можуть виступати ескіз, вісь, площину, ламана, поверхню, операція видавлювання, операція обертання та інші Розглянемо властивості цього інтерфейсу

type_2 – тип обєкта, описуваного інтерфейсом ksEntity Він задається при отриманні цього інтерфейсу і зберігається як значення цього

властивості Більш детально типи обєктів будуть розглянуті нижче

1 Наскільки мені відомо в одному документі компаса не може бути боле однієї збірки (підзборки не в рахунок, так як вони утворюють одну єдину збірку) Значить інтерфейс ksDocument3D може описувати максимум одну збірку

2 У документації компаса воно описано як type (без знака підкреслення на кінці), а в модулі ksTLB представлено як type_ (зі знаком підкреслення на кінці)

name – Найменування обєкта, яке буде відображатися в дереві побудови Змінювати значення даної властивості потрібно до створення обєкту

hidden – Видимість обєкта Якщо значення даної властивості одно

TRUE, то обєкт невидимий Якщо ж значення цієї властивості FALSE, то обєкт видимий

Тепер розглянемо основні методи цього інтерфейсу

Create() – Створити обєкт У разі успіху даний метод повертає значення TRUE

GetDefinition() – Отримати інтерфейс параметрів обєкта Який саме інтерфейс повертає даний метод, залежить від того, який обєкт описує інтерфейс ksEntity

GetParent() – Отримати інтерфейс ksPart 3D-моделі (деталі), якій належить даний обєкт

IsCreated() – Перевірити існування обєкта Якщо обєкт вже створений даний метод повертає значення TRUE

IsIt  – Перевірити обєкт на приналежність заданому типу Якщо

описуваний обєкт має заданий тип (передається в якості єдиного параметра), то даний метод повертає значення TRUE

Update() – Змінити властивості обєкта Даний метод потрібен для перестроювання обєкта після зміни його властивостей Однак перестроювання одного обєкта окремо від 3D-моделі, якої він належить, неможливо У тому випадку якщо значення властивості needRebuild інтерфейсу ksPart 3D-моделі дорівнює значенню TRUE, то виклик методу Update () призводить до перебудови всієї 3D-моделі

Тепер поговоримо про те, як отримати інтерфейс обєкта ksEntity Відповідь на це питання залежить від того, з яким обєктом ми хочемо працювати Умовно всі обєкти можуть бути розділені на три групи:

1)&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp обєкти, створювані системою КОМПАС за умовчанням

2)&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp створення своїх власних обєктів

3)&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp обєкти, вже існуючі в 3D-моделі

Нижче ми розглянемо роботу з обєктами першої та другої груп

Роботу з обєктами третьої групи ми розглядати не будемо Якщо кому цікаво з ними попрацювати, то дивіться в документації опис методу EntityCollection інтерфейсу ksPart

Для отримання обєкта, створеного системою КОМПАС за замовчуванням, використовується метод GetDefaultEntity інтерфейсу ksPart В якості єдиного параметра він приймає номер того обєкта, інтерфейс якого ми хочемо отримати У таблиці нижче перераховані всі обєкти, створювані системою КОМПАС за замовчуванням і їх номери

Номер обекта1

Числове значення

Опис

o3d_planeXOY

1

площину XOY

o3d_planeXOZ

2

площину XOZ

o3d_planeYOZ

3

площину YOZ

o3d_pointCS

4

точка початку системи координат

o3d_axisOX2

71

вісь OX

o3d_axisOY

72

вісь OY

o3d_axisOZ

73

вісь OZ

Для створення нового обєкта використовується метод NewEntity інтерфейсу ksPart В якості єдиного параметра даний метод приймає номер типу створюваного обєкта У таблиці нижче перераховані основні типи обєктів описуваних інтерфейсом ksEntity

Номер типу обекта3

Числове значення

Опис

o3d_sketch

5

ескіз

o3d_axis2Planes

9

вісь по двох площинах

o3d_axis2Points

10

вісь по двох точках

o3d_axisConeFace

11

вісь конічної грані

o3d_axisEdge

12

вісь, що проходить через

ребро

o3d_axisOperation

13

вісь операції

o3d_planeOffset

14

зміщена площину

o3d_planeAngle

15

площину під кутом

o3d_plane3Points

16

площину по трьох точках

o3d_planeNormal

17

нормальна площину

o3d_planeTangent

18

дотична площина

o3d_planeEdgePoint

19

площину через ребро і

вершину

o3d_planeParallel

20

площину через вершину

паралельно іншій площині

o3d_planePerpendicular

21

площину через вершину перпендикулярно ребру

o3d_planeLineToEdge

22

площину через ребро

паралельно

1 На жаль, в модулі ksConstTLB дані константи предсталвени, тому тут я наводжу їх чисельні значення

2 Константи o3d_axisOX, o3d_axisOY і o3d_axisOZ представлені в нових версіях КОМПАС (перевіряв на 11 і 13), а в більш старих версіях (наприклад, КОМПАС 8) їх немає

3 На жаль, в модулі ksConstTLB дані константи предсталвени, тому тут я наводжу їх чисельні значення

(Перпендикулярно)

іншому ребру

o3d_planeLineToPlane

23

площину через ребро паралельно (перпендикулярно) грані

o3d_baseExtrusion

24(25)1

базова операція

видавлювання

o3d_bossExtrusion

25(24)

приклеювання

видавлюванням

o3d_cutExtrusion

26

вирізати видавлюванням

o3d_baseRotated

27(28)2

базова операція обертання

o3d_bossRotated

28(27)

приклеювання обертанням

o3d_cutRotated

29

вирізати обертанням

o3d_baseLoft

30(31)3

базова операція з

перетинах

o3d_bossLoft

31(30)

приклеювання по перетинах

o3d_cutLoft

32

вирізати по перетинах

o3d_chamfer

33

операція «фаска»

o3d_fillet

34

операція «зкруглення»

o3d_meshCopy

35

операція копіювання по

сітці

o3d_circularCopy

36

операція копіювання по

концентрической сітці

o3d_curveCopy

37

операція копіювання по

кривої

o3d_circPartArray

38

операція масив по

концентрической сітці для збірки

o3d_meshPartArray

39

операція масив по сітці

для збірки

o3d_curvePartArray

40

операція масив по кривій

для збірки

o3d_derivePartArray

41

операція масив по

зразком для складання

o3d_incline

42

операція «ухил»

o3d_shellOperation

43

операція «оболонка»

o3d_ribOperation

44

операція «ребро

жорсткості »

1 У КОМПАС 8 константі o3d_baseExtrusion відповідає значення 24, а в більш нових версіях компаси (перевіряв на 11 і 13) цієї ж константі відповідає значення 25 Причому згідно з документацією цих версій компаса її значення 24 У випадку помилки в цих константах в 11 і 13 версіях 3D-модель будується правильно і помилка помітна тільки в дереві побудови У разі ж помилки в КОМПАС 8 модель будується неправильно Так що будьте уважні

2 Аналогічно констант o3d_baseExtrusion і o3d_bossExtrusion

3 Аналогічно констант o3d_baseExtrusion і o3d_bossExtrusion

o3d_baseEvolution

45(46)1

кінематична операція

o3d_bossEvolution

46(45)

приклеїти кінематично

o3d_cutEvolution

47

вирізати кінематично

o3d_mirrorOperation

48

операція «дзеркальний

масив »

o3d_mirrorAllOperation

49

операція «дзеркально

відобразити все »

o3d_cutByPlane

50

операція «перетин

поверхнею »

o3d_cutBySketch

51

операція «перетин ескізом»

o3d_holeOperation

52

отвір

o3d_polyline

53

ламана

o3d_conicSpiral

54

конічна спіраль

o3d_spline

55

сплайн

o3d_cylindricSpiral

56

циліндрична спіраль

o3d_importedSurface

57

імпортована поверхню

o3d_thread

58

умовне зображення

різьблення

o3d_EvolutionSurface

59

кінематична

поверхню

o3d_ExtrusionSurface

60

поверхню видавлювання

o3d_RotatedSurface

61

поверхня обертання

o3d_LoftSurface

62

поверхню по перетинах

o3d_MacroObject

63

макрообєкт 3D

o3d_UnionComponents

64

операція обєднання

компонентів

o3d_MoldCavity

65

операція віднімання

компонентів

Серед всіх 3D обєктів системи КОМПАС існує ряд обєктів, які не можуть бути створені безпосередньо Вони створюються під час виконання таких операцій як видавлювання, видавлювання по перетинах, видавлювання обертанням, вирізання видавлюванням та багатьох інших У таблиці нижче представлені типи цих породжуваних обєктів та їх короткий опис

1 Аналогічно констант o3d_baseExtrusion і o3d_bossExtrusion

Тип обекта1

Числове значення

Опис

o3d_face

6

грань

o3d_edge

7

ребро

o3d_vertex

8

вершина

У інтерфейсу ksPart є метод EntityCollection Даний метод повертає інтерфейс ksEntityCollection (див главу 63), що описує масив обєктів Кожен обєкт в цьому масиві описується інтерфейсом ksEntity

В якості єдиного параметра метод EntityCollection приймає тип запитуваних обєктів з таблиці вище Наприклад, їли як параметр передати тип o3d_face, то даний метод поверне масив граней 3D-

моделі А якщо цьому ж методу передати тип o3d_edge, то він поверне масив ребер 3D-моделі

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

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

Узагальнимо все вищесказане Інтерфейсом верхнього рівня є інтерфейс KompasObject, який описує саму систему КОМПАС Отримати його можна за допомогою функції CreateOleObject або GetActiveOleObject (Докладніше дивись в розділі 2)

Одночасно в системі КОМПАС може бути відкрито декілька різних документів (креслень, фрагментів, специфікацій, 3D-моделей, збірок) Кожен з цих документів описується своїм власним інтерфейсом (Креслення – ksDocument2D специфікація – ksSpcDocument 3D-модель і збірка – ksDocument3D) Нас цікавить інтерфейс ksDocument3D Отримати його з інтерфейсу KompasObject можна за допомогою методів Document3D () і ActiveDocument3D () (див главу 51) останнього

Якщо інтерфейс ksDocument3D описує 3D-модель (деталь), то з нього можна отримати всього один інтерфейс ksPart, що описує цю 3D-модель Для цього використовується метод GetPart

Якщо інтерфейс ksDocument3D описує збірку, то з нього можна отримати декілька інтерфейсів ksPart, кожен з яких описує окрему 3D-модель (деталь), що входить до складу цієї збірки Ці інтерфейси (KsPart) обєднуються в один – ksPartCollection, який описує масив інтерфейсів ksPart Отримати це масив можна за допомогою методу PartCollection інтерфейсу ksDocument3D

1 На жаль, в модулі ksConstTLB дані константи не представлені, тому тут я наводжу їх чисельні значення

Дізнатися, що конкретно описує інтерфейс ksDocument3D деталь або збірку можна за допомогою методу IsDetail () цього інтерфейсу

Кожна 3D-модель (деталь) складається з набору обєктів, які і утворюють цю 3D-модель До обєктів відносяться ескізи, площині, осі,

операції видавлювання, операції обертання та інші Для більшого розуміння, про які обєкти йдеться, на малюнку нижче представлений приклад дерева побудови простої 3D-моделі Кожен елемент в цьому дереві побудови являє собою окремий обєкт ksEntity

Для отримання інтерфейсу ksEntity обєкта створюваного системою КОМПАС за замовчуванням (площина XOY, площину XOZ, площину YOZ або точка початку системи координат) використовується метод GetDefaultEntity інтерфейсу ksPart Для отримання інтерфейсу ksEnity Описує довільний обєкт використовується метод NewEntity інтерфейсу ksPart

Всі існуючі обєкти ksEntity однієї 3D-моделі (деталі) обєднуються в інтерфейс ksEntityCollection Цей інтерфейс описує масив обєктів ksEntity Отримати інтерфейс цього масиву можна за допомогою методу EntityCollection інтерфейсу ksPart

Кожен обєкт, описуваний інтерфейсом ksEntity, має певний набір параметрів, що залежить від типу обєкта Отримати інтерфейс параметрів обєкта можна за допомогою методу GetDefinition () інтерфейсу ksEntity На малюнку нижче представлена ​​загальна схема (взята з документації компаса 11) інтерфейсів параметрів, одержуваних на основі інтерфейсу ksEntity

На малюнку нижче показана узагальнена схема взаємозвязків інтерфейсів KompasObject, ksDocument3D, ksPart і ksEntity

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

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


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

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

Ваш отзыв

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

*

*