2015年9月19日土曜日

フェーズ(1)

フェーズは実によく設計された機能で、これを使わない手はないのですが、これまた訳語が悪いためいまいち理解しにくい機能の一つです。今回はフェーズをとりあげます。

フェーズを理解する

フェーズの作成


「建築テンプレート」で新しいプロジェクトを作成して、[管理]-[フェーズ]をクリックすると下の図のようなダイアログが現れます。既定では「既存」と「新しい建築」となっていますが、これは自由に名前を変更したり、追加することが可能です。
フェーズ作成ダイアログボックス

(1) 一番上の行を選択し「後ろに」を何回かクリックして、フェーズ5までを追加します。
(2) 「既存」を選択し「次と」をクリック
(3) 「新しい建築」を選択し「前と」をクリック
フェーズの作成
フェーズとは、建設段階のことですが、「作る」段階と「解体する」段階は一つのフェーズに共存できるため、「作る」と「壊す」を別々に設定する必要はありません。

フェーズの要素への割り当て


フェーズを作成したら、各要素に「いつ作成されて」「いつ壊されるか」を割り当てます。平面図の「レベル1」ビューを開いて、適当に壁を作成し選択します。壁インスタンスプロパティの一番下を見てみると、フェーズセクションがあります。
要素のライフタイムを決めるフェーズプロパティ

ここには二つのプロパティがあり、選択した要素が「いつ作成」されて「いつ解体」されるかをフェーズ単位で指定できます。ここで要素のライフタイムを決定します。解体は「なし」も選択できます。選択した壁を下の図のように、フェーズ1で作成し、フェーズ3で解体する、と指定してみます。
フェーズ1で作成し、フェーズ3で解体
そうすると、画面上から壁がなくなってしまいます。なぜでしょう?

ビューのフェーズ

これはレベル1のビューが「フェーズ5」の状態を表示するとなっているからです。何も選択していない状態で、ビューのプロパティを見てみると、やはり一番下に「フェーズ」があります。
このビューはフェーズ5の状態を表示している
先ほど指定した壁はフェーズ3で解体されるため、フェーズ5では存在しません。そのため、ビューから消えてしまったというわけです。集計表や3Dビューも含めて、各ビューには「どのフェーズの状態を表示するのか」を指定する必要があります。

フェーズフィルタ

ここで「フェーズフィルタ」を「なし」にしてみましょう。すると、再び壁が現れます。各フェーズにはそのフェーズで

  1. 作成される要素
  2. 解体される要素
  3. 何もしない要素
  4. 作ってすぐに壊す要素

が存在します。これらをRevit用語では

  1. 新築
  2. 解体
  3. 既存
  4. 仮設

と呼びます。これらの用語と状態をしっかりと理解する必要があります。
要素のライフタイム
上の図で、フェーズ3の縦線に着目してください。

  • 「要素4」はフェーズ3においては[新築]です。
  • 「要素2」はフェーズ3で解体されるので[解体]です。
  • 「要素3」はフェーズ3では存在しているがなにもしないので[既存]です。
  • 「要素5」はフェーズ3で作って同フェーズで解体するので[仮設]です。
次に、フェーズ2についてみてみると・・・

  • 「要素1」は[解体]
  • 「要素2」は[既存]
  • 「要素3」は[新築]

となります。このように、フェーズごとに、要素のライフタイムの状態は変化します。
これらの要素を色分けしたり、点線で表示したり、非表示にしたりするために「フェーズフィルタ」が存在します。[管理]-[フェーズ]で「フェーズフィルタ」タブをクリックします。
フェーズフィルタ
例えば3の「完全表示」では、[新築]と[既存]のみを表示し、ほかは[表示しない]ですから、そのフェーズにおける建物の状態を表します。
また、7の「解体と新築を表示」では「新築」を普通に表示し、「解体」と「仮設」を優先設定を使って表示する、となっています。この優先設定とは、ダイアログボックスの最後のタブ「グラフィックスの上書き」です。

