判断两个闭合多边形之间的关系
[*]
[*];;[功能]判断两个闭合多边形之间的关系
[*];假设将两个多边形转成面域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)
[*])
用于土方计算?
页:
[1]