2014年5月17日土曜日

ExcelとRevit(2)~仕上表と平面図では部屋の呼称を変えたいとき

平面図では「廊下(1)」、「廊下(2)」、仕上表では両方「廊下」

Revitは部屋をあつめて仕上表をつくります。確かに理に適ってはいますが、世の中そう理屈通りにはいかないもので、仕上表という一覧性を考えた場合、複数の部屋の情報を一行にまとめる、という行為はたいていの建物の設計行為の中で発生します。この場合は、部屋という要素に「本名」と仕上表用の「ニックネーム」が必要です。そしてほとんどの部屋ではこの「本名」と「ニックネーム」は同じであるため、パラメーターの値をコピーする必要があります。

使用するパラメーターは?

rac_advanced_sample_project.rvtの平面図、01 - Entry Levelを開くと、下側のウィングにInstructionという部屋が4つほどあります。集計表で部屋を集めるとそのほかにも同じ名前の部屋がたくさんあるので、これに通し番号をつけて、仕上表では一行にまとめる、という作業を実践してみましょう。
Revit集計表 同じ名前の部屋に通し番号(1)などを付けた
ます、本名とニックネームに使用するパラメーターですが、共有パラメーターを使ってもいいですが、今回は「コメント」を使います。
  • 本名------------「名前」
  • ニックネーム-----「コメント」
この「名前」パラメーターに格納されている値を「コメント」にコピーします。ここで前回ご紹介したRUTS2014のExcel書出/読込機能を活用します。

Excelへ書出し

RUTSのExcelパネルの「エクスポート拡張版」を起動します。
「部屋」「Instance」を選択し、「コメント」と「名前」を選択しまます。
部屋の名前とコメントをチェック
「名前」、「コメント」の順番で出力します。
名前、コメントの順でOK
エクセルに部屋の一覧が出力されます。
出力されたExcel

Excelでコメントの情報を編集

名前列の値をコメント列にコピーします。
名前をコメントにコピー

次にエクセルの置換機能をつかって、末尾の(1)や(2)を削除します。ワイルドカードを使えば簡単に(1)などの通し番号を削除できます。
検索文字列にワイルドカード「*」を使って空白スペースに置換する
エクセルでは使い慣れた豊富な関数や機能が自在に使えるので、パラメーター値の編集にはもってこいです。
EXCELは様々な機能で値の編集をサポートしてくれる
この値をRUTSの「インポート」を使ってRevitに戻してやりましょう。
Revitに編集後のパラメーターを戻す
集計表の並べ替えを変更し、仕上表の体裁を整えます。並べ替えの基準をコメントとし、各インスタンスの内訳をオフにします。

コメントを並べ替え方法とし、各インスタンスの内訳をオフ
そうすると、複数の部屋を一つの行で表示することができます。
室名の値はコメントを利用している

平面図では部屋の名前をタグに表示

この手法は一つの部屋に二つの名前を付けるという点で、ちょっと問題があるかもしれませんが、エクセルの活用方法の一つとしてご紹介しました。


2014年5月10日土曜日

パラメーターをエクセルに書き出すには

エクセルへパラメーター値をエクスポート

パラメーターをエクセルに出力するには、集計表を作成しこれを「書出し」→「レポート」→「集計」を使って、タブやカンマ、スペースで区切ったテキストファイルを作成します。そしてこれをエクセルで読み込めばいいのですが、これではすこし面倒ですし、一方通行、つまり出力しかできません。もっとダイレクトにエクセルと連携できないでしょうか?

RUTS2014を使ってみよう!

私の所属するRevit User Group JapanではRevitのアドオンソフトであるRUTS2014(無償)を公開しています。このアドオンソフトでは要素のパラメーターをダイレクトにエクセルへ書き出したり、編集後の値を読み込んだりする機能が提供されています。
ダウンロードは以下のアドレスにアクセスし、会員登録(無料)を行ってください。
http://www.rugjapan.com/
そして「専門部会フォーラム」の「開発部会」へ移動します。
開発部会をクリック!
「RUTS2014○○」となっている最新のタイトルをクリックします。
RUTS2014のタイトルをクリック!
添付されているZIPファイルをダウンロードして解凍し、インストールしてください。ただし64bit版のみですのでご注意ください。
64bit版のみです

