Guest Brian_MMC 发表于 2022-7-6 08:39:27

爆炸块???

我正在寻找一个LSP或程序,将做以下…
打开a。剖面集中的dwg。
Q选择所有块参照
爆炸
Q选择所有块参照
爆炸
Q选择所有块参照
爆炸
保存
关闭
重复选择集。
关闭程序
如果有人能帮我做这件事或给我指出正确的方向,我将不胜感激。
提前感谢您分享您的才华。
布瑞恩

marko_ribar 发表于 2022-7-6 08:45:38

试试这个:
 

(defun c:3xselexp-cl ( / qaf ss ent enta ) (vl-load-com)
(setq qaf (getvar 'qaflags))
(setvar 'qaflags 1)
(repeat 3
   (setq ss (ssget "_X" '((0 . "INSERT")) ))
   (repeat (setq ssn (sslength ss))
   (setq enta (vlax-ename->vla-object (ssname ss (setq ssn (1- ssn)) )))
   (if (vlax-property-available-p enta 'Path)
       (progn
         (setq ent (vlax-vla-object->ename enta))
         (ssdel ent ss)
       )
   )
   )
   (if ss
   (command "_.explode" ss "")
   )
)
(setvar 'qaflags qaf)
(princ)
)

(defun c:nxop3xexcl ( lspf / scrf filens path )
(setq scrf (open "c:/opexpclall.scr" "w"))
(setq filens (vl-directory-files (setq path (vl-filename-directory (getfiled "Pick one dwg in dirctory where are all other dwgs stored" "" "dwg" )) "*.dwg"))
(repeat (strlen path)
   (setq path (vl-string-subst (chr 47) (chr 92) path))
)
(foreach f filens
   (progn
   (princ "_.open" scrf)
   (princ "\n" scrf)
   (prin1 (strcat path (chr 47) f) scrf)
   (princ "\n" scrf)
   (princ "(setq lspflg T)" scrf)
   (princ "\n" scrf)
   (princ (strcat "(load \"" lspf "\")") scrf)
   (princ "\n" scrf)
   (princ "3xselexp-cl" scrf)
   (princ "\n" scrf)
   (princ "_.qsave" scrf)
   (princ "\n" scrf)
   )
)
(princ "_.shell" scrf)
(princ "\n" scrf)
(princ "erase c:\\opexpclall.scr" scrf)
(princ "\n" scrf)
(princ "_.closeall" scrf)
(princ "\n" scrf)
(close scrf)
(command "_.script" "c:/opexpclall.scr")
(princ)
)

(if (eq lspflg nil)
(progn
   (setq lspf (getfiled "SELECT LSP FILE THAT YOU JUST LOADED" "" "lsp" )
   (repeat (strlen lspf)
   (setq lspf (vl-string-subst (chr 47) (chr 92) lspf))
   )
   (c:nxop3xexcl lspf)
)
)
(princ)
M.R。

Guest Brian_MMC 发表于 2022-7-6 08:55:40

Marko_ribar,
首先,谢谢你的帮助。我不确定我做错了什么,但我不断得到以下信息。
命令:AP
已成功加载APPLOAD 3xselexp-cl.lsp。
命令:;错误:错误的参数类型:FILE nil
命令:
我尝试了几个不同的文件和位置,得到了相同的结果,有什么想法吗?

marko_ribar 发表于 2022-7-6 09:01:06

尝试将我的代码保存在与AP不同的文件中。lsp(AP是appload命令的别名,我从未使用过appload-而是使用了(load“…”)。。。我的代码在:nxop3xexcl下。lsp。。。加载lsp后,应首先再次选择加载的lsp,然后选择一个*。dwg位于所有其他文件*所在的目录中。存储open-3xselectexplode的dwg。。。我已经检查了我的2台电脑上的代码,它甚至可以在ACAD 2008上运行。。。老实说,我不太清楚错误发生在哪里。。。
 
M、 R。

marko_ribar 发表于 2022-7-6 09:06:25

代码在第一次发布中更改。。。
 
M、 R。

Guest Brian_MMC 发表于 2022-7-6 09:08:37

做了一些之后,我和史蒂夫一起挖掘。他猜测这与我电脑的管理权或反病毒软件有关。不允许系统创建opexpclall。运行LSP时,C:\drive上的scr。他做了一个工作,让它迈克和找到文件在我的临时文件夹,它的工作像一个冠军。谢谢你们的帮助。

SLW210 发表于 2022-7-6 09:13:34

Brian_MMC公司
 
请阅读代码发布指南并编辑您的帖子。

marko_ribar 发表于 2022-7-6 09:18:46

我更新了我的第一篇帖子,此外,我还编写了可以保存*的代码。仅当在中找到块时才使用dwg。。。下面是代码:
 

(defun c:3xselexp-cl ( / qaf ss ent enta ) (vl-load-com)
(setq qaf (getvar 'qaflags))
(setvar 'qaflags 1)
(repeat 3
   (setq ss (ssget "_X" '((0 . "INSERT")) ))
   (repeat (setq ssn (sslength ss))
   (setq enta (vlax-ename->vla-object (ssname ss (setq ssn (1- ssn)) )))
   (if (vlax-property-available-p enta 'Path)
       (progn
         (setq ent (vlax-vla-object->ename enta))
         (ssdel ent ss)
       )
   )
   )
   (if ss
   (if (> (sslength ss) 0)
       (progn
         (command "_.explode" ss "")
         (setq expflg T)
       )
   )
   )
)
(setvar 'qaflags qaf)
(princ)
)

(defun c:nxop3xexcl ( lspf / scrf filens path )
(setq scrf (open "c:/opexpclall.scr" "w"))
(setq filens (vl-directory-files (setq path (vl-filename-directory (getfiled "Pick one dwg in dirctory where are all other dwgs stored" "" "dwg" )) "*.dwg"))
(repeat (strlen path)
   (setq path (vl-string-subst (chr 47) (chr 92) path))
)
(foreach f filens
   (progn
   (princ "_.open" scrf)
   (princ "\n" scrf)
   (prin1 (strcat path (chr 47) f) scrf)
   (princ "\n" scrf)
   (princ "(setq lspflg T)" scrf)
   (princ "\n" scrf)
   (princ (strcat "(load \"" lspf "\")") scrf)
   (princ "\n" scrf)
   (princ "3xselexp-cl" scrf)
   (princ "\n" scrf)
   (princ "(if (eq expflg T) (command \"_.qsave\"))" scrf)
   (princ "\n" scrf)
   )
)
(princ "_.shell" scrf)
(princ "\n" scrf)
(princ "erase c:\\opexpclall.scr" scrf)
(princ "\n" scrf)
(princ "_.closeall" scrf)
(princ "\n" scrf)
(close scrf)
(command "_.script" "c:/opexpclall.scr")
(princ)
)

(if (eq lspflg nil)
(progn
   (setq lspf (getfiled "SELECT LSP FILE THAT YOU JUST LOADED" "" "lsp" )
   (repeat (strlen lspf)
   (setq lspf (vl-string-subst (chr 47) (chr 92) lspf))
   )
   (c:nxop3xexcl lspf)
)
)
(princ)

 
这是我最后的结果。。。(命令“_.explode”ss)有一些问题(而(不是(eq(getvar'cmdactive)0))(命令“”)
 
希望这最终能有所帮助。。。如果您仍然无法在c:\drive的根目录下创建和删除文件,只需将drive更改为d:\,但请确保在c:\OPEXPCall所在的所有位置都更改了字母。scr文件发生。。。
 
M、 R.(Marko Ribar,d.i.a.毕业于建筑学工程师)

Organic 发表于 2022-7-6 09:26:03

我希望在完成架构组件后,不要将dwg发送给任何其他人。其他人对分解块高度不满。例外情况是,如果您使用垂直产品,并且必须扩展其动态功能,以便其他人可以查看它。

alanjt 发表于 2022-7-6 09:33:05

 
如果要单步执行选择集,只需对其使用vla分解,或单步执行块并创建一个外部参照名称列表,以便在ssget过滤器中忽略。
页: [1] 2
查看完整版本: 爆炸块???