明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: llsheng_73

多边形多重包含关系的分析

  [复制链接]
发表于 2015-8-10 22:55 | 显示全部楼层
Gu_xl 发表于 2013-4-1 13:06
判断两个多边形之间的关系,可利用面域来判断!
假设将两个多边形转成面域1和面域2,分别计算出面域1和面域 ...

针对此例,感觉不妥
因为这样没办法判断内部其他颜色的多边形到底是哪个白色多边形里面的,况且还得分清楚第一层第二层第三层乃至第四层
小子妄语,G版勿怪
发表于 2015-8-11 10:53 来自手机 | 显示全部楼层
我直接用坐标选择,有就把面积删了,没有就不删。
发表于 2015-8-21 20:02 | 显示全部楼层
$
; 错误: ssget 列表值错误
_$
发表于 2015-8-21 21:19 | 显示全部楼层
llsheng_73 发表于 2013-10-18 12:51
这就是程序的一部分,你可以把它当成一个函数用到你程序中,先测试下返回的表是什么样子自己决定怎么用它 ...
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  2. (defun Plinexy(e / p a b n ob q et d d1 en et) ;;多线段节点坐标(滤掉了多余点,未处理假闭合)
  3.    (setq a(entget e)ob(vlax-ename->vla-object e)et(cdr(assoc 0 a))n 0 p nil d nil)
  4.    (cond((="LWPOLYLINE"et)
  5.          (repeat(length a)(setq b (nth n a) n (+ n 1))
  6.            (if (= 10 (car b))(progn
  7.                                (setq q(list (cadr b) (caddr b))d1(vlax-curve-getDistAtPoint ob q))
  8.                                (if p (if (not(member d1 d)) (setq p (append p (list q))d (append d (list d1))))
  9.                                  (setq p (list q))))
  10.              )))
  11.         ((="POLYLINE"et)
  12.          (SETQ EN (ENTGET (SETQ E (ENTNEXT E))))
  13.          (WHILE (/= (CDR (ASSOC 0 EN)) "SEQEND")
  14.            (SETQ q (CDR (ASSOC 10 EN))d1(vlax-curve-getDistAtPoint ob q)q(reverse(cdr(reverse q))))
  15.            (if p(if (not(member d1 d)) (setq p (append p (list q))d (append d (list d1))))
  16.              (setq p (list q)))
  17.            (SETQ EN (ENTGET (SETQ E (ENTNEXT E)))))
  18.          (setq p(reverse p))
  19.          ))
  20.    P)
  21. ;;;;

  22. (defun SStoES(s / m n e)
  23.   (if s(progn
  24.   (setq n(sslength s)m 0)
  25.   (while(< m n)
  26.     (setq e(if e(append e(list(ssname s m)))(list(ssname s m)))m(1+ m))))
  27.     )e)
  28. (defun dzfx(s / e s1 a b c d l)
  29.   (setq ss(SStoES s))
  30.   (if ss(progn
  31.   (foreach e ss(setq ss(subst(list e "" nil)e ss)))
  32.   (foreach e ss
  33.     (setq f(car e)p(plinexy f)f1(assoc(nth 1 e) ss)
  34.    s1(SStoES(ssget"WP" p(list(cons 0 "LWPOLYLINE,POLYLINE")(cons 8 LDK)
  35.         (CONS -4 "<OR")(CONS 70 129)(CONS 70 1)(CONS -4 "OR>")))))
  36.     (if f1(progn
  37.      (setq d(nth 2 f1))
  38.      (foreach a s1(if(member a d)(setq b(assoc a ss)c(nth 1 b)
  39.            ss(subst(subst f c b)b ss)l 0)))
  40.      (setq d(vl-remove-if(FUNCTION(LAMBDA(a)(member a s1)))d))
  41.   (setq ss(subst(subst d(nth 2 f1)f1)f1 ss)l 0)
  42.      ))
  43.     (setq d nil)
  44.     (foreach a s1
  45.       (setq b(assoc a ss)c(nth 1 b)d nil)
  46.       (if(null(member c s1))(setq ss(subst(subst f c b)b ss)l 0)
  47.         (progn(if c(setq b(assoc c ss)
  48.     c(nth 2 b)
  49.     ss(subst(subst(vl-remove a c)c b)b ss)l 0))
  50.    (setq d(if d(append d(list a))(list a))))))
  51.     (setq s1(vl-remove-if(FUNCTION(LAMBDA(a)(member a d)))s1)
  52.    ss(subst(subst s1(nth 2 e)e)e ss)l 0)
  53.     )
  54.   ))
  55.   (princ)
  56.   )

  57. (setq ddd (ssget '((0 . "lwpolyline")   )))
  58. (setq opo (dzfx ddd))
发表于 2015-11-23 21:21 | 显示全部楼层
源码里面的dzfx函数是不带参数的,为何楼主说(dzfx s)?
发表于 2019-7-17 00:34 | 显示全部楼层
嵌套比较多的会有错误。
发表于 2021-6-23 12:48 | 显示全部楼层
Gu_xl 发表于 2013-4-1 13:06
判断两个多边形之间的关系,可利用面域来判断!
假设将两个多边形转成面域1和面域2,分别计算出面域1和面 ...

学习了,mark
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-3-28 18:53 , Processed in 0.240288 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表