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

 
 
留言
張貼留言