LISP で、指定した点から、ある図形上の最短の距離にある点の座標値を知りたいんだけと…
なにか方法ないのかなぁ?
こんにちは、メモだよ!!管理人です。
今回は、そんなあなたに、AutoCAD で LISP を使用して、指定した点から最短の距離にある、図形上の点を取得する方法を紹介します。
vlax-curve-getClosestPointTo 関数
vlax-curve-getClosestPointTo 関数を使用すると、指定した点から指定した曲線上の近接点(WCS)を取得することができます。
(vlax-curve-getClosestPointTo curve-obj givenPnt [extend])
curve-obj は、対象の曲線の vla-object です。
gevenPnt は、点の座標値(WCS)です。
extend はオプションで、nil 以外の値を指定すると、曲線を延長します。
例えば、こんな感じになっているとき、extend を nil にするかどうかで結果が異なります。
extend が nil のときは、円弧が延長されないので、取得される点は以下になります。
extend が nil 以外の場合は、円弧が延長されるので、取得される点は以下になります。
vla-object を取得
vlax-curve-getClosestPointTo 関数の最初の引数の curve-obj を取得しましょう。
以下のように、vla-getentity 関数を使用すれば、選択した図形の vla-object を取得できます。
(setq acadObject (vlax-get-acad-object))
(setq acadDocument (vla-get-activedocument acadObject))
(setq utility (vla-get-utility acadDocument))
(vla-getentity utility 'vlaObject 'pickedPoint "\nオブジェクトをを選択:")
取得された vla-object は、3 番目の引数の vlaObject に保存されます。
vlax-curve-getClosestPointTo 関数を使用して、最短距離となる図形上の点を取得
では、vlax-curve-getClosestPointTo 関数を使用して、最短距離となる図形上の点を取得しましょう。
(setq point (getpoint "\n点を指定"))
(setq closestPoint (vlax-curve-getClosestPointTo vlaObject point T))
最初の getpoint で点を指定するよう求められるので、点を指定します。
vlax-curve-getClosestPointTo の最初の引数は、さっき取得した図形の vla-object です。
それを vlax-curve-getClosestPointTo の 2 番目の引数に入れています。
やったぁ、これで図形上の最短距離の座標値を取れた!!😄