Excelへ書き出すには?

インストールすると、「RUTS」タブが現れ、たくさんのツールがあることがわかります。このなかで、エクセルへの書き出しができるツールは「Excel」パネルにあります。
Excelパネルのプルダウンメニュー
このなかの「エクスポート拡張版」をクリックしてみましょう。ダイアログボックスで「部屋」「Instance」を選択すると、右側に部屋インスタンスのパラメーターのリストが表示されるので、出力したいパラメーターにチェックを入れOKを押します。
カテゴリ、インスタンス(タイプ)、パラメーターを選択
次にエクセルでの並び順を指定します。
順番を指定
この時、「設定保存」を押すと、この設定が保存されて再利用できます。再利用の際は一つ前のダイアログボックスで「設定読込」ボタンをおして保存されたファイルを開きます。
あとはOKを押せばエクセルにプロパティ情報を出力することができます。
エクセルにパラメーターの値が出力された

エクセルで編集た値を戻す

出力されたエクセルでパラメーターの値を変更し、Revitのパラメーターに戻すことができます。たとえば、床や壁、天井の仕上げを変更してみます。
仕上げの値を編集したExcel
そして、RevitでRUTSタブ-Excelパネル-インポートを選択すると、取り込みを行います。取り込みが完了したら、エクセルのセルは灰色になっています。
取り込みが成功したセルは灰色になる
Revitのパラメーターを確認してみると・・・
パラメーターの値が更新されている

一旦エクセルにパラメーターの値を出力すれば便利なエクセルの関数をいろいろとつかえ、その結果をRevitのパラメーターに戻すことができますし、その値をタグに表示するようなこともできます。仕上表もエクセルで編集すればより簡便な入力ができますね。



2014年4月19日土曜日

コンピューターは小数の計算が苦手

桁処理の意外な結果

前回の面積表で、「小数点以下第6位」を切り捨てにしてみたところ、次のような結果になりました。
計算間違い?
7.12560000007.1256になるべきですが、答えは7.1255になっています。その次の値もおかしいですね。なぜこのようなことになるのでしょうか?

表示と本当の数字は違う

この面積、実は内部の値として

7.1255999999994㎡

の場合があります。これが丸め処理されて、表示値は「7.1256」となっていたというわけです。確かにこの値を小数点以下第6位で切捨てすれば、7.1255になるのは当然です。表示されている値はすでに「丸め」処理が行われた数字なのです。

しかし、なぜこのような端数が生じるのでしょうか?

コンピューターでは数字を2進数で保持します。ところがほとんどの小数は2進数で正確に表すことができません。これは0または1(=2進数)を基礎とした計算を基本とするコンピューターの宿命なのです。

エクセルでも誤差はある

エクセルを開いて、セルに

=0.3-0.2-0.1

と打ち込みます。当然「0」となります。ところが

=0.3-0.2-0.1-0

エクセルでも誤差が発生する

と打ち込むと、「-2.77556E-17」と表示されます。これが「誤差」です。皆さんが全幅の信頼を置いているエクセルでさえ、誤差は発生するのです。

コンピューターの倍精度浮動小数点と呼ばれる値には長年誤差が付きまとっています。金融界ではこのような誤差は致命的なので、この誤差を回避する様々な手法が開発されています。

誤差を回避するには

こうした誤差を回避するために、一般に丸め処理(=誤差修正)が行われていますが、これは表示上だけであり、実際に保持されている数字は変わらないので、このような問題が生じます。これを回避するにはどうすればいいでしょうか?方法は二つあります。

  • 丸め処理を複数回行う
  • 微小値を加える

前者の方法を用いて、前回の手法をすこし改造してみます。最初の面積を実数化した後に、面積値を一旦小数点以下第8位あたりで四捨五入し、表示値=内部保持値の状態を作り出したうえで、任意の桁で処理を行えばいいでしょう。

前回の面積表と同様、面積値を実数化した後に、小数点以下第8位で四捨五入するため10000000倍します。


