找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2325|回复: 16

[编程申请]:请高手编一个倒角命令,能倒固定长度的切角

[复制链接]
发表于 2005-4-2 23:53:58 | 显示全部楼层 |阅读模式

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

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

×
请高手编一个倒角命令,能倒固定长度的切角,AUTOCAD的CHAMFER命令只能倒距两个边固定长度的切角,我想要能倒固定长度斜边的命令,烦请哪位大侠帮忙,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 11282个

财富等级: 富甲天下

发表于 2005-4-3 23:31:50 | 显示全部楼层

Re: [编程申请]:请高手编一个倒角命令,能倒固定长度的切角

最初由 lizhongf 发布
[B]请高手编一个倒角命令,能倒固定长度的切角,AUTOCAD的CHAMFER命令只能倒距两个边固定长度的切角,我想要能倒固定长度斜边的命令,烦请哪位大侠帮忙,谢谢! [/B]

不知道下面的程序能否满足您的要求。

  1. (DEFUN C:CHAMF ( / SS OLDOS SL I SL SN EN P1 P2 R PC)
  2. (SETVAR "CMDECHO" 0)
  3. (IF (= (GETVAR "USERR1") 0) (PROGN
  4.   (SETVAR "USERR1" 1.0)
  5.   (SETVAR "USERR2" 45.0)
  6. ))
  7. (SETQ L (GETVAR "USERR1") ANG (GETVAR "USERR2"))
  8. (PRINC "\nCurrent chamfer length = ") (PRINC L)
  9. (PRINC " Angle = ") (PRINC ANG)
  10. (INITGET "Length" 1)
  11. (SETQ PT (GETPOINT "\nLength<Select first line> :"))
  12. (IF (= PT "Length") (PROGN
  13.   (PRINC "\nLength <") (PRINC L)
  14.   (SETQ L (GETDIST ">= "))
  15.   (PRINC "\nAngle <") (PRINC ANG)
  16.   (SETQ ANG (GETREAL "> = "))
  17.   (IF (/= L nil) (SETVAR "USERR1" L) (SETQ L (GETVAR "USERR1")))
  18.   (IF (/= ANG nil) (SETVAR "USERR2" ANG) (SETQ ANG (GETVAR "USERR2")))
  19. ) (PROGN
  20.   (SETQ L1 (* (SIN (/ (* ANG PI) 180)) L))
  21.   (COMMAND "CHAMFER" "A" L1 ANG)
  22.   (COMMAND "CHAMFER" PT)
  23. ))
  24. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-4 00:31:40 | 显示全部楼层

Re: Re: [编程申请]:请高手编一个倒角命令,能倒固定长度的切角

最初由 zxq0220 发布
[B]
... [/B]


谢谢大侠,就是这个,不过两个边相互垂直,angle=45时很好用,角度为其他的值时不正确,比如length=20,angle=30时,倒角后的斜边长度不为20,实际是Distance = 11.5470,应该为20才正确,同样被倒角的两个边不相互垂直时,也不正确,烦请大侠修正,谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11282个

财富等级: 富甲天下

发表于 2005-4-4 22:12:38 | 显示全部楼层
程序修改过了,目前只对直角有效。非直角的容我再想想。
程序:
(DEFUN C:CHAMF ( / SS OLDOS SL I SL SN EN P1 P2 R PC)
(SETVAR "CMDECHO" 0)
(IF (= (GETVAR "USERR1") 0) (PROGN
  (SETVAR "USERR1" 1.0)
  (SETVAR "USERR2" 45.0)
))
(SETQ L (GETVAR "USERR1") ANG (GETVAR "USERR2"))
(PRINC "\nCurrent chamfer length = ") (PRINC L)
(PRINC " Angle = ") (PRINC ANG)
(INITGET "Length" 1)
(SETQ PT (GETPOINT "\nLength〈Select first line〉 :"))
(IF (= PT "Length") (PROGN
  (PRINC "\nLength 〈") (PRINC L)
  (SETQ L (GETDIST "〉 = "))
  (PRINC "\nAngle 〈") (PRINC ANG)
  (SETQ ANG (GETREAL "〉 = "))
  (IF (/= L nil) (SETVAR "USERR1" L) (SETQ L (GETVAR "USERR1")))
  (IF (/= ANG nil) (SETVAR "USERR2" ANG) (SETQ ANG (GETVAR "USERR2")))
) (PROGN
  (SETQ L1 (* (SIN (/ (* (- 90 ANG) PI) 180)) L))
  (COMMAND "CHAMFER" "A" L1 ANG)
  (COMMAND "CHAMFER" PT)
))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-4 22:52:03 | 显示全部楼层
(defun c:tt ()
  (setq d (* 20 (sin (/ PI 4))))
  (setvar "chamfera" d)
  (setvar "chamferb" d)
  (command "CHAMFER")
)

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 11282个

财富等级: 富甲天下

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

使用道具 举报

发表于 2005-4-6 12:51:49 | 显示全部楼层
定了倒角距离还要确定角度好像意义不大,因为要倒角的两条边可能不一定水平or垂直。
定前者就可以了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 2026个

财富等级: 金玉满堂

发表于 2008-5-5 17:26:02 | 显示全部楼层
5楼的程序以倒角斜边长度为指定值,实际并不实用,将其改为传统意义的倒角距离(即“第一条直线的倒角长度”)应更为实用。程序改写如下,命令为ddj。

(defun c:ddj ( / L pt ang)
(setvar "cmdecho" 0)
(if (= (getvar "userr1") 0) (progn
(setvar "userr1" 1.0)
(setvar "userr2" 45.0)
))
(setq L (getvar "userr1") ang (getvar "userr2"))
(princ "\n当前第一条直线的倒角长度 = ") (princ L)
(princ "    第一条直线的倒角角度= ") (princ ang)
(initget "length" 1)
(setq pt (getpoint "\nlength/〈选择第一条直线〉:"))
(if (= pt "length") (progn
(princ "\nlength 〈") (princ L)
(setq L (getdist "〉 = "))
(princ "\nangle 〈") (princ ang)
(setq ang (getreal "〉 = "))
(if (/= L nil) (setvar "userr1" L) (setq L (getvar "userr1")))
(if (/= ang nil) (setvar "userr2" ang) (setq ang (getvar "userr2")))
) (progn
;(setq L1 (* (sin (/ (* (- 90 ang) pi) 180)) L))    ;不用斜边长度值,改回传统意义的倒角距离,故删除此句。
;(command "chamfer" "a" L1 ang)                     ;由于改回传统意义的倒角距离,此句中的L1应改为L,故此句也删除。
(command "chamfer" "a" L ang)                       ;添加此句,即把上句中的L1改为L即可。
(command "chamfer" pt)
))
)


本程序中,若"length"函数能用一个字母来表示,则在命令行中输入此选项时就会方便多了,还有待改进。

本程序在2008中使用,两直线即使不是垂直相交(在允许的范围内)也能实现倒角。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2008-11-3 11:32:52 | 显示全部楼层
把上面的例子修改了一下,试一下吧
(defun c:ddj1 ( / l pt ang)
(setvar "cmdecho" 0)
(if (= (getvar "userr1") 0)
  (progn
  (setvar "userr1" 1.0)
  (setvar "userr2" 45.0)
  )
)
(setq l (if l l (getvar "userr1"))
      ltp (getdist (strcat "\n输入第一条直线的长度:<" (rtos l 2 2) ">:"))
      l (if ltp ltp l)
      ang (if ang ang (getvar "userr2"))
      angtp (getreal (strcat "\n第一条直线的倒角角度:<" (rtos ang 2 2) ">:"))
      ang (if angtp angtp ang)
      )
(setq pt (entsel "\n选择第一条直线:"))
(setq L1 (* (sin (/ (* (- 90 ang) pi) 180)) L)) ;
(command "chamfer" "a" L1 ang) ;
(command "chamfer" pt)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-11-3 11:39:52 | 显示全部楼层
又修改改一下,把l l 和ang改成全局变量要不不能记忆上次输入了,呵呵
;倒角
(defun c:ddj ( / pt )
(setvar "cmdecho" 0)
(if (= (getvar "userr1") 0)
  (progn
  (setvar "userr1" 1.0)
  (setvar "userr2" 45.0)
  )
)
(setq l (if l l (getvar "userr1"))
      ltp (getdist (strcat "\n输入第一条直线的长度:<" (rtos l 2 2) ">:"))
      l (if ltp ltp l)
      ang (if ang ang (getvar "userr2"))
      angtp (getreal (strcat "\n第一条直线的倒角角度:<" (rtos ang 2 2) ">:"))
      ang (if angtp angtp ang)
      )
(setq pt (entsel "\n选择第一条直线:"))
(setq L1 (* (sin (/ (* (- 90 ang) pi) 180)) L)) ;
(command "chamfer" "a" L1 ang) ;
(command "chamfer" pt)

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-20 09:54 , Processed in 0.384174 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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