Vectorworksではシンボルは図面ファイルに登録する。シンボルを使えば作図作業が楽になり、図面の標準化も進む。シンボルはシンボルフォルダを使って分類することができる。フォルダの階層が深くなると全体でどのくらいのシンボルが登録されているか把握しにくくなる。
次のコマンドを実行して、現在の図面ファイルにどれだけのシンボルが登録されているか調べてみよう。実行手順は次の通り。
1.リソースマネージャを開く
2.新規リソースをクリック
3.スクリプト(P)を選んで[作成]をクリック
4.パレット名入力ダイアログでパレット名を入力
「パレット-1」でかまいません。
5.スクリプト名入力ダイアログでスクリプト名を入力
「スクリプト-1」でかまいません。
6.開いたエディタに上記のプログラムをペースト
7.歯車アイコンをクリックしてコンパイル
8.リソースマネージャで「スクリプト-1」をダブルクリック
ソースコードは次。
(* -------------------------------
関数: SP_NumOfSym
Version: 1.0.0
機能: 図面ファイルに登録されているすべての定義シンボルを数える
20241129 wat
------------------------------- *)
PROCEDURE SP_NumOfSym;
var
gLoopy: longint;
gMsg: string;
(* -------------------------------
関数: SP_SearchInSymFolder
機能: シンボルフォルダ内のシンボルを取得(再帰コール)
------------------------------ *)
procedure SP_SearchInSymFolder( symFolderH: handle; folderName: string );
var
symDefH: handle; {SymDef handle}
objType: longint;
currentFolderName: string;
begin
symDefH := FInFolder( symFolderH );
WHILE ( symDefH <> NIL ) DO BEGIN
objType := GetTypeN( symDefH );
if ( objType = 16 ) then begin
gLoopy := gLoopy + 1;
end else begin
if ( objType = 92 ) then begin
{ フォルダの場合はフォルダ内をサーチ(再帰) }
currentFolderName := GetName( symDefH );
currentFolderName := concat( folderName, '/', currentFolderName );
SP_SearchInSymFolder( symDefH, currentFolderName );
end;
end;
symDefH:= NextSymDef( symDefH );
END; {WHILE (objH<>NIL)}
end; { SP_SearchInSymFolder }
(* -------------------------------
関数: SP_arySymInfo_make
機能: シンボルを取得
------------------------------ *)
procedure SP_arySymInfo_make;
var
symDefH: HANDLE; {SymDef }
objType: longint;
currentFolderName: string;
begin
gLoopy := 0;
{ シンボル定義をハンドル移動して、シンボル定義情報を得る }
symDefH:= FSymDef;
WHILE ( symDefH <> NIL ) DO BEGIN
objType := GetTypeN( symDefH );
if ( objType = 16 ) then begin
gLoopy := gLoopy + 1;
end else begin
if ( objType = 92 ) then begin
{ フォルダの場合はフォルダ内をサーチ }
currentFolderName := GetName( symDefH );
SP_SearchInSymFolder( symDefH, currentFolderName );
end;
end;
symDefH:= NextSymDef( symDefH );
END; {WHILE (symDefH<>NIL)}
end; { SP_arySymInfo_make }
BEGIN {===== MAIN =====}
{ シンボル定義を取得 }
SP_arySymInfo_make;
if ( gLoopy >= 1 ) then begin { シンボル定義が一つ以上ある }
gMsg:= 'シンボルの数:';
gMsg:= concat( gMsg, Num2StrF( gLoopy ) );
gMsg:= concat( gMsg, chr(13) );
AlrtDialog( gMsg );
end else begin
gMsg:= 'この図面にはシンボルが登録されていません';
AlrtDialog( gMsg );
end; { if ( gLoopy >= 1 ) }
END;
RUN( SP_NumOfSym );
コンパイルエラーが表示されたり、実行時にエラーが出るような場合は、うまくコピペできていない可能性がある。そのような場合は次からソースコードをテキストファイルでダウンロードしてみてほしい。
シンボル図形を表示するツールは別売り。