找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4825|回复: 17

[每日一码] 【源码分享】无聊了,对CAD的打断命令也来个小改造!

[复制链接]
发表于 2013-7-8 11:54:08 | 显示全部楼层 |阅读模式

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

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

×
        如果你经常要用到打断于点。而用CAD的打断命令还得输入@,觉的有点麻烦的话!

请试试下面这个程序。 ----左键是打断两点,右键是打断于点。其他同CAD打断命令.


11.gif

YY-BREAK.lsp

1.17 KB, 阅读权限: 20, 下载次数: 37, 下载积分: D豆 -1 , 活跃度 1

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

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-7-8 13:48:56 | 显示全部楼层
在“打断于点”时,选择和取点合并不符合习惯,对于交叉点,在稍低版本中也无法保证取到,所以,这样合并并不太合理。
我认为按照习惯的修改应该是这样:
  1. (defun c:brk ()
  2.   (vl-cmdf "break" (entsel))
  3.   (initget "F")
  4.   (setq pt1 (getpoint "\n指定第二个打断点 或 [第一点(F)](右键为F): "))
  5.   (if (not pt1)
  6.     (progn
  7.       (setq pt1 (getpoint "\n指定第一个打断点: "))
  8.       (vl-cmdf "F" pt1)
  9.       (initget "@")
  10.       (setq pt2 (getpoint "\n指定第二个打断点 或 [打断于点(@)](右键为@): "))
  11.       (if (not pt2)
  12.         (setq pt2 "@")
  13.       )
  14.       (vl-cmdf pt2)
  15.     )
  16.     (vl-cmdf pt1)
  17.   )
  18.   (princ)
  19. )


这样做的缺点是对于“打断于点”来说,操作步骤太多,所以,对于“打断于点”,我都是用自定义的一个命令:
  1. (defun C:BRF(/ e1 pt)
  2.   (setq e1 (entsel "\nSelect object: ")
  3.         pt (getpoint "\nPick a point: ")
  4.   )
  5.   (command "break" e1 "f" pt pt)
  6. )

点评

