データマッピングの例
必須およびデフォルト値
ファイルの交換では多くの場合、特定のデータフィールドを空にしてはいけないことや、すべてのデータフィールドにデフォルト値を持たせることなどを定めた要件があります。必須のデータフィールドに必ず値が入るようにするには、データマッピング条件式の最後に定数を記載します。
条件式:
=FIRSTNONEMPTY(Style.'Function', 'NOTDEFINED')
=FIRSTNONEMPTY(OBJECTDATA('General Name'), Style.'Name', 'Roof')
すべてのデータフィールドにデフォルト値が必要でありながらも、一部のオブジェクトには特定の値が必要な場合は、レコードフォーマットを作成して、データソースになるフィールドのデフォルト値を設定します。次に、そのレコードを特定の値が必要なオブジェクトにのみ連結し、必要に応じて、連結したレコードのデフォルト値を変更できるようにします。レコードが連結されていないオブジェクトにはデフォルト値が適用されます。
条件式:
=FIRSTNONEMPTY('Pricing Details'.'Discount', FORMATFIELD('Pricing Details','Discount'))
フィールドと定数を組み合わせる
データマッピング条件式を使用して、一段と読みやすくしたり、必要な前記号または後記号を追加したり、または複数のソースのデータの組み合わせや計算を行ったりすることができます。
この例では、メーカーやステップ幅に関する重要な情報についての、エスカレーターの説明を改善します。また、いくつかの単語を追加して一段と読みやすくします。
条件式:
=CONCAT('Escalator: ', 'Escalator'.'Type', ' Width: ', 'Escalator'.'Step width')
結果:
Escalator: Otis 510 M Width: 1000 (3' 3")
別の例では、窓の名前をVectorworksオブジェクト名から取得するよう設定します。Vectorworksオブジェクト名がない場合は、前記号、ラベル、および後記号の各フィールドを組み合わせます。これらのパラメータがすべて空の場合は、「Window」という単語を使用して窓であることが分かるようにします。
条件式:
=FIRSTNONEMPTY(OBJECTDATA('General Name'), CONCAT('Window'.'IDPrefix', 'Window'.'IDLabel', 'Window'.'IDSuffix'), 'Window')
Vectorworksオブジェクト名がない場合の結果:
W-01A1
レコードフォーマットのマッピング
Vectorworksのプラグインオブジェクトを図面に追加する時に、カスタムレコードおよびデータを自動的にオブジェクトに連結するには、必要なデータフィールドを含むレコードフォーマットを作成し、フィールドをそのオブジェクトの適切な定数、パラメータ、またはスタイルにマッピングします。これにより、ワークシート、データタグ、データの可視化など、オブジェクトのデータをレポートするさまざまなVectorworks機能を使用しやすくなります。
この例では、「Cabinet Calculations(キャビネットの計算)」というレコードフォーマットを作成し、キャビネットプラグインオブジェクトのデータセットとして追加しています。
Countertop Length(天板の長さ):キャビネットの幅パラメータ(天板の直線寸法)にマッピングします。
Countertop Area(天板の面積):天板に50ミリメートルのオーバーハングを追加して面積を計算してから、1000 * 1000で割り、結果を平方ミリメートルから平方メートルに変換します(長さ/奥行きの単位はミリメートルです)。
条件式: =('Cabinets'.'Length' * ('Cabinets'.'Depth' + 50)) / 1000000
Adjacent to Wall(壁に隣接):マッピングしていません。ユーザーはオブジェクト情報パレットのデータタブで、キャビネットが壁に隣接するかどうかを定義します。そのため、防止板が必要になります。
Backsplash Area(防止板の面積):防止板が必要な場合、その面積は0.6メートル(防止板のパネルの幅)*天板の長さ/ 1000になります(メートルからミリメートルに変換します)。この条件式が、同じレコードの他の2つのフィールドを参照していることに注意してください。
条件式:=IF(FIRSTNONEMPTY('Cabinet Calculations'.'Adjacent to Wall', FORMATFIELD('Cabinet Calculations', 'Adjacent to Wall')), (0.6*FIRSTNONEMPTY('Cabinet Calculations'.'Countertop Length', FORMATFIELD('Cabinet Calculations', 'Countertop Length'))/1000), 0)
マッピングからレコードフォーマットを削除すると、図面内のすべてのキャビネットからレコードの連結が解除されます。
図面にキャビネットを配置すると、オブジェクト情報パレットのデータタブに、レコードデータが自動的に連結されていることが示されます。マッピングしたフィールドごとに、データマネージャの編集( )列の設定でフィールドの編集方法を制御できます。
関数
この例では、窓の設定に基づいてIfcWindow.OverallHeightを計算します。
窓の高さのパラメータは、窓台がない場合、または形式がレンガの窓台がある場合は、正しい値であるものとします。その他の場合には、窓台の高さの値を、窓の高さに追加する必要があります。
条件式:
='Window'.'OverallHeight' + IF('Window'.'IncludeSill' & ('Window'.'SillStyle' <> 'Brick'), 'Window'.'SillHeight', 0)
窓台がない場合、または形式がレンガの場合の結果(窓の高さの値に0を追加):
2000.0
レンガ以外の窓台がある場合の結果(窓の高さの値に150.0を追加):
2150.0
セレクタ関数を使用してデータソースをマッピングする
IFCデータには、PredefinedType、OperationType、ShapeTypeなど、多くの「列挙」型のデータフィールドが必要です。時には、現在の設定がIFCと異なるか、直接マッピングできる有効なデータソースがないか、値が別の言語で記述されているせいで、1対1で対応しないことがあります。
この例では、いずれかのセレクタ関数を使用して、窓の形式リストを、IFC Window Panelデータセットの必要なOperationTypeにマッピングします。
条件式:
=FIRSTNONEMPTY(IFS('Window'.'Configuration' = 'Opening', 'FIXEDCASEMENT',
'Window'.'Configuration' = 'Cased Opening', 'FIXEDCASEMENT',
'Window'.'Configuration' = 'Awning', 'TOPHUNG',
'Window'.'Configuration' = 'Casement', 'SIDEHUNGLEFTHAND',
'Window'.'Configuration' = 'Bi-parting Casement', 'SIDEHUNGLEFTHAND',
'Window'.'Configuration' = 'Fixed Glass', 'FIXEDCASEMENT',
'Window'.'Configuration' = 'Fixed Glass - No Sash', 'FIXEDCASEMENT',
'Window'.'Configuration' = 'Folding', 'NOTDEFINED',
'Window'.'Configuration' = 'Hopper', 'BOTTOMHUNG',
'Window'.'Configuration' = 'Single Hung', 'SLIDINGVERTICAL',
'Window'.'Configuration' = 'Double Hung', 'SLIDINGVERTICAL',
'Window'.'Configuration' = 'Horizontal Slider', 'SLIDINGHORIZONTAL',
'Window'.'Configuration' = 'Tilt/Turn', 'TILTANDTURNLEFTHAND',
'Window'.'Configuration' = 'Vertical Pivot', 'PIVOTVERTICAL'
条件
条件により、さらに複雑なケースを処理し、IFCデータのレイアウトをより正確に制御できます。
壁スタイルを異なるエンティティにマッピングする条件
たとえば、ExternWall、InteriorWall、Footing、およびVirtualWallの4つの壁スタイルを含むファイルがあるとします。壁のプラグインオブジェクトのデータマッピングでは、IfcCoveringおよびIfcFootingという2つの新しいメインエンティティを追加します。条件フィールドを使用して、適切なIFCエンティティを壁スタイルでマッピングするルールを設定します。
条件式:
=IF(Style.'Name'='ExternWall', 'IfcWallStandardCase', IF(Style.'Name'='InteriorWall', 'IfcCovering', IF(Style.'Name'='Footing', 'IfcFooting', 'No-Export')))
結果:
取り出したファイルには、壁スタイルに応じて、3つのIFCエンティティのいずれかがマッピングされた壁が含まれます。壁スタイルがVirtualWallである壁はいずれにもマッピングされず、取り出されません。
スラブ図形のPset条件
条件式:
=(FIND('Structural', Style.'Name')=0)
結果:
スラブ図形のスタイル名が「Structural」で始まる場合は、スラブにClassification Psetが連結されます。
オブジェクトを複数のエンティティとして取り出す条件
単一のオブジェクトを個別のエンティティとして取り出す場合に、条件を使用できます。ここでは、複数の構成要素を含む壁があるものとします。壁スタイルの用途(Function)フィールドを使用して、取り出し時に別のIFCエンティティを各構成要素にマッピングできます。
条件式:
=IF(OBJECTDATA('Component', 'Function', T=INDEX)='Load-Bearing', 'IfcWallStandardCase', IF(OBJECTDATA('Component', 'Function', T=INDEX)='Inner Finish', 'IfcCovering', IF(OBJECTDATA('Component', 'Function', T=INDEX)='Outer Finish', 'IfcCovering', IF(OBJECTDATA('Component', 'Function', T=INDEX)='OTHER', 'IfcBuildingElementProxy', 'NoExport'))))
結果:
IFCファイルでは、壁は2つのIfcCoverings、IfcWallStandardCase、およびIfcBuildingElementProxyの3種類のエンティティで表されます。用途に「空気層」と記載されている構成要素は取り出されません。
壁にコア構成要素を設定する必要はなく、オブジェクト情報パレットのデータタブで視覚化できるエンティティは1つに限られるため、視覚化されるエンティティは必ず最初の構成要素にマッピングされたものになります。この場合、取り出しには影響しません。
シンボルとカスタム形状
シンボルとカスタム形状には、IFCデータを連結するか、マッピングして取り出します。IFCデータマッピングは、指定したIFCエンティティタイプの設定に基づきます。
データマネージャダイアログボックスでPset_ColumnCommonを追加し、Referenceフィールドをオブジェクトのクラス名にマッピングします。さらに、IsExternalとLoadBearingに固定値TRUEを追加できます。
オブジェクト情報パレットのデータタブで、デフォルトのマッピングを確認できます。
シンボルの場合は、シンボルのIFC指定またはシンボル定義の名前に基づいてマッピングを作成できます。データマネージャで、シンボル定義を選択してからデータセットを追加をクリックし、取り出したい必要なIFCデータセットを定義します。たとえば、このシンボルのすべてのインスタンスのフィールドは同じであるため、Pset_ManufacturerTypeInformationを追加してから、すべてのフィールドを固定値にマッピングします。
これで、シンボル定義またはシンボルのインスタンスにIFCデータを連結しなくても、シンボルはPset_ManufacturerTypeInformationを含むIfcFurnishingElementとして取り出されます。オブジェクト情報パレットのデータタブで、デフォルトのマッピングを確認できます。
メインおよびサブエンティティ
集約オブジェクトの場合は、メインおよびサブエンティティを使用すると、IFCデータレイアウトの精度が高まります。この例では、カーテンウォールでIfcCurtainWallをメインエンティティセットにしています。サブエンティティはIfcMember(フレーム)とIfcPlate(パネル)になります。サブエンティティを無効にするか、置き換えるか、完全に削除することで、フレームとパネルの取り出しを制御できます。