レイアウトタブを1つづつ別の図面ファイルとして保存か図面全体をWBLOCK書き出しをするコマンドの紹介です。
コマンドの内容
概要
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