dmallette 发表于 2022-7-6 14:38:00

使用LISP/VB帮助拉取bloc

我的处境很糟糕,我现在工作的办公室里的前cad人员决定,当他以不好的条件离开时,他会拿走所有的章节/细节,基本上是任何在下一个cad人员离开公司时对他有帮助的东西。
 
我正在寻找任何方法,从备份和服务器上留下的少数图形中提取任何/所有块,这样我就可以尝试恢复以前在这里的部分内容,而不必逐个文件,提取并重新保存每个部分和细节,以帮助重建曾经在这里的部分内容。
 
提前感谢您提供的所有帮助!!!
 
杜威槌

CmdrDuh 发表于 2022-7-6 14:45:08

这是可以做到的。您是否查看了一些旧的DWG,发现存在块,或者它们被插入并分解了

dmallette 发表于 2022-7-6 14:47:46

有些爆炸了。但也有一些图纸没有爆炸,也没有完好无损。
 
提前谢谢。
 
DM公司

CmdrDuh 发表于 2022-7-6 14:51:01

让我看看我能做些什么

Lee Mac 发表于 2022-7-6 14:56:15

我在想形式:
 
但是我不知道如何对“wblock”行进行编码如果这有任何帮助。。。

dmallette 发表于 2022-7-6 14:59:29

你是怎么运作的?
我对VBA或LISP一点都不熟悉。
 
谢谢
DM公司

Lee Mac 发表于 2022-7-6 15:01:31

要运行LISP文件,请执行以下操作:
[列表=1]
[*]将发布的代码复制到新的记事本文档中。
[*]保存文档-确保将“.txt”更改为“.lsp”,并将下拉框更改为“所有文件”,而不是“文本文档”
[*]打开ACAD
[*]在命令行中键入“\u appload”,或单击工具,加载应用程序
[*]选择保存的文件
[*]单击“加载”
[*]在命令提示符中键入LISP代码中指定的语法在我的Lisp程序中:“bs”或“blocksave”。
[*]LISP将运行
[*]作为旁注,您可以单击“加载应用程序”对话框中的“启动套件”,并将LISP添加到套件中,使其在每次加载ACAD时加载。
很明显,我的LISP不会加载或运行,因为它缺少一行代码——正如代码上标记的那样。
 
但是,如果有其他人的意见,我相信我们能找到解决方案。

Lee Mac 发表于 2022-7-6 15:06:29

在internet上找到此LISP(未测试):
 


;;;==WBLKALL.LSP=====================================================
;;;(C) 1993, Chris Bryant (CIS 72570,1012)
;;;
;;;This program WBLOCKs all block definitions in a drawing.
;;;Features include:
;;;
;;;1.Writes the block to the current directory.
;;;
;;;2.Prompts user for new name if the block name is
;;;      more than 8 characters long.
;;;
;;;3.If a .DWG file with the same name already exists,
;;;      WBLKALL will ask permission first before overwriting.
;;;
;;;==================================================================

(prompt "\nWBLKALL.LSP - (C) 1993, Chris Bryant\nLoading ...")

;---------------------------------------------------------------------

(defun C:WBLKALL (/ EXPR CNT BLK_NAME BLK_LIST WBLOK WBLK L YN)
(setq EXPR (getvar "expert"))
(setvar "EXPERT" 4)
(setq CNT 0)
(setq BLK_NAME (cdr (assoc 2 (tblnext "BLOCK" T)))
       BLK_LIST (list BLK_NAME))
(prompt "\nBuilding block list ...")
(while (/= BLK_NAME nil)
   (setq BLK_NAME (cdr (assoc 2 (tblnext "BLOCK"))))
   (if (/= BLK_NAME nil)
   (setq BLK_LIST (cons BLK_NAME BLK_LIST))
   )
)
(prompt "\nWriting blocks .")
(while (/= BLK_LIST nil)
   (setq WBLOK (car BLK_LIST)
         BLK_LIST (cdr BLK_LIST)
   )
   (if (/= (substr WBLOK 1 1) "*")
   (progn
       (setq CNT (1+ CNT))
       (princ ".")
       (if (> (strlen WBLOK)
         (progn
         (setq WBLK WBLOK)
         (prompt (strcat "\nBlock name " WBLOK " is too long!"))
         (setq L T)
         (while (= L T)
             (setq WBLK (getstring
                        "\nEnter new block name, 8 characters or less: "
                        ))
             (if (or (> (strlen WBLK)(= WBLK ""))
                   (prompt "\nInvalid response.")
                   (setq L nil)
             )
         )
         (if (/= BLK_LIST nil) (prompt "\nWriting blocks ."))
         )
         (setq WBLK WBLOK)
       )
       (if (equal (open (strcat WBLK ".DWG") "r") nil)
         (command "wblock" WBLK WBLOK)
         (progn
             (initget 1 "Yes No")
             (setq YN (getkword
                         (strcat
                           "\nFile " WBLK ".DWG exists. Replace? <Y/N> "
                         )))
             (if (equal YN "Y") (command "wblock" WBLK WBLOK))
             (prompt "\nWriting blocks .")
         )
       )
   )
   )
)
(setvar "EXPERT" EXPR)
(prompt "\n ")
(prompt "\nWBlocking complete.")
(princ)
)
;----------------
(prompt " done.")
(princ)


 
可能会有帮助。

Lee Mac 发表于 2022-7-6 15:10:33

哈哈,我的尝试是:
 
批评非常受欢迎——代码中有很多假设——对此并不满意——但它确实起到了作用
 
2
 
让我开始
 
可能的问题:
 
[列表]
[*]如果计算机上有名为blk01或blk13的文件,这些文件可能会被覆盖。
[*]不确定文件将保存在哪里。
[*]基点始终是原点。
可能还有很多问题需要提出。。。

dmallette 发表于 2022-7-6 15:14:39

非常感谢你!
 
它正在工作。不幸的是,他似乎爆发得更多
比我原先想象的要多。
 
它不会从文件中提取很多块。
 
在50多个文件中,我已经设法拉出了大约7个街区。
其中大多数是标题和其他信息
不会有帮助的。
 
如果任何人有任何章节/详细信息,他们可以发送
以我的方式,我将不胜感激!!
 
 
谢谢你!
 
DM公司
页: [1] 2
查看完整版本: 使用LISP/VB帮助拉取bloc