明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 617|回复: 6

[提问] 为什么这个图的多段线和直线之间无法计算交点?

[复制链接]
发表于 2016-7-14 12:18 | 显示全部楼层 |阅读模式
本帖最后由 xinxirong 于 2016-7-14 12:20 编辑


(vl-load-com)

(setq util (vla-get-utility
                   (vla-get-activedocument
                        (vlax-get-acad-object))))

(vla-getentity util 'obj1 'ip "\nSelect First Object: ")

(vla-getentity util 'obj2 'ip "\nSelect Second Object: ")

(setq int (vla-IntersectWith obj1 obj2 acExtendNone))

计算得出来的结果是int变体的值为nil

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2016-7-14 12:43 | 显示全部楼层
看看是否在同一面上

点评

怎么我没考虑到呢,谢谢您。trim命令是可以的哦。本来我是想判断它们之间有没有交点,再决定用trim还是extend命令的。  发表于 2016-7-14 13:18
 楼主| 发表于 2016-7-14 13:22 | 显示全部楼层
本来我是想判断它们之间有没有交点,再决定用trim还是extend命令的。
像本例可以把多段线z轴归零后再求交点,再裁剪。
如果情况更糟糕,两条线都不在z=0的平面,裁剪之后要重新移回原来的高程就很复杂了。

点评

如果有交点,那么可以通过ssget"F"选择到它,前提是都在屏幕范围内  发表于 2016-8-3 01:52
 楼主| 发表于 2016-7-18 17:29 | 显示全部楼层
原来trim命令比自已编的命令复杂得多。trim可能根据系统变量PROJMODE来确定是否对对象投影到无、UCS、视图等再修剪,修剪会用到getSplitCurves,自己计算打断点,生成的新的对象自行判断是否需要加入到database中。感觉用lisp来做trim很难,没有太多底层的API。用arx又太复杂。
发表于 2016-8-3 01:45 | 显示全部楼层
本帖最后由 llsheng_73 于 2016-8-3 01:50 编辑

如果求直线或者多段线与别的图元的交点,可以通过(ssnamex(ssget"F" pts))来得到交点处的平面坐标
(setq e(car(entsel"选择多段线")))
(if(setq s(ssget"F"(mapcar'cdr(vl-remove-if'(lambda(x)(/=(car x)10))(entget e)))))
   (mapcar'(lambda(x)(mapcar'last(cdddr x)))(ssnamex s)))
发表于 2016-8-3 01:56 | 显示全部楼层
xinxirong 发表于 2016-7-18 17:29
原来trim命令比自已编的命令复杂得多。trim可能根据系统变量PROJMODE来确定是否对对象投影到无、UCS、视图等 ...

如果需要对同一条线进行多次打断或者trim,因为有可能会生成新的图元而无法进行简单的循环,
但是如果先对这些点按它在线上的距起点的距离的排序,然后从最远点开始处理,那么不管会不会生成新的图元,都能循环下去
 楼主| 发表于 2016-8-5 12:56 | 显示全部楼层
对于曲线,ssget "F"也没有办法啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-28 19:42 , Processed in 0.329553 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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