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\
には、配管関連のルックアップテーブルがたくさん使用されていることがわかりますので参考にしてみるといいでしょう。

2023年1月21日土曜日

回転するファミリ

回転

次の図のように、ある部材の両端に任意の角度で回転できる部品を取り付けることを考えてみます。
両端の矢印が任意の角度で回転するファミリ

しかもこの回転軸は水平(Y軸に平行)になっていて、この棒の伸縮に伴って回転軸も移動します。
伸縮に伴い回転軸も移動

このようなファミリをつくる確実な方法は、
  1. 回転する物体のファミリ
  2. 1ネストして回転させる「台座」となるファミリ
  3. 2をネストして回転体を据え付けるファミリ
の三つのファミリで考えると確実です

Step1/3 回転する物体のファミリ

回転軸が参照面の交点(原点)にあるZ軸と想定して、回転させたい物体をモデリングします。
  1. ファイル>新規作成>ファミリ で「一般モデル(メートル単位).rft」を開く
  2. 参照面の交点(Z軸)を回転軸と想定して、基準レベルに回転させたい物体をモデリングする。
    回転軸はZ軸!

  3. 名前を付けて保存

Step2/3 「台座」となるファミリ

回転の角度をパラメータに持つ「台座」ファミリを作成します。ポイントはファミリパラメータ「作業面ベース」と「常に垂直」です。
  1. ファイル>新規作成>ファミリ で「一般モデル(メートル単位).rft」を開く
  2. ファミリパラメータ:作業面ベースをオン、常に垂直をオフにする。
    ファミリパラメータを設定する

  3. Step1で作成したファミリをロードし参照面の交点に配置
  4. 角度寸法が作成できるように、参照面の交点を中心に少しだけ回転する。

  5. 角度寸法を配置し、ラベルを付ける。

  6. 角度のパラメータを変更して、回転することを確かめる
  7. 名前を付けて保存

Step3/3 回転体を据え付けるファミリ

最後のステップとして、回転体を据え付けるファミリを用意します。ここでポイントなるのは、回転軸を示す参照面をしっかりと拘束することです。例えば次のように長さが可変の棒状のフォームを作成し、その端点から50mm内側に回転軸を設定します。寸法はロックしておきましょう。また回転軸に直交する回転面として名前のついた参照面も必要です。(この場合は参照面「中心(正面/背面)」)
回転軸と回転面の作業面を設定する

ここまでの準備ができたら
  1. 回転面に正対したビューを開く。この場合は立面図:正面です。
  2. Step2で作成したファミリをロードして配置
    • 修正|配置コンポーネント>配置パネル>作業面に配置をクリック
    • オプションバーの配置面が目的の参照面になっていることを確認して配置します。
  3. 位置合わせを使って、回転軸にロック
    回転軸同士を確実にロック

  4. Step2の角度パラメータを、このファミリのパラメータに関連付ける
    パラメータの関連付けを行う

  5. 名前を付けて保存
  6. プロジェクトにロード
任意の長さ、任意の角度で

回転するファミリはなかなか手ごわいのですが、「Z軸でしか回らない」と割り切ってネストを使えば、確実に目的の回転軸で回るファミリが作成できます。