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

0

Параметры операции «сечение плоскостью» (ksCutByPlaneDefinition)

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

direction – задает направление отсечения. Если значение этого свойства

равно TRUE, то имеет место прямое направление. Если же значение этого свойства равно FALSE, то имеет место обратное направление.

ksChooseType1 – область применения операции. В таблице ниже представлены допустимые значения данного свойства.

Область применения2

Значение

Описание

ksChBodiesAndParts

1

компоненты и тела

ksChParts

2

компоненты

ksChBodies

3

все компоненты

Теперь рассмотрим методы интерфейса ksCutByPlaneDefinition.

GetPlane() – возвращает интерфейс ksEntity, описывающий секущую плоскость.

SetPlane – устанавливает новую секущую плоскость. В качестве единственного параметра данный метод принимает интерфейс ksEntity, описывающий новую секущую плоскость. В случае успеха данный метод возвращает значение TRUE.

В новых версиях КОМПАСа (11 и 13) к этим двум методам добавился еще один – ChooseBodies(). В КОМПАС 8 его нет. Поэтому рассматривать данный метод мы не будем.

Пример

Ниже представлен ключевой фрагмент исходного текста программы, демонстрирующей использование этой операции.

const

pTop_Part = -1;

o3d_planeXOY = 1;

o3d_planeYOZ = 3;

o3d_sketch  = 5;

o3d_axis2Planes = 9;

o3d_planeAngle = 15;

o3d_baseExtrusion = 24;

1          Данное свойство появилось в новых версиях КОМПАСа. В КОМПАС 11 и 13 оно есть. А вот в КОМПАС 8 у интерфейса ksCutByPLaneDefinition  нет такого свойства.

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

o3d_cutByPlane = 50;

dtNormal = 0;

etBlind  = 0;

vm_Shaded = 3;

var

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

EntityPlaneXOY,EntityPlaneYOZ,EntityPlaneAngle:ksEntity;

EntityDraw: ksEntity; EntityExtrusion,EntityCutByPlane: ksEntity;

EntityAxis: ksEntity; SketchDefinition: ksSketchDefinition; Document2D : ksDocument2D;

BaseExtrusionDefinition: ksBaseExtrusionDefinition; Axis2PlanesDefinition: ksAxis2PlanesDefinition;

PlaneAngleDefinition: ksPlaneAngleDefinition; CutByPlaneDefinition: ksCutByPlaneDefinition;

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));

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

EntityPlaneYOZ:=ksEntity(Part.GetDefaultEntity(o3d_planeYOZ));

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

//Эскиз

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

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

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

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

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

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

SketchDefinition.SetPlane(EntityPlaneXOY);

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

EntityDraw.Create();

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

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

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

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

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

SketchDefinition.EndEdit();

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

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

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

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

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

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

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

//Направление выдавливания прямое

BaseExtrusionDefinition.directionType:=dtNormal;

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

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

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

BaseExtrusionDefinition.SetSketch(EntityDraw);

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

EntityExtrusion.Create();

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

//Ось на пересечении двух плоскостей

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

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

EntityAxis:=ksEntity(Part.NewEntity(o3d_axis2Planes));

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

Axis2PlanesDefinition:=ksAxis2PlanesDefinition(EntityAxis.GetDefinition());

//Устанавливаем плоскости

Axis2PlanesDefinition.SetPlane(1,EntityPlaneXOY);

Axis2PlanesDefinition.SetPlane(2,EntityPlaneYOZ);

//Создаем ось

EntityAxis.Create();

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

//Наклоненная плоскость

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

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

EntityPlaneAngle:=ksEntity(Part.NewEntity(o3d_planeAngle));

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

PlaneAngleDefinition:=ksPlaneAngleDefinition(EntityPlaneAngle.GetDefinition());

//Угол наклона

PlaneAngleDefinition.angle:=60;

//Устанавливаем ось

PlaneAngleDefinition.SetAxis(EntityAxis);

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

PlaneAngleDefinition.SetPlane(EntityPlaneXOY);

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

EntityPlaneAngle.Create();

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

//Операция "сечение плоскостью"

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

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

EntityCutByPlane:=ksEntity(Part.NewEntity(o3d_cutByPlane));

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

CutByPlaneDefinition:=ksCutByPlaneDefinition(EntityCutByPlane.GetDefinition());

//Направление – обратное

CutByPlaneDefinition.direction := FALSE;

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

CutByPlaneDefinition.SetPlane(EntityPlaneAngle);

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

EntityCutByPlane.Create();

end;

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

Document3D.hideAllPlanes:=TRUE;

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

Document3D.hideAllAxis:=TRUE;

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

Document3D.drawMode:=vm_Shaded;

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

Document3D.shadedWireframe:=TRUE;

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

kompas.Visible:=true;

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

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

По теме:

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