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

0

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

Интерфейс ksMeshCopyDefinition служит для задания параметров копирования элементов детали по параллелограммной сетке. Его возвращает метод GetDefinition() интерфейса ksEntity, описывающего данную операцию копирования элементов детали. Рассмотрим свойства интерфейса ksMeshCopyDefinition.

angle1 – угол наклона между первой осью, вдоль которой происходит копирование элементов и осью OX.

angle2 – угол раствора. Это угол между второй осью, вдоль которой происходит копирование элементов и первой осью.

count1 – количество копий вдоль первой оси.

count2 – количество копий вдоль второй оси.

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

factor2 – аналогично свойству factor1, но применительно ко второй оси и свойству step2.

geomArray – указывает нужно ли перестраивать элементы при их копировании. Если значение этого свойства равно TRUE, то копируемые элементы не перестраиваются. При этом операция копирования ускоряется, но в некоторых случаях возможны ошибки при копировании скруглений и

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

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

step1 – зависит от значения свойства factor1.

step2 – зависит от значения свойства factor2.

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

SetAxis1 – устанавливает первую ось параллелограммной сетки. В качестве    единственного    параметра    принимает    интерфейс    ksEntity,

описывающий устанавливаемую ось. Если первая ось устанавливается с помощью этого метода, то значение свойства angle1 игнорируется. В случае успеха метод SetAxis1 возвращает значение TRUE, а в случае ошибки – значение FALSE.

SetAxis2 – аналогично методу SetAxis1 но, применительно ко второй оси параллелограммной сетки и свойству angle2.

GetAxis1() – возвращает интерфейс ksEntity, описывающий ось, установленную методом SetAxis1, или NULL в том случае, если первая ось

не устанавливалась.

GetAxis2() – возвращает интерфейс ksEntity, описывающий ось, установленную методом SetAxis2, или NULL в том случае, если вторая ось не устанавливалась.

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

63) массива элементов детали, которые будут скопированы.

SetCopyParamAlongAxis – устанавливает параметры копирования элементов детали вдоль оси. Данный метод устанавливает значения соответствующих свойств интерфейса ksMeshCopyDefinition. Ниже представлен прототип метода SetCopyParamAlongAxis.

SetCopyParamAlongAxis(

firstAxis: WordBool; //признак оси

angle: Double;      //угол наклона или разворота count: Integer;     //количество копий вдоль оси step: Double;       //зависит от параметра factor

factor: WordBool    //как интерпретировать параметр step

): WordBool;

Параметр firstAxis определяет: параметры копирования вдоль какой оси мы задаем. Если его значение равно TRUE, то мы задаем параметры копирования вдоль первой оси. Если же значение параметра firstAxis равно FALSE, то мы задаем параметры копирования вдоль второй оси.

Параметр angle эквиваленте значениям свойств angle1 и angle2 в зависимости от значения параметра firstAxis.

Параметр count эквивалентен значениям свойств count1 и count2 в зависимости от значения параметра firstAxis.

Параметр step эквивалентен значениям свойств sep1 и step2 в зависимости от значения параметра firstAxis.

Параметр factor эквивалентен значениям свойств factor1 и factor2 в зависимости от значения параметра firstAxis.

В случае успеха метод SetCopyParamAlongAxis возвращает значение TRUE.

Пример

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

const

pTop_Part = -1;

o3d_planeXOY = 1;

o3d_sketch  = 5;

o3d_planeOffset = 14;

o3d_baseExtrusion = 24;

o3d_bossExtrusion = 25;

o3d_meshCopy = 35;

etBlind  = 0;

vm_Shaded = 3;

var

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

EntityCollection: ksEntityCollection;

EntitySketch,EntityPlaneXOY, EntityPlaneOffset: ksEntity; EntityExtrusion,EntityBossExtrusion,EntityMeshCopy: ksEntity; SketchDefinition: ksSketchDefinition;

Document2D : ksDocument2D; RectangleParam: ksRectangleParam;

BaseExtrusionDefinition: ksBaseExtrusionDefinition; PlaneOffsetDefinition: ksPlaneOffsetDefinition; BossExtrusionDefinition: ksBossExtrusionDefinition;

MeshCopyDefinition: ksMeshCopyDefinition;

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

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

//Копирование элементов по параллелограммной сетке

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

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

EntityMeshCopy:=ksEntity(Part.NewEntity(o3d_meshCopy));

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

MeshCopyDefinition:=ksMeshCopyDefinition(EntityMeshCopy.GetDefinition());

//Сохранять копии во всех узлах сетки

MeshCopyDefinition.insideFlag:=TRUE;

//Задаем параметры копирования вдоль первой оси

MeshCopyDefinition.SetCopyParamAlongAxis(TRUE, 0, 5,20,FALSE);

//Задаем параметры копирования вдоль второй оси

MeshCopyDefinition.SetCopyParamAlongAxis(FALSE,90,5,20,FALSE);

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

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

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

EntityCollection.Add(EntityBossExtrusion);

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

EntityMeshCopy.Create();

end;

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

Document3D.hideAllPlanes:=TRUE;

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

Document3D.drawMode:=vm_Shaded;

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

Document3D.shadedWireframe:=TRUE;

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

kompas.Visible:=true;

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

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

По теме:

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