ArchiCAD MVOで鉄筋情報をコントロールしてみる

2025年4月7日月曜日

GLOB_UI_BUTTON_ID MVO ui_button 鉄筋ラベル

t f B! P L
前回、簡易鉄筋ラベルを作成しましたが、意外と面倒くさいなこれと思ってしまいました。
その理由は、「鉄筋情報をいちいち入力するのが大変」だからです。

一応スポイトツールとか使えば情報をコピペできるのですが、それもちょっと面倒くさいと感じてしまいました。

そこで今回は鉄筋情報をグローバルライブラリとして管理できるようにカスタムMVOを作成すれば良いのではないかと思い、この記事を書くことにしました。
試作ですので機能はだいぶ簡単にしていますが、コンセプトはとても気に入っています。ArchiCADではRevitのようなタイプ管理のテーブルがありませんので、MVO(モデル表示オプション)をデータの保管場所にする方法を一つのアイデアとして参考にしていただければと思います。

まずはその様子を動画でご覧ください。


梁オブジェクトの要素IDを変更すると、MVOで登録した鉄筋情報に連動して変更されるようになっています。よって同じ符号で変更点があった場合は、MVO側で変更してあげれば良いので、データの管理が簡単になると思います。

オブジェクトのイメージはできたと思いますので、実装方法について考えていきたいと思います。作成すべきGDLは2つで鉄筋情報を管理するmvo側の.gsmと鉄筋情報を呼び出すラベル側の.gsmです。まずはmvoの方から取り組んでいきましょう!


鉄筋情報MVOの作成

カスタムMVOの作成手順に関しては、この記事に書いてありますので参考にしてみてください。

今回は以下のようなパラメータを用意しています。青線の部分が実際にデータを登録しておく配列パラメータで、赤線の部分がUIで使用する部分のパラメータになっています。青部分と赤部分で分ける理由は、配列形式のパラメータを直接UIで呼び出してしまうと、UIも配列形式になってしまうので、とても扱いづらいからです。イメージがつかない方は、適当な配列パラメータを作成し、UIスクリプトでUI_INFIELDコマンドを試してみてください。

GDLパラメータリスト
パラメータリスト


まずはマスタースクリプトで、ボタンを押して配列データを増減させるための機能や、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推進者と繋がりたいです。よろしくお願いします。

自己紹介

自分の写真
初めまして。 BIM活用のあれこれ運営人です。 普段はBIM界隈で働いております。皆さんに役立つ情報を提供できればと思っております。BIMマネやBIMオペ、開発、プログラミング、BIMコンサル、技術営業等様々な業務をおこなっております。 GDL作成などBIM活用のお仕事のご相談お待ちしております。 #ゼネコン出身 #施工管理 #生産設計 #BIM開発 #ソフトウェアベンダー #ArchiCAD API #GDL #ArchiCAD python #Revit API #Dynamo

メール

bim.arekore@gmail.com

検索

GDLオブジェクト

ブログ アーカイブ

ArchiCADのGDLをコスパよく作成します ArchiCADユーザーでGDL作成を外部委託されている方へ

QooQ