Главная » Delphi, OLE, САПР » Операция «выдавливание по сечениям» – КОМПАС в DELPHI

0

Массив объектов (ksEntityCollection)

Интерфейс 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)

Параметры операции «выдавливание по сечениям» задается с помощью интерфейса 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). Однако в модуле ksTLB.pas он описан как 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(‘Kompas.Application.5′));

//Получаем интерфейс документа-модели

Document3D:=ksDocument3D(kompas.Document3D());

//Создаем документ-модель

Document3D.Create(FALSE,true);

//Получаем интерфейс компонента

Part:= ksPart(Document3D.GetPart(pTop_Part));

//Получаем интерфейс объекта "плоскость XOY"

EntityPlaneXOY:=ksEntity(Part.GetDefaultEntity(o3d_planeXOY));

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

//Эскиз 1

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

//Получаем интерфейс объекта "Эскиз"

EntitySketch1:=ksEntity(Part.NewEntity(o3d_sketch));

//Получаем интерфейс параметров эскиза

SketchDefinition:=ksSketchDefinition(EntitySketch1.GetDefinition());

//Устанавливаем плоскость XOY базовой для эскиза

SketchDefinition.SetPlane(EntityPlaneXOY);

//Создаем эскиз

EntitySketch1.Create();

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

Document2D:=ksDocument2D(SketchDefinition.BeginEdit());

//Строим окружность

Document2D.ksCircle(0,0,30,1);

//Выходим из режима редактирования эскиза

SketchDefinition.EndEdit();

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

//Смещенная плоскость 1

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

//Получаем интерфейс объекта "смещенная плоскость"

EntityPlaneOffset1:=ksEntity(Part.NewEntity(o3d_planeOffset));

//Получаем интерфейс параметров смещенной плоскости

PlaneOffsetDefinition:=ksPlaneOffsetDefinition(EntityPlaneOffset1.GetDefinition());

//Направление смещения – прямое

PlaneOffsetDefinition.direction:=TRUE;

//Смещение

PlaneOffsetDefinition.offset := 20;

//Устанавливаем базовую плоскость

PlaneOffsetDefinition.SetPlane(EntityPlaneXOY);

//Создаем смещенную плоскость

EntityPlaneOffset1.Create();

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

//Эскиз 2

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

//Получаем интерфейс объекта "Эскиз"

EntitySketch2:=ksEntity(Part.NewEntity(o3d_sketch));

//Получаем интерфейс параметров эскиза

SketchDefinition:=ksSketchDefinition(EntitySketch2.GetDefinition());

//Устанавливаем смещенную плоскость базовой для эскиза

SketchDefinition.SetPlane(EntityPlaneOffset1);

//Создаем эскиз

EntitySketch2.Create();

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

Document2D:=ksDocument2D(SketchDefinition.BeginEdit());

//Строим окружность

Document2D.ksCircle(0,0,20,1);

//Выходим из режима редактирования эскиза

SketchDefinition.EndEdit();

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

//Смещенная плоскость 2

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

//Получаем интерфейс объекта "смещенная плоскость"

EntityPlaneOffset2:=ksEntity(Part.NewEntity(o3d_planeOffset));

//Получаем интерфейс параметров объекта "смещенная плоскость"

PlaneOffsetDefinition:=ksPlaneOffsetDefinition(EntityPlaneOffset2.GetDefinition());

//Направление смещения – прямое

PlaneOffsetDefinition.direction := TRUE;

//Смещение

PlaneOffsetDefinition.offset := 40;

//Устанавливаем базовую плоскость

PlaneOffsetDefinition.SetPlane(EntityPlaneXOY);

//Создаем смещенную плоскость

EntityPlaneOffset2.Create();

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

//эскиз 3

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

//Получаем интерфейс объекта "Эскиз"

EntitySketch3:=ksEntity(Part.NewEntity(o3d_sketch));

//Получаем интерфейс параметров объекта "Эскиз"

SketchDefinition:=ksSketchDefinition(EntitySketch3.GetDefinition());

//Устанавливаем смещенную плоскость базовой для эскиза

SketchDefinition.SetPlane(EntityPlaneOffset2);

//Создаем эскиз

EntitySketch3.Create();

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

Document2D:=ksDocument2D(SketchDefinition.BeginEdit());

//Строим окружность

Document2D.ksCircle(0,0,25,1);

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

SketchDefinition.EndEdit();

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

//Операция "выдавливание по сечениям"

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

//Получаем интерфейс объекта

EntityBaseLoft := ksEntity(Part.NewEntity(o3d_baseLoft));

//Получаем интерфейс параметров объекта

BaseLoftDefinition:=ksBaseLoftDefinition(EntityBaseLoft.GetDefinition());

//Устанавливаем параметры операции

BaseLoftDefinition.SetLoftParam(FALSE,TRUE,TRUE);

//Получаем интерфейс массива объектов (эскизов)

EntityCollection:=ksEntityCollection(BaseLoftDefinition.Sketchs());

//Очищаем массив объектов

EntityCollection.Clear();

//Добавляем в массив созданные ранее эскизы EntityCollection.Add(EntitySketch1); EntityCollection.Add(EntitySketch2); EntityCollection.Add(EntitySketch3);

//Создаем операцию

EntityBaseLoft.Create();

end;

//Делаем плоскости невидимыми

Document3D.hideAllPlanes:=TRUE;

//Устанавливаем полутоновое изображение модели

Document3D.drawMode:=vm_Shaded;

//Включаем отображение каркаса

Document3D.shadedWireframe:=TRUE;

//Делаем КОМПАС видимым

kompas.Visible:=true;

В данном примере мы создаем три эскиза. Первый эскиз располагается в плоскости XOY, остальные два в смещенных плоскостях.

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

Источник: Норсеев Сергей, «РАЗРАБОТКА ПРИЛОЖЕНИЙ ПОД КОМПАС В DELPHI»

По теме:

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