sandyvs 发表于 3 天前

带屏幕显示的一键关键字(附用法示例)

本帖最后由 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 发表于 3 天前

最好附个动图演示一下。

sandyvs 发表于 前天 09:37

qazxswk 发表于 2024-12-23 20:07
最好附个动图演示一下。

已增加动图

qazxswk 发表于 前天 14:17

本帖最后由 qazxswk 于 2024-12-24 14:22 编辑

没有必要搞那么复杂,你在命令行里输入
(setvar "DYNPROMPT" 1)
(setvar "DYNMODE" 1)
在命令行输入正常命令,再看光标右下角。

sandyvs 发表于 前天 14:25

本帖最后由 sandyvs 于 2024-12-25 10:47 编辑

qazxswk 发表于 2024-12-24 14:17
没有必要搞那么复杂,你在命令行里输入
(setvar "DYNPROMPT" 1)
(setvar "DYNMODE" 1)

什么复杂?只是个多行文字啊,再说这不是针对 正常命令 的啊

w090212y 发表于 昨天 23:31

上面红色的菜单栏是啥,求分享

sandyvs 发表于 8 小时前

w090212y 发表于 2024-12-25 23:31
上面红色的菜单栏是啥,求分享

rbd4.2,路桥工具,网上搜就行,免费的
页: [1]
查看完整版本: 带屏幕显示的一键关键字(附用法示例)