乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 108|回复: 17

[编程交流] 文字按钮Lisp

[复制链接]

5

主题

35

帖子

38

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 17:03:58 | 显示全部楼层 |阅读模式
嘿伙计们,
 
我玩过一个lisp,它是通过我在CAD中制作的按钮运行的,但我编写的例程始终不起作用。我不知道为什么没有,所以我把它附在下面。
 
  1. ;######## Lisp that runs text buttons ########
  2. ;---3.5 Text---
  3. (defun c:35text (/ oldlay)
  4. (setq oldlay (getvar "clayer"))
  5. (setvar "clayer" "35TEXT")
  6. (setvar "textstyle" "BMD_2009")
  7. (command "mtext" PAUSE "H" "3.5" PAUSE)
  8. (setvar "clayer" oldlay)
  9. (princ)
  10. ) ;defun

 
干杯
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 17:08:06 | 显示全部楼层
未测试,但请尝试将其放在(命令…行)之后
  1. (while (> (getvar 'CmdActive) 0) (command pause))

并确保dwg中存在您调用的图层和文字样式。
回复

使用道具 举报

5

主题

35

帖子

38

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 17:11:55 | 显示全部楼层
我添加了它并在那里制作了你的所有样式。从那时开始,当它达到输入文本的阶段时,它就这样反复地运行
 
  1. MText: \
  2. MText: \
  3. MText: \
  4. MText: \
  5. MText: \
  6. MText: \
  7. MText: \
  8. MText: \
  9. MText: \
  10. MText: \
  11. MText: \
  12. MText: Function cancelledMText: sda3e2*Cancel*

 
不确定有什么问题。
 
这就是代码现在的样子
  1. ;######## Lisp that runs text buttons ########
  2. ;---3.5 Text---
  3. (defun c:35text (/ oldlay)
  4. (setq oldlay (getvar "clayer"))
  5. (setvar "clayer" "35T")
  6. (setvar "textstyle" "BMD_2009")
  7. (command "mtext" PAUSE "H" "3.5" PAUSE)
  8. (while (> (getvar 'CmdActive) 0) (command pause))
  9. (setvar "clayer" oldlay)
  10. (princ)
  11. ) ;defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:18:15 | 显示全部楼层
使用LISP时,M-Text是不可靠的-这满足了您的需要:
 
  1. (defun c:m (/ pt txt txt1)
  2.    (setvar "cmdecho" 0)
  3.    (while
  4.        (and
  5.            (/= (setq pt (getpoint "\nSelect Point for M-Text")) nil)
  6.            (/= (setq txt (getstring t "\nSpecify Text: ")) "")
  7.        ) ; end and
  8.        (setq txt1 (strcat "\\P" txt))
  9.        (command "-mtext" pt "@500,-500" txt1 "")
  10.    ) ; end while
  11.    (setvar "cmdecho" 1)
  12.    (princ "\nFunction Complete.")
  13.    (princ)
  14. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:20:28 | 显示全部楼层
花了一点时间-修改了我原来发布的LISP:
 
  1. (defun c:35text (/ *error* varLst oldVars pt txt txt1)
  2. ;     --- Error Trap ---
  3.    (defun *error* (msg)
  4.    (mapcar 'setvar varLst oldVars)
  5.    (if (= msg "")
  6.        (princ "\nFunction Complete.")
  7.        (princ "\nError or Esc pressed... ")
  8.    ) ;_  end if
  9.    (princ)
  10.    ) ; end of *error*
  11.    (setq varLst  (list "CMDECHO" "CLAYER" "TEXTSTYLE" "TEXTSIZE")
  12.      oldVars (mapcar 'getvar varLst)
  13.    ) ; end setq
  14. ;    --- Error Trap ---
  15.    (setvar "cmdecho" 0)
  16.    (if    (not (tblsearch "layer" "35T"))
  17.    (command "-layer" "m" "35T" "")
  18.    (setvar "clayer" "35T")
  19.    ) ;_  end if
  20.    (setvar "textsize" 3.5)
  21.    (setvar "textstyle" "BMD_2009")
  22.    (while
  23.    (/= (setq txt (getstring t "\nSpecify Text: ")) "")
  24.       (setq txt1 (strcat "\\P" txt))
  25.       (command "-mtext" pause pause txt1 "")
  26.    ) ; end while
  27.    (setvar "cmdecho" 1)
  28.    (*error* "") ; reset old variables
  29.    (princ)
  30. ) ;_  end defun

 
可能更适合你的需要。
回复

使用道具 举报

5

主题

35

帖子

38

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 17:22:45 | 显示全部楼层
如何将其更改为从某个文本样式运行并设置大小。我正在考虑制作一个5.0、3.5和2.5高文本按钮。
也可以将文本转储到设置层上。
 
比如说,如果我点击2.5按钮,它会选择,比如说,层25T选择我的文本样式,然后使文本2.5高。
 
这可能吗
 
  1. (defun c:25text (/ pt txt txt1)
  2.    (setvar "cmdecho" 0)
  3.    (setq oldlay (getvar "clayer"))
  4.    (setvar "clayer" "25T")
  5.    (setvar "textstyle" "BMD_2009")
  6.    (while
  7.        (and
  8.            (/= (setq pt (getpoint "\nSelect Point for M-Text")) nil)
  9.            (/= (setq txt (getstring t "\nSpecify Text: ")) "")
  10.        ) ; end and
  11.        (setq txt1 (strcat "[url="file://\\P"]\\P[/url]" txt))
  12.        (command "-mtext" pt "@500,-500" txt1 "")
  13.    ) ; end while
  14.    (setvar "cmdecho" 1)
  15.    (setvar "clayer" oldlay)
  16.    (princ "\nFunction Complete.")
  17.    (princ)
  18. )

 
我把它加进去了,效果很好,但我可以用一条线来设置高度。也可以更改它,使我不必在命令行中输入文本,而是在文本框本身?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:28:21 | 显示全部楼层
查看我的其他帖子
 
类似这样:
 
  1. (defun c:25text (/ *error* varLst oldVars pt txt txt1)
  2. ;     --- Error Trap ---
  3.    (defun *error* (msg)
  4.    (mapcar 'setvar varLst oldVars)
  5.    (if (= msg "")
  6.        (princ "\nFunction Complete.")
  7.        (princ "\nError or Esc pressed... ")
  8.    ) ;_  end if
  9.    (princ)
  10.    ) ; end of *error*
  11.    (setq varLst  (list "CMDECHO" "CLAYER" "TEXTSTYLE" "TEXTSIZE")
  12.      oldVars (mapcar 'getvar varLst)
  13.    ) ; end setq
  14. ;    --- Error Trap ---
  15.    (setvar "cmdecho" 0)
  16.    (if    (not (tblsearch "layer" "25T"))
  17.    (command "-layer" "m" "25T" "")
  18.    (setvar "clayer" "25T")
  19.    ) ;_  end if
  20.    (setvar "textsize" 2.5)
  21.    (setvar "textstyle" "BMD_2009")
  22.    (while
  23.    (/= (setq txt (getstring t "\nSpecify Text: ")) "")
  24.       (setq txt1 (strcat "\\P" txt))
  25.       (command "-mtext" pause pause txt1 "")
  26.    ) ; end while
  27.    (setvar "cmdecho" 1)
  28.    (*error* "") ; reset old variables
  29.    (princ)
  30. ) ;_  end defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:31:56 | 显示全部楼层
至于在文本框中键入文本,用LISP不是一件容易的事,其他人可能会有一个解决方案,但恐怕我已经没有主意了。
回复

使用道具 举报

5

主题

35

帖子

38

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 17:33:53 | 显示全部楼层
是的,我无法在屏幕上看到它,只是当我尝试的时候,它从来都不想工作。
 
谢谢你。我会设法使它符合公司起草的标准。
 
但效果很好,谢谢你的帮助。
回复

使用道具 举报

5

主题

35

帖子

38

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 17:37:50 | 显示全部楼层
好的,我有一个小问题,Lee,textsize变量正在设置,但它不会影响实际文本本身。不管怎么说?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 19:41 , Processed in 0.601691 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表