自贡黄明儒 发表于 2014-2-19 10:44 
(ssget "_WP")不行的话,你就取多段线上的点,来判断。(ssget "_CP")选择到的对象,如果有一点在封闭曲线内 ...
经过黄大的提醒,突然想到好像之前看过一篇判断点是否在多段线内的帖子,呵呵,就是"llsheng_73"大大写的那篇用选择集判断的那个,看过之后幡然醒悟,于是小弟根据自己平时的工作,就有了一个小小的思路:依次得到多段线和需要判断的多段线的顶点表,然后在需要判断的多段线的顶点上依次创建点,只要有一个点在内,就判断其在内,所以最后判断(ssget "_wp" plist)是否存在,若存在就判断为在内,若不存在就判断在外。
于是,就有了:
 - (defun c:tt()
- (setq en (entget (car (entsel))))
- (setq wbiao nil)
- (foreach lst en
- (if (= 10 (car lst))
- (setq wbiao (append wbiao (list (cdr lst))))
- )
- ) ;此处得到外围多段线的顶点坐标
- (setq ent (entget (car (entsel))))
- (setq pbiao nil)
- (foreach plst ent
- (if (= 10 (car plst))
- (setq pbiao (append pbiao (list (cdr plst))))
- )
- );此处得到需要判断的多段线的顶线坐标
- (setq i 0);初始化变量i准备循环
- (setq panduan nil);初始化变量"puanduan"最后看判断是否存在。
- (repeat (length pbiao);循环开始
- (setq dingdian (nth i pbiao));提取需要判断的多段线的各个顶点
- (entmake (list (cons 0 "POINT") (cons 8 "0") (list 10 (car dingdian) (cadr dingdian) 0)));在顶点处创建点
- (if (setq tuyuanbiao (ssget "_wp" wbiao '((0 . "POINT") (8 . "0"))));判断(ssget "_wp" wbiao)是否有值
- (setq panduan 1);若有值,则将变量"panduan"赋值为1
- )
- (entdel (entlast));删除创建的点
- (setq i (1+ i))
- )
- (if panduan
- (print "在内")
- (print "在外")
- )
- (princ);完了!
- )
写得不好,还请各位看官多多指点!
最后谢谢"llsheng_73"大大的思路,谢谢黄大的提醒 |