ラベル ルックアップテーブル の投稿を表示しています。 すべての投稿を表示
ラベル ルックアップテーブル の投稿を表示しています。 すべての投稿を表示

2023年1月29日日曜日

size_lookup 詳説

ルックアップ

ファミリには、エクセルのvlookup関数のような働きをする「size_lookup」の機能があります。今まで何度か触れてきましたが、Revitのヘルプにはなんだかわかったようでよくわからない説明が書かれているので、ここで機能と使い方をできるだけわかりやすく説明しておきたいと思います。今回は文字が多いので頑張って読み込んでください。

制限事項:戻り値は数値のみ

size_lookupはその戻り値として、文字通り「数値」しか得ることができません。戻り値として「文字」を得ることはできません。

構文

戻り値=size_lookup(ルックアップテーブルファイル名,戻り値列名,規定値,検索値1,検索値2,...,検索値N)

ルックアップテーブルファイル

ルックアップテーブル(csv ファイル)のファイル名を指定します。拡張子は含めないようにします。直接設定する場合は""で囲んでください。
""を使わない場合は、ファミリのパラメータ名と解釈されます。この性質を利用すれば、文字列のパラメータを指定して、ルックアップテーブルを動的に指定することも可能です。

戻り値列名

「戻り値」を格納しているルックアップテーブルファイルの列名を指定します。直接指定する場合は""で囲んでください。
""を指定しないと、ファミリのパラメータと解釈されます。この性質を利用すれば、文字列のパラメータを指定して、ルックアップテーブルを動的に指定することも可能です。

既定値

検索できなかった場合の戻り値の値を設定します。この値は式を設定したパラメータと同じ単位の数値でなければなりません。
ファミリパラメータを指定して、動的に変化させることも可能です。

検索値1,検索値2,...,検索値N

検索する値を設定します。検索値は一つまたは複数設定できます。「○○が100で××が50で△△の値が20のとき」というように、条件として設定したい値をカンマ区切りで必要なだけ並べます。

ルックアップテーブルの書式

さて、構文の内一番わかりにくいのが、最後の「検索値1,検索値2,...,検索値N」です。いったいどの列を検索するのでしょう?戻り値の引数:戻り値列名では列名を指定しているのに、検索する値はまったく列名が指定されていません。では実際にファミリとルックアップテーブルをつくりながら、その働きを見てみましょう。

ファミリの作成とパラメータの設定(Revit)

  1. ファイル>新規作成>ファミリで「一般モデル(メートル単位)」を選択して開く。
  2. 作成>プロパティ>ファミリタイプ
  3. 次のようにインスタンスパラメータを設定します。()はパラメータタイプです。
    • Int1(整数)
    • Len2(長さ)
    • Str3(文字)
    • Res1(整数)
    • Res2(長さ)
  4. 一旦名前を付けて保存。
    パラメータタイプが重要です

ここまでのファミリ(v2023)はこちらからダウンロードできます。

ルックアップテーブルファイルの作成(Excel)

