Главная » Delphi, OLE, САПР » Скругление – КОМПАС в DELPHI

0

Параметры скругления (ksFilletDefinition)

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

radius – радиус скругления.

tangent – признак продолжения скругления по касательным  ребрам. Если значение этого свойства равно TRUE, то скругление продолжается по касательным ребрам. Если же значение этого свойства равно FALSE, то скругление не продолжается по касательным ребрам.

Метод у интерфейса ksFilletDefinition всего один.

array_()1 – возвращает интерфейс ksEntityCollection (см. главу 63) массива скругляемых граней или ребер.

Пример 1

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

const

pTop_Part = -1;

o3d_planeXOY = 1;

o3d_sketch  = 5;

o3d_face = 6;

o3d_baseExtrusion = 24;

o3d_fillet = 34;

etBlind  = 0;

vm_Shaded = 3;

var

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

EntitySketch, EntityPlaneXOY, EntityExtrusion: ksEntity;

EntityFillet: ksEntity; EntityCollectionFillet,EntityCollectionPart:ksEntityCollection; SketchDefinition: ksSketchDefinition;

Document2D : ksDocument2D;

BaseExtrusionDefinition: ksBaseExtrusionDefinition;

FilletDefinition: ksFilletDefinition;

begin

//Подключаемся к КОМПАСу

kompas:=KompasObject(CreateOleObject(‘Kompas.Application.5′));

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

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

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

Document3D.Create(FALSE,true);

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

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

1 В документации КОМПАС данный метод описывается как array() (без знака подчеркивания на конце), но в модуле ksTLB он описан как array_() (со знаком подчеркивания на конце).

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

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

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

//Эскиз

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

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

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

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

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

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

SketchDefinition.SetPlane(EntityPlaneXOY);

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

EntitySketch.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,50,0,TRUE);

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

BaseExtrusionDefinition.SetSketch(EntitySketch);

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

EntityExtrusion.Create();

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

//Скругление

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

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

EntityFillet:=ksEntity(Part.NewEntity(o3d_fillet));

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

FilletDefinition:=ksFilletDefinition(EntityFillet.GetDefinition());

//Радиус скругления

FilletDefinition.radius:=5;

//Не продолжать по касательным ребрам

FilletDefinition.tangent:=FALSE;

//Получаем массив граней детали

EntityCollectionPart:=ksEntityCollection(Part.EntityCollection(o3d_face));

//Получаем массив скругляемых граней

EntityCollectionFillet:=ksEntityCollection(FilletDefinition.array_()); EntityCollectionFillet.Clear();

//Заполняем массив скругляемых граней

EntityCollectionFillet.Add(EntityCollectionPart.GetByIndex(2));

//Создаем скругление

EntityFillet.Create();

end;

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

Document3D.drawMode:=vm_Shaded;

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

Document3D.shadedWireframe:=TRUE;

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

kompas.Visible:=true;

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

Пример 2

В предыдущем примере мы показали, как построить скругление, используя информацию об имеющихся гранях детали. Теперь посмотрим, как сделать то же самое, используя информацию об имеющихся ребрах детали.

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

const

pTop_Part = -1;

o3d_planeXOY = 1;

o3d_sketch  = 5;

o3d_edge = 7;

o3d_baseExtrusion = 24;

o3d_fillet = 34;

etBlind  = 0;

vm_Shaded = 3;

var

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

EntitySketch, EntityPlaneXOY, EntityExtrusion: ksEntity;

EntityFillet: ksEntity; EntityCollectionFillet,EntityCollectionPart:ksEntityCollection; SketchDefinition: ksSketchDefinition;

Document2D : ksDocument2D;

ExtrusionDefinition: ksBaseExtrusionDefinition;

FilletDefinition: ksFilletDefinition;

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

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

//Эскиз

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

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

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

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

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

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

SketchDefinition.SetPlane(EntityPlaneXOY);

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

EntitySketch.Create();

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

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

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

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

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

SketchDefinition.EndEdit();

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

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

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

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

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

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

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

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

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

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

ExtrusionDefinition.SetSketch(EntitySketch);

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

EntityExtrusion.Create();

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

//Скругление

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

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

EntityFillet:=ksEntity(Part.NewEntity(o3d_fillet));

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

FilletDefinition:=ksFilletDefinition(EntityFillet.GetDefinition());

//Радиус скругления

FilletDefinition.radius:=5;

//Не продолжать по касательным ребрам

FilletDefinition.tangent:=FALSE;

//Получаем массив ребер детали

EntityCollectionPart:=ksEntityCollection(Part.EntityCollection(o3d_edge));

//Получаем массив скругляемых ребер

EntityCollectionFillet:=ksEntityCollection(FilletDefinition.array_()); EntityCollectionFillet.Clear();

//Заполняем массив скругляемых ребер

EntityCollectionFillet.Add(EntityCollectionPart.GetByIndex(0));

//Создаем скругление

EntityFillet.Create();

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

Document3D.drawMode:=vm_Shaded;

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

end;

Document3D.shadedWireframe:=TRUE;

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

kompas.Visible:=true;

Как видите, построение скругления на основе ребер практически ничем не отличается от построения скругления на основе граней.

Результат работы программы в примере 2 ни чем не отличается от результата работы программы в примере 1.

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

По теме:

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