matthewrussell 发表于 2022-7-6 17:03:58

文字按钮Lisp

嘿伙计们,
 
我玩过一个lisp,它是通过我在CAD中制作的按钮运行的,但我编写的例程始终不起作用。我不知道为什么没有,所以我把它附在下面。
 
;######## Lisp that runs text buttons ########
;---3.5 Text---
(defun c:35text (/ oldlay)
(setq oldlay (getvar "clayer"))
(setvar "clayer" "35TEXT")
(setvar "textstyle" "BMD_2009")
(command "mtext" PAUSE "H" "3.5" PAUSE)
(setvar "clayer" oldlay)
(princ)
) ;defun

 
干杯

lpseifert 发表于 2022-7-6 17:08:06

未测试,但请尝试将其放在(命令…行)之后

(while (> (getvar 'CmdActive) 0) (command pause))
并确保dwg中存在您调用的图层和文字样式。

matthewrussell 发表于 2022-7-6 17:11:55

我添加了它并在那里制作了你的所有样式。从那时开始,当它达到输入文本的阶段时,它就这样反复地运行
 
MText: \
MText: \
MText: \
MText: \
MText: \
MText: \
MText: \
MText: \
MText: \
MText: \
MText: \
MText: Function cancelledMText: sda3e2*Cancel*
 
不确定有什么问题。
 
这就是代码现在的样子
;######## Lisp that runs text buttons ########
;---3.5 Text---
(defun c:35text (/ oldlay)
(setq oldlay (getvar "clayer"))
(setvar "clayer" "35T")
(setvar "textstyle" "BMD_2009")
(command "mtext" PAUSE "H" "3.5" PAUSE)
(while (> (getvar 'CmdActive) 0) (command pause))
(setvar "clayer" oldlay)
(princ)
) ;defun

Lee Mac 发表于 2022-7-6 17:18:15

使用LISP时,M-Text是不可靠的-这满足了您的需要:
 

(defun c:m (/ pt txt txt1)
   (setvar "cmdecho" 0)
   (while
       (and
         (/= (setq pt (getpoint "\nSelect Point for M-Text")) nil)
         (/= (setq txt (getstring t "\nSpecify Text: ")) "")
       ) ; end and
       (setq txt1 (strcat "\\P" txt))
       (command "-mtext" pt "@500,-500" txt1 "")
   ) ; end while
   (setvar "cmdecho" 1)
   (princ "\nFunction Complete.")
   (princ)
)

Lee Mac 发表于 2022-7-6 17:20:28

花了一点时间-修改了我原来发布的LISP:
 

(defun c:35text (/ *error* varLst oldVars pt txt txt1)

;   --- Error Trap ---

   (defun *error* (msg)
   (mapcar 'setvar varLst oldVars)
   (if (= msg "")
       (princ "\nFunction Complete.")
       (princ "\nError or Esc pressed... ")
   ) ;_end if
   (princ)
   ) ; end of *error*

   (setq varLst(list "CMDECHO" "CLAYER" "TEXTSTYLE" "TEXTSIZE")
   oldVars (mapcar 'getvar varLst)
   ) ; end setq

;    --- Error Trap ---

   (setvar "cmdecho" 0)
   (if    (not (tblsearch "layer" "35T"))
   (command "-layer" "m" "35T" "")
   (setvar "clayer" "35T")
   ) ;_end if
   (setvar "textsize" 3.5)
   (setvar "textstyle" "BMD_2009")
   (while
   (/= (setq txt (getstring t "\nSpecify Text: ")) "")
      (setq txt1 (strcat "\\P" txt))
      (command "-mtext" pause pause txt1 "")
   ) ; end while
   (setvar "cmdecho" 1)
   (*error* "") ; reset old variables
   (princ)
) ;_end defun

 
可能更适合你的需要。

matthewrussell 发表于 2022-7-6 17:22:45

如何将其更改为从某个文本样式运行并设置大小。我正在考虑制作一个5.0、3.5和2.5高文本按钮。
也可以将文本转储到设置层上。
 
比如说,如果我点击2.5按钮,它会选择,比如说,层25T选择我的文本样式,然后使文本2.5高。
 
这可能吗
 
(defun c:25text (/ pt txt txt1)
   (setvar "cmdecho" 0)
   (setq oldlay (getvar "clayer"))
   (setvar "clayer" "25T")
   (setvar "textstyle" "BMD_2009")
   (while
       (and
         (/= (setq pt (getpoint "\nSelect Point for M-Text")) nil)
         (/= (setq txt (getstring t "\nSpecify Text: ")) "")
       ) ; end and
       (setq txt1 (strcat "\\P" txt))
       (command "-mtext" pt "@500,-500" txt1 "")
   ) ; end while
   (setvar "cmdecho" 1)
   (setvar "clayer" oldlay)
   (princ "\nFunction Complete.")
   (princ)
)
 
我把它加进去了,效果很好,但我可以用一条线来设置高度。也可以更改它,使我不必在命令行中输入文本,而是在文本框本身?

Lee Mac 发表于 2022-7-6 17:28:21

查看我的其他帖子
 
类似这样:
 

(defun c:25text (/ *error* varLst oldVars pt txt txt1)

;   --- Error Trap ---

   (defun *error* (msg)
   (mapcar 'setvar varLst oldVars)
   (if (= msg "")
       (princ "\nFunction Complete.")
       (princ "\nError or Esc pressed... ")
   ) ;_end if
   (princ)
   ) ; end of *error*

   (setq varLst(list "CMDECHO" "CLAYER" "TEXTSTYLE" "TEXTSIZE")
   oldVars (mapcar 'getvar varLst)
   ) ; end setq

;    --- Error Trap ---

   (setvar "cmdecho" 0)
   (if    (not (tblsearch "layer" "25T"))
   (command "-layer" "m" "25T" "")
   (setvar "clayer" "25T")
   ) ;_end if
   (setvar "textsize" 2.5)
   (setvar "textstyle" "BMD_2009")
   (while
   (/= (setq txt (getstring t "\nSpecify Text: ")) "")
      (setq txt1 (strcat "\\P" txt))
      (command "-mtext" pause pause txt1 "")
   ) ; end while
   (setvar "cmdecho" 1)
   (*error* "") ; reset old variables
   (princ)
) ;_end defun

Lee Mac 发表于 2022-7-6 17:31:56

至于在文本框中键入文本,用LISP不是一件容易的事,其他人可能会有一个解决方案,但恐怕我已经没有主意了。

matthewrussell 发表于 2022-7-6 17:33:53

是的,我无法在屏幕上看到它,只是当我尝试的时候,它从来都不想工作。
 
谢谢你。我会设法使它符合公司起草的标准。
 
但效果很好,谢谢你的帮助。

matthewrussell 发表于 2022-7-6 17:37:50

好的,我有一个小问题,Lee,textsize变量正在设置,但它不会影响实际文本本身。不管怎么说?
页: [1] 2
查看完整版本: 文字按钮Lisp