xskfq
发表于 2014-1-23 22:26:14
edata 发表于 2014-1-23 19:04 static/image/common/back.gif
谢谢,谢谢!但为什么只能解决一条直线上有一个圆的情况,而一条直线上有多个圆则无法解决
edata
发表于 2014-1-23 23:53:15
xskfq 发表于 2014-1-23 22:26 static/image/common/back.gif
谢谢,谢谢!但为什么只能解决一条直线上有一个圆的情况,而一条直线上有多个圆则无法解决
这个是你的前面的算法问题。。
我没看。。
xskfq
发表于 2014-1-24 08:57:15
edata 发表于 2014-1-24 00:20 static/image/common/back.gif
掉线了。。
CAD2006测试通过批量打断
真高手,谢谢了
ll_j
发表于 2014-1-24 09:31:49
xskfq 发表于 2014-1-23 22:26 static/image/common/back.gif
谢谢,谢谢!但为什么只能解决一条直线上有一个圆的情况,而一条直线上有多个圆则无法解决
多个圆打断直线,其实就是通常所说的多点连续打断问题,这里涉及到被打断直线的实体名问题,直线被打断后,变成两条直线,一条沿用原来的实体名(entmod),另一条用新实体名(entmake),所以,连续打断的过程中,打断点可能已不在原实体上,因此也就无法打断。
解决方法:
1.entmake,计算打断点并排序,重新构造实体(其中一条可以用entmod);
2.点排序,将打断点排序,然后将直线从尾至头打断。
xskfq
发表于 2014-1-24 09:43:31
ll_j 发表于 2014-1-24 09:31 static/image/common/back.gif
多个圆打断直线,其实就是通常所说的多点连续打断问题,这里涉及到被打断直线的实体名问题,直线被打断后 ...
好深奥,能解决一下吗,谢谢
edata
发表于 2014-1-24 13:06:44
本帖最后由 edata 于 2014-1-24 13:17 编辑
xskfq 发表于 2014-1-24 09:43 static/image/common/back.gif
好深奥,能解决一下吗,谢谢
请发个测试文件来。我这边多直线多圆都没问题。
;;;;;;;;;;;;
我猜测是用了command函数,忘记关捕捉了。。
edata
发表于 2014-1-24 13:13:48
ll_j 发表于 2014-1-24 09:31 static/image/common/back.gif
多个圆打断直线,其实就是通常所说的多点连续打断问题,这里涉及到被打断直线的实体名问题,直线被打断后 ...
ol直线(仅直线)交点打断
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=109067&fromuid=338795
我就是用的这个方法。
最后还有个版本,在我的ys168网盘里,在直线多交点少的情况下,速度快不至于卡死。
直线多,交点多,就看自己配置了,
***计算中请等待***可以按ESC中断***
***计算交点耗时6.375秒。***开始生成***
生成耗时7.468秒。***
命令:
命令: 指定对角点:
命令: M MOVE 找到 21989 个
指定基点或 [位移(D)] <位移>:*取消*
------------------------
edata
发表于 2014-1-24 14:16:54
除了 捕捉因素还有个问题是zoom因为后面用到了ssget 受视图尺寸大小影响,因此应采用zoom o 的方式缩放视图。
用zoom e将全部显示,会让打断直线的时候点 点不准,因此造成打断失败。
(defun c:ny(/ center circle index lineobj point point_01 point_02 radius ssline syh center_lst)
(vl-load-com)
(setvar "cmdecho" 0)
(princ "\n请选取要处理的直线对象")
(if(setq ssLine (ssget '((0 . "LINE"))))
(progn (setq syh 0)
;(vl-cmdf ".zoom" "e")
(repeat (sslength ssLine)
(entmod(setq LineObj(ssname ssLine syh)syh(1+ syh)
point(entget LineObj)
LineObj(vlax-ename->vla-object LineObj)
Point_01(cdr(assoc 10 point))
Point_01(list(car Point_01)(cadr Point_01)0)
Point_02(cdr(assoc 11 point))
Point_02(list(car Point_02)(cadr Point_02)0)
point(subst(cons 10 Point_01)(assoc 10 point)point)
point(subst(cons 11 Point_02)(assoc 11 point)point)))
(vl-cmdf ".zoom" "o" (vlax-vla-object->ename LineObj) "")
(if(setq ssCircle(ssget"F"(list Point_01 Point_02)'((0 . "CIRCLE"))))
(progn (setq index 0 center_lst '())
(repeat (sslength ssCircle)
(entmod(setq Circle (entget(ssname ssCircle index))index(1+ index)
radius(cdr(assoc 40 Circle))
Center(vlax-curve-getClosestPointTo LineObj (cdr(assoc 10 Circle)) t)
center(if(<(distance Point_01 Center)radius)Point_01
(if(<(distance Point_02 Center)radius)Point_02 Center))
circle(subst(cons 10 Center)(assoc 10 Circle)Circle)))
(setq center_lst (cons Center center_lst))
)
(if (/= center_lst '())(mapcar '(lambda(x)(setq ss nil)(if(setq ss (ssget "C" x x))(vl-cmdf "_.break" ss """_non" x x ))) center_lst))
;(if (/= center_lst '())(mapcar '(lambda(x)(vl-cmdf "_.break" "_non" x"_non" x )) center_lst))
))
(vl-cmdf ".zoom" "p")
)
(alert "完成!")
))
(princ)
)
xskfq
发表于 2014-1-24 14:40:29
edata 发表于 2014-1-24 14:16 static/image/common/back.gif
除了 捕捉因素还有个问题是zoom因为后面用到了ssget 受视图尺寸大小影响,因此应采用zoom o 的方式缩放视图 ...
太给力了,赞一个,问题完全解决了!十分感谢.。
xskfq
发表于 2014-1-24 14:42:34
edata 发表于 2014-1-24 13:13 static/image/common/back.gif
ol直线(仅直线)交点打断
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=109067&fromuid=338795
我 ...
2个版本有什么不同吗,论坛里的和网盘里的,,