乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 122|回复: 6

点与多个闭合多段线的关系

[复制链接]

4

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
21
发表于 2014-6-3 10:40:00 | 显示全部楼层 |阅读模式
求教:已知一个点,和很多封闭的多段线,如果不用遍历的方法,怎么能快速确定出包含这个点的多段线呢?
(PS:这些多段线彼此没有交集)
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2014-6-3 19:08:00 | 显示全部楼层
从点出发,Fence方式选择
回复

使用道具 举报

4

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
21
发表于 2014-6-3 19:20:00 | 显示全部楼层

其他点怎么确定呢?
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2014-6-3 22:45:00 | 显示全部楼层
随便取视口的一个角点呀,或者取个很远很远的点
第一点是已知点,这样选择出来的选择集的第一个封闭多段线应该就是想要的
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2014-6-3 22:47:00 | 显示全部楼层
不过我没这样试过,只是想应该可以
回复

使用道具 举报

2

主题

34

帖子

9

银币

初来乍到

Rank: 1

铜币
42
发表于 2015-6-12 11:05:00 | 显示全部楼层
GreenWood
感觉edata大大的可能会好用些,选择的少,只选屏幕范围内~迈克大师的全部选,有点多了~
麦克利大师  

; a way to find a closed polyline by point inside
;Lee Mac
(defun polyfrominsidepoint ( p / e i r s )
    (if
        (setq i -1 s
            (ssget "_X"
                (list '(0 . "LWPOLYLINE") '(-4 . "&=") '(70 . 1)
                    (if (= 1 (getvar 'cvport))
                        (cons 410 (getvar 'ctab))
                       '(410 . "Model")
                    )
                )
            )
        )
        (while (and (null r) (setq e (ssname s (setq i (1+ i)))))
            (if (raycast p (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) (entget e))))
                (setq r e)
            )
        )
    )
    r
)
(defun raycast ( p l )
    (= 1
        (logand 1
            (length
                (vl-remove 'nil
                    (mapcar
                       '(lambda ( a b ) (inters p (mapcar '+ p '(1e8 0.0)) a b))
                        (cons (last l) l)
                        l
                    )
                )
            )
        )
    )
)
(defun c:SelPolylinebyPoint ( / e p )
    (if (setq p (getpoint "\nSpecify point: "))
        (if (setq e (polyfrominsidepoint p))
            (sssetfirst nil (ssadd e))
            (princ "\nNo polyline found.")
        )
    )
    (princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;再送一个edata大大的程序
;;返回绘图区坐标点
;;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)
  )
回复

使用道具 举报

23

主题

100

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
191
发表于 2016-1-21 21:20:00 | 显示全部楼层

这有个问题,为什么当有多个闭合多段线(包含关系)的时候,默认选择最大那个,而不是最小那个?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 10:00 , Processed in 0.168059 second(s), 75 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表