本帖最后由 changyiran 于 2012-6-8 13:51 编辑
我发现用选择集就可以证明点是位于多边形内还是外,为什么那么多人还要用射线法等等,下面是我的证明:
 - (defun fjdb(en / x);返回轻量多段线的点表
- (vl-remove-if'not
- (mapcar'(lambda(x)(if(=(car x)10)(cdr x)))(entget en));mapcar返回的是一个表,lambda构造一个匿名函数
- )
- (defun pd(pt en)
- (command"point"pt)
- (setq dbxvla(vlax-ename->vla-object en))
- (if(equal(distance pt(vlax-curve-getClosestPointTo en pt))0 1e-6)
- (setq pdz 0);点在多边形上
- (progn
- (setq ss(ssget"wp"(fjdb en)(list'(0 . "point")(list 10 (car pt)(cadr pt)))))
- (if ss(setq pdz 1)(setq pdz 2))
- )
- )
- )
- )
其中,0代表位于多边形上,1代表多边形内,2代表多边形外
是不是小弟哪点没考虑周全,还是这种方法有重大风险,可我怎么没发现呢,望高手们指教!
声明下,我指的多边形不牵涉弧。
|