計算式:(面積 / 1 m²) * 10000000
この時点で一部誤差が発生していることが確認できます。次にこれを「round(x)」関数を用いて四捨五入します。

計算式:round(実数×10000000)

結果を1000で除して、切捨て処理をします。

四捨五入÷1000の計算式:四捨五入/1000
切捨の計算式:rounddown(四捨五入÷1000)
最後に10000で割って、面積化の手順を踏めば誤差を修正した面積を取得できます。

切捨処理÷10000の計算式:切捨処理/10000
結果の計算式:切捨処理÷10000 * 1 m²

まとめると次のような式となります。
(rounddown(round((面積 / 1 m²) * 10000000) / 1000) / 10000) * 1 m²

誤差を修正

コンピューターの演算は有限桁数で行っているため、必ず誤差が発生します。

エクセル 小数 誤差

で検索してみると多数の事例や回避方法を見つけることができますのでご確認ください。

一般に皆さんがコンピューター上で見ている少数は、ほとんどすべての場合ある程度の桁で「丸め処理」が行われた表示上の数字です。コンピューターが内部に保持している値はもっと複雑な値であることをお分かりいただけたでしょうか?

2014年4月13日日曜日

面積の桁処理方法

面積を切り捨てる方法

Revitの数値の表示は「丸め」という手法が用いられますが、明快に小数点以下第○位を切り捨てることは可能でしょうか?集計表を用いて試してみましょう。Revitに付属しているサンプルファイル「rac_basic_sample_project.rvt」で部屋面積をレベル順にならべた集計表を作成しました。
面積は「0.000000001」で丸めています。
面積表

面積を実数化する

面積を小数点以下第三位で切り捨てるには、次の手順を実行します。

  1. 面積を実数にする
  2. 実数を100倍する。
  3. 最も近いその値以下の整数に丸める
  4. 3を100で割って実数に戻す
多少面倒ですが、順を追って説明します。Revitは属性値の型にシビアなので面積のままでは3の切捨て処理ができないので一旦実数にします。実数にするのは簡単で、計算式のパラメーターを追加して面積を1で割るだけです。


面積/1で実数化される

100倍する

小数点以下第3位を切り捨てるために、小数点以下第2位を1の位にします。そのため値を100倍します。
切捨て前の準備として100倍する

切り捨てる

切り捨てるには次の関数を使用します。

rounddown(x)

この関数は、x以下でxに最も小さい整数を返します。

実数を100倍した値を切り捨てる

切り上げる場合は

roundup(x)

を使います。

100で割る

桁処理のために100倍したので100で割って元に戻します。

100で割って桁を元に戻す

面積に戻す

計算式のフィールドは表示形式が設定できませんが、面積のフィールドにすれば形式を設定することができます。それには1を掛けるだけです。

タイプを面積にして1を掛けると面積化できる

タイプを面積にすると形式の設定が可能
無事に切捨て処理を行うことができました。合計値もそれぞれの切り捨てた値を合計した値になっています。

まとめ

ここまでは手順を追って説明したため、列が増えてしまいましたが、これらをまとめることもできます。フィールドの計算式は次のようになります。

((rounddown(((面積 / 1 m²) * 100))) / 100) * 1 m²

集計表は次のようになります。
面積を小数点以下第三位で切り捨てた面積表
合計値が桁処理前と後で異なっています。これは合計値が合計値を桁処理したのではなく、きちんと桁処理した数値を合計しているためです。


2014年3月2日日曜日

手すり~手すり子ファミリテンプレートの選び方

水平部材はシステムファミリ

プロジェクトブラウザのファミリノードで、「手すり」を展開してみると、やたらと「手すり」がありどれがどれだか見当がつきません。
やたらと「手すり」がある(@_@;)
この中で手摺のタイプを示しているのは「手すり」です。「手すり」を展開して確かめてみます。
「手すり」に手摺タイプが列記されている
前回紹介した「上部手すり」は「上部手すりタイプ」です。(なぜこれだけ「の」が入っているのかわかりませんが・・・)
上部手すり
「手すり1」「手すり2」は共通で「手すりタイプ」です。
手すりタイプ
これらの水平部材はそれぞれのファミリノードを右クリックし「複製」することでしか増やすことはできませんから、このインターフェイスを把握しておくことは非常に重要です。では以上紹介したノード以外はなんでしょうか?

