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

0

Предположим такую распространенную задачу: нужно построить дугу

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

Кто-то скажет: «ну и в чем тут проблема? Параметры такой дуги можно в уме определить».

Действительно, задача сопряжения горизонтальной и вертикальной прямой решается, что называется, в уме. А если это наклонные прямые? В этом случае есть два возможных варианта действия:

1)                                            прибегнуть  к  геометрическим  расчетам  и  вручную  вычислить параметры сопрягающей дуги;

2)                                            возложить все геометрические расчеты на систему КОМПАС и построить дугу окружности по рассчитанным ею параметрам.

В данной главе мы обсудим второй вариант решения данной задачи.

Интерфейс ksCON

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

Получить его можно с помощью метода GetParamStruct интерфейса

KompasObject. Для этого нужно этому методу в качестве параметра передать значение ko_CON.

Свойств у интерфейса ksCON нет, у него есть только методы. Сами методы очень похожи между собой: они все, кроме одного, принимают всего один параметр – индекс сопрягающей дуги окружности (о том, что это такое чуть ниже). Вот эти самые методы:

GetXc, GetYc  – возвращают координаты центра сопрягающей дуги;

дуги; дуги.

GetX1, GetY1 – возвращают координаты первой точки сопрягающей GetX2, GetY2 – возвращают координаты второй точки сопрягающей

Думаю, с ними все ясно. Теперь о том, что такое индекс сопрягающей

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

Нет, это не гантеля. На самом деле, здесь изображено 4 дуги окружности одинакового радиуса, которые сопрягают горизонтальную и вертикальную прямую (показаны вспомогательными прямыми линиями).

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

Количество полученных дуг можно узнать с помощью метода GetCount интерфейса ksCON. Данный метод вызывается без параметров.

Получение параметров сопрягающих дуг

За осуществление математических расчетов отвечает интерфейс ksMathematic2D. Получить его можно с помощью метода GetMathematic2D интерфейса KompasObject. Данный метод не имеет входных параметров.

Среди всех свойств и методов данного интерфейса нас будет интересовать всего один метод ksCouplingLineLine. Вот прототип этого метода:

ksCouplingLineLine(

x1: Double; y1: Double; //Координаты точки на первой сопрягаемой прямой

angle1: Double;        //Угол наклона первой сопрягаемой прямой

x2: Double; y2: Double; //Координаты точки на второй сопрягаемой прямой

angle2: Double;        //Угол наклона второй сопрягаемой прямой

rad: Double;           //Радиус сопрягающей дуги окружности

const param: IDispatch //интерфейс ksCON, куда будут записаны результаты

): WordBool;

Параметры  x1, y1,  x2,  y2 могут задавать координаты любой точки, через которую проходит сопрягаемая прямая.

Углы  angle1  и  angle2  измеряются  между  сопрягаемой  прямой  и

горизонтальной прямой.

В случае  успеха  (найдена  хотя  бы  одна  сопрягающая  дуга) данная функция возвращает значение true, а в случае ошибки – false.

Решение задачи

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

Var

kompas: KompasObject; Document2D: ksDocument2D; Mathematic2D: ksMathematic2D; CON : ksCON;

………

Begin

………

//Получаем необходимые интерфейсы Mathematic2D:=ksMathematic2D(kompas.GetMathematic2D()); CON:=ksCON(kompas.GetParamStruct(ko_CON));

//Рассчитываем параметры сопрягающих дуг

Mathematic2D.ksCouplingLineLine( 80, 110, 0, //горизонтальная

110, 90, 90, //вертикальная

10,         //радиус дуги

CON);

//Строим сопрягающую дугу

Document2D.ksArcByPoint(CON.GetXc(1), CON.GetYc(1),

10,

CON.GetX1(1), CON.GetY1(1),

CON.GetX2(1), CON.GetY2(1),

-1, 1);

//Строим сопрягаемые отрезки

Document2D.ksLineSeg(80, 110, CON.GetX1(1), CON.GetY1(1), 1);

Document2D.ksLineSeg(110, 90, CON.GetX2(1), CON.GetY2(1), 1);

………

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

По теме:

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