明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: xskfq

[已解答] 求两个程序的合并(关于圆心处打断直线)

[复制链接]
 楼主| 发表于 2014-1-23 22:26 | 显示全部楼层
edata 发表于 2014-1-23 19:04

谢谢,谢谢!但为什么只能解决一条直线上有一个圆的情况,而一条直线上有多个圆则无法解决
回复

使用道具 举报

发表于 2014-1-23 23:53 | 显示全部楼层
xskfq 发表于 2014-1-23 22:26
谢谢,谢谢!但为什么只能解决一条直线上有一个圆的情况,而一条直线上有多个圆则无法解决

这个是你的前面的算法问题。。
我没看。。
回复

使用道具 举报

 楼主| 发表于 2014-1-24 08:57 | 显示全部楼层
edata 发表于 2014-1-24 00:20
掉线了。。
CAD2006测试通过批量打断

真高手,谢谢了
回复

使用道具 举报

发表于 2014-1-24 09:31 | 显示全部楼层
xskfq 发表于 2014-1-23 22:26
谢谢,谢谢!但为什么只能解决一条直线上有一个圆的情况,而一条直线上有多个圆则无法解决

多个圆打断直线,其实就是通常所说的多点连续打断问题,这里涉及到被打断直线的实体名问题,直线被打断后,变成两条直线,一条沿用原来的实体名(entmod),另一条用新实体名(entmake),所以,连续打断的过程中,打断点可能已不在原实体上,因此也就无法打断。
解决方法:
1.entmake,计算打断点并排序,重新构造实体(其中一条可以用entmod);
2.点排序,将打断点排序,然后将直线从尾至头打断。
回复

使用道具 举报

 楼主| 发表于 2014-1-24 09:43 | 显示全部楼层
ll_j 发表于 2014-1-24 09:31
多个圆打断直线,其实就是通常所说的多点连续打断问题,这里涉及到被打断直线的实体名问题,直线被打断后 ...

好深奥,能解决一下吗,谢谢
回复

使用道具 举报

发表于 2014-1-24 13:06 | 显示全部楼层
本帖最后由 edata 于 2014-1-24 13:17 编辑
xskfq 发表于 2014-1-24 09:43
好深奥,能解决一下吗,谢谢

请发个测试文件来。我这边多直线多圆都没问题。

;;;;;;;;;;;;
我猜测是用了command函数,忘记关捕捉了。。

回复

使用道具 举报

发表于 2014-1-24 13:13 | 显示全部楼层
ll_j 发表于 2014-1-24 09:31
多个圆打断直线,其实就是通常所说的多点连续打断问题,这里涉及到被打断直线的实体名问题,直线被打断后 ...

ol直线(仅直线)交点打断
http://bbs.mjtd.com/forum.php?mo ... &fromuid=338795
我就是用的这个方法。
最后还有个版本,在我的ys168网盘里,在直线多交点少的情况下,速度快不至于卡死。
直线多,交点多,就看自己配置了,
***计算中请等待***可以按ESC中断***
***计算交点耗时6.375秒。***开始生成***
生成耗时7.468秒。***
命令:
命令: 指定对角点:
命令: M MOVE 找到 21989 个
指定基点或 [位移(D)] <位移>:  *取消*
------------------------
回复

使用道具 举报

发表于 2014-1-24 14:16 | 显示全部楼层
除了 捕捉因素还有个问题是zoom因为后面用到了ssget 受视图尺寸大小影响,因此应采用zoom o 的方式缩放视图。
zoom e将全部显示,会让打断直线的时候点 点不准,因此造成打断失败。

  1. (defun c:ny(/ center circle index lineobj point point_01 point_02 radius ssline syh center_lst)
  2.   (vl-load-com)
  3.   (setvar "cmdecho" 0)
  4.   (princ "\n请选取要处理的直线对象")
  5.   (if(setq ssLine (ssget '((0 . "LINE"))))
  6.     (progn (setq syh 0)
  7.       ;(vl-cmdf ".zoom" "e")
  8.       (repeat (sslength ssLine)
  9. (entmod(setq LineObj(ssname ssLine syh)syh(1+ syh)
  10.        point(entget LineObj)
  11.        LineObj(vlax-ename->vla-object LineObj)
  12.        Point_01(cdr(assoc 10 point))
  13.        Point_01(list(car Point_01)(cadr Point_01)0)
  14.        Point_02(cdr(assoc 11 point))
  15.        Point_02(list(car Point_02)(cadr Point_02)0)
  16.        point(subst(cons 10 Point_01)(assoc 10 point)point)
  17.        point(subst(cons 11 Point_02)(assoc 11 point)point)))
  18.   (vl-cmdf ".zoom" "o" (vlax-vla-object->ename LineObj) "")
  19. (if(setq ssCircle(ssget"F"(list Point_01 Point_02)'((0 . "CIRCLE"))))
  20.    (progn (setq index 0 center_lst '())
  21.      (repeat (sslength ssCircle)
  22.        (entmod(setq Circle (entget(ssname ssCircle index))index(1+ index)
  23.       radius(cdr(assoc 40 Circle))
  24.       Center(vlax-curve-getClosestPointTo LineObj (cdr(assoc 10 Circle)) t)
  25.       center(if(<(distance Point_01 Center)radius)Point_01
  26.        (if(<(distance Point_02 Center)radius)Point_02 Center))
  27.       circle(subst(cons 10 Center)(assoc 10 Circle)Circle)))
  28.        (setq center_lst (cons Center center_lst))      
  29.        )
  30.      (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))
  31.      ;(if (/= center_lst '())(mapcar '(lambda(x)(vl-cmdf "_.break" "_non" x  "_non" x )) center_lst))     
  32.      ))
  33.     (vl-cmdf ".zoom" "p")
  34.   )   
  35.     (alert "完成!")
  36.     ))
  37.   (princ)
  38.   )

回复

使用道具 举报

 楼主| 发表于 2014-1-24 14:40 | 显示全部楼层
edata 发表于 2014-1-24 14:16
除了 捕捉因素还有个问题是zoom因为后面用到了ssget 受视图尺寸大小影响,因此应采用zoom o 的方式缩放视图 ...

太给力了,赞一个,问题完全解决了!十分感谢.。
回复

使用道具 举报

 楼主| 发表于 2014-1-24 14:42 | 显示全部楼层
edata 发表于 2014-1-24 13:13
ol直线(仅直线)交点打断
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=109067&fromuid=338795
我 ...

2个版本有什么不同吗,论坛里的和网盘里的,,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 19:11 , Processed in 0.191582 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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