ルックアップテーブルをエクセルなどの表計算ソフトまたはテキストエディタで作成します。ここではエクセルを使用します。サンプルのルックアップテーブルはこちらからダウンロードできます。
  1. エクセルを起動し、1行目のセルに次の値を設定します。
    • A1:(空欄)
    • B1:検索1##NUMBER##GENERAL
    • C1:検索2##LENGTH##MILLIMETERS
    • D1:検索3##OTHER##
    • E1:結果1##NUMBER##GENERAL
    • F1:結果2##LENGTH##MILLIMETERS
  2. 値を設定します。
    • A2~:A列は「メモ」です。検索の対象とはならないので自由にメモを設定します。
    • B2~:B1に##NUMBER##GENERALと指定したので、整数の検索値をで設定します。
    • C2~:C1に##LENGTH##MILLIMETERSと指定したので、長さの検索値をミリ単位で設定します。
    • D2~:D1に##OTHER##と指定したので、検索値を文字で設定します。
    • E2~:E1に##NUMBER##GENERALと設定したので、戻り値を整数で設定します。
    • F2~:F1に##LENGTH##MILLIMETERSと指定したので、戻り値を長さ・ミリメートルで設定します。
      ルックアップテーブル:1行目が超重要

  3. ファイル>名前を付けて保存 で形式を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式を設定して、機能を確認しましょう。
  1. 作成>プロパティ>ファミリタイプ
  2. ルックアップテーブルを管理 ボタンをおして、作成したルックアップテーブルファイル「Sample1.csv」を指定して開く。
  3. Res1の式に次のように書き込む
    • size_lookup("Sample1", "結果1", 0, Int1, Len2, Str3)
  4. Res2の式に次のように書き込む
    • size_lookup("Sample1", "結果2", 0, Int1, Len2, Str3)
  5. Sample1.csvをエクセルで開く。
    • 読み込んだ後は開くことができます。
  6. Int1を2、Len2、Str3の値を変更して、ルックアップテーブルと比較して結果を確認します。
    • たとえばInt1=2、Len2=1000、Str3=Cとすれば、Res1=213、Res2=21006となります。
      size_lookup式を設定

      ルックアップテーブルの値

ここまでのファミリ(v2023)はこちらからダウンロードできます。

まとめ

size_lookupはある値をもとに、複数のパラメータの値を設定することを目的としています。タイプパラメータであれば、ファミリタイプをつくればいいのですから、size_lookupは「インスタンスパラメータ版タイプカタログ」といってもいいかもしれませんね。
もとはといえば、MEPが登場したときにエルボのパラメータ設定をインスタンスベースで行うために開発された機能ともいえます。だから戻り値は数値のみなのかもしれません。
今でも
C:\ProgramData\Autodesk\RVT 2023\Lookup Tables\
には、配管関連のルックアップテーブルがたくさん使用されていることがわかりますので参考にしてみるといいでしょう。

2018年6月10日日曜日

窓ファミリ作成チュートリアル(7)~ルックアップテーブル

ルックアップテーブルとは?

ルックアップテーブルとはある値に対して、対応する値を抽出するための仕組みです。これはエクセルのLookup関数と考え方は同じです。
もともとMEPのファミリのために使われていた機能で、例えばエルボのファミリを作る場合を考えるとわかりやすいです。下の図はあるメーカーのエルボのカタログです。
呼び径ごとにD,t,H,Zの値が決まっている
呼び径に対して、各箇所の値が決まっています。このような「値のセットを代表値で取り出す」ということができます。

水切も1㎜刻みでサイズがあるわけではなく、ある程度の値で製品が決まっているので、ルックアップテーブルを使って形状を変更してみます。(YKKAPの水切を参考にさせていただきました。)

前回作成した水切の断面は次のようになっています。
水切の各部パラメータ
これに対し、各部の値は次のように決まっています。
奥行に対して値が決まる
見付とシールは同じ値なので、奥行の値に対して高さを変更するルックアップテーブルを作成してみましょう。

まずは水切をロード

練習用ファイルをここからダウンロードしてください。
from Google Drive
from A360 Drive

ダウンロードして解凍すると次のファイルがあります。

  • RC納り枠-7完成.rfa
  • RC納り枠-額縁まで.rfa
  • 水切.rfa
  • 水切.csv


