ArchiCAD GDL 移行スクリプトを実践してみる

2025年4月18日金曜日

オブジェクト移行 小ネタ

t f B! P L
突然ですが、ライブラリを更新してGDLが欠落した経験は無いでしょうか?
配置されていたはずのオブジェクトが消え、平面図で見ると「点」になってしまいます。少し見えにくいかもしれませんが、下のような状態です。

ライブラリの欠落
ライブラリの欠落

ライブラリマネージャーを確認すると警告として、何が欠落しているかを確認することができます。

ライブラリマネージャー
ライブラリマネージャー

この欠落が起きる要因の一つとして、GDLの更新があります。GDLは同じファイル名にしていても、新しく名前を付けて保存してしまうと内部のIDが変わってしまい、別のオブジェクトとして認識されてしまいます。

このような状況に対応するために「移行スクリプト」を活用すると良いです。
これを活用すると、配置されたオブジェクトの状態を新しいオブジェクトに引き継ぐことが可能になります。簡単に言うと、配置されている「typeA.gsm」のパラメータの値等を「typeB.gsm」に反映し、オブジェクト自体の置き換えを自動でおこなうことができるのです。

文章だけではピンとこない方もいらっしゃると思いますが、最後まで読んでいただけるとイメージが付くと思います。では早速、どのように実装していくかを紹介します。

お題

今回は以下の図のように、直方体を円錐に置き換えるという例を実践していきたいと思います。直方体が円錐に変わるパターンがあるか分かりませんが、話を分かりやすくするためなので気にしないでいただけたらと思います。

移行スクリプト例

box.gsm

上の図でやりたいことのイメージを元に、GDLを作成していきたいと思います。まずは元となるbox.gsmからです。簡単なスクリプトなので大丈夫だと思いますが、不安な方はこちらの記事を確認いただければと思います。

cone.gsm

次に移行先のオブジェクトを作成していきます。まずはconeコマンドを使用して、3D形状を作成しておきましょう。coneコマンドについてはこちらの記事で使用していますので、必要であればご確認ください。

IDの確認

続いて、移行スクリプトに必要なIDの確認方法について紹介します。
まずは、「GDLライブラリ部品を編集」というツールバーを表示してください。

GDLライブラリ部品を編集
GDLライブラリ部品を編集

ツールバーが表示できましたら、画像のアイコンを選択し「サブタイプ階層」ダイアログを表示します。ダイアログ内でIDを調べたいオブジェクトを選択すると、下方のGUID欄に表示されます。

IDは長い二つの部分がそれぞれ36進文字で構成されています。 最初の36文字は、メインID を表し、後ろの36文字は、リビジョンIDを表します。移行スクリプトではこのメインIDを使用します。

GDL GUIDの確認方法
GUIDの確認方法

移行スクリプト

cone.gsm内で移行スクリプトが動作するように実装してみます。
まずはGDLエディタ内の「移行」を選択し、新規作成を選択します。
メインIDの欄に上記の方法で取得したbox.gsmのIDをコピペし、Archicadのバージョンはお使いのものを設定してください。名前欄は任意で大丈夫です。

GDL 移行スクリプト
移行元の設定

次に移行スクリプトを以下のように記述していきます。
FROM_GUID は、移行が実行されるオリジナルのオブジェクトのメインIDを保持するグローバル変数です。 スクリプトが成功した場合は、インスタンスは更新されたパラメータを含む新規要素に置換されます。

DELETED_PAR_VALUEは移行元オブジェクトに存在するが、新しいバージョンのオブジェクトで削除されたパラメータの値を検索します。今回の場合は、box.gsmには存在していた"Width"と"Height"を検索し、その値をcone.gsmの"W"と"H"にparametersコマンドを使用して置き換えています。

actualGuid = FROM_GUID
! ====================================================================
! Subroutines
! ====================================================================
 _startID = ""	!box.gsmのメインID
 _endID = ""	!cone.gsmのメインID

gosub "migrationstepname_FWM"
! ====================================================================
! Set Migration GUID
! ====================================================================
setmigrationguid actualGuid
! ====================================================================
end ! end ! end ! end ! end ! end ! end ! end ! end ! end ! end ! end
! ====================================================================
! ====================================================================
! migrationstepname
! ====================================================================
"migrationstepname_FWM":
	if actualGuid = _startID then
		n=DELETED_PAR_VALUE("Width", wid)
		if n>0 then
			parameters W = wid
		endif
		n=DELETED_PAR_VALUE("Height", Hei)
		if n>0 then
			parameters H = Hei
		endif
	endif
 	actualGuid = _endID
return

では実際にオブジェクトの置き換えをしてみましょう。
画像のように適当な位置にcone.gsmとbox.gsmを配置してみてください。
この時点ではまだ置き換えは行われません。
ちなみに画像のbox.gsmはWidth=2000、Height=1000です。

移行スクリプト実践
置き換え前

置き換えを行うためにライブラリマネージャを開きます。
box.gsmはライブラリから削除し、「再ロードと適応」を押します。

ArchiCAD ライブラリマネージャー
ライブラリマネージャー

その後、3D画面に戻り状態を確認してみると、下の画像のようにbox.gsmがcone.gsmに置き換わっていることが分かります。また、Width=2000と設定した値がしっかり継承されていることも確認できます。

移行スクリプト実践
置き換え後

このようにして移行スクリプトを活用することができます。
基本的にはBIM実行計画書などでプロジェクトごとに、ライブラリのバージョンなどは合わせるべきですが、どうしてもプロジェクトの途中で新しいGDLに置き換えたい場合などはこの方法を用いると良いでしょう。

今回は以上となります。

【お知らせ】
ココナラでのサポートサービスも承っておりますので、
ご活用いただければと思います。
1日GDL作成やArchiCAD関連の相談のります 自分でGDLを作成している方へ

Xのアカウントもありますので、ぜひフォロー頂けると嬉しいです。
アカウントはこちらから⇨https://x.com/BIM_arekore

世界の建設業従事者、BIM推進者と繋がりたいです。よろしくお願いします。

自己紹介

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

メール

bim.arekore@gmail.com

検索

最新記事

ArchiCAD GDL 移行スクリプトを実践してみる

GDLオブジェクト

ブログ アーカイブ

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

QooQ