Sponsored links

【AutoLISP サンプル】レイアウトを1つづつ別dwgファイルにして保存

Sponsored links
AutoLISP
Sponsored links
Jagaimo
Jagaimo

レイアウトタブを1つづつ別の図面ファイルとして保存か図面全体をWBLOCK書き出しをするコマンドの紹介です。

Sponsored links

コマンドの内容

概要

1つのdwgファイルにレイアウトのタブを複数作って作業するけれど、最後には一つのdwgファイルにレイアウトタブは1つだけにしたい。もしくは、このレイアウトタブだけ欲しい。ということがありまして、このコマンドを作ってみました。

例えば、この図面ファイルJagaimoLISP.dwg、4つのレイアウトタブがあります。

このコマンドを使うと、それぞれのレイアウトタブが独立したdwgになって同じフォルダに保存されます。モデルスペースはそのまま同じです。

オプション

これはダイアログボックス付きのコマンドです。3種類のオプション設定が必要です。

私の環境では、ダイアログボックスは日本語表示できずローマ字にしたらさらに見にくくなったので、英語表示になってます。

保存オプション 保存かWBlock

1つ目のオプションは、保存に関することです。

  • Normal Save  保存
  • W-Block WBLOCKで図面全体を書き出し

タブを、図面として普通に保存するか、WBLOCKかの選択です。

WBLOCK書き出しについては、
WBLOCK図面書き出しにすると、使われていないブロックや画層や印刷設定などすべて消えます。
でも、その分ファイルは軽くなるので、このタブとモデルスペースにある物以外は要らない時に便利です。

名前オプション タブ名.dwg か、図面名-タブ名.dwg

2つ目のオプションは、図面の名前に関することです。

  • TabName.dwg  タブ名.dwg
  • FileName-TabName.dwg 図面名-タブ名.dwg

TabName.dwg (タブ名.dwg)を選んだ場合、以下のように出力されます。

FileName-TabName.dwg (図面名-タブ名.dwg)を選んだ場合は以下のようになります。

すべてのレイアウトか現在のレイアウトのみ

3つ目のオプションは、すべてのレイアウトか、現在のレイアウトのみかの選択です。

  • All Tabs  すべてのレイアウトタブ
  • Only Current Tab  現在のレイアウトタブのみ

コマンド名

コマンド名は、TabSaveです。

AutoLISP サンプル

AutoCADがフリーズして強制終了になった場合に備えて、AutoLISPをテストするときは、必ず、バックアップを用意するか、必要なデータが入っていないテスト用のファイルで試してください。

AutoLISP


;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
;JagaimoLisp TabSave
;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
(defun c:TabSave ()
	(setq dclfile "TabSave.DCL")
		
		(setq dcl_id (load_dialog dclfile))		
			(if(new_dialog "TabSave_dlg" dcl_id)
				(progn
;・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・  

	(if (null g07_Save) (setq g07_Save "S"));if
	(set_tile "Save" g07_Save)
	(if (null g07_Name) (setq g07_Name "T"));if
	(set_tile "Name" g07_Name)
	(if (null g07_All) (setq g07_All "A"));if
	(set_tile "All" g07_All)
				
;・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・  
	(action_tile "accept" "(Jaga07_GetVar)(done_dialog 1)")
	(action_tile "cancel" "(done_dialog 0)")
;・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
	(setq Act (start_dialog))
	(unload_dialog dcl_id)
	(if (= Act 1)
		(Jaga07Action)
	);if
		);progn else
			(princ (strcat "error:" dclfile "cannot be found"))
			);if
			
);defun
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Jaga07_GetVar ()
	(setq g07_Save (get_tile "Save")
		  g07_Name (get_tile "Name")
		  g07_All (get_tile "All")
	);setq
(princ));defun
;+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-+:-+:-+:-+:-+
;+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-:+:-+:-+:-+:-+:-+


;*************************************************************************
(defun Jaga07Action ()	
	(cond 
		((= g07_All "C")(Jaga07_cur))
		((= g07_All "A")(Jaga07_all))
	);cond
(princ))
;*************************************************************************
;--------------------------------------------------------
(defun Jaga07_cur (/ AllTb KeepTb DltTbs Cnt SvNm )
(Jaga07START)
	(setq AllTb (layoutlist))
	(setvar "filedia" 0)
			
	(command-s "._undo" "Be")(setq Jaga07flg 1)
		(setq KeepTb (getvar "ctab"))
		(setq DltTbs (vl-remove KeepTB AllTb))
	
			(setq cnt 0)
		(repeat (length DltTbs)		
				(command "_.layout" "Delete" (nth cnt DltTbs))
			(setq cnt (1+ cnt))
		);repeat
		
		(if (= g07_Name "FT")
			(setq SvNm (strcat (getvar "dwgprefix") (vl-filename-base (getvar "dwgname")) "-" KeepTb ".dwg"))
			(setq SvNm (strcat (getvar "dwgprefix") KeepTb ".dwg"))
		);if

		(if (= g07_Save "S")
			(command-s "._save" SvNm );else
			(command-s "._wblock" SvNm "*")
		)if
			
		(if (= Jaga07flg 1)(progn
			(command-s "._undo" "End")
			(command-s "._undo" "1")
			(setq Jaga07flg 0)
		));if progn
		
(Jaga07END)
(princ "Saved Only Current Tab")
);defun	

