i小小白i
发表于 2024-8-24 21:08:53
感谢楼主的源码,非常nice ! 有个问题请教,使用你这个方法,试图不开图删除图纸中多余的布局,在(vla-delete layoutname)时出错“错误: Automation 错误。 不存在可删除的布局”,纠其原因是因为vla-delete是在当前打开的图纸里执行的,如何解决这个问题,有方法吗?
i小小白i
发表于 2024-8-25 14:35:23
i小小白i 发表于 2024-8-24 21:08
感谢楼主的源码,非常nice ! 有个问题请教,使用你这个方法,试图不开图删除图纸中多余的布局,在(vla-del ...
代码是这样的:
flst=(("c:\\drawing1" "A1")("c:\\drawing2" "A2")("c:\\drawing3" "A3")
(foreach x flst
(setq f (car x) y (cadr x))
(setq ados (LM:GetDocumentObject (vlax-get-acad-object) f))
(setq msop (vla-get-ModelSpaceados))
(setq lyts (vla-get-layouts ados))
(vlax-for lyi lyts
(setq lyiname (vla-get-name lyi))
(if (and (/= lyiname "Model") (/= lyiname y))
(vla-delete lyi);;运行到这里出错
)
)
(vla-saveas ados f)
(vlax-release-object ados)
)
饼仲郎
发表于 2024-8-26 11:49:05
大哥讲究,还搞了两版,辛苦了
lee50310
发表于 2024-8-26 14:28:01
本帖最后由 lee50310 于 2024-8-26 17:59 编辑
i小小白i 发表于 2024-8-25 14:35
代码是这样的:
flst=(("c:\\drawing1" "A1")("c:\\drawing2" "A2")("c:\\drawing3" "A3")
我試過 情況與你相同, 很抱歉! 目前還沒有辦法解決!
在不開圖上 1f.dw 的 布局空間 新增 "配置1" "配置2"
及 開啟的圖面上 的 布局空間 也新增 "配置1" "配置2"
然後執行程式希望不開圖情況下刪除 1f.dwg 的 "配置2"
結果居然 是刪除當下開啟圖檔的 "配置2"
並出現 "不存在可删除的布局"
所以初步判斷 (vla-delete obj)這個刪除指令 只能針對當下的圖檔做刪除
i小小白i
发表于 2024-8-27 09:22:32
lee50310 发表于 2024-8-26 14:28
我試過 情況與你相同, 很抱歉! 目前還沒有辦法解決!
在不開圖上 1f.dw 的 布局空間 新增 "配置1" " ...
的确很奇怪!但在你原始的代码里同样使用了(vla-delete**)指令,用来删除炸开前的源物件,而当用作删除布局对象时却不能生效了~~~,似乎是这个指令的bug.(vla-explode obj) ;1.(Vlax-Invoke-Method obj 'Explode) , 2. (vla-explode obj) 3.(vlax-invoke obj 'explode)
(vla-deleteobj) ;vla的炸开方法会先对来源物件进行复制然后炸开,故 之后应删除来源物件
(setq i(+ i 1))
水洗可口可乐
发表于 2024-9-2 10:26:24
lee50310 发表于 2024-8-19 15:53
可以做到 要處理 塊,弧,圓,多行文字, 文字......線段等
假如 要處理的目的資料夾 bk-test 內有一 圖檔...
感谢,有时间,按你的指引我自己摸索一下修改。谢谢你
yyz123121
发表于 2024-9-15 00:04:28
大神你好,请问下不需要炸块,也不需要对图层操作,只是“清理”一遍并保存,应该保留哪几行代码?
lee50310
发表于 2024-9-15 04:07:39
本帖最后由 lee50310 于 2024-9-15 04:17 编辑
yyz123121 发表于 2024-9-15 00:04
大神你好,请问下不需要炸块,也不需要对图层操作,只是“清理”一遍并保存,应该保留哪几行代码?
將程式中
.
.
(setq acdoc(LM:GetDocumentObject (vlax-get-acad-object) filePath)) ;獲取活動文檔對象
(setq msop (vla-get-ModelSpaceacdoc)) ; 取模型空間的對象
;|------------------------------ 當成註解-----START
(setq nt (vla-get-count msop) i 0 j 0) ;取得變體合集之總數量, 炸開物體數量i,j清為 0)
(vlax-for obj msop
(setqsel_objtype (vla-get-objectname obj))
(cond
((= sel_objtype "AcDbBlockReference") ;判斷物體是否為 block ,若是則炸開
;炸開物體三種寫法皆可
(vla-explode obj)
(vla-deleteobj)
(setq i(+ i 1))
)
);end_cond
(setq j(+ j i))
);end_vlax-for
(layall_trueacdoc) ;打開,解凍,解鎖所有圖層
|;------------------------------ 當成註解-----END
(if (= 1 (getvar 'dwgtitled))
(progn
(repeat 3 (vla-purgeall acdoc)) ; PURGE 指令清理圖形
);end_progn
);end_if
(vla-saveas acdoc filePath) ;存檔
(vlax-release-object acdoc) ;釋放後,繪圖物件不再可以透過 obj存取
)
)
(alert "未選擇任何文件夾.")
);end_if
yyz123121
发表于 2024-9-17 13:56:22
感谢回复,谢谢!
yyz123121
发表于 2024-9-17 15:35:45
; 错误: 参数类型错误: fixnump: nil
我做了几个文件实验,出来这个错误,
在飞诗上提示