13648893846 发表于 2019-10-14 21:25:56

判断两个闭合多边形之间的关系


[*]
[*];;[功能]判断两个闭合多边形之间的关系
[*];假设将两个多边形转成面域1和面域2,分别计算出面域1和面域2的面积S1和S2,
[*];然后,用 面域1 union 面域2,得到新面域1,计算新面域1的面积S3,
[*];当 S3 = S1,则多边形1包含多边形2
[*];当S3 = S2, 则多边形2包含多边形1
[*];当 S3< S1+S2,则多边形1和多边形2相交
[*];当S3 = s1+S2,则 当多边形1和多边形2无交点时,相离,当当多边形1和多边形2有交点时,多边形1和多边形2为邻接关系!
[*];tornil 是否生成面域多段线
[*](defun LC:LWPOLYLINE-Inclusion-relationship (en1 en2 tornil/ COPYABC EN11 EN22 INT ENREGION1 S1 ENREGION2 S2 ENENREGION0 S3 TXT STR SS enlast)
[*](defun copyabc(en/ S1);复制图元
[*]    (setq s1 (ssadd) s1 (ssadd en s1))
[*]    (vl-cmdf "COPY" s1 "" (list 0 0 0)(list 0 0 0))
[*]    (entlast)
[*])
[*](setq en11 (copyabc en1) en22 (copyabc en2))
[*](setq int (LM:intersections (vlax-ename->vla-object en1) (vlax-ename->vla-object en2) 0))
[*](if (and en11 en22)
[*]    (progn
[*]      (command ".region" en11 "")
[*]      (setq enRegion1 (entlast))
[*]      (setq s1 (vl-catch-all-apply 'vla-get-area (list (vlax-ename->vla-object enRegion1))))
[*]      (command ".region" en22 "")
[*]      (setq enRegion2 (entlast))
[*]      (setq s2 (vl-catch-all-apply 'vla-get-area (list (vlax-ename->vla-object enRegion2))))
[*]      (command ".union" enRegion1 enRegion2 "")
[*]      (setq enenRegion0 (entlast))
[*]      (setq s3 (vl-catch-all-apply 'vla-get-area (list (vlax-ename->vla-object enenRegion0))))
[*]      (cond
[*]      ((= s3 s1) ;多边形1包含多边形2
[*]          (setq txt "\n 多边形1包含多边形2 \n")
[*]          (setq str 1)
[*]      )
[*]      ((= s3 s2) ;多边形2包含多边形1
[*]          (setq txt "\n 多边形2包含多边形1 \n")
[*]          (setq str 2)
[*]      )
[*]      ((< s3 (+ s1 s2)) ;多边形1和多边形2相交
[*]          (setq txt "\n 多边形1和多边形2相交 \n")
[*]          (setq str 3)
[*]      )
[*]      ((= s3 (+ s1 s2)) ;多边形1和多边形2相交
[*]          (if int
[*]            (progn
[*]            (setq txt "\n 邻接关系 \n")
[*]            (setq str 4) ;
[*]            )
[*]            (progn
[*]            (setq txt "\n 相离关系 \n")
[*]            (setq str 5) ;相离
[*]            )
[*]          )
[*]      )
[*]      )
[*]      (if tornil
[*]      (progn
[*]          (command ".Explode" enenRegion0)
[*]          (setq ss (ssget "p"))
[*]          (BF-curve-join (try-ss2EnList ss) 0.000001)
[*]          (setq enlast (entlast))
[*]          (entdel enenRegion0)
[*]          (mapcar '(lambda (x y) (xyp-SubUpd enlast x y)) (list 62 8) (list 31 "面域生成多段线"))
[*]      )
[*]      )
[*]    )
[*])
[*](princ txt)
[*](entdel enenRegion0)
[*]str
[*])
[*](defun c:tt ()
[*](setq en1 (car (entsel)))
[*](setq en2 (car (entsel)))
[*](LC:LWPOLYLINE-Inclusion-relationship en1 en2 t)
[*])

yxh1202 发表于 2020-2-6 09:49:34

用于土方计算?
页: [1]
查看完整版本: 判断两个闭合多边形之间的关系