Операція «видавлювання по перетинах» – КОМПАС в DELPHI

Інтерфейс ksEntityColection служить для опису масиву обєктів Кожен елемент в цьому масиві представляє собою інтерфейс ksEntity, описує той чи інший обєкт

Інтерфейс ksEntityCollection не має властивостей Розглянемо основні його методи

Add  – Додає обєкт в кінець масиву Інтерфейс додається

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

– Значення FALSE

AddAt – Додати в масив обєкт із заданим індексом Першим параметром методу передається інтерфейс ksEntity додається обєкта Другим параметром методу передається індекс вставляється обєкта в масиві Нумерація обєктів ведеться з нуля У разі успіху метод повертає значення TRUE, а в разі помилки значення FALSE

AddBefore – Вставити обєкт в масив перед іншим обєктом Першим параметром методу віддається інтерфейс ksEntity вставляється обєкта Другим параметром методу передається інтерфейс ksEntity обєкта, перед яким потрібно вставити додається обєкт У разі успіху метод повертає TRUE, а в разі помилки значення FALSE

Clear() – Очищає масив Самі обєкти з моделі не видаляються У разі успіху метод повертає значення TRUE

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

DetachByIndex – Видалити обєкт з масиву В якості єдиного параметра методу передається значення індексу видаляється обєкта Елементи масиву нумеруються з нуля Сам обєкт з моделі не видаляється У разі успіху метод повертає значення TRUE

FindIt – Знайти обєкт в масиві В якості єдиного параметра даному методу передається інтерфейс обєкта ksEntity, який потрібно знайти в масиві Якщо елемент знайдено, то повертає його індекс Якщо ж

елемент не знайдений, то повертається значення -1

First() – Повертає інтерфейс ksEntity першого елемента в масиві

GetByIndex – Повертає інтерфейс ksEntity обєкту із заданим індексом Номер запитуваної обєкта в масиві передається в якості єдиного параметра методу Елементи масиву нумеруються з нуля

GetCount() – Повертає кількість елементів (обєктів) в масиві Last() – Повертає інтерфейс ksEntity останнього обєкта в масиві Next() – Повертає інтерфейс ksEntity наступного обєкту в масиві

Prev() – Повертає інтерфейс ksEntity попереднього обєкта в масиві

Refresh() – Оновити масив У результаті виклику цього методу відбувається синхронізація обєктів в масиві та обєктів 3D-моделі, яким відповідають обєкти масиву У разі успіху даний метод повертає значення TRUE, а в разі помилки – значення FALSE

SelectByPoint – Видалити з масиву всі обєкти, які не містять у собі або не проходять через задану точку Координати точки (x, y, z) передаються в якості параметрів методу У разі успіху метод повертає значення TRUE

SetByIndex – Замінити заданий обєкт масиву новим обєктом Першим параметром методу передається інтерфейс ksEntity нового (додається в масив) обєкта Другим параметром методу передається значення індексу обєкта, який потрібно замінити новим обєктом

Параметри операції «видавлювання по перетинах» задається за допомогою інтерфейсу ksBaseLoftDefinition Його повертає метод GetDefinition () інтерфейсу ksEntity, що описує дану операцію ksBaseLoftDefinition не має властивостей Розглянемо основні методи цього інтерфейсу

SetLoftParam – Встановити параметри операції Нижче представлений прототип цього методу

SetLoftParam(

closed: WordBool / / Ознака замкнутості траєкторії flipVertex: WordBool / / Зарезервовано

autoPath: WordBool / / Ознака автоматичного формування

): WordBool

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

Як показують експерименти, значення параметра flipVertex ні на що не впливає

autoPath – Ознака автоматичного формування Якщо значення цього параметра дорівнює TRUE, то траєкторія формується автоматично Якщо ж значення цього параметра дорівнює FALSE, то для формування траєкторії використовуються спеціальні точки, встановлені на ескізах Ми будемо використовувати автоматичне побудова траєкторії

У разі успіху метод SetLoftParam повертає значення TRUE

Sketchs()1 – повертає інтерфейс масиву ескізів ksEntityCollection Кожен ескіз в цьому масиві описується інтерфейсом ksEntity

1 Згідно документації КОМПАС цей метод називає Sketches () (з буквою e) Однак в модулі ksTLBpas він описаний як Sketchs () (без букви e)

Нижче представлений ключовий фрагмент вихідного тексту програми, яка демонструє використання цієї операції

const

pTop_Part = -1

o3d_planeXOY = 1

o3d_sketch  = 5

o3d_planeOffset = 14

o3d_baseLoft = 30

dtNormal = 0

etBlind  = 0

vm_Shaded = 3

var

kompas: KompasObject Document3D: ksDocument3D Part: ksPart

EntitySketch1,EntitySketch2,EntitySketch3: ksEntity

EntityPlaneXOY,EntityPlaneOffset1,EntityPlaneOffset2:ksEntity EntityBaseLoft: ksEntity

EntityCollection: ksEntityCollection SketchDefinition: ksSketchDefinition Document2D : ksDocument2D

PlaneOffsetDefinition: ksPlaneOffsetDefinition BaseLoftDefinition: ksBaseLoftDefinition

begin

/ / Підключаємося до компаса

kompas:=KompasObject(CreateOleObject(KompasApplication5))

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

Document3D:=ksDocument3D(kompasDocument3D())

/ / Створюємо документ-модель

Document3DCreate(FALSE,true)

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

Part:= ksPart(Document3DGetPart(pTop_Part))

/ / Отримуємо інтерфейс обєкта площину XOY

