本帖最后由 cq4920 于 2020-4-16 21:42 编辑
参考了黄大师的代码终于实现了!
可以空格输入尺寸也可以回车或者右键输入尺寸
尺寸数字中间可以是任意符号
这里有个瑕疵 就是当指定下一点的时候 如果不小心输入了字母 那么安空格就会提示错误
如果可以加入只要不是点击下一点 不管是按空格 还是不小心输入了文字再按空都转到输入尺寸画矩形就好了
优化一下 防止习惯按D不能继续命令!如果按D可以继续按原始方法继续画!

- <div class="blockcode"><blockquote>(defun C:rec(/ x y pta ptb)
- (setq pta (getpoint "\n指定基点"))
- (initget "A D R")
- (if (setq ptb (getcorner pta "\n>>>指定下一点:【空格:尺寸输入】[面积(S)/尺寸(D)/旋转(R)]:"))
- (command "rectang" pta ptb)
- (progn
- (setq lst (getNumberS (setq ss (getstring "\n 宽 & 高 : <30*30>"))))
- (setq x (car lst))
- (setq y (cadr lst))
- (command "rectang" pta "d" x y pause)
- )
- )
- (princ)
- )
;;自贡黄明儒--提取数字
(defun getNumberS (str / ASC N STR1 STRN)
(setq n 1)
(setq str1 "")
(repeat (strlen str)
(setq strn (substr str n 1))
(setq Asc (ascii strn))
(if (or (and (> Asc 47) (< Asc 58)) (= Asc 46))
(setq str1 (strcat str1 strn))
(setq str1 (strcat str1 " "))
)
(setq n (1+ n))
)
(strinSplitS str1)
)
(defun strinSplitS (str / lst)
(setq str (STRCAT "(" str ")"))
(setq lst (read str))
(setq lst (mapcar 'VL-PRINC-TO-STRING lst))
)
|