前回、簡易鉄筋ラベルを作成しましたが、意外と面倒くさいなこれと思ってしまいました。
その理由は、「鉄筋情報をいちいち入力するのが大変」だからです。
一応スポイトツールとか使えば情報をコピペできるのですが、それもちょっと面倒くさいと感じてしまいました。
そこで今回は鉄筋情報をグローバルライブラリとして管理できるようにカスタムMVOを作成すれば良いのではないかと思い、この記事を書くことにしました。
試作ですので機能はだいぶ簡単にしていますが、コンセプトはとても気に入っています。ArchiCADではRevitのようなタイプ管理のテーブルがありませんので、MVO(モデル表示オプション)をデータの保管場所にする方法を一つのアイデアとして参考にしていただければと思います。
まずはその様子を動画でご覧ください。
梁オブジェクトの要素IDを変更すると、MVOで登録した鉄筋情報に連動して変更されるようになっています。よって同じ符号で変更点があった場合は、MVO側で変更してあげれば良いので、データの管理が簡単になると思います。
オブジェクトのイメージはできたと思いますので、実装方法について考えていきたいと思います。作成すべきGDLは2つで鉄筋情報を管理するmvo側の.gsmと鉄筋情報を呼び出すラベル側の.gsmです。まずはmvoの方から取り組んでいきましょう!
鉄筋情報MVOの作成
カスタムMVOの作成手順に関しては、この記事に書いてありますので参考にしてみてください。今回は以下のようなパラメータを用意しています。青線の部分が実際にデータを登録しておく配列パラメータで、赤線の部分がUIで使用する部分のパラメータになっています。青部分と赤部分で分ける理由は、配列形式のパラメータを直接UIで呼び出してしまうと、UIも配列形式になってしまうので、とても扱いづらいからです。イメージがつかない方は、適当な配列パラメータを作成し、UIスクリプトでUI_INFIELDコマンドを試してみてください。
![]() |
パラメータリスト |
まずはマスタースクリプトで、ボタンを押して配列データを増減させるための機能や、UIで入力した時にデータが更新されるような処理を実装していきます。GLOB_UI_BUTTON_IDという変数が使われていますが、これはUIで押されたボタンのIDを返すグローバル変数です。ボタンのIDは後述するUIスクリプトで任意に定義することができます。この機能を使うことで、「ボタンを押したらリストを増やす」のようなことが可能となっています。
またupdate関連の関数をいくつか定義していますが、これはUIで入力されたデータを配列パラメータに反映するための処理です。上の画像で言うと、赤線部分で入力したものを青線部分のパラメータに格納する処理をここで実装しています。
マスタースクリプト
!リスト数一時格納 list_num=list_num !リスト数増やす if GLOB_UI_BUTTON_ID=1 then list_num=list_num+1 gosub "list_update" parameters select_index=list_num, input_symbol=symbol[select_index], input_top_C=top1_num[select_index], input_stp=stp_pitch[select_index] endif !リスト数減らす if GLOB_UI_BUTTON_ID=2 & list_num>1 then list_num=list_num-1 gosub "list_update" parameters select_index=list_num, input_symbol=symbol[select_index], input_top_C=top1_num[select_index], input_stp=stp_pitch[select_index] endif !ALL DELETE if GLOB_UI_BUTTON_ID=99 then list_num=1 gosub "list_update" parameters select_index=list_num, input_symbol=symbol[select_index], input_top_C=top1_num[select_index], input_stp=stp_pitch[select_index] endif parameters list_num=vardim1(top1_num) !変更 gosub "symbol_update" gosub "top_update" gosub "stp_update" gosub "select_index" goto "masterEND" !===============リスト数アップデート=================== "list_update": !==================================================== DIM _symbol[], _top1_num[], _stp_pitch[] for i=1 to list_num _symbol[i]=symbol[i] _top1_num[i]=top1_num[i] _stp_pitch[i]=stp_pitch[i] next i parameters symbol=_symbol, top1_num=_top1_num, stp_pitch=_stp_pitch return !=====================入力反映======================== "symbol_update": !==================================================== if glob_modpar_name="input_symbol" then symbol[select_index]=input_symbol parameters symbol=symbol endif return !=====================入力反映======================== "top_update": !==================================================== if glob_modpar_name="input_top_C" then top1_num[select_index]=input_top_C parameters top1_num=top1_num endif return !=====================入力反映======================== "stp_update": !==================================================== if glob_modpar_name="input_stp" then stp_pitch[select_index]=input_stp parameters stp_pitch=stp_pitch endif return !=====================入力反映======================== "select_index": !==================================================== if glob_modpar_name="select_index" then input_symbol=symbol[select_index] input_top_C=top1_num[select_index] input_stp=stp_pitch[select_index] parameters input_symbol=input_symbol, input_top_C=input_top_C, input_stp=input_stp endif return "masterEND":
パラメータスクリプトでは、valuesコマンドを使って、書くパラメータの制限を行っています。
パラメータスクリプト
values "list_num" range[1,] values "top1_num" range[1,] values "stp_pitch" range[0.05,] for i=1 to list_num put i next i values "select_index", get(nsp)
インターフェーススクリプトでは、入力用のパラメータ(上画像の赤線部分)をそれぞれ配置しています。ui_buttonコマンドを使用しボタンを作成できますが、この時にui_functionというタイプを選択することで、GLOB_UI_BUTTON_IDで指定されるボタンを設定できます。
画像のようなレイアウトになっていれば、OKです。
![]() |
UIイメージ |
インターフェーススクリプト
ui_dialog "bim-arekore" gosub "鉄筋データ" end !============================================ "鉄筋データ": !============================================ ui_page 1, -1, "入力" ui_outfield "id", 10, 10, 30, 20 ui_infield "select_index" , 45, 8, 50, 20 ui_outfield "符号", 10, 50, 30, 20 ui_infield "input_symbol" , 45, 48, 50, 20 ui_outfield "本数", 10, 80, 30, 20 ui_infield "input_top_C" , 45, 78, 50, 20 ui_outfield "stp", 10, 110, 30, 20 ui_infield "input_stp" , 45, 108, 50, 20 !ui_infield "symbol" , 40, 40, 50, 20 !リスト数増減 ui_button ui_function, "+", 25, 190, 25, 20, 1 ui_button ui_function, "-", 55, 190, 25, 20, 2 ui_button ui_function, "all del", 25, 220, 55, 20, 99 return
今回は以上となります。次回はラベルから登録したデータを呼び出してみたいと思います。
【お知らせ】
ココナラでのサポートサービスも承っておりますので、
ご活用いただければと思います。
1日GDL作成やArchiCAD関連の相談のります 自分でGDLを作成している方へXのアカウントを作成しましたので、ぜひフォロー頂けると嬉しいです。
アカウントはこちらから⇨https://x.com/BIM_arekore
世界の建設業従事者、BIM推進者と繋がりたいです。よろしくお願いします。
0 件のコメント:
コメントを投稿
何でも気軽にコメントください。