パラメータ
【パラメータ】は一次元のカーブの任意の位置を表す実数です。カーブ上の点を特定するための番地にあたります。代数幾何の関数をグラフに描くときの媒介変数のようなイメージでしょうか。いろいろな図形タイプがあるので、その値の取り方は様々です。カーブ上の任意の位置を表す値なので、【パラメータ】とその位置の長さである「始点からの距離」やカーブ上の点の「三次元の座標」は相互に変換できる関係にあります。

AutoLISP関数 |
---|
(vlax-curve-getStartParam curve-obj) |
curve-obj:【図形名】、またはVLAオブジェクト |
カーブの始点のパラメータを返します。 |
戻り値:実数、またはnil |
AutoLISP関数 |
---|
(vlax-curve-getEndParam curve-obj) |
curve-obj:【図形名】、またはVLAオブジェクト |
カーブの終点のパラメータを返します。 |
戻り値:nil、またはnil以外 |
vlax-curve-getStartParam 関数は始点の【パラメータ】を返します。
vlax-curve-getEndParam 関数は終点の【パラメータ】を返します。
curve-obj 引数には、調べたいカーブの【図形名】か VLA オブジェクトを指定します。
二つの関数が nil を返す場合は、放射線や構築線の場合で、始点や終点が存在しない場合です。
下は、図形を選択すると、図形タイプと、始点と終点の【パラメータ】を表示するものです。
(while (setq ename (car (entsel "\n図形を選択(選択なしで終了)[最後(L)]:"))) (setq edata (entget ename)) (prompt "\n") (prompt (cdr (assoc 0 edata))) (prompt " : パラメータ(始点 終点) ( ") (prompt (vl-princ-to-string (vlax-curve-getStartParam ename))) (prompt " ") (prompt (vl-princ-to-string (vlax-curve-getEndParam ename))) (prompt " )") )
実行すると、例えば以下のように表示されます。
図形を選択(選択なしで終了)[最後(L)]:
LINE : パラメータ(始点 終点) ( 0.0 285.624 )
図形を選択(選択なしで終了)[最後(L)]:
LWPOLYLINE : パラメータ(始点 終点) ( 0.0 4.0 )
図形を選択(選択なしで終了)[最後(L)]:
POLYLINE : パラメータ(始点 終点) ( 0.0 32.0 )
図形を選択(選択なしで終了)[最後(L)]:
POLYLINE : パラメータ(始点 終点) ( 0.0 8.0 )
図形を選択(選択なしで終了)[最後(L)]:
SPLINE : パラメータ(始点 終点) ( 0.0 423.95 )
図形を選択(選択なしで終了)[最後(L)]:
HELIX : パラメータ(始点 終点) ( 0.0 18.8496 )
図形を選択(選択なしで終了)[最後(L)]:
CIRCLE : パラメータ(始点 終点) ( 0.0 6.28319 )
図形を選択(選択なしで終了)[最後(L)]:
ELLIPSE : パラメータ(始点 終点) ( 0.0 6.28319 )
図形を選択(選択なしで終了)[最後(L)]:
ARC : パラメータ(始点 終点) ( 0.553978 3.0654 )
図形を選択(選択なしで終了)[最後(L)]:
RAY : パラメータ(始点 終点) ( 0.0 nil )
図形を選択(選択なしで終了)[最後(L)]:
XLINE : パラメータ(始点 終点) ( nil nil )
【パラメータ】の値の範囲は、図形タイプによってさまざまです。
図形タイプ | 【パラメータ】の割り当て |
---|---|
直線 | 始点を 0.0 、終点は直線の長さ |
ライトウェイトポリライン 2D/3Dポリライン(直線) |
始点は 0.0、一番目の辺では 0.0~1.0、二番目の辺では 1.0~2.0 といった割り当て。終点のパラメータは N-1:N は頂点数、閉じている場合は終点も数える |
2Dポリライン(フィット) | 始点を 0.0、終点は 2(N-1):Nは頂点数、閉じている場合は終点も数える |
2D/3Dポリライン(スプライン) - 開いている場合 | 2次、3次とも始点は 0.0、終点は2次の場合は 8(N-2) (N≧3)、3次の場合は 8(N-3) (N≧3):N は頂点数 |
2D/3Dポリライン(スプライン) - 閉じている場合 | 2次、3次とも始点は 0.0、終点は2次3次とも 8(N-1) (N≧3):N は頂点数(閉じている終点も含む) |
スプライン(フィット) | 始点を 0.0、終点はフィット点を直線で結んだ直線距離の合計。拡大縮小しても以前の【パラメータ】が保存されるが、フィット点を移動すると新しい距離で【パラメータ】が計算される |
スプライン(制御点) | 始点を 0.0 、終点は開いている場合 1 (2≦N≦3) N-3 (N≧4):N は制御点数、閉じている場合 2 (N=3) N-2 (N≧4):N は制御点数(閉じている終点も含む) |
らせん | EXPLODE コマンドで【分解】して変換できるスプライン(フィット)に準じる |
円、楕円 | 始点を 0.0 、終点は 2π の固定値 |
円弧 | それぞれ始点と終点の角度、ラジアン |
放射線、構築線 | 端点は 0.0、無限遠点は nil |
始点の【パラメータ】は多くの場合 0.0 ですが、円弧の場合は異なります。
ライトウェイトポリラインなどの例でも明らかなように、等間隔の【パラメータ】は図形上等距離を表しません。
AutoLISP関数 |
---|
(vlax-curve-getParamAtPoint curve-obj point) |
curve-obj:【図形名】、またはVLAオブジェクト point:リスト |
指定された点(WCS)でのカーブのパラメータを返します。 |
戻り値:実数、またはnil |
vlax-curve-getParamAtPoint関数は、カーブ上の点からその位置の【パラメータ】の値を得ます。
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-getParamAtPoint ename point))) )
実行すると、例えば以下のように表示されます。
図形を選択(選択なしで終了)[最後(L)]:
LINE : 選択点のパラメータ 102.016
図形を選択(選択なしで終了)[最後(L)]:
LWPOLYLINE : 選択点のパラメータ 3.41157
図形を選択(選択なしで終了)[最後(L)]:
POLYLINE : 選択点のパラメータ 0.535942
図形を選択(選択なしで終了)[最後(L)]:
SPLINE : 選択点のパラメータ 382.726
図形を選択(選択なしで終了)[最後(L)]:
CIRCLE : 選択点のパラメータ 1.53504
AutoLISP関数 |
---|
(vlax-curve-getParamAtDist curve-obj dist) |
curve-obj:【図形名】、またはVLAオブジェクト dist:実数 |
カーブの始点から指定した距離の位置でのカーブのパラメータを返します。 |
戻り値:実数、またはnil |
vlax-curve-getParamAtDist関数は、始点からの距離に応じたカーブ上の点の【パラメータ】を得ます。
curve-obj 引数には、調べたいカーブの【図形名】か VLA オブジェクトを指定します。
dist 引数は、始点からの距離を指定します。
戻り値は該当の距離の【パラメータ】ですが、距離がカーブの長さを上回っている場合、nil と返ってきたり 0.0 と返ってきたり、あるいは何らかの値が返ってきたりとエラーの場合の戻り値は様々です。
注意点として、ポリラインで終点の距離を指定して終点の【パラメータ】を得ようとすると nil となりますので、【パラメータ】を正しく得られたか確認が必要です。終点に十分近ければ、直接終点の【パラメータ】を得るように、次のように関数をラップして使う方が使い勝手が良いでしょう。
(defun curve:param:dist (ename dist / clength) (setq clength (vlax-curve-getDistAtParam ename (vlax-curve-getEndParam ename) ) ) (if (equal dist clength (* clength (expt 10.0 -10))) (vlax-curve-getEndParam ename) (vlax-curve-getParamAtDist ename dist) ) )
下は、図形を選択すると、図形タイプと長さを 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) endParam (vlax-curve-getEndParam ename) ) (prompt "\n") (prompt (cdr (assoc 0 edata))) (if (and startParam endParam) (foreach dist (ParamList 0.0 (vlax-curve-getDistAtParam ename endParam) 10.0 ) (prompt "\ndist : ") (prompt (vl-princ-to-string dist)) (prompt " -> param : ") (prompt (vl-princ-to-string (curve:param:dist ename dist))) ) ) )
実行すると、例えば以下のように表示されます。
図形を選択(選択なしで終了)[最後(L)]:
POLYLINE
dist : 0.0 -> param : 0.0
dist : 0.583168 -> param : 3.21975
dist : 1.16634 -> param : 6.36603
dist : 1.7495 -> param : 9.63397
dist : 2.33267 -> param : 12.7803
dist : 2.91584 -> param : 16.0
dist : 3.49901 -> param : 19.2197
dist : 4.08217 -> param : 22.366
dist : 4.66534 -> param : 25.634
dist : 5.24851 -> param : 28.7803
dist : 5.83168 -> param : 32.0
図形を選択(選択なしで終了)[最後(L)]:
SPLINE
dist : 0.0 -> param : 0.0
dist : 1.25149 -> param : 1.19578
dist : 2.50298 -> param : 2.29018
dist : 3.75447 -> param : 3.36374
dist : 5.00596 -> param : 4.52183
dist : 6.25745 -> param : 5.66729
dist : 7.50894 -> param : 6.74392
dist : 8.76043 -> param : 7.74299
dist : 10.0119 -> param : 9.14173
dist : 11.2634 -> param : 10.2976
dist : 12.5149 -> param : 11.5116