长老改的程序,打断两点时,其第一点也是通过ENTSEL得到的点啊。既然打断两点能用ENTSEL得到的点,为什么打断于点就不可以了? 另外长老的程序在选择完物体后要按两次ESC才能退出。!  详情 回复 发表于 2013-7-8 14:35
我用着还行呀! CAD的打断命令本身就是选择与取点一起的。如果要精确取点得用F键。默认是选择与取点合并的。 我一般都不用F键。 位置差不多就可以了。 而对于交叉点,能选到物体就能取到点,不存在取点不到  详情 回复 发表于 2013-7-8 14:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-8 13:53:57 来自手机 | 显示全部楼层
ll_j 发表于 3 分钟前
在“打断于点”时,选择和取点合并不符合习惯,对于交叉点,在稍低版本中也无法保证取到,所以,这样合并并不太合理。
我认为按照习惯的修改应该是这样:[code=lisp](defun c:brk ()

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

使用道具 举报

 楼主| 发表于 2013-7-8 14:31:06 | 显示全部楼层
ll_j 发表于 2013-7-8 13:48
在“打断于点”时,选择和取点合并不符合习惯,对于交叉点,在稍低版本中也无法保证取到,所以,这样合并并 ...

  我用着还行呀! CAD的打断命令本身就是选择与取点一起的。如果要精确取点得用F键。默认是选择与取点合并的。

我一般都不用F键。 位置差不多就可以了。

而对于交叉点,能选到物体就能取到点,不存在取点不到的情况,最多是取点不精确。  





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

使用道具 举报

 楼主| 发表于 2013-7-8 14:35:44 | 显示全部楼层
本帖最后由 wowan1314 于 2013-7-8 14:38 编辑
ll_j 发表于 2013-7-8 13:48
在“打断于点”时,选择和取点合并不符合习惯,对于交叉点,在稍低版本中也无法保证取到,所以,这样合并并 ...

长老改的程序,打断两点时,其第一点也是通过ENTSEL得到的点啊。既然打断两点能用ENTSEL得到的点,为什么打断于点就不可以了?

另外长老的程序在选择完物体后要按两次ESC才能退出。!


长老说的习惯估计是CAD自带的打断于点的命令的步骤。我一般都不用那个工具栏按钮。
直接用打断命令。通过输入@来打断于点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-7-8 16:02:00 | 显示全部楼层
本帖最后由 ll_j 于 2013-7-8 17:00 编辑
wowan1314 发表于 2013-7-8 14:35
长老改的程序,打断两点时,其第一点也是通过ENTSEL得到的点啊。既然打断两点能用ENTSEL得到的点,为什么 ...


前面的程序是随手写的,我自己不是这样复杂的。
刚才有事出去了一下,路上想了想,回来重新调整了一下次序,现在可能好一点。
就像你所说,break的“F”选项几乎是没人用的,多数用户只是使用的两点“模糊”打断,但如果偶尔使用“打断于点”,却多数是“精确”点,这时就需要捕捉,对于两条线的交点捕捉,老版本的CAD是无法确定捕捉了哪条线的,于是,这个“精确”打断也就不知道是打断哪条线了,这种情况一般先用“第一点”这个选项过渡一下,即先选线再取点。
至于选线后需要两次ESC才能退出的原因,可能是这时右键(回车)被定义(赋值),对程序而言,有点相当于错误输入被当做正常的感觉,所以,第一次ESC只是退出这一层,再来一次ESC才能真的退出程序。解决的方法应该是在适当的位置加一个出错处理,采用“强制退出”或捕捉错误代码分别判别,或许能解决,不过我不太想折腾了。
调整后的代码如下:
  1. (defun c:brk (/ en pt1)
  2.   (setq en (entsel))
  3.   (if en
  4.     (progn
  5.       (vl-cmdf "break" en)
  6.       (initget "F K")
  7.       (setq pt1 (getpoint "\n指定第二个打断点 或 [第一点(F)/打断于点(K)](回车为K): "))
  8.       (if (not pt1) (setq pt1 "K"))
  9.       (cond
  10.         ((= pt1 "F")
  11.          (while (not (setq pt1 (getpoint "\n指定第一个打断点: ")))
  12.            (princ "\n点无效。")
  13.          )
  14.          (vl-cmdf "F" pt1)
  15.         )
  16.         ((= pt1 "K")
  17.          (while (not (setq pt1 (getpoint "\n指定打断点: ")))
  18.            (princ "\n点无效。")
  19.          )
  20.          (vl-cmdf "F" pt1 "@")
  21.         )
  22.         (t (vl-cmdf pt1))
  23.       )
  24.     )
  25.   )
  26.   (princ)
  27. )

点评

我的程序适合对打断于点的点位置要求不严的朋友使用。 另外长老可否注意到? 你代码中的(initget "F @")这句中的@没起作用。。。 也就是说(getpoint)函数是不能得到“@”的。 不知道长老是否有办法?  详情 回复 发表于 2013-7-8 16:46
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-8 16:46:30 | 显示全部楼层
ll_j 发表于 2013-7-8 16:02
前面的程序是随手写的,我自己不是这样复杂的。
刚才有事出去了一下,路上想了想,回来重新调整了一下次 ...

  我的程序适合对打断于点的点位置要求不严的朋友使用。
另外长老可否注意到?
  你代码中的(initget "F @")这句中的@没起作用。。。

也就是说(getpoint)函数是不能得到“@”的。  不知道长老是否有办法?



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

使用道具 举报

 楼主| 发表于 2013-7-8 16:54:35 | 显示全部楼层
  (getpoint)函数是允许输入实数及@来响应的并可得到点。

而对此initget函数也没办法限制。

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-7-8 17:07:07 | 显示全部楼层
wowan1314 发表于 2013-7-8 16:54
(getpoint)函数是允许输入实数及@来响应的并可得到点。

而对此initget函数也没办法限制。

“@”不能作为自己输入的关键字,这是我的疏忽。
“@”在在getpoint中输入时,是作为点输入的,意思是相对距离0,就是“@0,0,0”的缩写,在本程序中是不能适用的,只好改了。
前面的代码我已经改了,改成字母“K”,反正是个不需要输入的字母,只要不“犯忌”,什么都行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2963个

财富等级: 家财万贯

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

使用道具 举报

已领礼包: 35个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 93个

财富等级: 招财进宝

发表于 2013-7-9 16:51:01 | 显示全部楼层
其实选中后物体用第一个点的确定时鼠标左键做一键断点,右键做普通的break然后第二点再确定断点会舒服很多。这个是我理想的break.个人意见
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 05:16 , Processed in 0.386911 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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