乐筑天下

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

[综合讨论] 从下拉菜单插入块

[复制链接]

17

主题

1274

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-6 23:47:43 | 显示全部楼层
如果有帮助的话,这将生成一个随机名称,使用当前日期将其转换为十六进制,直到最近的一秒。
  1. (defun datename ( / STD-NUM->HEX cdate day ctime hdate)
  2.         (defun STD-NUM->HEX        (i / s a) ; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/decimal-to-hexadecimal/m-p/2874070#M293991
  3.                 (setq s "")
  4.                 (while (> i 0)
  5.                         (setq a        (rem i 16)
  6.                                   i        (lsh i -4)
  7.                         ) ;_  setq
  8.                         (setq s        (strcat
  9.                                                 (if        (< a 10)
  10.                                                         (chr (+ 48 a))        ; 48: (ascii "0")
  11.                                                         (chr (+ 55 a))
  12.                                                 ) ;_  if
  13.                                                 s
  14.                                         ) ;_  strcat
  15.                         ) ;_  setq
  16.                 ) ;_  while
  17.         ) ;_  defun
  18.                 (setq cdate (getvar "cdate")
  19.                 day (fix cdate)
  20.                 ctime (atoi(substr (rtos (rem cdate day) 2 6)2))
  21.                 hdate (strcat (STD-NUM->HEX day)(STD-NUM->HEX ctime))
  22.         )
  23. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 23:50:49 | 显示全部楼层
尝试此操作,它将随时添加数字以重置数字,因此(setenv“UB”“0”)可以更改为具有单独的UB和UC CHS等数字。您需要首先加载它,所以最简单的方法是将其作为^c^c(加载“blkins”)添加到菜单中,或者添加到自动加载。
 
  1. ; insert a block make a new block with name + 1
  2. ' By Alan H Dec 2019 info@alanh.com.au
  3. (defun blkins (blkname / x temp)
  4. (if  (tblsearch "BLOCK" blkname)
  5.   (progn
  6.     (alert "Block of that name already exists\n \nwill temporary rename")
  7.         (command "-rename" "block" blkname "tempblk")
  8.         (setq temp 1)
  9.   )
  10. )
  11. (if (= (getenv "UB") nil)
  12.   (setenv "UB" "0")
  13. )
  14. (setq x (+ (atoi (getenv "UB")) 1))
  15. (setenv "UB" (rtos x 2 0))
  16. (command "-INSERT" blkname (getpoint "\nPick insertion point") (getreal "\nEnter scale") "" (getreal "\nEnter rotation"))
  17. (command "-rename" "block" blkname  (strcat blkname "-" (rtos x 2 0)))
  18. (if (= temp 1)
  19. (command "-rename" "block" "tempblk" blkname)
  20. )
  21. )
  22. ;^c^c(blkins "UniversalBeams_610UB125")
001434m6gr5xqlrqzerrzr.png
回复

使用道具 举报

17

主题

67

帖子

50

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 23:52:17 | 显示全部楼层
谢谢你的帮助。
不过我还是迷路了。
 
在tombu的帖子中,我如何将其合并到mnu文件中?
 
使用BIGAL的代码,我尝试了这一点,但由于错误,mnu文件无法加载。如何写入mnu文件?我也很抱歉,但我发现很难理解你在说什么。另一件事是,如果您有两个单独的图形,并且您复制/粘贴,您可以获得相同的块名吗?
 
我几年前编译了这段代码。这本书写得不多,而是取自一本关于AutoCAD的参考书,我再也找不到了。请假设我的编码技能不存在。
 
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 23:57:04 | 显示全部楼层
这是你的菜单行应该看起来像我添加了一行测试,你必须复制并粘贴代码到记事本,并保存Blkins。lsp到支持的Autocad路径,或者编辑(加载“c:\\yourdirectory\\your path\\etc\\Blkins”)以适合,您可以给它取任何您喜欢的名称,只要匹配即可。所以选择“加载块”只需要做一次。
 
  1. ***MENUGROUP=STRUCTURAL_STEEL
  2. ***POP12
  3. **CTOPopSTRUCTURAL_STEEL
  4.                [Structural Steel]
  5.                [load blocks]^c^c(load "blkins")
  6.                [->UB]
  7.                  [610UB125Test]^C^C(blkins "UniversalBeams_610UB125")
  8.                  [610UB125]^C^C-INSERT UniversalBeams_610UB125;scale;1;
  9.                  [610UB113]^C^C-INSERT UniversalBeams_610UB113;scale;1;
  10.                  [610UB101]^C^C-INSERT UniversalBeams_610UB101;scale;1;
  11.                [->UC]
  12.                  [310UC158]^C^C-INSERT UniversalColumns_310UC158;scale;1;
  13.                  [310UC137]^C^C-INSERT UniversalColumns_310UC137;scale;1;
  14.                  [310UC118]^C^C-INSERT UniversalColumns_310UC118;scale;1;
  15.                  [310UC96.8]^C^C-INSERT UniversalColumns_310UC96.8;scale;1;

 
回复

使用道具 举报

17

主题

67

帖子

50

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-7 00:01:34 | 显示全部楼层
谢谢BIGAL,这对我来说很管用。
我现在将尝试合并不同的部分。
 
最后一个问题是:
 
是否可以从脚本文件执行此操作?还是说“.scr”文件不同于“.lsp”文件。
 
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-7 00:01:53 | 显示全部楼层
您可以将其设置为自动加载,以便随时可用。请参阅本文。
 
https://www.cadtutor.net/forum/topic/69468-creating-custom-keyboard-shortcuts-with-multiple-object-snaps/
 
 
回复

使用道具 举报

17

主题

67

帖子

50

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-7 00:06:45 | 显示全部楼层
非常感谢Alan,它似乎起作用了。
干杯
回复

使用道具 举报

17

主题

67

帖子

50

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-7 00:08:33 | 显示全部楼层
对不起,艾伦,我一直在进步,并提出了一个问题。
如果在任何阶段按取消,则会显示错误消息,无法再次运行(;错误:功能已取消)。我试着在第一行之后添加下面的代码。它有时有效,有时无效。
 
我想知道这是否可以做到。
-尽可能精简:(1)去掉“名称已存在”的错误消息。(2) 不要求缩放,默认为1(3)不要求旋转,默认为0°。
这是优先考虑的,因为我想减少尽可能多的步骤,插入点是唯一需要的。
 
如果区块名称相当于一个日期,到最近的一秒,问题会消失吗。。。比如tombu的帖子,周三晚上9:47。
 
但要理解这是否变得过于繁重。
 
 
  1.   ;; *error* local redefinition
  2.   (defun *error* (msg)
  3.     (if (/= msg "Function cancelled")
  4.       (princ (strcat "\nError: " msg))
  5.     )
  6.     (if oom
  7.       (setvar "osmode" oom)
  8.     )
  9.     (princ)
  10.   )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-7 00:14:16 | 显示全部楼层
删除警报行
 
删除两个getreal并替换为1和0
 
你在什么地方?否则(setvar'osmode 47)或您的首选值不需要if。
 
如果您崩溃,它应该再次运行选择菜单。
回复

使用道具 举报

17

主题

67

帖子

50

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-7 00:15:40 | 显示全部楼层
谢谢你的上述指示,艾伦。
 
尽管添加了“(setvar’osmode 47)”,但我仍然对取消有问题。
昨天我忘了说的一件事是,AutoCAD上出现了一条错误消息:“名为“tempblk”的块已经存在。”
这是我想将块命名为最接近秒的日期的另一个原因,尽管它不像您的解决方案那样令人满意,但它省略了一个步骤,即使用临时块名称。
 
不需要再进一步了,因为这取决于我学习更多的LISP并尝试解决。
干杯
 
  1. ; insert a block make a new block with name + 1
  2. ; By Alan H Dec 2019 info@alanh.com.au
  3. (defun blkins (blkname / x temp)
  4.   ;; *error*
  5.   (defun *error* (msg)
  6.     (if (/= msg "Function cancelled")
  7.       (princ (strcat "\nError: " msg))
  8.     )
  9.        (setvar 'osmode 47)
  10.     (princ)
  11.   )
  12. (if  (tblsearch "BLOCK" blkname)
  13.   (progn
  14. ;   (alert "Block of that name already exists\n \nwill temporary rename")
  15.     (command "-rename" "block" blkname "tempblk")
  16.     (setq temp 1)
  17.   )
  18. )
  19. (if (= (getenv "UB") nil)
  20.   (setenv "UB" "0")
  21. )
  22. (setq x (+ (atoi (getenv "UB")) 1))
  23. (setenv "UB" (rtos x 2 0))
  24. (command "-INSERT" blkname (getpoint "\nPick insertion point") 1 "" 0)
  25. (command "-rename" "block" blkname  (strcat blkname "-" (rtos x 2 0)))
  26. (if (= temp 1)
  27. (command "-rename" "block" "tempblk" blkname)
  28. )
  29. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 05:53 , Processed in 0.673260 second(s), 72 queries .

© 2020-2025 乐筑天下

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