yhly555 发表于 2016-2-21 09:44:58

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

; 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)
)
以上代码是已知一个点和很多封闭的多段线,快速确定出包含这个点的多段线,但默认选择面积最大那个,而不是最小那个。
即运行结果是选择B,而我想选择A,这要如何实现呢?谢谢!


陈进佳 发表于 2016-2-21 10:31:00

开源代码
;|函数功能,寻找包含pt点的最小封闭多边形
使用格式,(n5-minpl pt);1,PT是个坐标情况下;如果存在返回图元名,否则nil
(n5-minpl pt);1,PT是个坐标表情况下;如果存在返回与坐标表对应的图元名表,否则nil|;
(defun n5-minpl(pt / lst nlst)
(cond
((/= (type (car pt)) 'LIST)
   (setq lst(mapcar 'cadr(ssnamex (ssget "f" (list pt (list (car pt)(+ 1000000(cadr pt))))))))
   (setq lst (vl-remove-if-not'(lambda(x)(AND(= "LWPOLYLINE"(CDR(ASSOC 0 (ENTGET x))))(MEMBER (CDR(ASSOC 70 (ENTGET X)))(LIST 1 129))))LST))
   (IF LST (SETQ NLST(CAR LST)) (SETQ NLST NIL)))
((= (type (car pt)) 'LIST)(FOREACH A PT (SETQ NLST (CONS (N5-MINPL A)NLST))))
        )
   (if (= 'LIST (TYPE NLST))(SETQ NLST(REVERSE nLST)) NLST)

)

陈进佳 发表于 2016-2-21 10:37:01

当然这个还是存在挺大的缺陷,不过够用了

yhly555 发表于 2016-2-21 15:00:56

陈进佳 发表于 2016-2-21 10:31 static/image/common/back.gif
开源代码

真帅,谢谢!

yhly555 发表于 2016-2-21 16:08:20

陈进佳 发表于 2016-2-21 10:37 static/image/common/back.gif
当然这个还是存在挺大的缺陷,不过够用了

试用了,缺陷还是蛮大的,比如说当闭合多段线不是包含关系的时候就会产生错选。

陈进佳 发表于 2016-2-21 17:53:21

yhly555 发表于 2016-2-21 16:08 static/image/common/back.gif
试用了,缺陷还是蛮大的,比如说当闭合多段线不是包含关系的时候就会产生错选。

对,已经做了处理
。不过不想上传了.累

远方小山 发表于 2016-3-9 11:02:25

陈进佳 发表于 2016-2-21 17:53 static/image/common/back.gif
对,已经做了处理
。不过不想上传了.累

大神,上传一下呗,学习一下,正好我现在也在编这个小程序

陈进佳 发表于 2016-3-9 14:47:42

远方小山 发表于 2016-3-9 11:02 static/image/common/back.gif
大神,上传一下呗,学习一下,正好我现在也在编这个小程序

不愿找了。。。。。
页: [1]
查看完整版本: 关于点与多个闭合多段线的关系