找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2818|回复: 15

[已解决] 【已解决】求一个lisp代码,图中有很多圆,如图,需要将每个园中与圆相交的部分裁...

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-5-6 21:23:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 newer 于 2018-5-18 21:26 编辑

图中有很多圆,如图,需要将每个园中与圆相交的部分裁剪掉,求代码,只需选中所有圆即可自动实现
QQ截图20170506123419.jpg
QQ截图20170506123436.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 51个

财富等级: 招财进宝

发表于 2017-5-6 22:08:46 | 显示全部楼层
本帖最后由 Lispboy 于 2017-5-6 22:34 编辑

XDRX API的版本

圆裁剪曲线.gif

  1. (defun c:tt ()
  2.   (defun _trim (e pts)
  3.     (if (setq ss1 (ssget "f" pts '((0 . "*LINE,ARC"))))
  4.       (progn
  5.         (mapcar
  6.           '(lambda (x)
  7.              (xdrx_getpropertyvalue x "startpoint" "endpoint")
  8.              (cond
  9.                ((and
  10.                   (xdrx_point_isinside #startpoint e)
  11.                   (xdrx_point_isinside #endpoint e)
  12.                 )
  13.                  (xdrx_entity_delete x)
  14.                )
  15.                ((xdrx_point_isinside #startpoint e)
  16.                  (xdrx_entity_trim x e #startpoint)
  17.                )
  18.                ((xdrx_point_isinside #endpoint e)
  19.                  (xdrx_entity_trim x e #endpoint)
  20.                )
  21.              )
  22.            )
  23.           (xdrx_pickset->ents ss1)
  24.         )
  25.       )
  26.     )
  27.   )
  28.   (if (and
  29.         (xdrx_initssget "\n选取圆实体<退出>:")
  30.         (setq ss (xdrx_ssget '((0 . "CIRCLE"))))
  31.       )
  32.     (progn
  33.       (xdrx_begin)
  34.       (xdrx_sysvar_push '("cmdecho" 0))
  35.       (mapcar
  36.         '(lambda (x)
  37.            (setq pts (xdrx_curve_getsamplepoints x (/
  38.                                                       (xd::doc:getpickboxheight)
  39.                                                       64.0
  40.                                                    )
  41.                      )
  42.            )
  43.            (_trim x pts)
  44.          )
  45.         (xdrx_pickset->ents ss)
  46.       )
  47.       (xdrx_sysvar_pop)
  48.       (xdrx_end)
  49.     )
  50.   )
  51.   (princ)
  52. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2017-5-6 22:52:29 | 显示全部楼层
本帖最后由 Lispboy 于 2017-5-6 22:53 编辑

再来个增强的版本,通过圆的,圆内部的曲线都裁掉

圆裁剪曲线-增强.gif

  1. (defun c:tt ()
  2.   (defun _trim (e pts)
  3.     (xdrx_entity_trim (ssget "f" pts '((0 . "*LINE,ARC"))) e nil)
  4.   )
  5.   (if (and
  6.         (xdrx_initssget "\n选取圆实体<退出>:")
  7.         (setq ss (xdrx_ssget '((0 . "CIRCLE"))))
  8.       )
  9.     (progn
  10.       (xdrx_begin)
  11.       (mapcar
  12.         '(lambda (x)
  13.            (setq pts (xdrx_curve_getsamplepoints x (/
  14.                                                       (xd::doc:getpickboxheight)
  15.                                                       64.0
  16.                                                    )
  17.                      )
  18.            )
  19.            (_trim x pts)
  20.          )
  21.         (xdrx_pickset->ents ss)
  22.       )
  23.       (xdrx_end)
  24.     )
  25.   )
  26.   (princ)
  27. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2017-5-7 00:03:02 | 显示全部楼层
XDRX API太牛了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2017-5-7 01:13:05 | 显示全部楼层
谢谢大神,,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 248个

财富等级: 日进斗金

发表于 2017-5-7 20:02:41 | 显示全部楼层
厉害,不得不服啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2017-5-8 00:31:50 | 显示全部楼层
今天晓东论坛登录不上,我用的第二个程序,有bug,很多时候我以为已经选完了所有其实并没有,还得重新操作,还有有时候圆内的多段线被打断成独立的一条多段线,只能手动删除,求大神解决哈
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2017-5-8 03:00:58 | 显示全部楼层
本帖最后由 Lispboy 于 2017-5-8 03:02 编辑

你是怎么选择的呢?  必须在屏幕内看到才能处理,这是ACAD的限制。

还有,把你的DWG图压缩传上来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-5-8 08:56:53 | 显示全部楼层
这个问题本身不复杂,但同时也不简单。
就问题本身而言,不必要使用api,原始的ALisp就行,以圆为剪刀,以需要剪切的实体名和圆心坐标构成的矩阵为目标,就可以剪切,就是简单重组和遍历就行。
说不简单,是因为如果一条线如果跨越几个圆,那么第一次剪切后,线实体的实体名可能发生变化,脱离选择集,后面就没法剪切了(这应该就是楼主所说的BUG),要解决这个问题,则可能再需要从(entnext (entlast))着手。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-8 09:42:16 | 显示全部楼层

不存在长老说的这个实体名变化造成的BUG,
1、代码里面是每个圆构建点表后,用 SSGET F 选项 找穿过圆的曲线,所以不管裁剪后实体名是否变化都不影响。 这个地方也是要求圆一定要显示在屏幕内的原因,这也极大可能是楼主遇到的BUG,移动屏幕选择圆,造成有的圆到屏幕外了,这个可以通过代码ZOOM下屏幕解决。


2、额外话,关于实体名变化的,API的特点之一就是裁剪后,原来的实体名是继承的,这是ARX特有的功能,API利用了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-5-8 09:57:55 | 显示全部楼层

我所说的实体名变化,主要指的是类似一条线穿过多个圆的这种情况,剪切后变成多个实体,多出来的实体名是不在最初的选择集中的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-8 10:04:41 | 显示全部楼层

因为是一个一个圆处理,处理完一个圆裁剪后,不管怎么变化,都不会影响下一个圆的处理,因为下一个圆处理时候新建立选择集。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2017-5-8 11:11:52 | 显示全部楼层
图纸附上,红线是多段线,需要将圆内部分裁剪掉,这么多大神在,再问个问题,我是做通信的,多段线上方是电缆长度,圆圈是电杆,圆圈旁是杆号,是否可以只选中多段线上方的文字并统计求和
QQ截图20170508105003.jpg

北屏基站-北屏村基站 - 副本.rar

561.92 KB, 下载次数: 4, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-5-8 11:46:23 | 显示全部楼层

安装 晓东工具箱,什么都有了。 文字菜单里面的文字求和。

或者你用 求和 搜索论坛,一堆代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2017-5-8 11:49:21 | 显示全部楼层

好的,我先试试,多谢,还是晓东里面大神多
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-18 18:41 , Processed in 0.479394 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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