;--------------------------------------------------------

(defun Jaga07_all (/ AllTb Cnt1 KeepTb DltTbs SvNm Cnt2 ObjNum YN )
(Jaga07START)
	(setq AllTb (layoutlist))
	(setvar "filedia" 0)
	
	(setq Cnt1 0)
	(repeat (length AllTb)
		(command-s "._undo" "Be") (setq Jaga07flg 1)
			(setq KeepTb (nth Cnt1 AllTb))
			(setq DltTbs (vl-remove KeepTB AllTb))
			(Setvar "ctab" KeepTb)
		
			(setq cnt2 0)
				(repeat (length DltTbs)		
					(command "_.layout" "Delete" (nth cnt2 DltTbs))
					(setq cnt2 (1+ cnt2))
				);repeat2
				
	(command-s "._zoom" "e")		
	
		(if (= g07_Name "FT")
			(setq SvNm (strcat (getvar "dwgprefix") (vl-filename-base (getvar "dwgname")) "-" KeepTb ".dwg"))
			(setq SvNm (strcat (getvar "dwgprefix") KeepTb ".dwg"))
		);if
		
				
		(if (= g07_Save "S")	
			(command-s "._save" SvNm );else
			(command-s "._wblock" SvNm "*")
		);if
		
		(if (= Jaga07flg 1)(progn
			(command-s "._undo" "End")
			(command-s "._undo" "1")
			(setq Jaga07flg 0)
		));if progn
	(setq cnt1 (1+ cnt1))
	);repeat1
	
(Jaga07END)
(princ "Saved All Tabs")
);defun	

;-------------------------------------------------------
;;ERROR for Jaga07
;-------------------------------------------------------
(defun Jaga07START ()
	(setq DefError *error*)
	(setq *error* Jaga07ERR)
	(setq DefCmdEcho (getvar "CMDECHO"))
	(setvar "CMDECHO" 0)
(princ "\nJaga07START\n")
(princ));defun
;-------------------------------------------------------
(defun Jaga07END ()
	(setvar "filedia" 1)
	(setq *error* DefError)
	(setvar "CMDECHO" DefCmdEcho)

(princ "\n=========== JagaimoLISP.com ===========")
(princ));defun

;-------------------------------------------------------
(defun Jaga07ERR (msg)
	(if (= Jaga07flg 1)(progn
		(command-s "._undo" "End")
		(command-s "._undo" "1")
		(setq Jaga07flg 0)
	));if progn
	(Jaga07END)
	(setq *error* DefError) 
(princ "\nJaga07ERR\n")
(princ));defun
;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

(princ "Jaga07 loaded")(princ)

TabSave.dcl DCL ダイアログボックスファイル

TabSave.dcl という名前で、検索パスにあるサポートフォルダに保存してください。
AutoLISPで呼び出します。

// // // // // // // // // // 
// JagaimoLisp TabSave DCL
// // // // // // // // // // 

TabSave_dlg :dialog {label= "JagaimoLISP TAB Save Ver.202003";

:radio_column{label="[Save Option]";key="Save"; 
			:radio_button{label="Normal Save"; key="S";}
			:radio_button{label="W-Block"; key="W";}
		} // RADIO	COLUMN END
:spacer{height=1;}
		
:radio_column{label="[Name Option]";key="Name"; 
			:radio_button{label="TabName.dwg"; key="T";}
			:radio_button{label="FileName-TabName.dwg"; key="FT";}
		} // RADIO	COLUMN END

:spacer{height=1;}
		
:radio_column{label="[All Tab or Current Tab]";key="All"; 
			:radio_button{label="All Tabs"; key="A";}
			:radio_button{label="Only Current Tab"; key="C";}
		} // RADIO	COLUMN END
errtile;
ok_cancel;
	
	} //DIALOG END

検索パスにあるサポートフォルダ

検索パスにあるサポートフォルダに保存 がよくわからないかたはこちらの記事の
「方法4 サポートフォルダに入れて他のLispから読み込む」
を参考にしてください。

サンプル記事一覧

Comments