AutoCAD Civil 3D には、2D ポリラインを3D ポリラインに変換するコマンドと、3D ポリラインを2D ポリラインに変換するコマンドがありますが、AutoCAD 他にはありません。
LISPでライトウェイトポリラインを3Dポリラインに変換するコマンドを作ってみました。
;;; ----------------------------------------------------------
;;; 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)
)
- 特定の図形を複数選択する方法
- コマンドと関数の切り分け
- vlax-curve 関数の使用法
- 可変長のコマンド引数の渡し方
0 件のコメント:
コメントを投稿