パソコン前で疑問に思うエプロン女性_01.png)
LISP で、指定した点から、ある図形上の最短の距離にある点の座標値を知りたいんだけと…

なにか方法ないのかなぁ?
こんにちは、メモだよ!!管理人です。
今回は、そんなあなたに、AutoCAD で LISP を使用して、指定した点から最短の距離にある、図形上の点を取得する方法を紹介します。
vlax-curve-getClosestPointTo 関数
vlax-curve-getClosestPointTo 関数を使用すると、指定した点から指定した曲線上の近接点(WCS)を取得することができます。
チェックするトラのキャラクター-100x100.png)
(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 番目の引数に入れています。
パソコン前で両手を広げて喜ぶエプロン女性_02.png)
やったぁ、これで図形上の最短距離の座標値を取れた!!😄
