ArchiCADの窓GDLに採光補正係数を設定

2024年11月14日木曜日

GDL request text UI 法規

t f B! P L


窓GDLに採光機能を拡張

採光規程(建築基準法28条)

(居室の採光及び換気)
第二十八条住宅、学校、病院、診療所、寄宿舎、下宿その他これらに類する建築物で政令で定めるものの居室(居住のための居室、学校の教室、病院の病室その他これらに類するものとして政令で定めるものに限る。)には、採光のための窓その他の開口部を設け、その採光に有効な部分の面積は、その居室の床面積に対して、五分の一から十分の一までの間において居室の種類に応じ政令で定める割合以上としなければならない。ただし、地階若しくは地下工作物内に設ける居室その他これらに類する居室又は温湿度調整を必要とする作業を行う作業室その他用途上やむを得ない居室については、この限りでない。
2居室には換気のための窓その他の開口部を設け、その換気に有効な部分の面積は、その居室の床面積に対して、二十分の一以上としなければならない。ただし、政令で定める技術的基準に従つて換気設備を設けた場合においては、この限りでない。
3別表第一(い)欄(一)項に掲げる用途に供する特殊建築物の居室又は建築物の調理室、浴室その他の室でかまど、こんろその他火を使用する設備若しくは器具を設けたもの(政令で定めるものを除く。)には、政令で定める技術的基準に従つて、換気設備を設けなければならない。
4ふすま、障子その他随時開放することができるもので仕切られた二室は、前三項の規定の適用については、一室とみなす。


採光補正係数用のD/H

建築基準法28条の採光規定の勉強に伴い、ArchiCADの窓GDLに機能を追加してみたので記録しておきます。

上記の規定により、採光に有効な部分の面積を求める必要があり、その算出には隣地境界線等までの水平距離(D)と開口部の直上にある建築物の部分までの距離(H)を求める必要があります。

今回は、GDLを少し拡張して、直感的にDとHを設定できるようにしてみました。
まずは下の動画で確認してみてください。




スクリプト

実装に先立ち、以下のパラメータを新規追加します。

新規追加パラメータ


今回の3Dスクリプトでは、以下の3つのホットスポットを作成し、視覚的に分かりやすく設定できるようにしています:

  1. 隣地境界線までの距離のホットスポット
    隣地との距離を設定するため、ユーザーが直感的に調整可能なホットスポットを配置しています。

  2. 開口部の直上にある建築物部分までの距離のホットスポット
    開口部から上方にある建築物の高さ(H)を指定し、適切なクリアランスを設けられるようにホットスポットを設置しています。

  3. 参照面の透明度調整用のホットスポット
    透明度を視覚的に調整するためのホットスポットです。透明度を簡単に操作でき、3D空間で視認性が向上します。

さらに、textコマンドを使用して、3D空間にて以下の情報を確認できるようにしています:

  • Dの長さ(隣地境界線までの距離)
  • Hの長さ(開口部直上の建築物部分までの高さ)
  • D/Hの計算結果
    これにより、DとHの相対関係を視覚的に理解しやすくなり、建築基準を満たしているかの確認が簡単に行えます。

