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

0

Предположим, нам нужно выполнить чертеж вала:

Да, конечно его можно построить из двух прямоугольников или из 7 отрезков. Но это отнюдь не самое красивое решение. Гораздо красивее, как мне кажется, вначале построить верхнюю часть вала, а потом получить нижнюю часть путем симметричного отображения верхней части относительно оси.

Как это сделать?

Создание группы объектов

На первом шаге нам нужно создать группы объектов (отрезков, дуг), над которыми будет выполняться симметричное отображение. Дл создания группы используется два метода интерфейса ksDocument2D ksNewGroup и ksEndObj. Со вторым мы уже сталкивались, когда говорили о кривых. Посмотрим на прототип первого:

ksNewGroup(

type_: Smallint //тип группы

): Integer;

Всего существует два типа группы: модельная (type_=0) и временная (type_=1). Элементы временной группы в отличие от элементов модельной группы не  попадают на чертеж и  уничтожаются сразу после завершения

какой-либо программы (или КОМПАСа или нашего приложения). Мы будем работать исключительно с модельными группами.

В случае успеха данный метод возвращает ссылку на созданную группу. А в случае ошибки нуль.

Сам процесс создания группы очень похоже на описание точек для кривой. Вначале методом ksNewGroup запускается процесс создания группы, после чего строятся элементы, входящие в эту группу, а в конце методом ksEndObj построение группы останавливается.

Симметрия

После того как мы создали группу объектов, мы можем приступить к самому симметричному отображению. Осуществляется это методом ksSymmetryObj интерфейса ksDocument2D. Вот прототип этого метода:

ksSymmetryObj(

ref: Integer;         //ссылка на группу объектов x1: Double; y1: Double;//1-ая точка оси симметрии x2: Double; y2: Double;//2-ая точка оси симметрии const copy: WideString //режим копирования

): Integer;

Теперь подробнее.

ref – ссылка на группу, объекты которой будут подвергнуты симметричному отображению;

x1, y1, x2, y2 – координаты двух точек прямой линии, относительно которой будет выполняться симметричное отображение;

copy1 – определяет как следует поступить с исходными объектами после отображения. Если он равен ‘0’, то исходные объекты будут удалены, если же он равен ‘1’, то исходные объекты останутся без изменения.

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

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

var

Document2D: ksDocument2D; GroupID: integer;

………

begin

………

//Создаем новую группу объектов

GroupID:=Document2D.ksNewGroup(0);

//Создаем объекты новой группы объектов

Document2D.ksLineSeg(100, 100, 100, 120,1);

Document2D.ksLineSeg(100, 120, 120, 120, 1);

Document2D.ksLineSeg(120,120,120,100,1); Document2D.ksLineSeg(120,110,160,110,1);

1 Обращаю ваше внимание на то, что это параметр строкового типа.

Document2D.ksLineSeg(160,110,160,100,1);

//Завершаем построение новой группы

Document2D.ksEndObj();

//Выполняем симметричное отображение созданной группы объектов

Document2D.ksSymmetryObj(GroupID,100,100,110,100,’1′);

………

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

По теме:

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