データベースから目視で選択するスクリプト
ワークシートのデータベース機能
ワークシートにはデータベースとスプレッドシート機能があります。データベース機能は検索条件に従って、ファイル上の図形を絞り込むことができます。
関数を使うことで、様々な情報を、条件に従って表示します。
結局最後は目視で図形を確認したい
ワークシートで表を作った場合にも、最後は目視で表の内容と図形に相違がないかの確認が必要になります。仮にファイル上に部分的な重複などがあった場合、コンピュータには正しいのか誤りなのかが判断つかないからです。
そのため、CADやBIMの「データベース機能」や「集計表」には行から図形を選択する機能がほとんどついています。
Vectorworksの該当図形を選択
Vectorworksのデータベースも、データベース行の右クリック > 該当図形を選択 から図形を選択することができます。しかし複数ある場合、ワークシートとレイヤ上をいったりきたりで手間がかかります。
今回作成したスクリプトは以下の通りです。データベースのセルを選択 > スクリプトを実行することでデータベースの図形を連続して選択するかどうかの判断をするものです。
PROCEDURE selectWsDb;
VAR
dyn: STRING;
currentCellRow, currentCellColumn: INTEGER;
topRangeRow, leftRangeColumn, topRangeSubrow: INTEGER;
bottomRangeRow, rightRangeColumn, bottomRangeSubrow: INTEGER;
nowView: INTEGER;
wasGray: BOOLEAN;
wasActiveSnap: BOOLEAN;
PROCEDURE SetSelectAll(h: HANDLE);
BEGIN
SetSelect(h);
END;
PROCEDURE SelectThem(h: HANDLE);
BEGIN
SetSelect(h);
ReDraw;
IF NOT YNDialog('この図形を選択しますか?') THEN
SetDSelect(h);
END;
BEGIN
nowView := GetPrefInt(506);
wasGray := (nowView = 2) OR (nowView = 6);
wasActiveSnap := (nowView = 3) OR (nowView = 4);
IF wasGray THEN
SetPrefInt(506, 1)
ELSE IF wasActiveSnap THEN
SetPrefInt(506, 5);
GetWSSelection(ActSSheet, currentCellRow, currentCellColumn, topRangeRow, leftRangeColumn, topRangeSubrow, bottomRangeRow, rightRangeColumn, bottomRangeSubrow);
GetWSCellFormulaN(ActSSheet, topRangeRow, 0, dyn);
Delete(dyn, 1, 9); {Remove '=DATABASE' part}
dyn := Concat('(', dyn, ') & (V)'); {Add visibility condition with proper parentheses}
ForEachObject(SetSelectAll, dyn);
DoMenuTextByName('Fit To Objects', 0);
DSelectAll; {Deselect all objects}
ForEachObject(SelectThem, dyn);
IF wasGray THEN
SetPrefInt(506, nowView)
ELSE IF wasActiveSnap THEN
SetPrefInt(506, nowView);
END;
RUN(selectWsDb);
Vectorscript なのでスクリプト作成時に注意してください。
まとめ
具体的な状況はあまりないかも知れませんが、データベースから目視で確認して編集・消去する機会は多々あります。
詳細はこちらの動画をご確認ください。
※スクリプトサンプルは個人としてご利用いただき、サンプル(改変も含む)の 公開、配布、販売はお控えください。