本帖最后由 作者 于 2005-12-3 10:30:38 编辑
求助:二维多段线和多段线有什么区别,两者之间能不能互相转换(以及批量转换)?
meflying给我编的这个程序,二维多段线为什么就不能改?
改多段线方向:
(defun c:Rev(/ pl ents i m ptlst ptlst2 item) (setq pl (car (entsel "选择Pline..."))) (setq ents (entget pl)) (setq i 0) (setq ptlst (reverse (member (assoc 10 ents) ents))) (setq ptlst (cdr (member (assoc 10 ptlst) ptlst))) (repeat (/ (length ptlst) 4) (setq ptlst2 (append ptlst2 (list (list (nth i ptlst) (nth (+ i 1) ptlst) (nth (+ i 2) ptlst) (nth (+ i 3) ptlst))))) (setq i (+ i 4)) ) (setq ptlst2 (mapcar '(lambda(x) (subst (cons 42 (- (cdr (assoc 42 x)))) (assoc 42 x) x)) ptlst2)) (setq ptlst2 (apply 'append ptlst2)) (setq i 0 m t ptlst nil) (while m (setq item (nth i (reverse ents))) (setq ptlst (append ptlst (list item))) (if (= (car item) 10) (setq m nil)) (setq i (1+ i)) ) (setq ptlst (reverse (subst (cons 42 (- (cdr (assoc 42 ptlst)))) (assoc 42 ptlst) ptlst))) (setq ptlst2 (cons (car ptlst) ptlst2)) (setq ptlst2 (append ptlst2 (cdr ptlst))) (setq i 0 m (vl-position (assoc 10 ents) ents) ptlst nil) (repeat m (setq ptlst (append ptlst (list (nth i ents)))) (setq i (1+ i)) ) (command "_.undo" "be") (entmod (append ptlst ptlst2)) (command "_.undo" "e") )
|