找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1591|回复: 10

[求助] 新手有个倒圆角程序需完善,请教下!

[复制链接]

已领礼包: 127个

财富等级: 日进斗金

发表于 2014-9-24 12:21:23 | 显示全部楼层 |阅读模式

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

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

×
(defun c:ff(/ s3 s4 )
(setvar "cmdecho" 0);控制command回显,0.关闭回显 1.打开回显
(setvar "blipmode" 0);在AutoCAD中有时有交叉点标记在鼠标点击处产生,用BLIPMODE命令,在提示行下输入OFF可消除它
;(graphscr);显示 AutoCAD 图形屏幕
(setq s (entsel "\n选择第一条线"))
(setq s2 (entsel "\n选择第二条线"))
;(setq ss(ssget s s2 ));根据选定对象创建选择集
;线段Z归零开始
  (command "_.UCS" "")
(command "_.MOVE" s s2 "" "0,0,0" "0,0,1e99")
(command "_.MOVE" s s2 "" "0,0,0" "0,0,-1e99");线段Z归零结束

;半径选择开始
(initget "A B C D E F G H I J")
(setq s3 (getkword "\n请选择半径[5(A)/10(B)/15(C)/20(D)/25(E)/30(F)/35(G)/40(H)/45(I)/50(J)]<A>:"))
(if (or (null s3) (= s3 "A")) (setq s4 "5")) ;设置半径
  (if (= s3 "B") (setq s4 "10"))
  (if (= s3 "C") (setq s4 "15"))
  (if (= s3 "D") (setq s4 "20"))
(if (= s3 "E") (setq s4 "25"))
(if (= s3 "F") (setq s4 "30"))
(if (= s3 "G") (setq s4 "35"))
(if (= s3 "H") (setq s4 "40"))
(if (= s3 "I") (setq s4 "45"))
(if (= s3 "J") (setq s4 "50"));半径选择结束

;圆角开始
(command "_.fillet"  "r" s4)
(command "_.fillet" (cadr s) (cadr s2));圆角结束


;分解开始(未完)
;(setq el (entlast) )

;(command "_explode" el);分解结束(未完)

;标注半径开始(未完)

;标注半径结束(未完)

(setvar "cmdecho" 1)
(princ)
)

请高手再完善下,谢谢:
1:现在有时候多段线进行倒圆角 会连成一条多段线 怎么在程序中最后分解多段线!
2:能不能进行半径的标注!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-9-24 12:37:35 来自手机 | 显示全部楼层
倒角时pline+line时line消失,pline+pline第二个消失第一个不变

点评

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2014-9-24 13:44:41 | 显示全部楼层
用 expode 命令最后炸开它不就行了。

点评

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

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2014-9-24 14:42:21 | 显示全部楼层
本帖最后由 spp_wall 于 2014-9-24 14:46 编辑
Lisphk 发表于 2014-9-24 13:44
用 expode 命令最后炸开它不就行了。

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

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2014-9-24 14:43:31 | 显示全部楼层
csharp 发表于 2014-9-24 12:37
倒角时pline+line时line消失,pline+pline第二个消失第一个不变

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-9-24 15:00:35 来自手机 | 显示全部楼层
第一个是就炸第一个,仅第二个是就炸第二个,都不是什么都不做

点评

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

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2014-9-24 16:23:18 | 显示全部楼层
csharp 发表于 2014-9-24 15:00
第一个是就炸第一个,仅第二个是就炸第二个,都不是什么都不做

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-25 01:32:28 | 显示全部楼层
spp_wall 发表于 2014-9-24 16:23
新手不懂 还是谢谢!

  1. (defun c:ff (/ s3 s4 keylst lastent p)
  2.   (setvar "cmdecho" 0)
  3.   (setvar "blipmode" 0)
  4.   (while (and (setq s (entsel "\n选择第一条线"))
  5.            (setq s2 (entsel "\n选择第二条线"))
  6.       )
  7.     (progn
  8.       (command "_.MOVE" s s2 "" "0,0,0" "0,0,1e99")
  9.       (command "_.MOVE" s s2 "" "0,0,0" "0,0,-1e99")
  10.       (setq keylst '((nil 5)
  11.                      ("A" 5)
  12.                      ("B" 10)
  13.                      ("C" 15)
  14.                      ("D" 20)
  15.                      ("E" 25)
  16.                      ("F" 30)
  17.                      ("G" 35)
  18.                      ("H" 40)
  19.                      ("I" 45)
  20.                      ("J" 50)
  21.                     )
  22.       )
  23.       (initget "A B C D E F G H I J")
  24.       (setq s3
  25.              (getkword
  26.                "\n请选择半径[5(A)/10(B)/15(C)/20(D)/25(E)/30(F)/35(G)/40(H)/45(I)/50(J)]<A>:"
  27.              )
  28.       )
  29.       (setq s4 (cadr (assoc s3 keylst)))
  30.       (setvar "filletrad" s4)
  31.       (command "_.fillet" (cadr s) (cadr s2))
  32.       (setq lastent (entlast))
  33.       (cond
  34.         ((and (entget (car s))
  35.               (wcmatch (cdr (assoc 0 (entget (car s)))) "*POLYLINE")
  36.          )
  37.          (vl-cmdf ".explode" s)
  38.         )
  39.         ((and (entget (car s2))
  40.               (wcmatch (cdr (assoc 0 (entget (car s2)))) "*POLYLINE")
  41.          )
  42.          (vl-cmdf ".explode" s2)
  43.         )
  44.         (t)
  45.       )
  46.       (while (and (setq lastent (entnext lastent))
  47.                   (/= (cdr (assoc 0 (entget lastent))) "ARC")
  48.              )
  49.       )
  50.       (setq p (vlax-curve-getpointatparam
  51.                 lastent
  52.                 (* 0.5
  53.                    (+ (vlax-curve-getstartparam lastent)
  54.                       (vlax-curve-getendparam lastent)
  55.                    )
  56.                 )
  57.               )
  58.       )
  59.       (vl-cmdf "_dimradius" (list lastent p) "_non" p)
  60.     )
  61.   )
  62.   (setvar "cmdecho" 1)
  63.   (princ)
  64. )