垂直部材はロードファミリ

水平部材のタイプ以外は手すり子(垂直部材)と手摺の「終端」と「支持」のロードファミリです。手すり子(垂直部材)はファミリエディタで自由に定義して、プロジェクトにロードすることで使えるようになります。[新規作成]-[ファミリ]を選んでみると、手すり子に関するファミリテンプレートが3種類存在します。
どの手すり子を選ぶべきか?
最近あまり見かけないのですが、「支柱」というのは下の図のような手すり子の親玉みたいな部材のことです。
手すり子と支柱
支柱は英語ではPost、手すり子はBalusterです。確かに日本語には訳しにくいですね。大まかに言って、手摺のテンプレートは

支柱(Post)-----------手すり子 - 支柱(メートル単位).rft
手すり子(Baluster)-----手すり子(メートル単位).rft
パネル(Panel)--------手すり子 - パネル(メートル単位).rft

というように使い分ければよいでしょう。特に手すり子(メートル単位).rftは階段のときなど水平部材が斜行するときに上端と下端が斜めにカットされますのでこれらのテンプレートの違いを把握しておくことは重要です。

前回ご紹介した強化ガラス手摺では、ガラスとガラスをシールする部分を手すり子として作成しました。
シール部分を手すり子ファミリとして作成
ファミリを開いてみると、ガラスと同じ厚さの細い棒がモデリングされていることがわかります。元になったテンプレートは「手すり子(メートル単位).rft」です。
目地のファミリ
これを1750mm間隔で挿入するように指定しています。
主パターンに注目
次はこの垂直部材の配置を指定するダイアログを詳しく見てみましょう。

2014年2月1日土曜日

強化ガラス手摺の作成

強化ガラス手摺の作成

下の図のような強化ガラス手摺を作成してみます。
強化ガラス手摺
この手摺は

  1. 上部手すり
  2. 手すり子
  3. 手すりの構成(非連続)

の三つの要素で構成されています。
手摺の構成

手摺の構造(非連続)

ガラスと基礎部分はそれぞれ矩形のスイープで作成しています。
ガラス部:16x890 基礎部:100x150
このプロファイルを作成し、手摺プロパティの「手すりの構成(非連続)」で高さとマテリアルを指定します。プロファイル作成上の注意事項としては、プロファイルの原点をよく考慮し4ておくことでしょう。たとえば、ガラス部分のプロファイルを次のように「中心下」を原点として作成したとします。
原点は下中心
手すりの構造(非連続)の構成は、下の図のようになります。
高さ、オフセットは原点の位置を指定している
手すりの構造(非連続)とは、プロファイルのスイープです。スイープのパスは手摺のパスと一致しますが、引き伸ばすプロファイルの原点の位置とマテリアルをこのダイアログボックスで指定します。ですから前回も申し上げたようになぜ「(非連続)」どころか、連続しまくっているのです。(英語版では「Rail Structure」となっており、どこにも"非連続"などという用語はありません。素直に"手摺"と訳すべきでしょう。)

この例では強化ガラスのプロファイルは原点を高さ150、オフセット0の位置でスイープするように指示しています。

強化ガラスのようなパネル形状のものはスイープで作成するほうが、パネルの幅を気にする必要がないので手軽です。

上部手摺

Revit2012まではすべての水平材はこの「手すりの構造(非連続)」で定義することになっていましたが、2013からは最上部の手すりと補助手摺二つの合計3種類のハンドレールを定義することができるようになりました。
3種類のハンドレールを定義可能
これらの定義方法は少々複雑です。まずどこで定義するのかもよくわかりません。実はプロジェクトブラウザのファミリのノードで定義するのですが、やたらと「手すり」を連発するのでわけがわかりません。
何が何だか・・・
次回はこのきわめてわかりにくい手すりの定義について説明します。