Главная » Delphi, OLE, САПР » Сопряжение – КОМПАС в DELPHI

0

Работа с сопряжениями

Для     работы    с     сопряжениями     в     интерфейсе     ksDocument3D предусмотрено несколько методов. Рассмотрим основные из них.

AddMateConstraint  –  создает  новое  сопряжение.  Ниже  представлен прототип этого метода.

AddMateConstraint(

constraintType: Integer; //Тип сопряжения

const obj1: IDispatch;  //Первый сопрягаемый объект const obj2: IDispatch; //второй сопрягаемый объект direction: Smallint;   //направление объектов

fixed: Smallint;       //фиксация деталей

val: Double            //параметр для ограничений

): WordBool;

В   таблице   ниже   представлены   типы   сопряжений,   задаваемые параметром constraintType.

Тип сопряжения1

Значение

Описание

mc_Concidence

0

совпадение объектов

mc_Parallel

1

параллельность

mc_Perpendicular

2

перпендикулярность

mc_Tangency

3

касательность

mc_Concentric

4

концентричность (соосность)

mc_Distance

5

постоянное расстояние между объектами

mc_Angle

6

постоянный угол между объектами

mc_InPalce

7

cоздание компонента «на месте»

Параметры obj1 и obj2 представляют собой интерфейсы ksEntity, описывающие сопрягаемые грани (o3d_face) первой и второй детали соответственно.

Параметр direction задает направление сопрягаемых объектов. В таблице ниже представлены возможные значения данного параметра.

Значение

Описание

1

объекты однонаправленные

0

направление не учитывается

-1

объекты разнонаправленные

1  К сожалению, в модуле ksCostTLB.pas данные константы не представлены. Поэтому здесь я привожу их численные значения.

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

Значение

Описание

0

детали не фиксируются

1

фиксируется первая деталь

2

фиксируется вторая деталь

Параметр val используется только при задании сопряжений типа mc_Dictance и mc_Angle. Данный параметр задает расстояние или угол между объектами. При задании сопряжений других типов значение параметра val игнорируется.

В случае успеха метод AddMateConstraint возвращает значение TRUE. Для удаления сопряжения используется метод RemoveMateConstraint.

Ниже представлен прототип этого метода.

RemoveMateConstraint(

constraintType: Integer; //Тип сопряжения

const obj1: IDispatch;  //Первый сопрягаемый объект

const obj2: IDispatch   //Второй сопрягаемый объект

): WordBool;

Параметр constraintType задает тип удаляемого сопряжения.

Параметры obj1 и obj2 представляют собой интерфейсы ksEntity, описывающие грани (o3d_face) первой и второй детали, установленное сопряжение между которыми мы удаляем.

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

Пример

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

const

pTop_Part = -1;

o3d_face = 6;

mc_Concentric = 4;

mc_Distance = 5;

vm_Shaded = 3;

var

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

EntityCollection: ksEntityCollection;

EntityFaceConcentric1, EntityFaceConcentric2: ksEntity; EntityFaceDistance1, EntityFaceDistance2: ksEntity;

path: string;

begin

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

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

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

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

//Создаем сборку

Document3D.Create(FALSE,FALSE);

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

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

//Добавляем первую модель в сборку path:=’D:\Study\Деталь1.m3d'; Document3D.SetPartFromFile(path,Part,TRUE);

//Добавляем вторую модель в сборку path:=’D:\Study\Деталь2.m3d'; Document3D.SetPartFromFile(path,Part,TRUE);

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

Part:=ksPart(Document3D.GetPart(0)); EntityCollection:=ksEntityCollection(Part.EntityCollection(o3d_face));

EntityFaceConcentric1:=ksEntity(EntityCollection.GetByIndex(2)); EntityFaceDistance1:=ksEntity(EntityCollection.GetByIndex(0));

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

Part:=ksPart(Document3D.GetPart(1)); EntityCollection:=ksEntityCollection(Part.EntityCollection(o3d_face));

EntityFaceConcentric2:=ksEntity(EntityCollection.GetByIndex(1)); EntityFaceDistance2:=ksEntity(EntityCollection.GetByIndex(0));

//Устанавливаем сопряжение соосности

Document3D.AddMateConstraint(mc_Concentric,EntityFaceConcentric1,EntityFaceConcentric2,-1,1,0);

//Устанавливаем сопряжение "расстояние между объектами"

Document3D.AddMateConstraint(mc_Distance,EntityFaceDistance1,EntityFaceDistance2,-1,1,-170);

//Перерисовываем сборку

Document3D.RebuildDocument();

end;

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

Document3D.drawMode:=vm_Shaded;

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

Document3D.shadedWireframe:=TRUE;

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

kompas.Visible:=true;

В этом примере используются те же исходные детали, что и в примере из главы 82. Здесь мы устанавливаем сопряжения между этими двумя деталями.

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

По теме:

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