77077 发表于 2014-7-4 13:30 
求源码,学习学习。。
 - ;;返回绘图区坐标点
- ;;from mjtd
- (defun zj-get-scr-coods (/ half_h half_w pt_cen lst ptx pty)
- (setq pt_cen (trans (GETVAR "VIEWCTR") 1 2)
- ptx (car pt_cen)
- pty (cadr pt_cen)
- half_h (* 0.5 (GETVAR "VIEWSIZE"))
- half_w (* half_h (/ (car (GETVAR "SCREENSIZE")) (cadr (GETVAR "SCREENSIZE"))))
- )
- (LIST (LIST (- ptx half_w) (- pty half_h)) (LIST (+ ptx half_w) (+ pty half_h)))
- )
- ;;取组码值
- (defun sk_dxf(ent code)(cdr(assoc code(entget ent))))
- ;;选择集或图元名转句柄列表
- ;;code by edata@mjtd
- (defun sk_h5ss->lst(ss / en i lst)
- (cond
- ((= (type ss) 'ENAME)(list (sk_dxf ss 5)))
- ((= (type ss) 'PICKSET)
- (setq i -1 lst '())
- (while(setq en(ssname ss(setq i(1+ i))))
- (setq lst(cons (sk_dxf en 5) lst))
- )
- (if(/= lst '())(reverse lst))
- )
- )
- )
- ;;主程序
- ;;点选红色闭合多段线(图层过滤自己修改)
- ;;code by edata@mjtd
- ;;2014-7-4
- (defun c:tt(/ a b bak_h5lst2 h5lst1 h5lst2 h5_eq loop p0 ss1 ss2)
- (if(and(setq p0(getpoint "请在红色闭合多段线内指定一点:"))
- (setq ss1(ssget "f"(list p0(car(zj-get-scr-coods)))'((0 . "lwpolyline")(62 . 1)(70 . 1))))
- (setq ss2(ssget "f"(list p0(cadr(zj-get-scr-coods)))'((0 . "lwpolyline")(62 . 1)(70 . 1))))
- )
- (progn
- (setq h5lst1(sk_h5ss->lst ss1)
- h5lst2(sk_h5ss->lst ss2)
- loop t
- )
- (while(and loop (setq a(car h5lst1)))
- (setq bak_h5lst2 h5lst2)
- (while(and loop (setq b(car bak_h5lst2)))
- (if (= a b)(setq h5_eq a loop nil))
- (setq bak_h5lst2(cdr bak_h5lst2))
- )
- (setq h5lst1(cdr h5lst1))
- )
- (if h5_eq
- (progn
- ;(redraw (ssname ss1 0) 3)
- (sssetfirst nil (ssadd(handent h5_eq)) )
- )
- (alert "未找到红色闭合多段线")
- )
- )
- (alert "未找到红色闭合多段线")
- )
- (princ)
- )
-
|