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方向で切断したところ





2015年8月30日日曜日

ダイナモ白熱教室(8)-Rhinocerosのデータを読む(2)

RhinoからDynamoへ

それではライノセラスのデータをRhynamoを使ってダイナモのデザインスクリプト(DS)に変換して読み込んでみます。今回は下の図のような簡素なライノデータを読んでみます。簡素といっても3つのNurbsCurveを基にロフトで作成したけっこう複雑な曲面です。
ロフトで作成したサーフェイス
まず前回同様の手順で、どのような要素が含まれているかを調べます。このデータは「デフォルト」レイヤに3つのNurbCurveを、レイヤ4にサーフェイスを作成しましたので、スライダを動かして、レイヤ4を選択します。
前回のグラフで、ファイルを選択しなおす。
レイヤ4にはBrepとしてPolySurfaceがある。
したがって、Brepをデザインスクリプトに変換するノードを追加します。検索バーに「Brep」と入力し、「Rhino_BrepToDS」を追加し、次のように接続します。接続先を間違えないでください。
ライノのデータを読み込んだところ
GeometryとしてPolySurfaceが取り込まれている。
これでダイナモのジオメトリとしてライノのデータを取り込むことができました。さらにRevitに取り込むことも簡単にできます。

ImportInstance.ByGeometry/ByGeometries

一番安直なのは、作成されたジオメトリを単純に「塊」としてRevitに取り込む方法です。
ImportInstance.ByGeometryまたはByGeometriesを下の図のように接続します。
ByGeometries
Revitに取り込まれたジオメトリ

ByGeometryとByGeometriesの違いは、複数のジオメトリがあった場合、そのジオメトリごとバラバラに取り込むか、塊として取り込むかの違いです。

しかしながら、この方法では、単にDWGやSATファイルとして取り込んだ場合と、大きな違いはありませんね。

例えば、サーフェイス面を分割して、下の図のような形状を作ってからRevitに取り込むことも可能です。
ダイナモで面を均等割りして、円のプロファイルで籠状にしてみたところ
次回は、上図のようなサーフェイスの加工について、手順を説明します。


2015年8月23日日曜日

ダイナモ白熱教室(8)-Rhinocerosのデータを読む(1)

ライノのデータを読むには?

ライノセラスのデータの拡張子は.3dmです。このデータをRevitに読み込むには、「読み込めないACISオブジェクトがあります」の回で説明したように2004DWG形式に変換して、読み込む方法が最も簡単です。しかし、ジオメトリとして読み込めるだけで、さらに分析を行うにはダイナモで読み込むと便利です。ここで重要な用語は

  • Rhynamo(ライナモ)
  • アダプティブコンポーネント

の二つです。ライナモとはダイナモのパッケージ(アドオン)です。ダイナモには様々なパッケージが公開されています。まずはダイナモを起動して、パッケージをインストールするところから始めましょう。

ライナモのインストール

ダイナモを起動し、[パッケージ]-[パッケージの検索]を選択

ダイアログボックス上部に「Rhynamo」と入力

Rhynamoの○に↓をクリックし、インストールします。ライブラリの一番下に「Rhynamo」が登場します。

ライナモを使ってみる

それでは、何らかのライノセラスのファイルを用意して、これをダイナモで読み込んでみましょう。ライノのHPではサンプルファイルが落とせますのでこれを利用してもよいでしょう。
まずはファイルを指定します。以下のノードを追加します。

File Path

ファイルパスを指定するノードです。Browseをクリックし、3dmファイルを指定します。

File.FromPath

ファイルパス名からファイルオブジェクトを生成します。これをFile Pathに接続します。
ファイル取得のお決まりのパターン


ライブラリの「Rhynamo」を展開して、ReadRhinoの

OpenRhino3dmModel.Get_RhynoModel

ノードを追加します。
Rhynamo
これを以下のようにつないで、下の□をクリックすると
データのプロパティを取得
データのプロパティの一部を取得できます。右側の一番上の「RihinoModel」から、形状データを取得することができます。

