ラベル size_lookup の投稿を表示しています。 すべての投稿を表示
ラベル size_lookup の投稿を表示しています。 すべての投稿を表示

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
今回ルックアップテーブルは一つのパラメータを設定するために使いましたが、もちろん一つのテーブルで複数のパラメータの値を設定することも可能です。

2017年11月25日土曜日

クレーンに挑戦!(3)

アウトリガの幅に応じた荷重

前回はルックアップテーブルの特定の列を参照する式を作成しました。

定格総荷重 = size_lookup("RK130LOAD", "荷重47", 0, 判別キー)

この"荷重47"とは、「アウトリガの張り出しが4.7mのとき」という意味で、アウトリガの張り出しが変われば、定格総荷重も変わります。ルックアップテーブルにほかの張り出しの荷重を下の図のように追記してみます。(編集済みのCSVファイルはこちらからダウンロードできます。

  • 4.3m---荷重43##NUMBER##GENERAL
  • 3.5m---荷重35##NUMBER##GENERAL
  • 2.5m---荷重25##NUMBER##GENERAL

以下のようにCSVファイルを編集し保存します。
荷重43,荷重35,荷重2.5の列を追加

ファミリを編集する

アウトリガ張出し×ブーム長さの組み合わせでタイプを作成します。ファミリを開いてまずはアウトリガの張り出し長さを保持するタイプパラメータを追加し、ルックアップテーブルを更新しましょう。

  1. 作成タブ>プロパティパネル>ファミリタイプ
  2. ファミリタイプダイアログボックスで次の操作をします。
    • 新しいパラメータボタンをクリックし、パラメータプロパティダイアログボックスで次の操作をします。
      • 名前を「アウトリガ張出
      • パラメータタイプを「長さ」
      • パラメータグループを「寸法」
      • 「タイプ」を選択
      • OK
    • もう一度新しいパラメータボタンをクリックし、パラメータプロパティダイアログボックスで次の操作をします。
      • 名前を「ルックアップテーブル
      • パラメータタイプを「文字」
      • パラメータグループを「文字」
      • 「タイプ」を選択
      • OK
    • タイプでブーム5.3mを選択、名前変更をクリックし「ブーム5.3m×アウトリガ4.7m」としOK
    • ルックアップテーブルの値に「荷重47
    • アウトリガ張出の値に「4700
    • これを繰り返して、すべてのブーム長さとアウトリガ張出の組み合わせたタイプを作成する。
  3. [ルックアップテーブルを管理]をクリックし、ルックアップテーブルを管理ダイアログボックスで次の操作をします。
    • RK130LOADを選択し[削除]
    • [削除を続行]
    • [読み込み]をクリックし、編集しなおしたRK130LOAD.csvを選択し開く
    • OK
  4. 定格総荷重の式で、"荷重47"ルックアップテーブルに変更(""は必要ない)
    size_lookup("RK130LOAD", ルックアップテーブル, 0, 判別キー)
  5. タイプを変更して適用ボタンを押し、定格総荷重の値が変わることを確認する。
  6. OK
  7. 保存
このように、列名はパラメータ化することができます。同様にルックアップテーブル名もパラメータ化することができます。この場合は複数のルックアップテーブルを読み込んでおく必要があります。

使ってみよう

ここまで編集した2017形式のRK130ファミリはこちらからダウンロードできます。これをプロジェクトにロードして、配置してみます。

  1. 平面ビューを開く
  2. 建築タブ>構築パネル>コンポーネント
  3. モードパネル>ファミリをロード で ダウンロードしたRK130_003.rfaを開く
  4. 配置パネル>作業面に配置
  5. タイプセレクタで「ブーム5.3m×アウトリガ2.5m」を選択
  6. 2点を3000mmの間隔でクリックして配置
  7. 3Dビューを開く
  8. 配置したクレーンを選択
プロパティウィンドゥに表示されている定格総荷重が5.9tであることを確認します。
定格総荷重は5.9t
次にワイヤの先端をドラッグして、距離を5000mmに変更します。
定格荷重は0となる
定格総荷重は0となり、揚重不可であることがわかります。そこでタイプセレクタで「ブーム23.8m×アウトリガ4.7m」に変更します。
定格総荷重3.2t
定格総荷重が3.2tとなります。
ルックアップテーブルには複数の列を作成して、様々な値を返すことができます。

次回はせっかくアウトリガの張出しをパラメータとして設定したので、このアウトリガをモデルに表示して、自由に回転できるようにしてみます。

お願い

私自身はクレーンのふるまいについてそんなに詳しいわけではありませんし、仮設計画の経験が豊富なわけではありません。改善すべき点や、盛り込むべき機能にお気づきの点があればぜひコメントをお願いいたします。



2017年11月18日土曜日

クレーンに挑戦!(2)

定格総荷重を表示するには

今回のテーマは「定格総荷重の表示」です。コベルコRK-130のカタログをみると、

  • アウトリガの張り出し
  • ブームの長さ
  • 作業半径
の三つの条件で、定格総荷重の値が決まるようです。こういったある値に対して、決まった値を取り出すには「ルックアップテーブル」を使うとよいでしょう。聞きなれない言葉ですが、実はRevitMEPがリリースされた当初から存在している機能なんです。条件が一つだとさらにやりやすいのですが今回は複数あるので、ちょっと工夫が必要です。

検索キーを作成する

エクセルのルックアップとは異なり、検索できるのは数字だけという制約があります。そこで、検索条件としてブームの長さと作業半径を8桁の数字として編成します。
作業半径はインスタンスパラメータ「長さ」です。ドラッグすれは自由に変更できるので、表にあるような0.5m刻みにする必要があります。そこで以下のような「形式判別」用のパラメータをファミリに追加します。

ファミリパラメータ追加

ファミリを開いて、次のパラメータを追加して式を設定します。

  • パラメータ名:判別キー(長さ、インスタンス)
  • 式:=ブーム長さ * 100 + 5*roundup(作業半径/500)
    判別キー

ブームの長さに100をかけて、上4ケタを作り、作業半径(mm)を500(mm)で除して5をかけて下4桁を作ります。これで数値による検索キーができました。

ルックアップテーブル

ルックアップテーブルはcsv形式のファイルで、エクセルで編集します。
サンプルCSVファイルはこちらからダウンロードできます。

形式

1行目:列タイトル (列名#パラメータタイプ#単位)
2行目以降:値
1列目:メモ(プログラム的には無視されます。自由に書いてよい)
2列名:検索キーの値
3列目以降:検索する値
ルックアップテーブル
A1セルは必ず空欄です。
B1, C1…は列の説明が入りますが、その形式は
  列名##パラメータタイプ##単位
です。パラメータタイプはもともとMEPで複数の配管サイズを一つの呼び称で決定するために作られた機能なので使えるタイプは以下の種類に決まっています。

  • 実数・整数(NUMBER)
  • 長さ(LENGTH)
  • 面積(AREA)
  • 容積(VOLUME)
  • 角度(ANGLE)

今回のように荷重のように重さの値は検索できないので、代わりに実数(NUMBER)を使用します。
ルックアップ関数はB列の値を検索して、C列以降で関数で指定した列の値を取り出します。B列の列名は何でもいいです。パラメータタイプと単位だけは正しく指定します。

【2022.07.01改訂】

仕様が変更となっていました。
単位のない数字のフォーマットは「パラメータ名##NUMBER##GENERAL
パーセンテージは「パラメータ名##NUMBER##PERCENTAGE

修正したCSVファイルをこちらに掲載しました。長い間気が付きませんでご迷惑をおかけいたしました。

検索例

ブーム長さ9mで作業半径3mの場合、判別キーは「900030」となるので、荷重47の列を指定した場合、返される値は「6」となります。

パラメータとlookup式の作成

ファミリを開いて、定格総荷重を示すパラメータを作成し式を設定します。式の書式は
=size_lookup("CSVファイル名","検索列名",見つからないときの値,検索キーパラメータ)
です。

  1. プロパティパネル>ファミリタイプ
  2. ファミリタイプダイアログボックスで[ルックアップテーブルを管理]をクリック。
  3. [読み込み]を押して、ダウンロードしたCSVファイル(RK130LOAD.csv)を選択してOK
    ルックアップテーブルを読み込む
  4. OK
  5. [新しいパラメータ]をクリック。
  6. パラメータプロパティダイアログボックスで次の操作をします。
    • 名前に「定格総荷重」
    • パラメータタイプ「実数」
    • パラメータグループ「データ」
    • インスタンスを選択
    • OK
  7. 定格総荷重パラメータの式に次の式を設定
  8. 定格総荷重パラメータにルックアップ式を追加
    • size_lookup("RK130LOAD", "荷重47", 0, 判別キー)
    • 値が反映されることを確認
  9. OK

使ってみよう

それでは実際に使ってみましょう。
  1. プロジェクトを新規に作成して、ファミリをロードします。
  2. 配置パネル>作業面に配置を選択、2点をクリックして配置します。
  3. プロパティパネルに定格総荷重が表示されることを確認します。
    ワイヤ先端をドラッグし、定格総荷重の変化を確認する
配置したらワイヤの先端をドラッグしたり、タイプを変えてブームの長さを変更したりしてみてください。定格総荷重の値が変化します。

次回はアウトリガの張り出しを変えてみます。

何かクレーンのファミリで気を付けなればならないことなど、ご意見やご提案がありましたら、遠慮なくコメントに投稿してください。