前回の「指定点と自由曲面との交点を求める」の続きを今回も行います。
前回のサンプルで使用した部品ファイル(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未満の時は求めた点が曲面上であるとの判定を行っていますが、必要な精度に応じて値を変更してみればよいでしょう。