2005年7月21日木曜日

SW API「指定点と自由曲面との交点を求める その2」

前回の「指定点と自由曲面との交点を求める」の続きを今回も行います。

前回のサンプルで使用した部品ファイル(surface.sldprt)を開き、3Dスケッチの座標値をX:-50,Y:-55,Z:50mmに変更してください。
変更できない方はこちらから修正した部品ファイルをダウンロードしてください。

この形状を元に前回作成したマクロを実行してみましょう。

実行前に3Dスケッチとサーフェスを選択状態にしてください。

なお、マクロ実行時にUserForm1のダイアログまたはプログラムをカレントにしてから実行してください。

どうですか?
XY平面(正面)から見ると3Dスケッチはサーフェスの外側にあるのに交点が求められたのが確認できたでしょうか。

今回は自由曲面との交点を求めるのが目的ですので実際にはサーフェスが存在しない場所の交点を求めてしまうと困ってしまいます。
そこで、前回のマクロに処理を追加してみましょう。

 1.求めた交点と選択曲面との距離を求める
    API:Face::GetClosestPointOn

上記処理を追加したマクロのダウンロードはこちらから

実際の処理は以下のようになります

 vCrossPointArray = swFace.GetClosestPointOn
              (vPointArray(i+0),vPointArray(i+1),vPointArray(i+2))
 XLen = vCrossPointArray(0) - vPointArray(i + 0)
 YLen = vCrossPointArray(1) - vPointArray(i + 1)
 ZLen = vCrossPointArray(2) - vPointArray(i + 2)
 GetLength = Sqr((XLen * XLen) + (YLen * YLen) + (ZLen * ZLen))

 If GetLength < 0.00000001 Then
 Set swSketchPt = swModel.CreatePoint2
             (vPointArray(i+0),vPointArray(i+1),vPointArray(i+2))
 End If

現状ではGetLengthの値が1.0e-8未満の時は求めた点が曲面上であるとの判定を行っていますが、必要な精度に応じて値を変更してみればよいでしょう。