带屏幕显示的一键关键字(附用法示例)
本帖最后由 sandyvs 于 2024-12-26 18:07 编辑[*];;根据G版的一键关键字改编,sandyvs
[*];[功能] 一键关键字,(czx:onekey str0 keyfun okfzj okfyj okfyd)
[*];[说明]str0 = 提示信息//keyfun = 关键字和对应功能组成的二维表//okfzj = 左键功能(表,可为nil)//okfyj = 右键功能(表,可为nil)//okfyd = 移动功能(表,可为nil)返回值 = 按键值
[*](defun czx:onekey (str0 keyfun okfzj okfyj okfyd / *error* gr key loop ret txt)
[*] (defun *error* ( msg )
[*] (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
[*] (progn
[*] (princ (strcat "\n错误:" msg))
[*] (if (and txt (entget txt)) (entdel txt))
[*] )
[*] )
[*] (princ)
[*] )
[*];(if str0 (princ (strcat "\n " (czx:StrRegExpR "\\n" str0 "" "i") ) )) ;命令栏打印
[*](setq keyfun (mapcar '(lambda (x) (cons (strcase (car x)) (cdr x))) keyfun))
[*](setq key (mapcar 'carkeyfun))
[*](setq loop t)
[*](while loop
[*] (setq gr (grread t 4 0))
[*] (cond
[*] ((and (= 2 (car gr))
[*] (or (member (setq ret (strcase(chr (cadr gr)))) key))
[*] )
[*] (eval(cadr (assoc ret keyfun)))
[*] (if (caddr (assoc ret keyfun))(setq loop nil))
[*] (redraw)
[*] )
[*] ((= 5 (car gr))
[*] (if (and txt (entget txt)) (entdel txt))
[*] (if str0 (setq txt (czx:emkmt (cadr gr) str0 (/(getvar "viewsize")50) 3 t)))
[*] (if okfyd (eval okfyd))
[*]
[*] )
[*] ((or (= 25 (car gr)) (= 11 (car gr)))
[*] (setq ret "右键")
[*] (if okfyj (eval (car okfyj)))
[*] (if (cadr okfyj) (setq loop nil))
[*] )
[*] ((= 3 (car gr))
[*] (setq ret "左键")
[*] (if okfzj (eval (car okfzj)))
[*] (if (cadr okfzj) (setq loop nil))
[*] )
[*] )
[*])
[*](if (and txt (entget txt)) (entdel txt))
[*]ret
[*])
[*]
[*](defun czx:emkmt (pt str textheight textcolor bg)
[*];(czx:emkstyle "YQ_TEXT")
[*](setq lst
[*] (list
[*] '(0 . "MTEXT")
[*] '(100 . "AcDbEntity")
[*] '(100 . "AcDbMText")
[*] (cons 40 textheight)
[*] ;(cons 7"YQ_TEXT")
[*] ;(cons 8layername)
[*] ;(cons 50 ang)
[*] '(71 . 7)
[*] '(72 . 5)
[*] '(73 . 1)
[*] (cons 62textcolor);字颜色
[*] (cons 1 str)
[*] (cons 10 pt)
[*] )
[*])
[*](if bg
[*] (entmakex (append lst'((90 . 3) (45 . 1.1) (63 . 256) (441 . 0))))
[*] (entmakex (append lst '((90 . 0))))
[*])
[*])
最好附个动图演示一下。 qazxswk 发表于 2024-12-23 20:07
最好附个动图演示一下。
已增加动图 本帖最后由 qazxswk 于 2024-12-24 14:22 编辑
没有必要搞那么复杂,你在命令行里输入
(setvar "DYNPROMPT" 1)
(setvar "DYNMODE" 1)
在命令行输入正常命令,再看光标右下角。
本帖最后由 sandyvs 于 2024-12-25 10:47 编辑
qazxswk 发表于 2024-12-24 14:17
没有必要搞那么复杂,你在命令行里输入
(setvar "DYNPROMPT" 1)
(setvar "DYNMODE" 1)
什么复杂?只是个多行文字啊,再说这不是针对 正常命令 的啊 上面红色的菜单栏是啥,求分享 w090212y 发表于 2024-12-25 23:31
上面红色的菜单栏是啥,求分享
rbd4.2,路桥工具,网上搜就行,免费的
页:
[1]