レイヤ情報の取得

まずはこのファイルのレイヤを取得してみましょう。[Rhino Object]の

RhinoObject.Get_RhinolayerNames

を追加し、以下のようにつなげば、どのようなレイヤが含まれているかわかります。
レイヤの取得
レイヤごとにジオメトリを取り出す
ライノのレイヤ別にジオメトリを取り出すことができます。まずは、

Integer Slider
List.GetItemAtIndex

を追加し、さらに[Rihino Object]から

RihinoObject.Get_RihinoObjectsByLayer

を追加し、以下のようにつなぎます。スライダの最大値はレイヤの数に合わせておきます。
Get_RhinoObjectsByLayer
さらにライブラリ一番右の[Rhino ..n To Ds]から、

RhinoTranslationToDS.Rhino_AllGeometryToDS

を追加します。下部の□をクリックし、スライダを動かせば、各レイヤにどのようなジオメトリが含まれているかがわかります。
各レイヤに含まれるオブジェクトタイプがわかる
このリストの見方ですが、
[0] Points
[1] Curves
[2] Breps
[3] Extrusions
[4] Meshes
がそれぞれいくつ含まれているかが表示されています。


次回はこの情報を基に、いよいよライノのデータをダイナモに取り込んでみます。



2015年8月2日日曜日

地形(1)

Revitでは数少ないサーフェイスメッシュ要素である地形ですが、敷地を正確に作成することは計画をするうえで重要です。今回は下の図のような簡単なのり面を含む地形を例にして、上手な敷地の作り方を考えてみます。
坂に囲まれた敷地

等高線と三角形の分割エッジを表示する

地形はメッシュ構造で作成するので、ポリゴン(三角形)をいかに作るかを意識する必要があります。地形を作成するときは以下の設定をお勧めします。

等高線のピッチを設定する
(1) [マス&外構]-[外構を作成]パネルの矢印をクリック
外構の設定
(2) 地形の高さにもよりますが、この例ではピッチを100に設定します。
等高線のピッチを変更
(3) 地形を作成する平面ビュー(建築テンプレートならば、設計GLのビューなど配置図のビュー)を開き、[表示]-[表示グラフィックス]で、地形のサブカテゴリをONにします。
地形のサブカテゴリをON
(4) 地形が設計GL(Z=0)よりも低い位置にある場合は、ビューの奥行きをZ=0以下まで伸ばす必要があります。ビューのプロパティから、[ビュー範囲]をクリックし、ビューの奥行を[無制限]とします。
ビューの奥行を無制限に

三角形を意識しながら地形をつくろう

地形はポリゴン(三角形)の集合で構成されるので、地形を作成するときも事前に三角形に分割してみるとやりやすくなります。まったくの長方形でも二つの三角形に分割されます。今回の敷地だと次のように分割して考えます。
ポリゴンに分割して考える

実際の敷地はもっと複雑ですが、基本は同じです。三角形が多ければ正確な形状に近づきますが、パフォーマンスを考えるとある程度の抽象化が必要です。まず、周辺の4点をそれぞれの高さで作成してみます。
敷地が2枚の三角形で表されています。
地形は二つのポリゴンに分割され、1枚は傾いています。さらに道路の底面部を作成してみます。
道路の4点(-1500)を追加

道路の底面部(左下隅)は平たんになりましたが、敷地が未完成です。敷地の4点の±0の点を追加します。
敷地の3点(±0)を追加
地形は点を打つごとに、最寄りの点と三角形(ポリゴン)を作ります。この三角形ができていく様子と、等高線の状況を確認しながら地形作成を進めることが大事です。
三角形と等高線に注意しながら地形を作成する
これは3Dビューでも同じビュー設定で確認できます。
3Dで等高線と三角形を分割
あとはサブ領域を作成して、マテリアルを設定し、等高線や分割エッジをOFFにします。
サブ領域
舗装に頼らなくても、きれいな坂道を作ることができます。三角形と等高線を意識しながら地形を作成してみてください。