VNII Signal JSCのソフトウェアエンジニアであるKOMPAS-3D CAD API Sergey Norseevの使用に関する一連の記事を続けています。DelphiでのKOMPASのアプリケーション開発の著者です。 使用される環境はC ++ Builderです。 KOMPAS APIの
基本と
図面設計に関する以前のレッスンでは、KOMPASが実行されていないと想定しました。KOMPAS
への
正しい接続のレッスンでは、
KOMPASが既に実行され、接続されていることを確認しました。 レッスンでは、
メインの碑文 、図面のメインの碑文の記入方法を分析しました。 最後のレッスンである
グラフィックプリミティブでは、最初の幾何学的図形を描き始めました。 この記事では、円弧を作成するさまざまな方法について説明します。 KOMPASでは、3つの異なる方法で構築できます。 それらすべてを検討します。

問題の声明
まず、構築するものを決定します。 たとえば、座標
(100、100)の点を中心とする半径
10 mmの半円を取ることを提案します。 この弧は下図に示されています。
(写真はクリック可能です)。A、B、Cは、アークを構成するさまざまな方法を説明するのに役立つ補助ポイントです。
3点で
最初の方法は、ポイント
A、B、Cの座標はわかっているが、中心の座標は不明であるという事実に基づいています。 3つのポイントを使用して円弧を
作成するには、
ksDocument2Dインターフェイスの
ksArcBy3Pointsメソッドを使用します。 以下はそのプロトタイプです。
long ksArcBy3Points ( double x1, // double y1, double x2, // double y2, double x3, // double y3, long style);
線のスタイルについて
は、シリーズの以前の記事で説明しました。
成功した場合、メソッドは構築されたアークへのポインタを返し、エラーの場合、値は
ゼロです。
アークを構築するには、ポイントの座標を決定する必要があります。 したがって、ポイント
Aの座標は
(90、100) 、ポイント
B (100、110) 、ポイント
C (110、100)です。 このような初期データでは、
次のようにksArcBy3Pointsメソッドを
呼び出す必要があります。
Document2D->ksArcBy3Points( 90 , 100, // 100, 110, // B 110, 100, // C 1); //C
ksDocument2Dインターフェースへのポインターを取得する方法
は、シリーズの以前の記事で説明されて
います。
センターとコーナー
この方法は、円弧の中心の座標と端の角度を知っているという事実に基づいています。 この情報からアークを構築するには、
ksDocument2Dインターフェイスの
ksArcByAngleメソッドを使用します。 以下は、このメソッドのプロトタイプです。
long ksArcByAngle ( double xc, // double yc, double rad, // double f1, // double f2, short direction, // long style);
パラメータ
xc 、
yc 、
rad 、および
styleを使用すると、すべてが明確になると思います。 質問はありません。
パラメータ
f1および
f2は、円弧の中心とその終点を通る線と水平線の間の角度(
度単位 )を指定します。 これらの角度を次の図に示します。

次に、
方向パラメーターについて説明します。 弧を描く方向を設定します。
1の場合、アークは反時計回りに構築され、
-1の場合、アークは時計回りに構築されます。 たとえば、上の図に示されている弧は反時計回りに描かれ、下の図は同じパラメータで時計回りに構築された弧を示しています。

成功した場合、
ksArcByAngleメソッドは構築されたアークへのポインターを返し、エラーの場合は
ゼロを返し
ます 。
アークを構築するタスクに戻りましょう。 反時計回りに描くには、角度を次のように指定する必要があります:
f1 = 0 、
f2 = 180 。 同じ円弧を時計回りに描くには、角度の値を交換する必要があります
(f1 = 180、f2 = 0) 。
アーク構築コードを以下に示します。
Document2D->ksArcByAngle( 100, 100, // 10, // 0, 180, // 1, // 1); //C
中心点と終点
この方法は、アークの中心の座標とアークの終点の座標を知っているという事実に基づいています。 この情報からアークを構築するには、
ksDocument2Dインターフェイスの
ksArcByPointメソッドを使用します。 以下は、このメソッドのプロトタイプです。
long ksArcByPoint ( double xc, // double yc, double rad, // double x1, // double y1, double x2, // double y2, short direction, // long style);
このメソッドは、
前述のksArcByAngleメソッドに非常に似ています。 唯一の違いは、終点が角度ではなく、座標によって設定されることです。
成功した場合、
ksArcByPointメソッドはアークへのポインターを返し、エラーの場合は
ゼロを返し
ます 。
以下は、このメソッドを呼び出してアークを構築するコードです。
Document2D->ksArcByPoint( 100, 100, // 10, // 110, 100, // C 90 , 100, // A 1, // 1); //
注意深い読者は、
ksArcByPointメソッドのパラメーターが冗長であることを認識している必要があります。 なんで? APIクリエイターの間違いですか? そうでもない。 ポイント
(x1、y1)および
(x2、y2)の目的を正しく理解する必要があります。 KOMPASのドキュメントによると:
x1、y1-弧の始点の座標、
x2、y2-弧の終点の座標。
このような誤った説明は混乱を招きます。 実際、ポイント
(x1、y1)および
(x2、y2)はアークに属さない場合があります。 それらは、エンドポイントの位置を指定するのではなく、それらが配置されているベクトルの方向を指定します。 さらに、このベクトルの始点は円弧の中心にあります。 次の図は、これをより明確に示しています。

これに基づいて、検討しているアークは以下のコードを使用して構築できます。
double xc = 100; double yc = 100; Document2D->ksArcByPoint( xc, yc, // 10, // xc+1, yc, // xc-1, yc, // 1, // 1); //
注:終点は点
Aおよび
Cと一致しませんが、アークはまだ正しく構築されています。
おわりにこの記事では、円弧を作成するさまざまな方法を検討しました。 どちらを使用するかは、自分で決めてください。 しかし、あなたの決定はあなたが与えられた時間に持っているアークに関する情報によって決定されると思います。
継続するには、ブログのニュースに従ってください。
Sergey Norseev、「DelphiでのCOMPASのアプリケーション開発」の著者。