3Dスクリプト
"採光係数D/H":
	DEFINE STYLE "saiko" "New York", 100, 2, 0
	SET STYLE "saiko"

	DEFINE MATERIAL "vvv" 0,
		        0.7, 0.3, 0.2,! 表面 RGB [0.0..1.0]
			1.0, ! 環境係数 [0.0..1.0]
			0.5, ! 拡散係数 [0.0..1.0]
			0.0, ! 鏡係数 [0.0..1.0]
			0.0, ! 透過係数 [0.0..1.0]
			2.0, ! 光沢 [0.0..100.0]
			1, ! 透過減衰量 [0.0..4.0]
			0.5284, 0.5989, 0.6167,! 鏡面 RGB [0.0..1.0]
			0, 0, 0, ! 放射 RGB [0.0..1.0]
			0.0 ! 放射減衰量 [0.0..65.5]

	DEFINE MATERIAL "face" 0,
			0.2, 0.5, 0.9,! 表面 RGB [0.0..1.0]
			1.0, ! 環境係数 [0.0..1.0]
			0.5, ! 拡散係数 [0.0..1.0]
			0.0, ! 鏡係数 [0.0..1.0]
			opacity, ! 透過係数 [0.0..1.0]
			2.0, ! 光沢 [0.0..100.0]
			1, ! 透過減衰量 [0.0..4.0]
			0.5284, 0.5989, 0.6167,! 鏡面 RGB [0.0..1.0]
			0, 0, 0, ! 放射 RGB [0.0..1.0]
			0.0 ! 放射減衰量 [0.0..65.5]

	cid=10000

	material  "vvv"

	hotspot 0, b/2, 0

	hotspot 0, b/2, 0	,cid, kyokai, 1+128    :cid=cid+1
	hotspot 0, b/2, kyokai	,cid, kyokai, 2	:cid=cid+1
	hotspot 0, b/2, -1	,cid, kyokai, 3	:cid=cid+1

	lin_ 0, b/2, 0, 0, b/2, kyokai
	hotline 0, b/2, 0, 0, b/2, kyokai, cid	:cid=cid+1

	add 0, b/2, kyokai-0.1
	CONE 0.1, 0.03, 0, 90, 90
	del 1


	addy b/2

	hotspot 0, target[1][2], 0		,cid,target[1][1], 1+128	:cid=cid+1
	hotspot 0, target[1][2], target[1][1]	,cid,target[1][1], 2		:cid=cid+1
	hotspot 0, target[1][2], -1		,cid,target[1][1], 3		:cid=cid+1

	hotspot 0, 0		, target[1][1]	,cid,target[1][2], 1+128	:cid=cid+1
	hotspot 0, target[1][2], target[1][1]	,cid,target[1][2], 2		:cid=cid+1
	hotspot 0, -1		, target[1][1]	,cid,target[1][2], 3		:cid=cid+1

	lin_ 0, 0,target[1][1], 0, target[1][2], target[1][1]
	hotline 0, 0,target[1][1], 0, target[1][2], target[1][1], cid:cid=cid+1

	lin_ 0, 0,kyokai, 0, target[1][2], target[1][1]
	hotline 0, 0,kyokai, 0, target[1][2], target[1][1], cid:cid=cid+1

	hotspot 0, 0,target[1][1]

	add 0, target[1][2]-0.1, target[1][1]
	rotx -90
	CONE 0.1, 0.03, 0, 90, 90
	del 2

	add 0, -0.05, target[1][1]+(kyokai-target[1][1])/2
	roty 90
	if rev then
		mulx -1
	else
		mulx 1
	endif
	text 0.001, 0, "D="+str((kyokai-target[1][1])*1000, 5, 1)+"mm"
	del 3

	add 0, target[1][2]/2, target[1][1]
	roty 90
	if rev then
		mulx -1
	else
		mulx 1
	endif
	text 0.001, 0, "H="+str((target[1][2])*1000, 5, 1)+"mm"
	del 3

	add 0, target[1][2], target[1][1]+(kyokai-target[1][1])/2
	roty 90
	if rev then
		mulx -1
	else
		mulx 1
	endif
	text 0.001, 0, "D/H="+str(dh, 5, 3)
	del 3


	if refFace then
		material  "face"
		!参照面
		plane 4,
			0, -10, kyokai,
			0, 10, kyokai,
			0, 10, 0,
			0, -10, 0
		del 1

		hotspot 0, 0, 0, 	  cid, opacityCntr, 1+128,opacity	:cid=cid+1
		hotspot 0, 0, opacityCntr,  cid, opacityCntr, 2	,opacity	:cid=cid+1
		hotspot 0, 0, -1, 	  cid, opacityCntr, 3	,opacity	:cid=cid+1
	endif
return


マスタースクリプトにおいて、requestコマンドを使ってゾーン情報を取得することで、オブジェクトが配置されているゾーンとの連携が可能です。
たとえば、以下のように"Zone_relations"リクエストを使用してゾーン情報を検索し、その結果を利用して設定を自動化したり、ゾーンごとに異なる表示設定を行うことができます。

マスタースクリプト
name=""
n = REQUEST ("Zone_relations", "",category_name, code, name, number)
if not(name="") then
	parameters zoneName=name
endif

パラメータスクリプトでは、D/Hの計算と透明度を制御する仕組みを書いています。

パラメータスクリプト
parameters  dh=(kyokai-target[1][1])/target[1][2]

if GLOB_MODPAR_NAME = "kyokai" THEN
	parameters opacityCntr=opacity*kyokai
ELSE
	parameters opacity=opacityCntr/kyokai
ENDIF

インターフェーススクリプトで下記のコードを記述することで、下の画像のようなUIを作成することができます。

採光計算用のページを追加し、各種パラメータをこのページに追加しています。
UIについての詳細はまた改めて記事にしていきたいと思います。

オブジェクト設定内のUIの作成


インターフェーススクリプト
ui_page 10000, 2, "採光計算"

ui_listfield 1, 10, 5, 420, 220, 0, "", ""
ui_listitem 1, 1, "saikoCulc"
ui_listitem 2, 1, "kyokai"
ui_listitem 3, 1, "target"
ui_listitem 4, 1, "refFace"
ui_listitem 5, 1, "opacity"
ui_listitem 6, 1, "dh"
ui_listitem 7, 1, "zoneName"
ui_listitem 8, 1, "rev"


まとめ

少し長くなってしまいましたが、アイデア次第でこのような表現も可能となりました。BIM元年と呼ばれる年から10年以上も経過していますが、まだまだ新しいオブジェクトの形が誕生していく気がしています。BIM推進の皆さん、ぜひ協力して盛り上げていきましょう。


なお、基本的なGDLの学習はこちらの教材がおすすめです!
GDLリファレンスがgraphisoftが用意していますが、初見では理解しづらいので、
簡単にまとめられたやさしく学ぶArchiCAD GDLプログラミングという本で基礎をしっかり学びましょう!

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

検索

最新記事

多角形GDLに機能を追加してみる②

GDLオブジェクト

UI (1) ユニーク (1) 椅子 (4) 仮囲い (6) (7) 小ネタ (3) 足場 (15) 足場計画 (4) 多角形 (3) 法規 (1) 無償DL (4)

ブログ アーカイブ

自己紹介

自分の写真
GDL作成などBIM活用のお仕事の相談お待ちしております。 #中堅ゼネコン出身 #施工管理職 #生産設計部 #BIM開発部門
ArchiCADのGDLをコスパよく作成します ArchiCADユーザーでGDL作成を外部委託されている方へ

QooQ