グラフィックスの上書き

下の図はグラフィックスの上書きタブです。
グラフィックスの上書き
この設定を使って、各フェーズにおける要素の見せ方をコントロールします。例えば、既存建物の一部を解体し、新たに間仕切を設定するような場合、どこを壊して、どこを増設するかを1枚の図で表すことができます。

実例

緑:既存 赤:解体 青:新築 仮設:マゼンタ

この例では既存と新築の規定値の二つのフェーズを使っています。各要素のライフタイムは次のようになっています。
ライフタイム

これを「新築」のフェーズでみたときに、フェーズフィルタを設定します。
フェーズフィルタはすべてを優先設定済みに

既存は緑、解体は赤、新築は青
このように、各フェーズの状態を様々に表現することができます。

切土と盛土とフェーズ


地形を複数のフェーズで作成すると、直前のフェーズの地形との差分を「切土」「盛土」としてい計算できます。条件は、直前のフェーズにある地形の境界線の内側に比較対象となる地形がある、ということです。切土・盛土を計算するには「フェーズ」の理解が欠かせません。

次回は地形で切土と盛土をフェーズを利用して計算してみます。

2015年9月13日日曜日

地形(2)

DWGファイルで地形を作成する

等高線のDWGデータがある場合は、地形の作成はより簡単になります。また、いきなりRevitで地形を作成するよりも、まずAutoCADで等高線のデータを作成してから、Revitに読み込んでもよいと思います。下の図は、AutoCADで作成した簡単な等高線です。
ポリラインで作成した等高線

この水色の線が等高線です。この線は2Dポリラインですが、各ポリラインの「高度」パラメーターに等高線の高さを指定しておきます。
等高線の高さを「高度」プロパティに設定
これをRevitにリンク(または読み込み)をして、地形を作成します。

読み込みから地形を作成

まずDWGデータをRevitにリンクします。

Step By Step

(1) [挿入]タブ-[CADをリンク](またはCADを読み込む)
(2) [現在のビューのみ]のチェックを外す
(3) [配置先]のレベルを選択(一般にZ=0のレベルを指定するとよいでしょう。)
CADをリンク(読み込むも同じ)
これで3DモデルとしてDWGデータが取り込まれますので、3Dビューで見てみます。
ポリラインが浮いています
ポリラインが宙に浮いて、3Dモデルとして取り込まれていることがわかります。次にこの等高線を「骨」にして地形の「革」を張っていきます。

Step By Step

(1) [マス&外構]で[地形面]を選択
(2) [修正 | 地形面を編集]-[ツール]-[読み込みから作成]-[読み込みインスタンスを選択]
(3) 読み込んだDWGをクリック
[読み込みインスタンスを選択]

(4) 等高線のレイヤをチェックしてOK
等高線のレイヤをチェック
以上で下の図のような地形を作成することができます。
DWGデータから作成された地形
AutoCADで等高線を作成して高さを与えれば簡単に地形を取り込むことができるので、まずAutoCAD上で等高線を作成することから始めると、地形作成はもっと簡単になります。

等高線を滑らかにする

作成された地形面は等高線が直線で構成されていてカクカクしています。これを滑らかなカーブにしてみましょう。そのためには、AutoCADでポリラインを滑らかにしておきます。
Step By Step
(1) DWGファイルを開いて、コマンドラインに[PEDIT](ポリライン編集)と入力
(2) M(一括)オプションを選択して、等高線のポリラインをすべて選択
(3) S(スプライン)オプションで曲線化します。

スプライン化されて等高線
この状態で前回の手順を繰り返し、地形を作成すると以下のように滑らかな地形が出来上がります。
滑らかな等高線
これを上から見て比べてみると
直線で取り込んだ場合