この中の RC納り枠-額縁まで.rfa を開きます。
  1. [挿入]タブ>[ライブラリからロード]パネル>[ファミリをロード]で、「水切.rfa」をロードします。
  2. プロジェクトブラウザで[ファミリ]>[窓]>[水切]>[水切]をダブルクリック。
  3. タイププロパティダイアログボックスで「幅」の関連付けボタンを押して、「水切幅」というパラメータを作成。
    水切の「幅」を「水切幅」に関連付ける
  4. 同様に「高さ」を「水切高さ」に、「奥行」を「水切奥行」に関連付ける。
  5. [作成]タブ>[プロパティ]パネル>[ファミリタイプ]でファミリタイプダイアログボックスを開き、次のパラメータに式を設定する。
    • 水切幅=幅 + 2 * 枠見付左右
  6. 新たに「水切必要奥行」という長さのパラメータを作成し、式を「外壁から枠面+20」に設定
    式の設定
  7. [平面図]>[参照レベル]ビューを開き、[作成]>[コンポーネント]で、[水切]を選択して壁の上側に少し離して配置する。
  8. 位置合わせで水切の中心を中心に、と枠の先端と水切の参照面(下の図参照)を合わせてロックする。
    10mm飲み込んだところでロックする。40
  9. [断面図]>[断面図 1]を表示して、水切の上端を枠の下端の参照面にロックする。

式とルックアップテーブル

水切奥行は式で決める

水切必要奥行の値の値は必ず整数(上の表の「奥行」の値)です。また水切奥行の値が

  • 35mm以下は35
  • 50mm以下は50
  • 50mmより大きい場合は、58mmから10mmピッチ
という特徴があります。これを表現するために、水切奥行の式を次のように変更します。

if(35 mm < 水切必要奥行, if(50 mm < 水切必要奥行, 10 mm * roundup((水切必要奥行 - 58 mm) / 10 mm) + 58 mm, 50 mm), 35 mm)

この中の「10 mm * roundup((水切必要奥行 - 58 mm) / 10 mm) + 58 mm」の部分でroundup関数を使うことで必ず10の倍数を58に加え、整数の値を生成するようにしています。

水切高さはルックアップテーブルで決める

この値をもとに水切高さ」の値を決定します。

エクセルを使ってルックアップテーブルを作成しましょう

  1. [ファイル]タブ>[書き出し]>[ファミリタイプ]
  2. 名前を「水切.txt」として保存し、エクセルでカンマ区切りテキストとして開く。
  3. 次の列を残してほかの列を削除
    • A列
    • 水切高さ##LENGTH##MILLIMETERS
    • 水切奥行##LENGTH##MILLIMETERS
  4. 列を入れ替える
    • B列:水切奥行##LENGTH##MILLIMETERS
    • C列:水切高さ##LENGTH##MILLIMETERS
  5. B列に上の表の奥行の値を、C列に高さの値を設定
    奥行と高さを設定
  6. カンマ区切りのCSVファイルとして保存して閉じる。このCSVファイルは練習用フォルダに入っていますので参考にしてください。
  7. [作成]タブ>[プロパティ]パネル>[ファミリタイプ]
  8. 右下の[ルックアップテーブルを読み込む]をクリック。
  9. [読み込み]をクリックし、作成した「水切.csv」を選択し開く。
  10. [OK]
  11. [水切高さ]の式を次のように設定。
    • size_lookup("水切", "水切高さ", 168 mm, 水切奥行)
  12. [OK]

size_lookupの構文について


ize_lookup("水切", "水切高さ", 168 mm, 水切奥行)


第1引数:CSVファイル名。拡張子は不要ですが、必ず""で囲む
第2引数:値として取り出す列の引数部分の文字列。必ず""で囲む。
第3引数:値が見つからないときの規定値。
第4引数:検索する列の引数部分の文字列。パラメータの名前なので""で囲まない。

第4引数はファミリのパラメータ名です。これがCSVファイルの第1行目の値と一致している必要があります。

テストしてみる
では「だき見込」の値を変更して水切が正しく設定されるかどうか確認してみます。
まず45mmにしてみます。
だき見込45mm
次に95mmにしてみます。水切奥行が138mm、水切高さが49.1mmになるはずです。
だき95mm
今回ルックアップテーブルは一つのパラメータを設定するために使いましたが、もちろん一つのテーブルで複数のパラメータの値を設定することも可能です。