コマンド名はpldv ポリラインで閉じた四角(辺が水平&垂直)にしか対応しません。
斜めになっている場合は、UCSで軸を合わせてから使用してください。
ただし、平行四辺形でも、そのときのUCSに対して水平or垂直な辺のみに実行されます。
(defun c:pldv ( / pitv pith ss ent flg pt_list i pt1 pt2 dpt pit e)
(setq pith (getreal "\n縦の分割数を入力:"))
(setq pitv (getreal "\n横の分割数を入力:"))
(while (= ss nil)
(prompt "\n分割する図形(ポリラインの長方形のみ)を選択:")
(setq ss (ssget "_:S" '((0 . "*POLYLINE")(70 . 1)(90 . 4))))
)
(setq ent (entget (ssname ss 0)))
(repeat 4
(setq pt_list (append pt_list (list (trans (cdr (assoc 10 ent)) 0 1)))) ;頂点のリスト
(setq ent (cdr (member (assoc 10 ent) ent)))
)
(setq pt_list (append pt_list (list (car pt_list))))
(setq i 0)
(repeat 4
(setq pit nil)
(setq pt1 (nth i pt_list))
(setq pt2 (nth (+ i 1) pt_list))
;(setq dpt (mapcar '(lambda (x1 x2) (abs (- x1 x2))) pt1 pt2)) ;デルタx デルタy
(cond
((= (car pt1) (car pt2))
(setq pit pith)
)
((= (cadr pt1) (cadr pt2))
(setq pit pitv)
)
(T nil)
)
(if (/= pit nil)
(progn
(entmake
(list
(cons 0 "LINE")
(cons 10 (trans pt1 1 0))
(cons 11 (trans pt2 1 0)))
)
(setq e (entlast))
(command-s "divide" e pit)
(entdel e)
)
)
(setq i (+ i 1))
)
(princ)
)
- LUNE
- 2024/11/21 (Thu) 10:20:12