EntityPlaneXOY:=ksEntity(PartGetDefaultEntity(o3d_planeXOY))

///////////////////////////////////////////////

/ / Ескіз 1

///////////////////////////////////////////////

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

EntitySketch1:=ksEntity(PartNewEntity(o3d_sketch))

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

SketchDefinition:=ksSketchDefinition(EntitySketch1GetDefinition())

/ / Встановлюємо площину XOY базовою для ескізу

SketchDefinitionSetPlane(EntityPlaneXOY)

/ / Створюємо ескіз

EntitySketch1Create()

/ / Входимо в режим редагування ескізу

Document2D:=ksDocument2D(SketchDefinitionBeginEdit())

/ / Будуємо окружність

Document2DksCircle(0,0,30,1)

/ / Виходимо з режиму редагування ескізу

SketchDefinitionEndEdit()

//////////////////////////////////////////////

/ / Зміщена площину 1

/////////////////////////////////////////////

/ / Отримуємо інтерфейс обєкта зміщена площину

EntityPlaneOffset1:=ksEntity(PartNewEntity(o3d_planeOffset))

/ / Отримуємо інтерфейс параметрів зміщеною площині

PlaneOffsetDefinition:=ksPlaneOffsetDefinition(EntityPlaneOffset1GetDefinition())

/ / Напрямок зміщення – пряме

PlaneOffsetDefinitiondirection:=TRUE

/ / Зміщення

PlaneOffsetDefinitionoffset := 20

/ / Встановлюємо базову площину

PlaneOffsetDefinitionSetPlane(EntityPlaneXOY)

/ / Створюємо зміщену площину

EntityPlaneOffset1Create()

//////////////////////////////////////////////

/ / Ескіз 2

/////////////////////////////////////////////

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

EntitySketch2:=ksEntity(PartNewEntity(o3d_sketch))

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

SketchDefinition:=ksSketchDefinition(EntitySketch2GetDefinition())

/ / Встановлюємо зміщену площину базової для ескізу

SketchDefinitionSetPlane(EntityPlaneOffset1)

/ / Створюємо ескіз

EntitySketch2Create()

/ / Входимо в режим редагування ескізу

Document2D:=ksDocument2D(SketchDefinitionBeginEdit())

/ / Будуємо окружність

Document2DksCircle(0,0,20,1)

/ / Виходимо з режиму редагування ескізу

SketchDefinitionEndEdit()

//////////////////////////////////////////////

/ / Зміщена площину 2

//////////////////////////////////////////////

/ / Отримуємо інтерфейс обєкта зміщена площину

EntityPlaneOffset2:=ksEntity(PartNewEntity(o3d_planeOffset))

/ / Отримуємо інтерфейс параметрів обєкта зміщена площину

PlaneOffsetDefinition:=ksPlaneOffsetDefinition(EntityPlaneOffset2GetDefinition())

/ / Напрямок зміщення – пряме

PlaneOffsetDefinitiondirection := TRUE

/ / Зміщення

PlaneOffsetDefinitionoffset := 40

/ / Встановлюємо базову площину

PlaneOffsetDefinitionSetPlane(EntityPlaneXOY)

/ / Створюємо зміщену площину

EntityPlaneOffset2Create()

///////////////////////////////////////////

/ / Ескіз 3

//////////////////////////////////////////

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

EntitySketch3:=ksEntity(PartNewEntity(o3d_sketch))

/ / Отримуємо інтерфейс параметрів обєкта Ескіз

SketchDefinition:=ksSketchDefinition(EntitySketch3GetDefinition())

/ / Встановлюємо зміщену площину базової для ескізу

SketchDefinitionSetPlane(EntityPlaneOffset2)

/ / Створюємо ескіз

EntitySketch3Create()

/ / Входимо в режим редагування ескізу

Document2D:=ksDocument2D(SketchDefinitionBeginEdit())

/ / Будуємо окружність

Document2DksCircle(0,0,25,1)

/ / Виходимо з режиму релактірованія ескізу

SketchDefinitionEndEdit()

//////////////////////////////////////////

/ / Операція видавлювання по перетинах

//////////////////////////////////////////

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

EntityBaseLoft := ksEntity(PartNewEntity(o3d_baseLoft))

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

BaseLoftDefinition:=ksBaseLoftDefinition(EntityBaseLoftGetDefinition())

/ / Встановлюємо параметри операції

BaseLoftDefinitionSetLoftParam(FALSE,TRUE,TRUE)

/ / Отримуємо інтерфейс масиву обєктів (ескізів)

EntityCollection:=ksEntityCollection(BaseLoftDefinitionSketchs())

/ / Очищаємо масив обєктів

EntityCollectionClear()

/ / Додаємо в масив створені раніше ескізи EntityCollectionAdd(EntitySketch1) EntityCollectionAdd(EntitySketch2) EntityCollectionAdd(EntitySketch3)

/ / Створюємо операцію

EntityBaseLoftCreate()

end

/ / Робимо площині невидимими

Document3DhideAllPlanes:=TRUE

/ / Встановлюємо півтонування моделі

Document3DdrawMode:=vm_Shaded

/ / Вмикаємо відображення каркаса

Document3DshadedWireframe:=TRUE

/ / Робимо КОМПАС видимим

kompasVisible:=true

У даному прикладі ми створюємо три ескізи Перший ескіз розташовується в площині XOY, інші два в зміщених площинах

На малюнку нижче показаний результат роботи цієї програми

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

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


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

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

Ваш отзыв

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

*

*