为什么这个图的多段线和直线之间无法计算交点?
本帖最后由 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
看看是否在同一面上 本来我是想判断它们之间有没有交点,再决定用trim还是extend命令的。
像本例可以把多段线z轴归零后再求交点,再裁剪。
如果情况更糟糕,两条线都不在z=0的平面,裁剪之后要重新移回原来的高程就很复杂了。 原来trim命令比自已编的命令复杂得多。trim可能根据系统变量PROJMODE来确定是否对对象投影到无、UCS、视图等再修剪,修剪会用到getSplitCurves,自己计算打断点,生成的新的对象自行判断是否需要加入到database中。感觉用lisp来做trim很难,没有太多底层的API。用arx又太复杂。 本帖最后由 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))) xinxirong 发表于 2016-7-18 17:29 static/image/common/back.gif
原来trim命令比自已编的命令复杂得多。trim可能根据系统变量PROJMODE来确定是否对对象投影到无、UCS、视图等 ...
如果需要对同一条线进行多次打断或者trim,因为有可能会生成新的图元而无法进行简单的循环,
但是如果先对这些点按它在线上的距起点的距离的排序,然后从最远点开始处理,那么不管会不会生成新的图元,都能循环下去 对于曲线,ssget "F"也没有办法啊。
页:
[1]