文字按钮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
干杯 未测试,但请尝试将其放在(命令…行)之后
(while (> (getvar 'CmdActive) 0) (command pause))
并确保dwg中存在您调用的图层和文字样式。 我添加了它并在那里制作了你的所有样式。从那时开始,当它达到输入文本的阶段时,它就这样反复地运行
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
使用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)
)
花了一点时间-修改了我原来发布的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
可能更适合你的需要。 如何将其更改为从某个文本样式运行并设置大小。我正在考虑制作一个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)
)
我把它加进去了,效果很好,但我可以用一条线来设置高度。也可以更改它,使我不必在命令行中输入文本,而是在文本框本身? 查看我的其他帖子
类似这样:
(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 至于在文本框中键入文本,用LISP不是一件容易的事,其他人可能会有一个解决方案,但恐怕我已经没有主意了。 是的,我无法在屏幕上看到它,只是当我尝试的时候,它从来都不想工作。
谢谢你。我会设法使它符合公司起草的标准。
但效果很好,谢谢你的帮助。 好的,我有一个小问题,Lee,textsize变量正在设置,但它不会影响实际文本本身。不管怎么说?
页:
[1]
2