- UID
- 211473
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-1-14
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本程序暂时只适于与直线相切的圆弧半径的修改
;|修改相切圆弧的程序----by ljpnb
本程序适用于CAD R2002以上,目前只适合于
与直线相切的圆弧半径的修改
命令: MRR
选择一条圆弧:
选择一条直线:
输入一个基准点:
当前的圆弧半径 R=120,请输入一个新的半径值:
当继续修改前一次修改的圆弧,操作如下
命令:MRR
选择一条圆弧: <直接回车>
当前的圆弧半径 R=60,请输入一个新的半径值:
|;
(defun c:mrr ()
(vl-load-com)
(if (= (setq ent1 (car (entsel "\n选择一条圆弧: "))) nil)
(setq ent1 ent6
P T
)
(setq p nil)
)
(redraw ent1 3)
(if (/= p T)
(setq ent0 (car (entsel "\n选择一条直线: ")))
(setq ent0 ent0)
)
(redraw ent0 3)
(setq obj1 (vlax-ename->vla-object ent1))
(setq r0 (rtos (vla-get-Radius obj1)))
(setq obj0 (vlax-ename->vla-object ent0))
(if (/= p T)
(setq pt0 (getpoint "\n输入一个基准点: "))
(setq pt0 pt0)
)
(setq dis (distance (vlax-curve-getClosestPointTo obj0 pt0 T) pt0))
(setq
r (getreal
(strcat "\n当前的圆弧半径 R=" r0 ",请输入一个新的半径值: ")
)
)
(redraw ent1 4)
(redraw ent0 4)
(if (> r dis)
(progn
(setq os(getvar "OSMODE"))
(setvar "cmdecho" 0)
(command "undo" "g")
(command "offset" r ent0 pt0 "")
(setq ent2 (entlast))
(setq obj2 (vlax-ename->vla-object ent2))
(setq a-sp (vlax-safearray->list
(vlax-variant-value (vla-get-startpoint obj1))
)
)
(setq a-ep (vlax-safearray->list
(vlax-variant-value (vla-get-Endpoint obj1))
)
)
(setq l-sp (vlax-curve-getStartPoint obj0))
(setq l-ep (vlax-curve-getEndPoint obj0))
(setq d1 (distance a-ep l-sp)
d2 (distance a-ep l-ep)
d3 (distance a-sp l-sp)
d4 (distance a-sp l-ep)
)
(setvar "osmode" 0)
(if (or (equal a-sp l-sp 0.001) (equal a-sp l-ep 0.001))
(progn
(setq p1 (vlax-curve-getClosestPointTo obj2 a-ep T))
(setq L1 (distance p1 a-ep))
(setq l2 (sqrt (- (* r r) (* l1 l1))))
(if (< d1 d2)
(setq p0 (polar p1 (angle l-sp l-ep) l2))
(setq p0 (polar p1 (angle l-ep l-sp) l2))
)
(setq point (vlax-curve-getClosestPointTo obj0 p0 T))
(command "arc" point "e" a-ep "r" r)
(setq ent6 (entlast))
(if (< d1 d2)
(vla-put-startpoint obj0 (vlax-3d-point point))
(vla-put-endpoint obj0 (vlax-3d-point point))
)
)
(progn
(setq p1 (vlax-curve-getClosestPointTo obj2 a-sp T))
(setq L1 (distance p1 a-sp))
(setq l2 (sqrt (- (* r r) (* l1 l1))))
(if (< d3 d4)
(setq p0 (polar p1 (angle l-sp l-ep) l2))
(setq p0 (polar p1 (angle l-ep l-sp) l2))
)
(setq point (vlax-curve-getClosestPointTo obj0 p0 T))
(command "arc" a-sp "e" point "r" r)
(setq ent6 (entlast))
(if (< d3 d4)
(vla-put-startpoint obj0 (vlax-3d-point point))
(vla-put-endpoint obj0 (vlax-3d-point point))
)
)
)
(vla-delete obj2)
(vla-delete obj1)
(command "undo" "e")
(setvar "osmode" OS)
(setvar "cmdecho" 1)
)
(progn
(setq ent6 ent1)
(prompt (strcat "\n输入的半径值小于最小半径" (rtos dis)))
)
)
(princ)
)
;;;;程序结束 |
|