这是以前为了解决设计中的块沿线布置写的一个,当时写的很笨,所以现在一直用别人的,不过可以发上来参考一下
(defun c:kll () (if (= tgh3 nil) (setq tgh3 9) ) (setq aa2 1 er 2 ) (setvar "osmode" 0) (setvar "CMDECHO" 0) (while (/= er 1) (setq aa1 (entsel "\n请选择一个块:")) (if (= aa1 nil) (alert "你没选到东西,请重新选.
退出按Esc") (setq er 1) ) ) (setq a2 (car aa1)) (redraw a2 3) (setq a4 (entget a2) aa6 (assoc 2 a4) s1 (cdr aa6) xx1 (cdr (assoc 43 a4)) x1 (cdr (assoc 10 a4)) )
(princ "\n请输入块分布间距<") (princ tgh3) (princ ">:") (setq p3 (getreal)) (redraw a2 4) (if (= p3 nil) (setq p3 tgh3) ) (setq tgh3 p3) (while (setq aa2 (entsel "\n请选择一条多段线:")
)
(setq a2a (car aa2))
(if (= aa2 nil) (progn
(exit) ) ) (setvar "osmode" 0) (setvar "CMDECHO" 0) (command "_measure" a2a "b" s1 "y" p3) (setq p1 (ssget "_P")) (setq bb1 (getstring "\n块布置的方向正确吗?(y/n)<y>:"))
(if (or (= bb1 "n") (= bb1 "N")) (progn (setq p2 (sslength p1) p3a (- p2 1) ) (repeat p2 (setvar "osmode" 0) (setvar "CMDECHO" 0) (setq ss (ssname p1 p3a)) (setq a4 (entget ss)
x1 (cdr (assoc 10 a4)) xx2 (cdr (assoc 43 a4)) )
(command "_rotate" ss "" x1 180) (if (/= xx1 xx2) (command "_scale" ss "" x1 xx1) ) (setq p3a (- p3a 1)) ) ) (progn (setq p2 (sslength p1) p3a (- p2 1) ) (setq ss (ssname p1 p3a)) (setq a4 (entget ss)
x1 (cdr (assoc 10 a4)) xx2 (cdr (assoc 43 a4)) ) (if (/= xx1 xx2) (repeat p2 (setvar "osmode" 0) (setvar "CMDECHO" 0) (setq ss (ssname p1 p3a)) (setq a4 (entget ss)
x1 (cdr (assoc 10 a4)) xx2 (cdr (assoc 43 a4)) )
(command "_scale" ss "" x1 xx1) (setq p3a (- p3a 1)) ) ) ) ) )
(princ) )
|