(defun datename ( / STD-NUM->HEX cdate day ctime hdate)
(defun STD-NUM->HEX (i / s a) ; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/decimal-to-hexadecimal/m-p/2874070#M293991
(setq s "")
(while (> i 0)
(setq a (rem i 16)
i (lsh i -4)
) ;_setq
(setq s (strcat
(if (< a 10)
(chr (+ 48 a)) ; 48: (ascii "0")
(chr (+ 55 a))
) ;_if
s
) ;_strcat
) ;_setq
) ;_while
) ;_defun
(setq cdate (getvar "cdate")
day (fix cdate)
ctime (atoi(substr (rtos (rem cdate day) 2 6)2))
hdate (strcat (STD-NUM->HEX day)(STD-NUM->HEX ctime))
)
)
尝试此操作,它将随时添加数字以重置数字,因此(setenv“UB”“0”)可以更改为具有单独的UB和UC CHS等数字。您需要首先加载它,所以最简单的方法是将其作为^c^c(加载“blkins”)添加到菜单中,或者添加到自动加载。
; insert a block make a new block with name + 1
' By Alan H Dec 2019 info@alanh.com.au
(defun blkins (blkname / x temp)
(if(tblsearch "BLOCK" blkname)
(progn
(alert "Block of that name already exists\n \nwill temporary rename")
(command "-rename" "block" blkname "tempblk")
(setq temp 1)
)
)
(if (= (getenv "UB") nil)
(setenv "UB" "0")
)
(setq x (+ (atoi (getenv "UB")) 1))
(setenv "UB" (rtos x 2 0))
(command "-INSERT" blkname (getpoint "\nPick insertion point") (getreal "\nEnter scale") "" (getreal "\nEnter rotation"))
(command "-rename" "block" blkname(strcat blkname "-" (rtos x 2 0)))
(if (= temp 1)
(command "-rename" "block" "tempblk" blkname)
)
)
;^c^c(blkins "UniversalBeams_610UB125") 谢谢你的帮助。
不过我还是迷路了。
在tombu的帖子中,我如何将其合并到mnu文件中?
使用BIGAL的代码,我尝试了这一点,但由于错误,mnu文件无法加载。如何写入mnu文件?我也很抱歉,但我发现很难理解你在说什么。另一件事是,如果您有两个单独的图形,并且您复制/粘贴,您可以获得相同的块名吗?
我几年前编译了这段代码。这本书写得不多,而是取自一本关于AutoCAD的参考书,我再也找不到了。请假设我的编码技能不存在。
这是你的菜单行应该看起来像我添加了一行测试,你必须复制并粘贴代码到记事本,并保存Blkins。lsp到支持的Autocad路径,或者编辑(加载“c:\\yourdirectory\\your path\\etc\\Blkins”)以适合,您可以给它取任何您喜欢的名称,只要匹配即可。所以选择“加载块”只需要做一次。
***MENUGROUP=STRUCTURAL_STEEL
***POP12
**CTOPopSTRUCTURAL_STEEL
^c^c(load "blkins")
[->UB]
^C^C(blkins "UniversalBeams_610UB125")
^C^C-INSERT UniversalBeams_610UB125;scale;1;
^C^C-INSERT UniversalBeams_610UB113;scale;1;
^C^C-INSERT UniversalBeams_610UB101;scale;1;
[->UC]
^C^C-INSERT UniversalColumns_310UC158;scale;1;
^C^C-INSERT UniversalColumns_310UC137;scale;1;
^C^C-INSERT UniversalColumns_310UC118;scale;1;
^C^C-INSERT UniversalColumns_310UC96.8;scale;1;
谢谢BIGAL,这对我来说很管用。
我现在将尝试合并不同的部分。
最后一个问题是:
是否可以从脚本文件执行此操作?还是说“.scr”文件不同于“.lsp”文件。
您可以将其设置为自动加载,以便随时可用。请参阅本文。
https://www.cadtutor.net/forum/topic/69468-creating-custom-keyboard-shortcuts-with-multiple-object-snaps/
非常感谢Alan,它似乎起作用了。
干杯 对不起,艾伦,我一直在进步,并提出了一个问题。
如果在任何阶段按取消,则会显示错误消息,无法再次运行(;错误:功能已取消)。我试着在第一行之后添加下面的代码。它有时有效,有时无效。
我想知道这是否可以做到。
-尽可能精简:(1)去掉“名称已存在”的错误消息。(2) 不要求缩放,默认为1(3)不要求旋转,默认为0°。
这是优先考虑的,因为我想减少尽可能多的步骤,插入点是唯一需要的。
如果区块名称相当于一个日期,到最近的一秒,问题会消失吗。。。比如tombu的帖子,周三晚上9:47。
但要理解这是否变得过于繁重。
;; *error* local redefinition
(defun *error* (msg)
(if (/= msg "Function cancelled")
(princ (strcat "\nError: " msg))
)
(if oom
(setvar "osmode" oom)
)
(princ)
) 删除警报行
删除两个getreal并替换为1和0
你在什么地方?否则(setvar'osmode 47)或您的首选值不需要if。
如果您崩溃,它应该再次运行选择菜单。 谢谢你的上述指示,艾伦。
尽管添加了“(setvar’osmode 47)”,但我仍然对取消有问题。
昨天我忘了说的一件事是,AutoCAD上出现了一条错误消息:“名为“tempblk”的块已经存在。”
这是我想将块命名为最接近秒的日期的另一个原因,尽管它不像您的解决方案那样令人满意,但它省略了一个步骤,即使用临时块名称。
不需要再进一步了,因为这取决于我学习更多的LISP并尝试解决。
干杯
; insert a block make a new block with name + 1
; By Alan H Dec 2019 info@alanh.com.au
(defun blkins (blkname / x temp)
;; *error*
(defun *error* (msg)
(if (/= msg "Function cancelled")
(princ (strcat "\nError: " msg))
)
(setvar 'osmode 47)
(princ)
)
(if(tblsearch "BLOCK" blkname)
(progn
; (alert "Block of that name already exists\n \nwill temporary rename")
(command "-rename" "block" blkname "tempblk")
(setq temp 1)
)
)
(if (= (getenv "UB") nil)
(setenv "UB" "0")
)
(setq x (+ (atoi (getenv "UB")) 1))
(setenv "UB" (rtos x 2 0))
(command "-INSERT" blkname (getpoint "\nPick insertion point") 1 "" 0)
(command "-rename" "block" blkname(strcat blkname "-" (rtos x 2 0)))
(if (= temp 1)
(command "-rename" "block" "tempblk" blkname)
)
)
页:
1
[2]