tombu 发表于 2022-7-6 23:47:43

如果有帮助的话,这将生成一个随机名称,使用当前日期将其转换为十六进制,直到最近的一秒。

(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))
        )
)

BIGAL 发表于 2022-7-6 23:50:49

尝试此操作,它将随时添加数字以重置数字,因此(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")

sketch11 发表于 2022-7-6 23:52:17

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

BIGAL 发表于 2022-7-6 23:57:04

这是你的菜单行应该看起来像我添加了一行测试,你必须复制并粘贴代码到记事本,并保存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;
 

sketch11 发表于 2022-7-7 00:01:34

谢谢BIGAL,这对我来说很管用。
我现在将尝试合并不同的部分。
 
最后一个问题是:
 
是否可以从脚本文件执行此操作?还是说“.scr”文件不同于“.lsp”文件。
 

BIGAL 发表于 2022-7-7 00:01:53

您可以将其设置为自动加载,以便随时可用。请参阅本文。
 
https://www.cadtutor.net/forum/topic/69468-creating-custom-keyboard-shortcuts-with-multiple-object-snaps/
 
 

sketch11 发表于 2022-7-7 00:06:45

非常感谢Alan,它似乎起作用了。
干杯

sketch11 发表于 2022-7-7 00:08:33

对不起,艾伦,我一直在进步,并提出了一个问题。
如果在任何阶段按取消,则会显示错误消息,无法再次运行(;错误:功能已取消)。我试着在第一行之后添加下面的代码。它有时有效,有时无效。
 
我想知道这是否可以做到。
-尽可能精简:(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)
)

BIGAL 发表于 2022-7-7 00:14:16

删除警报行
 
删除两个getreal并替换为1和0
 
你在什么地方?否则(setvar'osmode 47)或您的首选值不需要if。
 
如果您崩溃,它应该再次运行选择菜单。

sketch11 发表于 2022-7-7 00:15:40

谢谢你的上述指示,艾伦。
 
尽管添加了“(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]
查看完整版本: 从下拉菜单插入块