申请选择封闭的PL线或圆,则与这些封闭的PL线或圆相交的其它line、arc被修改到“临时
本帖最后由 lengliqun 于 2011-5-22 14:15 编辑选择封闭的PL线或圆,则与这些封闭的PL线或圆相交的其它line、arc被修改到“临时图层5”,测试文件以5楼为准。
(defun ss2lst (sel / n l)
(repeat (setq n (sslength sel))
(setq n (1- n)
l (cons (ssname sel n) l)
) )
)
;;; for test only
;;; Must existed lyr
(defun c:test (/ ss ptss ss5 lyr)
(cond
((null (setq ss (ssget '(( 0 . "CIRCLE,LwPolyLine"))))))
(T
(setq ptss (mapcar 'acet-ent-geomextents (ss2lst ss))
ss5 (ssadd)
;; lyr "Temp5"
lyr "临时图层5" ; user 自定 lyr 名稱
)
(foreach pts ptss
(mapcar
(function
(lambda (x) (ssadd x ss5))
)
(ss2lst (ssget "c" (car pts) (cadr pts) '((0 . "ARC,LINE"))))
)
)
;; (command "chprop" ss5 "" "La" "Temp5" "")
(command "chprop" ss5 "" "La" lyr "")
))
(princ)
)
试下看
;与圆或封闭的复线相交的直线或弧放到“临时图层5”中 明经 ZZXXQQ 2011.5.22
(defun c:tt ()
(setvar "CMDECHO" 0)
(setq olayer (getvar "CLAYER"))
(if (setq ss (ssget '((0 . "CIRCLE,LWPOLYLINE")))) (progn
(if (not (tblsearch "LAYER" "临时图层5"))
(command ".LAYER" "M" "临时图层5" "")
)
(setq i 0)
(repeat (sslength ss)
(setq ent (entget(ssname ss i)))
(cond
((= (cdr(assoc 0 ent)) "CIRCLE")
(setq pc (cdr(assoc 10 ent0))
r (cdr(assoc 40 ent))
j -1 plst (list))
(repeat 360
(setq plst (cons (polar pc (/ (* (setq j (1+ j)) pi) 180) r) plst))
)
(if (setq ss1 (ssget "F" plst '((0 . "ARC,LINE"))))
(command ".CHPROP" ss1 "" "LA" "临时图层5" "")
)
)
((and (= (cdr(assoc 0 ent)) "LWPOLYLINE")
(> (rem (cdr(assoc 70 ent)) 2) 0))
(setq plst (list))
(foreach x ent (if (= (car x) 10) (setq plst (cons (cdr x) plst))))
(if (setq ss1 (ssget "F" plst '((0 . "ARC,LINE"))))
(command ".CHPROP" ss1 "" "LA" "临时图层5" "")
)
)
)
(setq i (1+ i))
)
))
(setvar "CLAYER" olayer)
(setvar "CMDECHO" 1)
(princ)
)
本帖最后由 lengliqun 于 2011-5-22 14:15 编辑
感谢ZZXXQQ的出手相助,程序cad2004下可执行,但对与圆相交的线无效,对与封闭PL相交的线个别有一个方向无效。测试文件以5楼为准。 依楼主您的第二个 测试.dwg
分上下而言
上图 外框上下 各是完整的弧段
下图 外框下 是完整的弧段
但
下图 外框上 则是由相连7弧段 + 一零长度的弧段!?
多谢4楼兄弟,上面的测试图由于本人粗心产生笔误,自我批评一下,上传新的测试图。
6楼程序CAD2004测试可用,感谢Andyhon,感谢ZZXXQQ。 谢谢分享啊!
页:
[1]