katamoto 发表于 2014-10-22 15:42:28

如和判定某一个点是否在由多段线组成的闭合框内?

本帖最后由 katamoto 于 2014-10-22 20:13 编辑

背景:用模型空间获取唯一的一个元素,就是多段线(不是直线)组合成的闭合框,现在要判断某一个指定点是否是在这个闭合框内,如何实现,谢谢大侠
(defun c: ()
(vl-load-com)
(setq myacad (vlax-get-acad-object))
(setq mydoc (vla-get-activedocument myacad))
(setq myms (vla-get-modelspace mydoc)
(setq myen (vla-item myms 0))

(setq pt (list x0 y0 ))
......
......
)

请帮我补充省略号的内容吧,谢谢。可以用GetBoundingBox方法吗,如果多边形外框不规则有凹进去的可以么

katamoto 发表于 2014-10-22 20:07:28

自己给自己钉一下,以防止被沉下去。。。。

lyqiezi 发表于 2014-10-22 20:51:02

,曲线救国,在要确认的点上画个point,特殊图层,用多线段端点作为ssget的的框选点,如果选得到,就在里面,否则就不在

katamoto 发表于 2014-10-22 21:13:46

这个倒是一个有意思的思路啊,我还真没想到,搜索了一下也没看到有人用过这个方法。。。

ssget框选用2个点表示矩形范围的常见,用多个点框选也可以么,

学的不够,提出问题如果有些小白,莫介意哈。

ZZXXQQ 发表于 2014-10-22 21:28:50

(defun ptinpl (pt)
(if (and (setq s1 (entsel "\n选择多义线: "))
         (setq ent (entget(car s1)))
         (= (cdr(assoc 0 ent)) "LWPOLYLINE")) (progn
(setq ptlst (list))
(foreach x ent (if (= (car x) 10) (setq ptlst (cons (cdr x) ptlst))))
(setq anglst (mapcar '(lambda (x) (angle pt x)) ptlst))
(setq ang (apply '+ (mapcar '- anglst (cdr anglst))))
(equal ang (+ pi pi) 1e-5)
))
)

自贡黄明儒 发表于 2014-10-22 22:03:22

本帖最后由 自贡黄明儒 于 2014-10-23 11:32 编辑

用offset,可能是不错的选择
;;164.43 [功能] 点在封闭多段线内返回T;线上0;外nil
;;(PtInorOut (car(entsel))(getpoint))
(defun PtInorOut (en p / AREA AREA1 EN1 PP)
(setq pp (vlax-curve-getclosestpointto en (trans p 1 0)))
(if (equal pp p 1e-8)
    0
    (progn
      (setq area (vlax-get (vlax-ename->vla-object en) 'area))
      (command "_.offset" "" en p "")(setq en1(entlast))
      (setq area1 (vlax-get (vlax-ename->vla-object en1) 'area))
      (entdel en1)
      (> area1 area)
    )
)
)

katamoto 发表于 2014-10-22 22:48:44

ZZXXQQ 发表于 2014-10-22 21:28 static/image/common/back.gif


能否把最后两行简单解释一下,看了一下,关于这2行其内的算法和语句不是很懂,谢谢。

lsjj 发表于 2014-10-22 23:32:43

轉一圈360度

zzyong00 发表于 2014-10-22 23:42:49

射线法,是常用的方法

lyqiezi 发表于 2014-10-23 00:03:54

本帖最后由 lyqiezi 于 2014-10-23 00:05 编辑

(ssget "wp" ptlist)可以选择
还有一个思路,找出距离目标点最近的一个端点,将目标点插在最近端点的前后各一次,计算n+1点多线段围成的面积(原先为n点多线段),只要有一次面积比原面积小,判断为框框内,两次都大,判断为框框外。
当然,这个只是一个猜想,也不懂怎么证明
页: [1] 2
查看完整版本: 如和判定某一个点是否在由多段线组成的闭合框内?