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

0

 Параметры операции «вырезание выдавливанием» (ksCutExtrusionDefinition)

Параметры операции «вырезание выдавливанием» задаются с помощью интерфейса ksCutExtrusionDefinition. Его возвращает метод GetDefinition интерфейса ksEntity, описывающего данную операцию.

Интерфейс ksCutExtrusionDefinition практически полностью идентичен интерфейсу ksBaseExtrusionDefinition, который мы рассматривали в главе 54.

По    сравнению    с    последним    к    интерфейсу    ksCutExtrusionDefinition добавилось всего одно свойство.

cut – определяет характер операции выдавливания. Если значение этого свойства равно TRUE, то имеет место вычитание элементов (классическое вырезание). Если же значение этого свойства равно FALSE, то имеет место пересечение элементов.

Во всем остальном интерфейс ksCutExtrusionDefinition аналогичен интерфейсу   ksBaseExtrusionDefinition.

Пример

В качестве примера мы напишем небольшую программу, которая будет строить простой стакан. На рисунке ниже показан чертеж этого стакана с размерами.

Порядок построения этого стакана будет следующим.

1)                                       В плоскости XOY создается эскиз, представляющий собой окружность радиусом 15 мм (30/2).

2)                                       Выполняется операция выдавливания на высоту 20 мм.

3)                                       Создается смещенная плоскость, расположенная параллельно плоскости XOY и удаленная от нее на расстояние 20 мм. (глубина выдавливания на предыдущем шаге).

4)                                       В смещенной плоскости создается эскиз, представляющий собой окружность радиусом 10 мм (20/2).

5)                                       Выполняется операция вырезание выдавливанием на глубину 15. Ниже приводится ключевой фрагмент исходного текста программы,

демонстрирующей    построение    данного    стакана    по    вышеописанному алгоритму.

const

pTop_Part = -1;

o3d_planeXOY = 1;

o3d_sketch  = 5;

o3d_planeOffset  = 14;

o3d_baseExtrusion = 24;

o3d_cutExtrusion = 26;

dtNormal = 0;

etBlind  = 0;

vm_Shaded = 3;

var

kompas: KompasObject; Document3D: ksDocument3D; Part: ksPart;

EntityPlaneXOY, EntityPlaneOffset: ksEntity;

EntitySketch1, EntitySketch2: ksEntity; EntityExtrusion, EntityCutExtrusion: ksEntity;

SketchDefinition: ksSketchDefinition; Document2D : ksDocument2D;

BaseExtrusionDefinition: ksBaseExtrusionDefinition; PlaneOffsetDefinition: ksPlaneOffsetDefinition; CutExtrusionDefinition: ksCutExtrusionDefinition;

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,15,1);

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

SketchDefinition.EndEdit();

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

//Операция "выдавливание"

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

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

EntityExtrusion:=ksEntity(Part.NewEntity(o3d_baseExtrusion));

//Получаем интерфейс параметров операции "выдавливание"

BaseExtrusionDefinition:=ksBaseExtrusionDefinition(EntityExtrusion.GetDefinition());

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

BaseExtrusionDefinition.SetSideParam(TRUE,etBlind,20,0,TRUE);

//Устанавливаем эскиз операции выдавливания

BaseExtrusionDefinition.SetSketch(EntitySketch1);

//Создаем операцию выдавливания

EntityExtrusion.Create();

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

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

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

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

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

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

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

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

PlaneOffsetDefinition.direction:=TRUE;

//Смещение

PlaneOffsetDefinition.offset := 20;

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

PlaneOffsetDefinition.SetPlane(EntityPlaneXOY);

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

EntityPlaneOffset.Create();

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

//Эскиз 2

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

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

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

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

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

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

SketchDefinition.SetPlane(EntityPlaneOffset);

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

EntitySketch2.Create();

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

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

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

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

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

SketchDefinition.EndEdit();

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

//Вырезание выдавливанием

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

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

EntityCutExtrusion:=ksEntity(Part.NewEntity(o3d_CutExtrusion));

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

CutExtrusionDefinition:=ksCutExtrusionDefinition(EntityCutExtrusion.GetDefinition());

//Вычитание элементов

CutExtrusionDefinition.cut:=TRUE;

//Прямое направление

CutExtrusionDefinition.directionType:=dtNormal;

//Устанавливаем параметры выдавливания

CutExtrusionDefinition.SetSideParam(TRUE,etBlind,15,0,FALSE);

//Устанавливаем экиз операции

CutExtrusionDefinition.SetSketch(EntitySketch2);

//Создаем операцию вырезания выдавливанием

EntityCutExtrusion.Create();

end;

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

Document3D.hideAllPlanes:=TRUE;

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

Document3D.drawMode:=vm_Shaded;

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

Document3D.shadedWireframe:=TRUE;

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

kompas.Visible:=true;

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

На рисунке ниже показан результат работы этой же программы но, в случае, пересечения элементов (свойство cut интерфейса ksCutExtrusionDefinition принимает значение FALSE).

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

По теме:

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