使用LISP/VB帮助拉取bloc
我的处境很糟糕,我现在工作的办公室里的前cad人员决定,当他以不好的条件离开时,他会拿走所有的章节/细节,基本上是任何在下一个cad人员离开公司时对他有帮助的东西。我正在寻找任何方法,从备份和服务器上留下的少数图形中提取任何/所有块,这样我就可以尝试恢复以前在这里的部分内容,而不必逐个文件,提取并重新保存每个部分和细节,以帮助重建曾经在这里的部分内容。
提前感谢您提供的所有帮助!!!
杜威槌 这是可以做到的。您是否查看了一些旧的DWG,发现存在块,或者它们被插入并分解了 有些爆炸了。但也有一些图纸没有爆炸,也没有完好无损。
提前谢谢。
DM公司 让我看看我能做些什么 我在想形式:
但是我不知道如何对“wblock”行进行编码如果这有任何帮助。。。 你是怎么运作的?
我对VBA或LISP一点都不熟悉。
谢谢
DM公司 要运行LISP文件,请执行以下操作:
[列表=1]
[*]将发布的代码复制到新的记事本文档中。
[*]保存文档-确保将“.txt”更改为“.lsp”,并将下拉框更改为“所有文件”,而不是“文本文档”
[*]打开ACAD
[*]在命令行中键入“\u appload”,或单击工具,加载应用程序
[*]选择保存的文件
[*]单击“加载”
[*]在命令提示符中键入LISP代码中指定的语法在我的Lisp程序中:“bs”或“blocksave”。
[*]LISP将运行
[*]作为旁注,您可以单击“加载应用程序”对话框中的“启动套件”,并将LISP添加到套件中,使其在每次加载ACAD时加载。
很明显,我的LISP不会加载或运行,因为它缺少一行代码——正如代码上标记的那样。
但是,如果有其他人的意见,我相信我们能找到解决方案。 在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)
可能会有帮助。 哈哈,我的尝试是:
批评非常受欢迎——代码中有很多假设——对此并不满意——但它确实起到了作用
2
让我开始
可能的问题:
[列表]
[*]如果计算机上有名为blk01或blk13的文件,这些文件可能会被覆盖。
[*]不确定文件将保存在哪里。
[*]基点始终是原点。
可能还有很多问题需要提出。。。 非常感谢你!
它正在工作。不幸的是,他似乎爆发得更多
比我原先想象的要多。
它不会从文件中提取很多块。
在50多个文件中,我已经设法拉出了大约7个街区。
其中大多数是标题和其他信息
不会有帮助的。
如果任何人有任何章节/详细信息,他们可以发送
以我的方式,我将不胜感激!!
谢谢你!
DM公司
页:
[1]
2