スプラインにしてから取り込んだ場合
スプラインに変換するだけで、三角形の数が増えて、より滑らかなカーブで取り込まれたことがわかります。
AutoCADで等高線を作成するときは、ポリラインでなくても、線分でも円弧でも、Z座標さえ与えていればなんでもかまわないのですが、線分だと始点と終点しかポイントを読み込んでくれないので、注意しましょう。

2015年9月6日日曜日

ダイナモ白熱教室(9)-サーフェイスをスライスする

Geometry.BoundingBox

前回まではライノのデータをダイナモにデザインスクリプトとして取り込みました。この段階でPolySurfaceという要素に変換されています。PolySurfaceとは複数のSurfaceを一つとして扱っている、ということです。AutoCADをご存じであれば、ポリラインを思い出してください。直線や円弧を一つのオブジェクトして扱えます。これと同じように複数のSurfaceを一つにしたものです。
GeometryからはPolySurfaceのListが出力される
このPolySurfaceを分割する方法はさまざまに用意されていますが、今回は形状全体を取り囲む矩形を作成し、そのX軸とY軸で分割してみます。形状全体を取り囲む立方体をBoundingBoxといいます。
まず、Rhino_BrepToDSのGeometryから出力されるのはPolySurfaceのリストなので、これをGetItemAtIndexで取り出します。
ListのアイテムであるPolySurfaceを取り出す

次に、取り出したPolySurfaceにGeometry.BoundingBoxをつなぎます。この時点ではメモリ上に立方体ができただけで、Dynamo上には何も現れません。このBoundingBoxをBoundingBox.ToPolySurfaceで立方体のポリサーフェスに変換します。
形状を取り囲む立方体が作成された。

Geometry.Explode

PolySurfaceは複数のSurfaceが固まっているので、Geometry.Explodeを使って、これを分解して6面の長方形にします。
6面のうちindexが2の面を取り出したところ

この6つの面のうち分割の基準として利用する一つの面を、GetItemAtIndexとIntegerSliderを使って見つけます。このとき、このとき必要のないジオメトリは、ノードを右クリックして「プレビュー」を外しておきます。
プレビューを外す

Surface.GetIsoLine

矩形の端部の線を分割の基準線として取り出します。このためにはGetIsoLineを利用すると便利です。IsoLineはSurfaceをUVに分割した等値カーブを取り出します。対象としている平面は単純な矩形です。isoDirectionとparameterにともに0を設定すると、図のようなエッジのカーブ(直線)を取り出すことができます。(isoDirectionを試しに1にして違いを確認してみましょう。)
IsoLineでエッジを抽出

Curve.PlaneAtParameter

抽出した線上に平面(Plane)をCurve.PlaneAtParameterを使って等間隔に作成します。このパラメータとは、カーブの全体の長さを1としますので、カーブ上の点を比率で指定することができます。今回は分割数を指定して平面を作成してみます。Numberノードを追加して

0.01..0.99..#DivNum

と入力し、IntegerSliderを接続します。これにより、パラメータ 0.01から0.99までをDivNum数で分割したパラメーターのリストが作成されます。0から1としなかったのは端部の「空振り」を避けるためです。これをPlaneAtParameterにつなぐと、線上にたくさん平面が現れます。
抽出した直線上に平面が作成される
この平面で、ライノから取り込んだPolySurfaceをカットします。

Geometry.IntersectAll

IntersectAllノードでは、[geometry]で[entity]を切断し、切り口のカーブを抽出します。切るもの、着られるもの、の順番でつなぎますので、今回はgeometryに先ほど作成した平面を、切られるものとしてentityにライノから取り込んだPolySurfacdをつなぎます。
geometryにはPlaneAtParameterを、entityには下の図のPolySurfaceをつなぐ
これをentityにつなぐ
このBoundingBox→GetIsoLine→PlaneAtParameter→IntersectAllは定番なので、流れを覚えておくとよいでしょう。

下の図は、BoundingBoxの面を選択するスライダを3に設定し、さらのIsoLineをもう一つ加えて等分割した状態です。どのように作成したか、もうお分かりになるでしょう。
2方向で切断したところ