sandyvs 发表于 2024-1-26 12:22:20

右键菜单

本帖最后由 sandyvs 于 2024-1-26 14:22 编辑

一直苦于文字加后缀,尤其是符号,输入法还不能打出来。找到相关的http://bbs.mjtd.com/forum.php?mo ... hlight=%D3%D2%BC%FC,其他的基本也是在此基础上改进优化,但右键菜单函数有点复杂,我改不了。

所以,换种思路,先生成菜单不就好了:

(setq wzlst '(
                        ("1" "2" "3" "4" "5" "6""7" "8")
                        ("甲" "乙" "丙" "丁" "戊" "己""辛" "辛")
                        ));;根据需求更改,或写函数修改


(defun c:dynyj ( / *error* code ptx ptd en enstr ent pts pt0 bg loop gr wz ss ss1 strh sm pt)
      (defun *error* ( msg )
                (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
                        (progn (princ (strcat "\n错误:" msg))
                              (setvar "SELECTIONPREVIEW" 3)
                              (redraw)
                        )
                )
                (princ)
   )
      (gxl-error-init2 '*error* 2)
      (setq en (car(entsel "\n选择文字(空选新建):")))
      (while (and en(not (eq (czx:getdxf en 0) "TEXT")))
                (setq en (car(entsel "\n选择文字(空选新建):"))))
      (if (= en nil)
                (progn
                  (setq pt0 (cadr (grread t 5)))
                  (setq sm "右键写图名,左键写普通字")
                )
                (progn
                        (setq enstr (czx:getdxf en 1))
                        ; (setq pts (czx:minbox en 0))
                        ; (setq pts (czx:sort pts "yxz" 0))
                        ;(setq pt0 (car pts))
                        (setq pt0 (cadr (grread t 5)))
                        (setq sm "右键替换,左键加后缀")
                )
      )
      (setq ent (entlast))
      (setq bg (czx:hzbg2 pt0 (setq strh (* (getvar "viewsize") 0.010)) wzlst nil sm nil t))
      (setq ss (czx:newss ent))
      (setq loop t)
      (princ( strcat "\n" sm ":"))
          (while loop
                (setq gr (grread t 13 2))
                (setq code (car gr))
                (setq ptx (cadr gr))
                (cond
                  ((= code 5);移动
                        (setvar "SELECTIONPREVIEW" 2)
                        (redraw)
                        (foreach x (car bg)
                              (if (czx:insidep (caddr x) ptx)
                                        (progn
                                                (czx:putdxf (cadr x) 62 1)
                                                (czx:putdxf (cadr x) 40 (* strh 2.8))
                                                (grvecs (append (list -6) (czx:lst-cross (caddr x))))
                                                (setq wz (car x))
                                                
                                        )
                                        (progn
                                                (czx:putdxf (cadr x) 62 7)
                                                (czx:putdxf (cadr x) 40 (* strh 2))
                                        )
                              )
                        )
                        (setq ptd ptx)
                  )
                  ((= code 25);;右键
                        (if (czx:insidep (cadr bg) ptd)
                              (progn
                                        (setq loop nil)
                                        (czx:erase ss)
                                        (if en
                                                (czx:putdxf en 1 wz)
                                                (progn
                                                      (setq ss1(czx:tmx (czx:emktext "YQ_TEXT" "YQ_TEXT" wz 0 (* 4.5 (getvar "dimscale")) 1 pt0 "中下")))
                                                      (command ".move" ss1 "" pt0(getpoint pt0))
                                                )
                                        )
                                        (redraw)
                              )
                        )
                  )
                  ((= code 3);;;左键
                   (if (czx:insidep (cadr bg) ptd)
                           (progn
                                 (setq loop nil)
                                 (czx:erase ss)
                                        (if en
                                        (czx:putdxf en 1 (strcat enstr wz))
                                        (progn
                                                (czx:emktext "YQ_TEXT" "YQ_TEXT" wz 0 (* 2.5 (getvar "dimscale")) 1 pt0 "正中")
                                                (command ".move" (entlast) "" pt0(getpoint pt0))
                                        )
                                        )
                                 (redraw)
                           )
                   )
                  )


                )
          )
      (gxl-error-end2)
      (setvar "SELECTIONPREVIEW" 3)
      (prin1)
      (princ)
)



所需函数见http://bbs.mjtd.com/forum.php?mo ... =1&extra=#pid953361

大多函数来自论坛,感谢各位作者!

木子代山马化十 发表于 2024-1-27 21:24:20

大佬,这个错误怎么处理呢?
命令: DYNYJ
错误:no function definition: GXL-ERROR-INIT2
命令:

sandyvs 发表于 2024-1-29 10:48:12

本帖最后由 sandyvs 于 2024-1-29 11:09 编辑

木子代山马化十 发表于 2024-1-27 23:44
是下您这个所需函数.fas吗?
我加载的话,提示错误: EOF 错误,我是2021,
不好意思哈,我是小白不太懂
是这个函数,函数搜索那个只是个示例,没2021,不知什么情况,有时间我再测试下


更新了下,重新下载试试

木子代山马化十 发表于 2024-1-27 23:44:17

sandyvs 发表于 2024-1-27 22:13
这个是G版的错误处理函数,帖子下方的链接有,下载加载下

是下您这个所需函数.fas吗?
我加载的话,提示错误: EOF 错误,我是2021,
不好意思哈,我是小白不太懂

advksf 发表于 2024-1-27 08:05:36

感谢分享~:handshake

sandyvs 发表于 2024-1-27 22:13:00

木子代山马化十 发表于 2024-1-27 21:24
大佬,这个错误怎么处理呢?
命令: DYNYJ
错误:no function definition: GXL-ERROR-INIT2


这个是G版的错误处理函数,帖子下方的链接有,下载加载下

木子代山马化十 发表于 2024-1-28 11:53:50

大佬,找到了函数搜索,但是打开之后里面数据库只有3个函数

00放飞梦想00 发表于 2024-1-28 22:30:20

命令: DYNYJ
选择文字(空选新建):
选择文字(空选新建):
** Error: 除数为零 **
用不了

edsion24 发表于 2024-1-29 08:16:08

运行不出来楼主的效果呢                  

sandyvs 发表于 2024-1-29 10:46:10

00放飞梦想00 发表于 2024-1-28 22:30
命令: DYNYJ
选择文字(空选新建):
选择文字(空选新建):


wzlst没定义吧
页: [1] 2
查看完整版本: 右键菜单