Побудова прямої дотичній до двох кіл Постановка завдання – КОМПАС в DELPHI

Припустимо, що вам потрібно побудувати фрагмент креслення виду:

Даний фрагмент складається з одного відрізка і двох дуг кіл різного радіусу Основна складність побудови такого креслення полягає у визначенні точок дотику між відрізком і дугами Можна звичайно обчислити їх самому, згадавши шкільний курс геометрії А можна поступити розумніше: покласти всі розрахунки на систему КОМПАС, за аналогією з тим як ми будували дугу кола дотичну двом прямим в попередній чолі Як це зробити

Для опису точок дотику використовується інтерфейс ksTAN Отримати цей інтерфейс можна за допомогою методу GetParamStruct інтерфейсу KompasObject Для цього останнього як параметр потрібно передати константу ko_tan

Згідно документації КОМПАС у даного інтерфейсу немає властивостей, але є 4 методу Але насправді це не так Справа в тому, що у даного

інтерфейсу немає методів, але є 4 властивості Давайте по порядку

Інтерфейс ksTAN містить інформацію про двох точках торкання прямий з двома колами Дана інформація полягає в координатах відповідних точок дотику Звідси і виникають 4 метода1 або властивості (По дві координати на кожну точку) Все питання в тому, як отримати значення цих координат

1 На жаль, інтерфейс ksTAN не містить методу GetCount (або якого-небудь його аналога), на відміну від інтерфейсу ksCON

Згідно документації для цього використовується 4 методу GetX1, GetY1, GetX2 і GetY2, які в якості єдиного параметра приймають індекс знайденої точки дотику

Але насправді для звернення до отриманих рішень

використовуються властивості X1, Y1, X2 і Y2, кожен з яких представляє собою масив значень відповідної координати відповідної точки Індекс елемента масиву відповідає індексу знайденої точки торкання Тобто, для того, щоб отримати координату X першої точки дотику першого знайденого рішення потрібно звернутися так: X1 [0] Нумерація знайдених рішень здійснюється з нуля

На малюнку нижче представлений ряд можливих рішень для побудови прямої дотичній до двох кіл (самі окружності виділені штриховий лінією):

Для отримання координат точок дотику використовується інтерфейс ksMathematic2D Для отримання даного інтерфейсу використовується метод GetMathematic2D інтерфейсу KompasObject Серед усіх методів інтерфейсу ksMathematic2D найбільший інтерес для нас представляє метод KsTanCircleCircle Саме цей метод відповідає за отримання координат точок дотику між прямою і двома колами Ось прототип цього методу:

ksTanCircleCircle(

xc1: Double yc1: Double / / Координати центру першої окружності

radius1: Double         / / Радіус першої окружності

xc2: Double yc2: Double / / Координати центру другому колу

radius2: Double         / / Радіус другого кола

const param: IDispatch   / / Інтерфейс ksTAN

): WordBool

У разі успіху (точки дотику знайдені) дана функція повертає значення true, а в разі помилки – false

При цьому в разі успіху в інтерфейс KsTAN, який передається у вигляді параметра param, будуть записані координати знайдених точок дотику

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

var

kompas: KompasObject Document2D: ksDocument2D Mathematic2D: ksMathematic2D TAN: ksTAN

………

Begin

………

/ / Отримуємо необхідні нам інтерфейси

Mathematic2D:=ksMathematic2D(kompasGetMathematic2D())

TAN := ksTAN(kompasGetParamStruct(ko_tan))

/ / Розраховуємо координати точок дотику

Mathematic2DksTanCircleCircle(100, 100, 10,

150, 150, 20, TAN)

/ / Будуємо відрізок між двома розрахованими точками дотику

Document2DksLineSeg(TANx1[2],TANy1[2],TANx2[2], TANy2[2], 1)

/ / Будуємо дуги кіл

Document2DksArcByPoint(100, 100, 10, TANx1[2], TANy1[2], 90, 100, -1, 1)

Document2DksArcByPoint(150, 150, 20, TANx2[2], TANy2[2], 170, 150, -1, 1)

………

Джерело: Норсеев Сергій, «розробка програм під КОМПАС У DELPHI»

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*