明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 108|回复: 1

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

[复制链接]
发表于 昨天 17:11 | 显示全部楼层 |阅读模式
本帖最后由 sandyvs 于 2024-12-23 17:15 编辑


  • ;;根据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) (list (strcase (car x)) (cadr x) (caddr x))) keyfun))
  •   (setq key (mapcar 'car  keyfun))
  •   (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 8  layername)
  •       ;(cons 50 ang)
  •       '(71 . 7)
  •       '(72 . 5)
  •       '(73 . 1)
  •       (cons 62  textcolor)  ;字颜色
  •       (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))))
  •   )
  • )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 昨天 20:07 | 显示全部楼层
最好附个动图演示一下。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-24 07:52 , Processed in 0.177376 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表