カーブ関数

検査

AutoLISP関数
(vlax-curve-isClosed curve-obj)
curve-obj:【図形名】、またはVLAオブジェクト
カーブが閉じているかどうかを調べます。
戻り値:nil、またはnil以外

vlax-curve-isClosed 関数は、カーブが閉じているかどうかを調べます。

curve-obj 引数には、調べたいカーブの【図形名】か VLA オブジェクトを指定します。
戻り値は、閉じていれば nil 以外を、開いていれば nil を返します。

下は、図形を選択すると、図形タイプと、閉じているか開いているかを表示するプログラムです。

(while
  (setq ename (car (entsel "\n図形を選択(選択なしで終了)[最後(L)]:")))
   (setq edata (entget ename))
   (prompt "\n")
   (prompt (cdr (assoc 0 edata)))
   (if (vlax-curve-isClosed ename)
     (prompt " : カーブは閉じています")
     (prompt " : カーブは開いています")
   )
)

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

図形を選択(選択なしで終了)[最後(L)]:
LINE : カーブは開いています
図形を選択(選択なしで終了)[最後(L)]:
LWPOLYLINE : カーブは閉じています
図形を選択(選択なしで終了)[最後(L)]:
POLYLINE : カーブは開いています
図形を選択(選択なしで終了)[最後(L)]:
CIRCLE : カーブは閉じています
図形を選択(選択なしで終了)[最後(L)]:
ELLIPSE : カーブは閉じています
図形を選択(選択なしで終了)[最後(L)]:
HELIX : カーブは開いています
図形を選択(選択なしで終了)[最後(L)]:
ARC : カーブは開いています
AutoLISP関数
(vlax-curve-isPlanar curve-obj)
curve-obj:【図形名】、またはVLAオブジェクト
カーブが平面上に存在するかどうかを調べます。
戻り値:nil、またはnil以外

vlax-curve-isPlanar 関数は、カーブがひとつの平面上に載っているかどうかを調べます。平面は、現在の【作図平面】等とは無関係で、任意の平面となります。

curve-obj 引数には、調べたいカーブの【図形名】か VLA オブジェクトを指定します。
戻り値は、一つの平面上に載っていれば nil 以外を、載っていなければ nil を返します。

下は、図形を選択すると、図形タイプと、任意の平面上の図形かを表示するプログラムです。

(while
  (setq ename (car (entsel "\n図形を選択(選択なしで終了)[最後(L)]:")))
   (setq edata (entget ename))
   (prompt "\n")
   (prompt (cdr (assoc 0 edata)))
   (if (vlax-curve-isPlanar ename)
     (prompt " : 平面上の図形です")
     (prompt " : 平面上の図形ではありません")
   )
)

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

図形を選択(選択なしで終了)[最後(L)]:
LINE : 平面上の図形です
図形を選択(選択なしで終了)[最後(L)]:
LWPOLYLINE : 平面上の図形です
図形を選択(選択なしで終了)[最後(L)]:
SPLINE : 平面上の図形ではありません
図形を選択(選択なしで終了)[最後(L)]:
CIRCLE : 平面上の図形です
図形を選択(選択なしで終了)[最後(L)]:
HELIX : 平面上の図形ではありません
図形を選択(選択なしで終了)[最後(L)]:
ELLIPSE : 平面上の図形です
図形を選択(選択なしで終了)[最後(L)]:
ARC : 平面上の図形です
AutoLISP関数
(vlax-curve-isPeriodic curve-obj)
curve-obj:【図形名】、またはVLAオブジェクト
カーブがパラメータを周期的なものとして受け付けるかどうかを調べます。
戻り値:nil、またはnil以外

vlax-curve-isPeriodic 関数は、指定されたカーブが【パラメータ】を周期的なものとして受け付けるかどうかを調べます。【パラメータ】については後述します。【パラメータ】を周期的なものとして扱うというのは、例えばカーブの【パラメータ】の範囲が 0.0 から 2.0 だったとします。そこに【パラメータ】の値を 3.0 として与えると、1.0 と解釈されるということです。周期的な【パラメータ】を受け付けるカーブは閉じた図形であることを意味すると考えて差し支えありませんが、例外として閉じた 2D/3D ポリラインは周期的な【パラメータ】を受け付けません。

curve-obj 引数には、調べたいカーブの【図形名】か VLA オブジェクトを指定します。
戻り値は、周期的【パラメータ】を受け付けるならば nil 以外を、そうでなければ nil を返します。

以降の関数で【パラメータ】の値の範囲が始点と終点の範囲を超えていても使えるものがありますが、この判別関数を使って必要に応じて【パラメータ】の値を丸めるよりも、最初から値の範囲のチェックを行ってすべての図形タイプで丸めておいた方が簡単なプログラムとなるでしょう。

下は、図形を選択すると、図形タイプと、周期的カーブかどうかを表示します。

(while
  (setq ename (car (entsel "\n図形を選択(選択なしで終了)[最後(L)]:")))
   (setq edata (entget ename))
   (prompt "\n")
   (prompt (cdr (assoc 0 edata)))
   (if (vlax-curve-isPeriodic ename)
     (prompt " : 周期カーブです")
     (prompt " : 周期カーブではありません")
   )
)

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

図形を選択(選択なしで終了)[最後(L)]:
LINE : 周期カーブではありません
図形を選択(選択なしで終了)[最後(L)]:
LWPOLYLINE : 周期カーブです
図形を選択(選択なしで終了)[最後(L)]:
POLYLINE : 周期カーブではありません
図形を選択(選択なしで終了)[最後(L)]:
SPLINE : 周期カーブです
図形を選択(選択なしで終了)[最後(L)]:
CIRCLE : 周期カーブです
図形を選択(選択なしで終了)[最後(L)]:
ELLIPSE : 周期カーブです