新手编了一个小小程序,有个功能实现不了,请指点
本帖最后由 friendship 于 2015-9-24 20:44 编辑(defun c:RO (/ cmdeo ssent bspt rodeg)
(setq cmdeo (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setvar "angdir" 0)
(cond ((setq ssent (ssget))
(initget 1)
(setq bspt (getpoint "\r选择基点:"))
(initget 1)
(while (and(setq rodeg (getreal "\r正方向为逆时针,请输入旋转角度:")))
(vl-cmdf ".rotate" ssent "" bspt rodeg))))
(setvar "cmdecho" cmdeo)(princ))
想增加一个功能
想实现1.输入角度时,第一次给个数值,以后如果为空,则角度和刚刚输入的一致,如果中间输入其它角度值,则后面的会与刚刚输入的保持一到。
2.如果第一次输入的角度也为空时,则读取上次输入的数据。
如果想要关掉CAD后, 再次开启还能记住上次的值, 用环境变量 即可, 或者写注册表 ,一个原理, 都是存于注册表中 , 如果关掉后不需记住,用全局变量即可, 本帖最后由 lucas_3333 于 2015-12-8 11:48 编辑
看看这里
二楼,G版就是用的环境变量 本帖最后由 琴剑江山_10184 于 2015-9-25 11:22 编辑
(defun c:tt (/ BSPT CMDEO RODEG RRO SSENT)
(defun ros (ssent bspt rodeg)
(vl-cmdf ".rotate" ssent "" bspt rodeg)
)
(setq cmdeo (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setvar "angdir" 0)
(if (setq ssent (ssget))
(progn (setq bspt (getpoint "\r选择基点:"))
(if (/= (getvar 'USERI1) 0)
(setq rro (getvar 'USERI1))
(setq rro 30)
)
(andbspt
(setq
rodeg(getreal (strcat "\n正方向为逆时针,请输入旋转角度<"
(rtos rro 2 2)
">:"
)
)
)
)
(if (null rodeg)
(setq rodeg rro)
(setvar 'USERI1 rodeg)
)
(and bspt (vl-cmdf ".rotate" ssent "" bspt rodeg))
(terpri)
(andssent
bspt
rodeg
(princ "\n按鼠标左键退出 或按空格键接着旋转")
(setq bbspt
crodeg
)
(while (and (if(not (= (car (grread nil 2)) 3))
(setq a ssent)
)
b
c
)
(ros a b c)
)
)
)
)
(setvar "cmdecho" cmdeo)
(princ)
) (defun c:tt ()
(setq ang (Uangle 3 "" "旋转角度<输入或鼠标直接量取>" ang nil))
(if (and (setq ss (ssget))
(setq p0 (getpoint "\r选择基点:"))
)
(vl-cmdf ".rotate" ss "" p0 (* (/ ang pi) 180.0))
)
(princ)
) CAD不是自带这个功能了吗,还搞得这么复杂 新手的程序往往都是很重要的。
页:
[1]