ライトウェイトポリラインを3Dポリラインに変換するコマンドをLISPで作成しました。
LISPの可能性を体感してください。
;;; ----------------------------------------------------------
;;; conv3dpoly.lsp
;;; (C) Copyrights 2024 Graebert Japan LLC.
;;; ----------------------------------------------------------
;;1個のライトウェイトポリラインを変換
(defun CONV3DPOLY ( en / el la fl i lp )
;図形リストを取得する
(setq el (entget en)
la (cdr (assoc 8 el))
fl (cdr (assoc 70 el)))
;頂点の数を返す
(setq i (vlax-curve-getendparam en))
;コマンドパラメータの最後はEnterである
(setq lp '(""))
;閉じたポリラインを閉じたポリラインとして処理するとき
;(if (/= 0 (logand 1 fl))
; (setq i (- i 1.0) lp '("C"))
;)
;頂点を最後から最初まで取得する
(while (not (minusp i))
;頂点を前に詰めていく
(setq lp (cons (vlax-curve-getpointatparam en i) lp))
(setq i (- i 1.0))
)
;コマンド名を前に詰める
(setq lp (cons "3dpoly" lp))
;画層を切り替え
(setvar "CLAYER" la)
;コマンドを実行
(apply 'command lp)
;ライトウエイトポリラインは削除する
(entdel en)
)
;;複数のライトウェイトポリラインをまとめて変換
(defun C:CONV3DPOLY ( / ss cl i n en )
; ライトウェイトポリラインのみ取得
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
(progn
;画層を元に戻すのに必要
(setq cl (getvar "CLAYER"))
;選択したすべてのライトウェイトポリラインについて
(setq i 0 n (sslength ss))
(while (< i n)
;図形名を取得
(setq en (ssname ss i))
;3Dポリラインに変換
(CONV3DPOLY en)
(setq i (1+ i))
)
(setvar "CLAYER" cl)
)
)
(princ)
)
使い方
- conv3dpoly.lspというファイル名でサポートパスに保存します。
- LOADAPPLICATIONコマンドで図面にロードします。
- CONV3DPOLY コマンドを実行します。
- 複数のライトウェイトポリラインを選択すると、それらは3Dポリラインに変換されます。
補足
- 上のコードは閉じたライトウェイトポリラインを始点と終点が同一点上になる開いた3Dポリラインに変換します。
- 閉じたライトウェイトポリラインを閉じた3Dポリラインに変換するには、コメントになっている部分を有効にします。