动态块替换失败
尊敬的各位:,我在替换块(标题栏)时遇到问题,它有时是动态块。
当用新块替换块时,当涉及动态块时,我会得到lselsetp nil错误。
我试图做的是:
-我试图通过按名称查找来替换块(因此由于脚本的原因,不需要手动选择)
-读取旧块的坐标
-读取旧块的比例
-删除块
-清除图形中所有未使用的块
-在图形中以正确的比例和坐标插入新的
A0KILL确实适用于静态块,但有人在我们的图形中使用了动态块。现在我必须手工绘制15000张图。
有人能帮我解决这个问题吗?
(旧区块名为OHTITLE,新区块名为OH-TITLE)
(DEFUN C:A0KILL()
(setq OHINS(cdr(assoc 10(entget(ssname(ssget“X”'((2。“OHTITLE”)))0 ()))))))
(setq OHX(cdr(assoc 41(entget(ssname(ssget“X”'((2.“OHTITLE”))0 ()))))))
(setq ss(ssget“X”'((0。“插入”)(2。“OHTITLE”)))
(命令“擦除”ss“”)
(重复3次
(命令“_.purge”“\u B”“*”“\u N”)
) ; 结束重复
(命令
“-插入”;命令
“K:\\AutoCAD Standaard\\2014\\ALGEMEEN\\Kaders\\Titelh\\Nederlands\\A0\\OH-TITLE.DWG”;块名称
OHINS公司
OHX公司
""
)
(setq OHINS nil)
(setqoh OHX无)
(setq ss nil)
)
你好,马塞尔,
动态块有一个动态名称(*U),因此必须获得其有效名称。也许我的RlxBlk可以胜任这份工作,但我需要一些示例图和标题栏来测试它。
gr.Rlx 你好,Rlx,
这是我的积木和样图
尔兹
马塞尔
205088-0003.图纸
OH标题。图纸
OH-TITLE。图纸 霍伊·马塞尔,
认为RlxBlk可以完成这项工作,甚至可能在文件夹上,但你必须自己测试(在备份上)。只需确保清除主对话框中除值切换之外的所有属性属性。在下面的几个帖子里,你可以找到这个惯例。您可以使用1:1按钮链接所有属性,这样您就不必键入所有数据。只需打开一个图形,旧块是OHTITLE(选择与列表按钮旁边的左图),选择新的标题栏与文件按钮旁边的右图,链接的属性,这应该做到这一点。。。
如果成功,您可以尝试使用文件夹按钮创建一个完整的文件夹,但同样,请先在备份上进行测试。
gr.Rlx
我试试Rlx!
但是我可以在没有脚本交互的情况下完成吗?
不是以它当前的形式,它只是我的愿望列表中的一件事,尽管这不是一件大事,因为人们只需要绕过主子程序中的对话框。由于该项目相对较新,因此必须首先赢得我的信心。但是,如果文件夹选项按预期工作,它应该相当快,以便您可以在以后编写脚本。
gr.Rlx
您可以向程序中添加类似的内容(未经测试):
(defun c:RlxBlk_Script ()(RlxBlk_Init)(RlxBlk_Doit)(command ".qsave"))
让脚本加载RlxBlk并使用(c:RlxBlk\u脚本)调用程序。如果脚本保存图形,则可以在代码中释放命令调用。
Gr.Rlx 这可能会有所帮助,因为我尝试将其放在一个命令中。我也有A4和A3标题栏的图纸。他们正在使用我的A0Kill命令,但不是动态块。
这样,我可以一次选择数千个图形并打开它们,执行块替换命令,将属性从我的edm系统同步到新块,qsave并关闭图形,然后继续下一个图形。 如果可以,很好,如果不行,你也可以更新自己的代码,因为我的应用程序在你的情况下可能有点过头了
(快速编写,完全未经测试)
(defun c:A0Kill-2 ( / fn oatr ss i e blk n ohins ohx)
(vl-load-com)
(setq oatr (setvar "ATTREQ")) (setvar "ATTREQ" 0)
(if (and (setq ss (ssget "_X" (list (cons 0 "INSERT") (cons 2 "`*U*,OHTITLE" ))))
(setq fn
(findfile
"K:\\AutoCAD Standaard\\2014\\ALGEMEEN\\Kaders\\Titelh\\Nederlands\\A0\\OH-TITLE.DWG")))
(progn
(repeat (setq i (sslength ss))
(setq obj (vlax-ename->vla-object (setq blk (ssname ss (setq i (1- i))))))
(if (vlax-property-available-p obj 'effectivename)
(setq n (vla-get-effectivename obj))(setq n (vla-get-name obj)))
(if (wcmatch (strcase n) "OHTITLE")
(progn
(setq ohins (cdr (assoc 10 (entget blk))) ohx (cdr (assoc 41 (entget blk))))
(vla-delete obj)
(command "-insert" fn ohins ohx "")
)
)
)
)
)
(vla-purgeall (vla-get-activedocument (vlax-get-acad-object)))
(setvar "ATTREQ" oatr)
(princ)
)
成功!
gr.Rlx 请阅读代码发布指南,并编辑代码以包含在代码标签中。
Your Code Here=
Your Code Here
页:
[1]
2