明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2570|回复: 4

[LISP]求助实体相交问题

[复制链接]
发表于 2006-7-21 17:09:00 | 显示全部楼层 |阅读模式

各位:

      请问有多个实体,如何用lisp实现判断任意两个实体是否相交?并返回相交的实体?谢谢。

发表于 2006-7-21 18:22:00 | 显示全部楼层

循环求交.

不过实体多的话是很耗时间的 .

把你的意图说清楚点,也许有更好的办法.

发表于 2006-8-12 15:36:00 | 显示全部楼层
;求两实体交点
(defun c:get_int0( / ent1 ent2 ps)
  (setq ent1 (car (entsel "选择第一实体:")))
  (setq ent2 (car (entsel "选择第二实体:")))
  (print)
  (setq ps (obj_int ent1 ent2))
)
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;功能:返回两个对象的所有交点
;参数: ent1、ent2 均为ename对象
(defun obj_int (ent1 ent2 / ax_ent_1 ax_ent_2 intpoints points i)
   (setq ax_ent_1 (vlax-ename->vla-object ent1)
         ax_ent_2 (vlax-ename->vla-object ent2)
   )
   (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone))
   (setq intpoints (vlax-variant-value intpoints))
   (setq i 0)
   (if (> (vlax-safearray-get-u-bound intpoints 1) 0)
     (repeat (/ (+ 1
               (- (vlax-safearray-get-u-bound intpoints 1)
                  (vlax-safearray-get-l-bound intpoints 1)
               )
            )
            3
         )
       (setq points (append points (list (list
         (vlax-safearray-get-element intpoints i)
         (vlax-safearray-get-element intpoints (+ i 1))
         (vlax-safearray-get-element intpoints (+ i 2))
       )))
       )
       (setq i (+ 3 i))
     )
   )
   points
)
发表于 2006-12-7 14:51:00 | 显示全部楼层
楼上的程序很不错,我用了,谢谢!
发表于 2009-6-24 00:02:00 | 显示全部楼层
各位问一下,上面列出所有相交情况,能否剔除两对象只有一点相重或边的情况(没有交叉),期待高手解答
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 05:30 , Processed in 0.165491 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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