2018年3月11日日曜日

ダイナモ白熱教室(12)-任意の躯体数量を計測する

ジオメトリの解析にはダイナモ

躯体モデルを作成したら、だれでも躯体数量が、しかも指定した範囲の躯体数量が計測したいと思うはずです。ダイナモを使って任意の範囲の躯体数量を算出してみましょう。作戦としては、インプレイスファミリで計測したいエリアをモデリングし、その計測エリア内にある躯体の数量を算出します。
計測範囲はインプレイスで自由な範囲を作成
ダイナモはジオメトリの解析には抜群の効果を発揮します。ファミリ単位ではなく、任意の位置で躯体を切断してその体積を図ってみましょう。
ダイナモを使って任意の位置で切断して計測
なお計測範囲はどのような形状でも構いませんし、梁や床を分割する必要も一切ありません。結合すら必要ありません。


ダイナモを起動

ダイナモを起動します。

  1. [管理]タブ>[ビジュアルプログラミング]パネル>[Dynamo]
  2. ファイルから新規作成を選択
    ダイナモを起動

計測範囲を選択するノードを追加する

  1. [Revit]>[Selection]>[Select Model Element]
  2. ノードをダブルクリックして名前を「計測範囲を選択」とし適用
  3. [選択]をクリックし、計測範囲の要素を選択

計測対象躯体を選択するノードを追加する

    いろいろな選択方法がありますが、今回はカテゴリを指定して選択してみます。なお計測する範囲はここに掲げていないカテゴリ(例えば一般モデルなど)で作成していることが前提です。
    1. [Revit]>[Selection]>[Categories]を4つ追加し、それぞれ以下のカテゴリを選択する。
      • 構造フレーム
      • 構造柱
      • 構造基礎
    2. [Core]>[List]>[List.Create]を追加し、[+]をクリックし、item0~4をつくり、1のカテゴリノードと接続。
    3. [Revit]>[Selection]>[All Elements of Category]を追加し、List.Createと接続する。
      躯体を選択する部分
    これで、指定したカテゴリに属するすべての要素を選択することができます。

    ジオメトリを取り出す

    選択した要素(Element)から幾何学形状(ジオメトリ)を抽出します。庫の取り出しには「Element.Geometry]ノードを使います。

    1. 検索窓に[element.geometry]と入力し、Geometryノードを二つ配置
    2. それぞれ[All Elements of Category]と[計測範囲を選択]に接続
    3. [Watch]ノードを追加し[All Elements of Category]に接続し、[Watch]を見ると、リストが3層になっていることがわかります。
      リストが3層になっている
    4. リストを単層にするため、[Flatten]ノードをElement.GeometryとWatchの間に挿入します。
    5. リストが1層になったことを確認します。Flatten-Watchの接続はいったん外しておきます。
      リストが単純化された

    どのような形状が取り出されたか確認します。

    1. CTRL+Bで背景のナビゲーションを有効にします。
    2. 右クリックして[全体表示]
    3. マウスホイールを開店して拡大縮小、あるいは画面右端のコントロールを利用して適切な大きさで表示します。
    4. CTRL+Bでノードビューに切り替えます
      背景を調節する


    交差を取り出す

    躯体と計測範囲のSOLIDの交差(Intersection)を取り出します。

    1. [Geometry]>[Geometry]>[IntersectAll]を追加
    2. Flattenをgeometryに、計測範囲のElement.Geometryをotheresに接続。
    3. どのような形状が取り出されたかを確認するため、2つの[Element.Geometry]と[Flatten]ノードを右クリックし、[プレビュー]を選択してチェックを外します。
      計測する範囲の形状が抽出できました。
    4. Geometry.IntersectAllノードをダブルクリックして、名前を「躯体ボリューム」とします。
    5. [躯体ボリューム]のGeometry[]にWatchを接続します。
    6. リストが再び階層化されているので、もう一つFlattenを追加(既存をCTRL+C&Vでもよい)します。
    7. Watchはいったん外し、[躯体ボリューム]のGeometry[]にFlattenを接続
    8. 結果として、SolidとLineのジオメトリがあrことを確認してください。確認出来たらいったんWatchは外しておきます。
      SolidとLineが抽出されました

    Solidだけを取り出す

    体積を求めたいので必要なのはSolidだけです。このリストの中からSolidだけを取り出します。リスト処理のノード[RemoveIfNot]を使って、対象となる要素タイプ以外を削除してしまいます。

    1. [BuiltIn]>[RemoveIfNot]を追加
    2. [Input]>[String]を追加し、値を「Solid」とする。
    3. 躯体ボリュームに接続したFlattenをlistに、StringをTypeに接続
    4. Var[]...[]にWatchを接続し、結果を確認する
    5. 躯体ボリュームとFlattenを右クリックして、プレビューのチェックを外す。
      Solidのみ取り出す

    Solidを結合する


    躯体のモデルはひょっとしたら結合されていない部分があるかもしれません。そこで、抽出したSolidを結合して、ダブりのない状態にします。

    1. [Geometry]>[Solid]>[ByUnion]ノードを追加し、[RemoveIfNot]に接続。
    2. [RemoveIfNot]を右クリックしてプレビューのチェックを外します。
    3. Watchを追加して単一のSolidが取り出されていることを確認します。
      単一のSolidとなった

    体積を計測する

    いよいよ最後に体積を計測します。単位を㎥にして表示します。
    1. [Geometry]>[Solid]>[Volume]を追加し、Solid.Unionに接続。
    2. [Core]>[Units]>[Convert Between Units]を追加し接続
    3. [容積]、[立方ミリメートル]、[立方メートル]を選択。
    4. Watchを端部に接続
    5. 体積を確認します。
      体積を計測
    これで躯体ボリュームを抽出できました。Revitで計測範囲を変更すれば体積も変更されます。