Главная » Delphi, OLE, САПР » Иерархия интерфейсов в 3D – КОМПАС в DELPHI

0

Документ (ksDocument3D)

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

Для определения того, что именно описывает конкретный интерфейс ksDocument3D, используется метод IsDetail() этого интерфейса. В том случае, если  описываемый  интерфейсом  документ  содержит  3D-модель  (деталь),

метод возвращает значение TRUE. Если же документ содержит сборку, то данный метод возвращает значение FALSE.

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

3D-модель (ksPart)

Для описания самой 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 данный метод не описан, хотя в модуле ksTLB.pas он описан.

2           К  сожалению  в  модуле  ksConstTLB  данные  константы  не  описаны,  поэтому привожу  их  численные значения

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

Во-первых, как получить интерфейс ksPart детали, входящей в состав

сборки, описываемой имеющимся интерфейсом ksPart? Согласно той же документации КОМПАС у интерфейса ksPart нет подходящих методов и свойств для этого.

Во-вторых, если интерфейсы деталей сборки получаются  на основе интерфейса, описывающего саму сборку, тогда для чего нужна нумерация компонентов в методе GetPart интерфейса ksDocument3D? Почему с помощью этого метода не получать единый интерфейс сборки, а уже из него интерфейсы отдельных деталей, входящих в состав этой сборки? Тогда нумерация компонентов не нужна1.

Все это невольно приводит к мысли о том, что в действительности интерфейс ksPart служит для описания 3D-модели (детали), но не сборки. Для сборки отдельного интерфейса нет.

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

получение интерфейса ksPart так называемой главной 3D-модели (pTop_Part). Этот интерфейс не описывает никакую реальную модель. Он служит для получения доступа к координатным осям, плоскостям и точке центра координат глобальной системы координат сборки. Более подробно о системах координат сборки смотри в главе 83.

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

Некоторые другие методы этого интерфейса будут рассмотрены позднее.

Объект (ksEntity)

Интерфейс 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)                                объекты, создаваемые системой КОМПАС по умолчанию;

2)                                создание своих собственных объектов;

3)                                объекты, уже существующие в 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»

По теме:

  • Комментарии