【AutoCAD LISP】指定した点から最短の距離にある、図形上の点を取得する方法

2021年12月25日

並んだ椅子2つと青空

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 のときは、円弧が延長されないので、取得される点は以下になります。

nil のときに最短距離として認識される点

extend が nil 以外の場合は、円弧が延長されるので、取得される点は以下になります。

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 番目の引数に入れています。

やったぁ、これで図形上の最短距離の座標値を取れた!!😄

座標値を取れた

-API
-