AutoCAD 將配置複製到另一個檔案
很多時候會需要製作多個設定相同配置的檔案,而減少重複製作時間,就是從別的檔案複製過來。
方法一:設計中心(指令ADCENTER)
此方法優點:可以一次複製多個配置到目前檔案
而缺點:必須打開要從位置來源的檔案
另外,此方法也可以適用複製圖層、文字型式、線型....等
方法二:配置的從樣板
1.指令:layout
輸入配置選項 [複製(C)/刪除(D)/新建(N)/樣板(T)......
選取[樣板(T)]
或是對配置按右鍵->從樣板
2.選取複製來源檔案
3.選取要複製的配置(可複選)
此方法優點:可以一次複製多個配置到目前檔案,並不用打開來源檔案
而缺點:
方法三:LISP
此方法優點:可以一次複製多個配置,並不用打開來源檔案
而缺點:不能打開來源檔案
此程式修改一小部分也可以變成將配置複製到其他檔案
(defun c:layouts (/ fname)
(and (setq fname (getfiled "選取匯入配置來源的圖面" "" "dwg" 0))
(imp_layouts fname)
)
(princ)
)
(defun imp_layouts (source / *acad* doc l_import odbx Doctest
path lays l_list)
(vl-load-com)
(setq *acad* (vlax-get-acad-object)
doc (vla-get-activedocument *acad*))
;;**** 檢查來源檔案是否開啟
(vlax-for oDoc (vla-get-documents *acad*)
(if (= (vla-get-fullname oDoc) source)
(setq Doctest t)))
(if (and (not Doctest) (findfile source))
(progn ;_確保 ObjectDBX 可用
(if (> (setq versn (atoi (getvar "AcadVer"))) 15)
(setq oDBX (vla-GetInterfaceObject
*acad* (strcat "ObjectDBX.AxDbDocument." (itoa versn))))
(progn
(if (not (vl-registry-read
"HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"))
(startapp "regsvr32.exe"
(strcat "/s \"" (findfile "axdb15.dll") "\""))
);_if
(setq oDBX (vla-GetInterfaceObject
*acad* "ObjectDBX.AxDbDocument"))
);_progn
);_if
(vla-open oDBX source);_打開來源檔案
(setq lays (vla-get-layouts oDBX));_來源配置集合
(if (> (vla-get-count lays) 1);_確保有配置要匯入
(progn
(vlax-for x lays ;_循環配置集合並檢查名稱
;; 如此圖面中存在則省略
(if (not (or (= "Model" (vla-get-name x))
(member (vla-get-name x) (layoutlist))))
(setq l_list (append (list x) l_list )
b_list (append (list (vla-get-block x)) b_list))
);if
);for
(setvar "ctab" "Model")
(if l_list
(progn
(setq l_import (vlax-safearray-fill
(vlax-make-safearray vlax-vbObject
(cons 0 (- (length l_list) 1))
) l_list)
b_import (vlax-safearray-fill
(vlax-make-safearray vlax-vbObject
(cons 0 (- (length b_list) 1))
) b_list)
);_建立用於 ActiveX 方法的 safearray
(vla-copyobjects oDBX l_import (vla-get-layouts doc))
(vla-copyobjects oDBX b_import (vla-get-blocks doc))
(foreach x (layoutlist)
(cond ((= x "Layout1")(vla-delete (vla-item (vla-get-layouts doc) x)))
((= x "Layout2")(vla-delete (vla-item (vla-get-layouts doc) x)))
)
)
(princ (strcat "\n配置導入成功: "
(itoa (length l_list))))
;; 導入佈局
);_progn
(princ "\n沒有要從來源圖面匯入的新版面配置...")
);_if
);_progn
(princ "\n抱歉,在來源圖面中找不到配置,請重試。")
);_if
(vlax-release-object oDBX);_釋放物件
);_progn
(progn
(if doctest
(princ "\n您嘗試使用 Autocad 正在使用的文件,請關閉它並重試...")
(princ "\n找不到原始文件,請重試......")
);_if
);_progn
);_if
(princ);_悄悄退出
);_defun
留言
張貼留言