明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 77077

[已解答] 点选多段线

[复制链接]
发表于 2014-7-4 10:30:23 | 显示全部楼层
一步走不到就多走一步
发表于 2014-7-4 11:50:31 | 显示全部楼层
77077 发表于 2014-7-4 10:16
有些时候,entsel不是那么好用.
如下图这种情况,你叫我如何能快速选中中间红色那个方框呢?所以才诞生了如 ...

可以 ssget 选择
 楼主| 发表于 2014-7-4 13:00:16 | 显示全部楼层
ssget 选择的话,可能会选中相邻的红色多段线。
比如说我发出来那个色块图,怎么才能确保选中的是中间那个呢?

点评

窗选LWPOLYLINE即可。  发表于 2014-7-4 14:11
发表于 2014-7-4 13:22:14 | 显示全部楼层

不知道是不是这样。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2014-7-4 13:23:33 | 显示全部楼层
-HATCHEDIT OBJ "B" "P" "Y"
重建出来的边界居然是断的。。。
 楼主| 发表于 2014-7-4 13:28:47 | 显示全部楼层
edata 发表于 2014-7-4 13:22
不知道是不是这样。

没错,就是要这样的效果~
 楼主| 发表于 2014-7-4 13:30:23 | 显示全部楼层
edata 发表于 2014-7-4 13:22
不知道是不是这样。

求源码,学习学习。。
发表于 2014-7-4 14:09:53 | 显示全部楼层
77077 发表于 2014-7-4 13:30
求源码,学习学习。。

  1. ;;返回绘图区坐标点
  2. ;;from mjtd
  3. (defun zj-get-scr-coods (/ half_h half_w pt_cen lst ptx pty)
  4.    (setq pt_cen (trans (GETVAR "VIEWCTR") 1 2)
  5.    ptx (car pt_cen)
  6.    pty (cadr pt_cen)
  7.       half_h (* 0.5 (GETVAR "VIEWSIZE"))
  8.    half_w (* half_h (/ (car (GETVAR "SCREENSIZE")) (cadr (GETVAR "SCREENSIZE"))))
  9.    )
  10.   (LIST (LIST (- ptx half_w) (- pty half_h)) (LIST (+ ptx half_w) (+ pty half_h)))  
  11. )
  12. ;;取组码值
  13. (defun sk_dxf(ent code)(cdr(assoc code(entget ent))))
  14. ;;选择集或图元名转句柄列表
  15. ;;code by edata@mjtd
  16. (defun sk_h5ss->lst(ss / en i lst)
  17.   (cond
  18.       ((= (type ss) 'ENAME)(list (sk_dxf ss 5)))
  19.       ((= (type ss) 'PICKSET)
  20.        (setq i -1 lst '())
  21.        (while(setq en(ssname ss(setq i(1+ i))))
  22.          (setq lst(cons (sk_dxf en 5) lst))         
  23.          )
  24.        (if(/= lst '())(reverse lst))
  25.        )
  26.       )
  27.   )

  28. ;;主程序
  29. ;;点选红色闭合多段线(图层过滤自己修改)
  30. ;;code by edata@mjtd
  31. ;;2014-7-4
  32. (defun c:tt(/ a b bak_h5lst2 h5lst1 h5lst2 h5_eq loop p0 ss1 ss2)
  33.   (if(and(setq p0(getpoint "请在红色闭合多段线内指定一点:"))
  34.          (setq ss1(ssget "f"(list p0(car(zj-get-scr-coods)))'((0 . "lwpolyline")(62 . 1)(70 . 1))))
  35.          (setq ss2(ssget "f"(list p0(cadr(zj-get-scr-coods)))'((0 . "lwpolyline")(62 . 1)(70 . 1))))
  36.          )
  37.     (progn
  38.       (setq h5lst1(sk_h5ss->lst ss1)
  39.             h5lst2(sk_h5ss->lst ss2)
  40.             loop t
  41.             )
  42.       (while(and loop (setq a(car h5lst1)))
  43.         (setq bak_h5lst2 h5lst2)
  44.         (while(and loop (setq b(car bak_h5lst2)))
  45.           (if (= a b)(setq h5_eq a loop nil))
  46.           (setq bak_h5lst2(cdr bak_h5lst2))
  47.           )
  48.         (setq h5lst1(cdr h5lst1))
  49.         )
  50.     (if h5_eq
  51.       (progn
  52.         ;(redraw (ssname ss1 0) 3)
  53.         (sssetfirst nil (ssadd(handent h5_eq)) )
  54.         )
  55.       (alert "未找到红色闭合多段线")
  56.       )   
  57.     )
  58.     (alert "未找到红色闭合多段线")
  59.     )
  60.   (princ)
  61.   )
  62.    
 楼主| 发表于 2014-7-4 16:59:04 | 显示全部楼层
给力,正在研究代码,待会写学习报告~
 楼主| 发表于 2014-7-4 17:49:11 | 显示全部楼层
edata版的,完全能满足要求,用起来也很方便.不过我还是没看懂一部分~
      (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))
        )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-24 09:22 , Processed in 0.152215 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表