明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 911|回复: 1

[函数] 判断两个闭合多边形之间的关系

[复制链接]
发表于 2019-10-14 21:25 | 显示全部楼层 |阅读模式
  • ;;[功能]判断两个闭合多边形之间的关系
  • ;假设将两个多边形转成面域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 LCWPOLYLINE-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)))
  •   (LCWPOLYLINE-Inclusion-relationship en1 en2 t)
  • )
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-2-6 09:49 | 显示全部楼层
用于土方计算?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-19 06:04 , Processed in 0.171892 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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