カーブ関数

始点からの長さ

AutoLISP関数
(vlax-curve-getDistAtParam curve-obj param)
curve-obj:【図形名】、またはVLAオブジェクト
param:実数
始点から指定されたパラメータまでのカーブの長さを返します。
戻り値:実数

vlax-curve-getDistAtParam 関数は始点から【パラメータ】で指定した位置までのカーブの長さを求めます。

curve-obj 引数には、調べたいカーブの【図形名】か VLA オブジェクトを指定します。

param 引数には、求めたい位置の【パラメータ】を指定します。

戻り値は、長さを表す実数の値が返ります。周期的な【パラメータ】を受け付けるカーブの場合を除いて【パラメータ】の値の範囲が不正だった場合は nil となります。

次の例は、図形を選択すると、【パラメータ】の範囲を10等分した位置の始点からの長さを【コマンドライン】に表示します。

(defun ParamList:sub (index)
  (if (<= index n)
    (cons (+ start (* step index)) (ParamList:sub (1+ index)))
  )
)

(defun ParamList (start end n / step)
  (setq step (/ (float (- end start)) n))
  (ParamList:sub 0)
)

(while
  (setq ename (car (entsel "\n図形を選択(選択なしで終了)[最後(L)]:")))
   (setq edata      (entget ename)
         startParam (vlax-curve-getStartParam ename)
         endParam   (vlax-curve-getEndParam ename)
   )
   (prompt "\n")
   (prompt (cdr (assoc 0 edata)))
   (if (and startParam endParam)
     (foreach param (ParamList startParam endParam 10.0)
       (prompt "\nparam : ")
       (prompt (vl-princ-to-string param))
       (prompt " -> dist : ")
       (prompt (vl-princ-to-string (vlax-curve-getDistAtParam ename param)))
     )
   )
)

実行すると、例えば以下のように表示されます。

図形を選択(選択なしで終了)[最後(L)]:
LINE
param : 0.0 -> dist : 0.0
param : 5.0 -> dist : 5.0
param : 10.0 -> dist : 10.0
param : 15.0 -> dist : 15.0
param : 20.0 -> dist : 20.0
param : 25.0 -> dist : 25.0
param : 30.0 -> dist : 30.0
param : 35.0 -> dist : 35.0
param : 40.0 -> dist : 40.0
param : 45.0 -> dist : 45.0
param : 50.0 -> dist : 50.0
図形を選択(選択なしで終了)[最後(L)]:
LWPOLYLINE
param : 0.0 -> dist : 0.0
param : 0.2 -> dist : 9.93766
param : 0.4 -> dist : 19.8753
param : 0.6 -> dist : 29.813
param : 0.8 -> dist : 39.7506
param : 1.0 -> dist : 49.6883
param : 1.2 -> dist : 58.6072
param : 1.4 -> dist : 67.5261
param : 1.6 -> dist : 76.4449
param : 1.8 -> dist : 85.3638
param : 2.0 -> dist : 94.2827
AutoLISP関数
(vlax-curve-getDistAtPoint curve-obj point)
curve-obj:【図形名】、またはVLAオブジェクト
point:リスト
始点から指定された点(WCS)までのカーブの長さを返します。
戻り値:実数

vlax-curve-getDistAtPoint 関数は、始点から指定したカーブ上の点までの長さを返します。

curve-obj 引数には、調べたいカーブの【図形名】か VLA オブジェクトを指定します。

point 引数は、カーブ上の点を WCS で指定します。

戻り値は、長さを表す実数の値が返ります。point 引数がカーブ上に無い場合は nil を返します。近接点を求める関数などを使って確実にカーブ上の点に変換して与えてください。

下は、図形を選択すると、図形タイプと選択点の始点からの長さを表示するものです。

(while (setq selInfo (entsel "\n図形を選択(選択なしで終了)[最後(L)]:"))
  (setq ename (car selInfo)
        point (trans (osnap (cadr selInfo) "NEA") acUCS acWorld)
        edata (entget ename)
  )
  (prompt "\n")
  (prompt (cdr (assoc 0 edata)))
  (prompt " : 選択点の始点からの長さ ")
  (prompt (vl-princ-to-string (vlax-curve-getDistAtPoint ename point)))
)

実行すると、例えば以下のように表示されます。

図形を選択(選択なしで終了)[最後(L)]:
LWPOLYLINE : 選択点の始点からの長さ 41.2425
図形を選択(選択なしで終了)[最後(L)]:
LINE : 選択点の始点からの長さ 38.3794
図形を選択(選択なしで終了)[最後(L)]:
SPLINE : 選択点の始点からの長さ 101.33
図形を選択(選択なしで終了)[最後(L)]:
ARC : 選択点の始点からの長さ 11.3399