点评

选择第一条线 选择第二条线 请选择半径[5(A)/10(B)/15(C)/20(D)/25(E)/30(F)/35(G)/40(H)/45(I)/50(J)]:C *无效选择* 需要点或窗口(W)/上一个(L)/窗交(C)/框(BOX)/栏选(F)/圈围(WP)/圈交(CP) 无法获取 ObjectI  详情 回复 发表于 2014-9-25 08:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2014-9-25 08:18:52 | 显示全部楼层
本帖最后由 spp_wall 于 2014-9-25 08:43 编辑

选择第一条线
选择第二条线
请选择半径[5(A)/10(B)/15(C)/20(D)/25(E)/30(F)/35(G)/40(H)/45(I)/50(J)]<A>:C
*无效选择*
需要点或窗口(W)/上一个(L)/窗交(C)/框(BOX)/栏选(F)/圈围(WP)/圈交(CP)
无法获取 ObjectID: nil

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-25 08:50:35 | 显示全部楼层
spp_wall 发表于 2014-9-25 08:18
选择第一条线
选择第二条线
请选择半径[5(A)/10(B)/15(C)/20(D)/25(E)/30(F)/35(G)/40(H)/45(I)/50(J)] ...

和你用的 CAD版本有关
  1. (defun c:ff (/ s3 s4 keylst lastent p tf)
  2.   (setvar "cmdecho" 0)
  3.   (setvar "blipmode" 0)
  4.   (while (and (setq s (entsel "\n选择第一条线"))
  5.               (setq s2 (entsel "\n选择第二条线"))
  6.          )
  7.     (progn
  8.       (command "_.MOVE" s s2 "" "0,0,0" "0,0,1e99")
  9.       (command "_.MOVE" s s2 "" "0,0,0" "0,0,-1e99")
  10.       (setq keylst '((nil 5)
  11.                      ("A" 5)
  12.                      ("B" 10)
  13.                      ("C" 15)
  14.                      ("D" 20)
  15.                      ("E" 25)
  16.                      ("F" 30)
  17.                      ("G" 35)
  18.                      ("H" 40)
  19.                      ("I" 45)
  20.                      ("J" 50)
  21.                     )
  22.       )
  23.       (initget "A B C D E F G H I J")
  24.       (setq s3
  25.              (getkword
  26.                "\n请选择半径[5(A)/10(B)/15(C)/20(D)/25(E)/30(F)/35(G)/40(H)/45(I)/50(J)]<A>:"
  27.              )
  28.       )
  29.       (setq s4 (cadr (assoc s3 keylst)))
  30.       (setvar "filletrad" s4)
  31.       (command "_.fillet" s s2) ;_和版本有关,低版本需要 (实体 点) 方式
  32.       (setq lastent (entlast)
  33.             tf            t
  34.       )
  35.       (cond
  36.         ((and (entget (car s))
  37.               (wcmatch (cdr (assoc 0 (entget (car s)))) "*POLYLINE")
  38.          )
  39.          (vl-cmdf ".explode" s)
  40.         )
  41.         ((and (entget (car s2))
  42.               (wcmatch (cdr (assoc 0 (entget (car s2)))) "*POLYLINE")
  43.          )
  44.          (vl-cmdf ".explode" s2)
  45.         )
  46.         (t)
  47.       )
  48.       (while (and (setq tf (/= (cdr (assoc 0 (entget lastent))) "ARC"))
  49.                   (setq lastent (entnext lastent))
  50.              )
  51.       )
  52.       (if (not tf)
  53.         (progn
  54.           (setq        p (vlax-curve-getpointatparam
  55.                     lastent
  56.                     (* 0.5
  57.                        (+ (vlax-curve-getstartparam lastent)
  58.                           (vlax-curve-getendparam lastent)
  59.                        )
  60.                     )
  61.                   )
  62.           )
  63.           (vl-cmdf "_dimradius" (list lastent p) "_non" p)
  64.         )
  65.       )
  66.     )
  67.   )
  68.   (setvar "cmdecho" 1)
  69.   (princ)
  70. )

点评

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

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2014-9-25 09:19:59 | 显示全部楼层
st788796 发表于 2014-9-25 08:50
和你用的 CAD版本有关

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 12:34 , Processed in 0.479676 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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