Главная » Delphi, OLE, САПР » Копирование элементов детали вдоль кривой – КОМПАС в DELPHI

0

Параметры копирования элементов детали вдоль кривой (ksCurveCopyDefinition)

Согласно документации КОМПАС параметры копирования элементов детали вдоль кривой задаются с помощью интерфейса ksCopyCurveDefinition. Однако, в модуле ksTLB.pas такого интерфейса нет. Вместо него там описан интерфейс ksCurveCopyDefinition с точно таким же прототипом. В КОМПАС

13 данное несоответствие устранено. Рассмотрим свойства интерфейса ksCurveCopyDefinition.

count – количество копий.

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

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

geomArray – указывает нужно ли перестраивать копии. Если значение

этого свойства равно TRUE, то копии не перестраиваются. Это приводит к ускорению операции копирования, однако при копировании скруглений и фасок в таком режиме возможно появление ошибок. Если значение свойства geomArray равно FALSE, то все копии перестраиваются заново.

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

sence – направление копирования. Если значение этого свойства равно TRUE, то копирование осуществляется по часовой стрелке. Если же значение этого свойства равно FALSE, то копирование осуществляется против часовой стрелки.

step – зависит от значения свойства factor.

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

CurveArray() – возвращает интерфейс ksEntityCollection (см. главу 63) массива кривых, образующих траекторию копирования. Как показывает эксперимент, в качестве элемента этого массива может быть использован интерфейс ksEntity, описывающий эскиз, содержащий траекторию копирования.

OperationArray() – возвращает интерфейс ksEntityCollection (см. главу

63) массива элементов детали, подлежащих копированию. Каждый элемент описывается интерфейсом ksEntity.


Пример

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

const

pTop_Part = -1;

o3d_planeXOY = 1;

o3d_sketch  = 5;

o3d_planeOffset = 14;

o3d_baseExtrusion = 24;

o3d_bossExtrusion = 25;

o3d_curveCopy = 37;

etBlind  = 0;

vm_Shaded = 3;

var

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

EntityCollection: ksEntityCollection; EntitySketch,EntityPlaneXOY, EntityPlaneOffset: ksEntity; EntityExtrusion,EntityBossExtrusion,EntityCurveCopy: ksEntity; SketchDefinition: ksSketchDefinition;

Document2D : ksDocument2D;

RectangleParam: ksRectangleParam; BaseExtrusionDefinition: ksBaseExtrusionDefinition; PlaneOffsetDefinition: ksPlaneOffsetDefinition; BossExtrusionDefinition: ksBossExtrusionDefinition; CurveCopyDefinition: ksCurveCopyDefinition;

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

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

RectangleParam:=ksRectangleParam(kompas.GetParamStruct(ko_RectangleParam));

RectangleParam.Init();

//Указываем параметры прямоугольника

RectangleParam.height := 100;

RectangleParam.style := 1;

RectangleParam.width := 100;

RectangleParam.x := -50;

RectangleParam.y := -50;

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

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

//Строим прямоугольник

Document2D.ksRectangle(RectangleParam,0);

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

SketchDefinition.EndEdit();

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

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

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

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

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

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

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

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

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

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

BaseExtrusionDefinition.SetSketch(EntitySketch);

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

EntityExtrusion.Create();

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

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

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

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

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

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

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

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

PlaneOffsetDefinition.direction:=TRUE;

//Смещение

PlaneOffsetDefinition.offset := 10;

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

PlaneOffsetDefinition.SetPlane(EntityPlaneXOY);

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

EntityPlaneOffset.Create();

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

//Эскиз для операции "приклеивание выдавливанием"

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

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

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

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

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

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

SketchDefinition.SetPlane(EntityPlaneOffset);

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

EntitySketch.Create();

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

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

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

Document2D.ksCircle(-40,-40,5,1);

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

SketchDefinition.EndEdit();

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

//Приклеивание выдавливанием

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

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

EntityBossExtrusion:=ksEntity(Part.NewEntity(o3d_bossExtrusion));

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

BossExtrusionDefinition:=KsBossExtrusionDefinition(EntityBossExtrusion.GetDefinition());

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

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

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

BossExtrusionDefinition.SetSketch(EntitySketch);

//Cоздаем операцию "приклеивание выдавливанием"

EntityBossExtrusion.Create();

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

//Эскиз для операции копирования по кривой

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

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

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

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

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

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

SketchDefinition.SetPlane(EntityPlaneOffset);

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

EntitySketch.Create();

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

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

//Строим эскиз

Document2D.ksLineSeg(-40,-40,40,-40,1); Document2D.ksLineSeg(40,-40,40,40,1);

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

SketchDefinition.EndEdit();

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

//Операция копирования вдоль кривой

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

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

EntityCurveCopy:=ksEntity(Part.NewEntity(o3d_curveCopy));

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

CurveCopyDefinition:=ksCurveCopyDefinition(EntityCurveCopy.GetDefinition());

//Количество копий

CurveCopyDefinition.count:=5;

//Вдоль всей кривой

CurveCopyDefinition.fullCurve:=TRUE;

//Получаем массив копируемых элементов

EntityCollection:=ksEntityCollection(CurveCopyDefinition.OperationArray()); EntityCollection.Clear();

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

EntityCollection.Add(EntityBossExtrusion);

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

EntityCollection:=ksEntityCollection(CurveCopyDefinition.CurveArray()); EntityCollection.Clear();

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

EntityCollection.Add(EntitySketch);

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

EntityCurveCopy.Create();

end;

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

Document3D.hideAllPlanes:=TRUE;

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

Document3D.drawMode:=vm_Shaded;

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

Document3D.shadedWireframe:=TRUE;

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

kompas.Visible:=true;

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

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

По теме:

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