レイヤ切り替え型連続印刷
ひとつのファイルに、平面図や立面図、断面図などをレイヤに分けて作図している人向けに、選択レイヤを切り替えて連続プリントするプラグイン・メニューです。登録画面も選択してプリントすることができます。
Vector からダウンロードする方は、下記リンクへ移動してください。
使い方
スクリプトを実行すると、自動的にレイヤリストを表示したダイアログが開きますので、印刷したいレイヤや登録画面をを選択し、部数を入力してください。複数のレイヤを選択するときは、Ctrl キーや Shift キーを押しながら選択してください。
注意点
- 白黒表示を自動的に ON にします。
- カラーレイヤを自動的に OFF にします。
- 補助線クラス(印刷非表示クラス)は、スクリプトで「補助線」と「補助グリッド」に設定していますが、自動的に非表示になりません。(なぜか HideClass が全てのスクリプト実行後に実行されてしまいます。原因不明です)よって、事前に非表示クラスを非表示にしてから実行してください。私は、AutoHotkey を利用して非表示クラス非表示スクリプト実行後にこの連続印刷スクリプトを実行しています
- 最下位のレイヤは、図枠レイヤで常に表示されることを前提としています
- 動作確認ですが、制作者の環境は、Windows 7 + Vectorworks2011 です。Windows 8.1 + Vectorworks 12.5 での動作も確認しています。
{*******************************************************************************
ContinuousPrint 兵藤事務所(レイヤ切替)バージョン
Copyright 2014 兵藤善紀建築設計事務所
www.hyodo-arch.com
今後の課題 設定の一般化。ビューポートなども調べてみる。
2014.03.25 Ver 0.23 登録画面をリストアップしてみる
2014.03.20 Ver 0.22 印刷順序を下のレイヤから上のレイヤにする
2014.03.18 Ver 0.21 セッティングログを取る
2014.03.17 Ver 0.20 モダンブラウザを使ってのレイヤ切替型の連続印刷
*******************************************************************************}
PROCEDURE ContinuousPrint;
CONST
dialogTitle ='連続プリント'; {ダイアログタイトル}
compLayerID = 5901; {リストブラウザ(レイヤ)番号}
compViewID = 5902; {リストブラウザ(登録画面)番号}
kOkButton = 1; {OK ボタン}
kCancelButton = 2; {CANCEL ボタン}
kStaticText1 = 8; {編集できないフィールド番号}
kIntField1 = 6; {整数型編集フィールド番号}
VAR
dialogID,result,objNum :LONGINT; {ダイアログ・リストブラウザ番号,最後に押されたボタンの種類(OK=1,Cancel=2)}
staticTextStr1 :STRING; {編集できないフィールドへの文字}
NameOfLayer :ARRAY[0..40] OF STRING; {非表示するクラス名を格納}
NameOfAuxClass :ARRAY[1..3] OF STRING; {非表示するクラス名を格納}
ii, nn, printNum,
PrintReturnValue :INTEGER; {カウンタ、印刷部数、プリントの返値}
SettingLogAuxClass :ARRAY[1..2] OF Integer; {プリント前のセッティングログ格納用}
SettingLog :ARRAY[1..2] OF BOOLEAN; {プリント前のセッティングログ格納用}
{*******************************************************************************
mDaialogCallback モダンダイアログの内部機能を設定
*******************************************************************************}
Procedure mDaialogCallback (VAR key:LONGINT; Value:LONGINT);
VAR
layerH :HANDLE;
theInt :INTEGER;
theBool :BOOLEAN;
BEGIN
CASE key OF
{ダイアログ初期化(ダイアログが開くとき)}
SetupDialogC:
BEGIN
{レイヤ リストアップ}
theInt := InsertLBColumn ( dialogID, compLayerID, 1, 'レイヤ名', 200 );
objNum := 0;
layerH := LLayer;
WHILE layerH <> NIL DO BEGIN
NameOfLayer[objNum]:=GetLName(layerH);
theInt := InsertLBItem ( dialogID, compLayerID, objNum, '' );
theBool := SetLBItemInfo ( dialogID, compLayerID, objNum, 0, NameOfLayer[objNum], 0 );
objNum := objNum +1;
layerH := PrevLayer ( layerH );
END;
theBool:=DeleteLBItem(dialogID, compLayerID, objNum); {図枠レイヤをアイテムから削除}
{登録画面 リストアップ}
theInt := InsertLBColumn ( dialogID, compViewID, 2, '登録画面', 200 );
For ii:=1 To SheetNum Do Begin
theInt := InsertLBItem ( dialogID, compViewID, ii-1, '' ); {リストブラウザのインデックスは0からスタート}
theBool := SetLBItemInfo ( dialogID, compViewID, ii-1, 0, SheetList(ii), 0 );
End;
END;{SetupDialogC END}
{Ok ボタンが押された}
kOkButton:
BEGIN
{白黒表示にする}
IF SettingLog[1]=false THEN SetPref(10,true);
{カラーレイヤを Off にする}
IF SettingLog[2]=true THEN SetPref(11,false);
{レイヤ毎プリント}
For nn:=1 To printNum Do Begin
For ii:=objNum-1 DownTo 0 Do Begin
IF IsLBItemSelected(dialogID, compLayerID, ii) THEN BEGIN
Layer(NameOfLayer[ii]); {レイヤを移動}
PrintReturnValue := PrintWithoutUsingPrintDialog; {ダイアログ無しで印刷}
END;
End;
End;
{登録画面毎プリント}
For nn:=1 To printNum Do Begin
For ii:=SheetNum DownTo 1 Do Begin
IF IsLBItemSelected(dialogID, compViewID, ii-1) THEN BEGIN {リストブラウザのインデックスは0からスタート}
VRestore(SheetList(ii)); {画面登録を移動}
PrintReturnValue := PrintWithoutUsingPrintDialog; {ダイアログ無しで印刷}
END;
End;
End;
{設定を元に戻す}
For ii:=1 To 2 Do Begin
IF SettingLogAuxClass[ii]=0 THEN ShowClass(NameOfAuxClass[ii]);
End;
IF SettingLog[1]=false THEN SetPref(10,false);
IF SettingLog[2]=true THEN SetPref(11,true);
END;{OK ボタン END}
{CANCEL ボタンが押された}
kCancelButton:
BEGIN
{処理内容}
END;
{印刷枚数が入力された}
kIntField1:
BEGIN
IF GetEditInteger(dialogID, kIntField1, printNum) THEN
Begin
If printNum < 1 Then SetEditInteger(dialogID, kIntField1, 1 );
If printNum > 10 Then SetEditInteger(dialogID, kIntField1, 10 );
End;
END;
END;{end CASE}
END;{end callback}
{*******************************************************************************
メインプログラム部
*******************************************************************************}
BEGIN
{印刷部数の初期化}
printNum:=1;
{非表示するクラス名を設定}
NameOfAuxClass[1]:='補助線';
NameOfAuxClass[2]:='補助グリッド';
{プリント前の設定を取る}
For ii:=1 To 2 Do Begin
SettingLogAuxClass[ii]:=GetCVis(NameOfAuxClass[ii]);
End;
SettingLog[1]:=GetPref(10); {Selector=10 -> 白黒表示}
SettingLog[2]:=GetPref(11); {Selector=11 -> カラーレイヤ}
{非表示クラスを印刷されないようにする > しかしなぜかHideClass は最後に実行される}
For ii:=1 To 2 Do Begin
IF NameOfAuxClass[ii]=ActiveClass THEN NameClass('一般');
IF SettingLogAuxClass[ii]=0 THEN HideClass(NameOfAuxClass[ii]);
End;
{モダンブラウザダイアログ}
dialogID := CreateLayout ( dialogTitle, TRUE, 'プリント', 'キャンセル' );
{レイヤ リストブラウザ}
CreateLB ( dialogID, compLayerID, 30, 30 );
SetFirstLayoutItem ( dialogID, compLayerID );
{登録画面 リストブラウザ}
CreateLB ( dialogID, compViewID, 30, 30 );
SetRightItem ( dialogID, compLayerID, compViewID, 2, 0);
{印刷部数テキスト}
staticTextStr1 := '印刷部数:';
CreateStaticText (dialogID, kStaticText1, staticTextStr1,12);
SetBelowItem (dialogID, compLayerID, kStaticText1, 0, 0);
{印刷部数入力フィールド}
CreateEditInteger (dialogID, kIntField1, 1, 16);
SetRightItem (dialogID, kStaticText1, kIntField1, 2, 0);
{マウスオーバーヘルプフィールド}
SetHelpString(compLayerID, '印刷するレイヤを選択してください');
SetHelpString(compViewID, '印刷する登録画面を選択してください');
SetHelpString(kIntField1, '最大部数は 10部まで');
IF VerifyLayout ( dialogID ) THEN
BEGIN
result := RunLayoutDialog ( dialogID, mDaialogCallback );
END;
END;
RUN ( ContinuousPrint );