ルックアップ
ファミリには、エクセルのvlookup関数のような働きをする「size_lookup」の機能があります。今まで何度か触れてきましたが、Revitのヘルプにはなんだかわかったようでよくわからない説明が書かれているので、ここで機能と使い方をできるだけわかりやすく説明しておきたいと思います。今回は文字が多いので頑張って読み込んでください。
制限事項:戻り値は数値のみ
size_lookupはその戻り値として、文字通り「数値」しか得ることができません。戻り値として「文字」を得ることはできません。
構文
戻り値=size_lookup(ルックアップテーブルファイル名,戻り値列名,規定値,検索値1,検索値2,...,検索値N)
ルックアップテーブルファイル
ルックアップテーブル(csv ファイル)のファイル名を指定します。拡張子は含めないようにします。直接設定する場合は""で囲んでください。
""を使わない場合は、ファミリのパラメータ名と解釈されます。この性質を利用すれば、文字列のパラメータを指定して、ルックアップテーブルを動的に指定することも可能です。
戻り値列名
「戻り値」を格納しているルックアップテーブルファイルの列名を指定します。直接指定する場合は""で囲んでください。
""を指定しないと、ファミリのパラメータと解釈されます。この性質を利用すれば、文字列のパラメータを指定して、ルックアップテーブルを動的に指定することも可能です。
既定値
検索できなかった場合の戻り値の値を設定します。この値は式を設定したパラメータと同じ単位の数値でなければなりません。
ファミリパラメータを指定して、動的に変化させることも可能です。
検索値1,検索値2,...,検索値N
検索する値を設定します。検索値は一つまたは複数設定できます。「○○が100で××が50で△△の値が20のとき」というように、条件として設定したい値をカンマ区切りで必要なだけ並べます。
ルックアップテーブルの書式
さて、構文の内一番わかりにくいのが、最後の「検索値1,検索値2,...,検索値N」です。いったいどの列を検索するのでしょう?戻り値の引数:戻り値列名では列名を指定しているのに、検索する値はまったく列名が指定されていません。では実際にファミリとルックアップテーブルをつくりながら、その働きを見てみましょう。
ファミリの作成とパラメータの設定(Revit)
- ファイル>新規作成>ファミリで「一般モデル(メートル単位)」を選択して開く。
- 作成>プロパティ>ファミリタイプ
- 次のようにインスタンスパラメータを設定します。()はパラメータタイプです。
- Int1(整数)
- Len2(長さ)
- Str3(文字)
- Res1(整数)
- Res2(長さ)
- 一旦名前を付けて保存。
パラメータタイプが重要です
ここまでのファミリ(v2023)はこちらからダウンロードできます。
ルックアップテーブルファイルの作成(Excel)
ルックアップテーブルをエクセルなどの表計算ソフトまたはテキストエディタで作成します。ここではエクセルを使用します。サンプルのルックアップテーブルはこちらからダウンロードできます。
- エクセルを起動し、1行目のセルに次の値を設定します。
- A1:(空欄)
- B1:検索1##NUMBER##GENERAL
- C1:検索2##LENGTH##MILLIMETERS
- D1:検索3##OTHER##
- E1:結果1##NUMBER##GENERAL
- F1:結果2##LENGTH##MILLIMETERS
- 値を設定します。
- A2~:A列は「メモ」です。検索の対象とはならないので自由にメモを設定します。
- B2~:B1に##NUMBER##GENERALと指定したので、整数の検索値をで設定します。
- C2~:C1に##LENGTH##MILLIMETERSと指定したので、長さの検索値をミリ単位で設定します。
- D2~:D1に##OTHER##と指定したので、検索値を文字で設定します。
- E2~:E1に##NUMBER##GENERALと設定したので、戻り値を整数で設定します。
- F2~:F1に##LENGTH##MILLIMETERSと指定したので、戻り値を長さ・ミリメートルで設定します。
ルックアップテーブル:1行目が超重要 - ファイル>名前を付けて保存 で形式をcsv(コンマ区切り)(*.csv)を選択し、「Sample1.csv」として保存して閉じる
- csv UTF-8(コンマ区切り)(*.csv)ではありませんので注意してください。
- ファイルを閉じないと、ファミリに読み込めません。
ポイント1:見出し
ここで重要なのは1行目の列名の指定方法です。形式は
列名##パラメータタイプ##単位
です。
列名
何でも構いません。値が重複しないようにしてください。
パラメータタイプと単位
パラメータタイプには「NUMBER、LENGTH、AREA、VOLUME、ANGLE、OTHER」が使用できます。NUMBERは整数または実数に、OTHERは文字列に使用します。単位と組み合わせて使用します。以下に代表的な例を示します。
- 長さ ミリ:##LENGTH##MILLIMETERS
- 長さ メートル:##LENGTH##METERS
- 面積 平方メートル:##AREA##SQUARE_METERS
- 体積 立方メートル:##VOLUME##CUBIC_METERS
- 角度 度分秒:##ANGLE##DEGREES
- 数値 パーセント:##NUMBER##PERCENTAGE
- 数値 整数or実数:##NUMBER##GENERAL
- 文字:##OTHER##
ポイント2:検索値
size_lookupの構文で「検索値1,検索値2,...,検索値N」となっていました。ここで列名を指定していませんが、検索はB列から順番に設定した検索値の数だけ検索します。つまりこの場合は、検索値1 はB列を、検索値2はC列を、検索値3はD列を順番に検索します。このため検索列名はsize_lookup構文で指定する必要がないのです。
size_lookup式の設定(Revit)
先ほどのファミリで、size_lookup式を設定して、機能を確認しましょう。
- 作成>プロパティ>ファミリタイプ
- ルックアップテーブルを管理 ボタンをおして、作成したルックアップテーブルファイル「Sample1.csv」を指定して開く。
- Res1の式に次のように書き込む
- size_lookup("Sample1", "結果1", 0, Int1, Len2, Str3)
- Res2の式に次のように書き込む
- size_lookup("Sample1", "結果2", 0, Int1, Len2, Str3)
- Sample1.csvをエクセルで開く。
- 読み込んだ後は開くことができます。
- Int1を2、Len2、Str3の値を変更して、ルックアップテーブルと比較して結果を確認します。
ここまでのファミリ(v2023)はこちらからダウンロードできます。
まとめ
size_lookupはある値をもとに、複数のパラメータの値を設定することを目的としています。タイプパラメータであれば、ファミリタイプをつくればいいのですから、size_lookupは「インスタンスパラメータ版タイプカタログ」といってもいいかもしれませんね。
もとはといえば、MEPが登場したときにエルボのパラメータ設定をインスタンスベースで行うために開発された機能ともいえます。だから戻り値は数値のみなのかもしれません。
今でも
C:\ProgramData\Autodesk\RVT 2023\Lookup Tables\
には、配管関連のルックアップテーブルがたくさん使用されていることがわかりますので参考にしてみるといいでしょう。