キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
Wish list cleaning
USERFEST2024 参加申込み受付中!夏の終わりに札幌でお会いしましょう!
  
How to use Archicad - NEW
リニューアルしたHow to use Archicadです! みなさんのArchicadの使い方を教えてください!

プロパティの値をGDLオブジェクトに読み込む方法【旧サイトから転載】

How to use Archicad
Contributor

※本記事は、旧サイト「How to use Archicad」より、UNSUNGHEROさん の2022年3月24日の記事を転載しています。

 

【グラフィソフト追記】
この投稿では、自作のGDLオブジェクトのスクリプトの記載、及びオブジェクトデータのダウンロードができますが、自己責任においてご利用ください。
——–


「テキスト/自動テキスト」のラベルを使えば任意のプロパティを表示することができます。

<YouTube:【ARCHICAD 21新機能】自動テキストラベルの拡張> https://youtu.be/TSBhx9nlZhc

image-6-450x370.png

また、テキストの自動テキストを使ってそれをラベルとして登録することが可能です。

<YouTube:【ARCHICAD 22 新機能】カスタム図形ラベル> https://youtu.be/ZJUQm6VBnME

 

このようにGDLでオブジェクトを作らなくてもArchicadにはプロパティを扱う仕組みが用意されています。
GDLを使ったラベル作成では、

  • 縮尺毎に表示する情報を変更する
  • 情報毎にフォントサイズ、図形サイズ・形状を変更する
  • 要素からの情報を利用した表現(図表など)を作成する

などのGDLを活用することで効率的なデータフローを実現することができます。

それでは、プロパティの値をGDLで取得する設定について説明します。 ソースは標準で利用できる「プロパティラベル」から、プロパティの値をGDLで取得するところについて抜き出したものです。

 

image-7.png

この仕組みを利用するには添付のGSMファイルからマスタスクリプト、2Dスクリプト、パラメータスクリプト、インターフェーススクリプトをコピーアンドペーストしていただき、パラメータには新規作成して変数とタイプを設定してください。

オブジェクトのサブタイプは「ラベル」を選択します。

image-8.png

下図にあるように
 変数名:i1stRowContentをタイプ:整数
 変数名:stPropertyID1をタイプ:テキスト
として設定します。

< パラメータ設定 >

image-9.png

< マスタスクリプト >

マスタスクリプトには下記の内容をコピーしてペーストしてください。

image-10.png

CONTENT_PROPERTY     = 13
PROPVAL_BOOL = 1
PROPVAL_INT                   = 2
PROPVAL_REALNUM        = 3
PROPVAL_STRING            = 4
PROPVAL_LENGTH           = 5
PROPVAL_AREA  = 6
PROPVAL_VOLUME          = 7
PROPVAL_ANGLE             = 8

< 2Dスクリプト >

2Dスクリプトではプロパティをオブジェクト側に読み込んで、テキストとしてアウトプットするためにプロパティのタイプ毎に処理を行っています。

image-11.png

!—————————————————————————————————————————–
!解説:プロパティ値を取得する ——————————————————————ここから—
! ※プロパティのデータタイプ毎の処理をしている。
!—————————————————————————————————————————–
_stPropertyValue = “”
_stPropertyID = stPropertyID1

dim propertyValues[]
	m = request ("Property_Value_Of_Parent", _stPropertyID, _typeValue, dim1, dim2, propertyValues)
	
	if m > 3 then
		_stLengthFormat     = ""
		_stAreaFormat   = ""
		_stVolumeFormat = ""
		_stAngleFormat  = ""
	
		m = request ("Calc_length_unit",    "", _stLengthFormat)
		m = request ("Calc_area_unit",      "", _stAreaFormat)
		m = request ("Calc_volume_unit",    "", _stVolumeFormat)
		m = request ("Calc_angle_unit",     "", _stAngleFormat)
	
		for j = 1 to vardim1(propertyValues)
			if j > 1 then
				_stPropertyValue = _stPropertyValue + "; "
			endif
	
			if _typeValue = PROPVAL_STRING then
				_stPropertyValue = _stPropertyValue + propertyValues[j]
			else
				if _typeValue = PROPVAL_REALNUM then
					_stPropertyValue = _stPropertyValue + str ("%.2", propertyValues[j])
				else
					if _typeValue = PROPVAL_INT then
						_stPropertyValue = _stPropertyValue + str ("%.0", propertyValues[j])
					else
						if _typeValue = PROPVAL_BOOL then
							if propertyValues[j] > 0 then
								_stPropertyValue = _stPropertyValue + `TRUE`
							else
								_stPropertyValue = _stPropertyValue + `FALSE`
							endif
						else
							if _typeValue = PROPVAL_LENGTH then
								_stPropertyValue = _stPropertyValue + str(_stLengthFormat, propertyValues[j])
							else
								if _typeValue = PROPVAL_AREA then
									_stPropertyValue = _stPropertyValue + str(_stAreaFormat, propertyValues[j])
								else
									if _typeValue = PROPVAL_VOLUME then
										_stPropertyValue = _stPropertyValue + str(_stVolumeFormat, propertyValues[j])
									else
										if _typeValue = PROPVAL_ANGLE then
											_stPropertyValue = _stPropertyValue + str(_stAngleFormat, propertyValues[j])
										else
											_stPropertyValue = _stPropertyValue     ! Undefined Value Type
										endif
									endif
								endif
							endif
						endif
					endif
				endif
			endif
		next j
	else
		_stPropertyValue = "---"
	endif

!—————————————————————————————————————————–
!解説:プロパティ値を取得する ——————————————————————ここまで—
! ※_stPropertyValueがプロパティ値なので、このパラメータを使って文字表示する。
!—————————————————————————————————————————–

TEXT2 0,0,_stPropertyValue

<パラメータスクリプト>

こちらはプロパティ値以外の項目を選べるようにするところですが、「プロパティラベル」ではID、名前、カスタムテキスト、プロパティ値が選択できるようになっていて、下記のようなスクリプトになっています。

dim _stRowContent[4]

_stRowContent[1] = ID
_stRowContent[2] = 名前
_stRowContent[3] = カスタムテキスト
_stRowContent[4] = プロパティ値


values{2} “i1stRowContent” CONTENT_ID, _stRowContent[1],
CONTENT_ELEMENT_NAME, _stRowContent[2],
CONTENT_CUSTOM, _stRowContent[3],
CONTENT_PROPERTY, _stRowContent[4]

その中からプロパティ値に関するところだけを抽出したのが下図のスクリプトです。

image-12.png

!——————————————————————————————————————————————
!解説:パラメータ「i1stRowContent」で「コンテンツタイプ」を選択できるようにする—–ここから—
!——————————————————————————————————————————————

dim _stRowContent[1]
_stRowContent[1] = プロパティ値


values{2} “i1stRowContent” CONTENT_PROPERTY, _stRowContent[1]

!——————————————————————————————————————————————
!解説:パラメータ「i1stRowContent」で「コンテンツタイプ」を選択できるようにする—–ここまで—
!——————————————————————————————————————————————

< インターフェーススクリプト >

ここではどのプロパティの値をGDL側に流すかを選択するインターフェースを設定します。

image-13.png

!—————————————————————————————————————————-
!解説:プロパティ名を取得する ——————————————————————ここから—
!—————————————————————————————————————————-

dim parentPropertiesArray[]
n = request (“Properties_Of_Parent”, “”, parentPropertiesArray)

!—————————————————————————————————————————-
!解説:プロパティ名を取得する ——————————————————————ここまで—
!—————————————————————————————————————————-

!—————————————————————————————————————————-
!解説:インターフェースのレイアウト ———————————————————ここから—
!—————————————————————————————————————————-

TABID_ROOT = -1
_idxTab = 1
TABID_GENERAL = _idxTab : _idxTab = _idxTab + 1
TABID_GEOMETRY = _idxTab : _idxTab = _idxTab + 1
TABID_INFORMATION = _idxTab : _idxTab = _idxTab + 1

_stTabTitles = “一般設定”
_iTabIconID = 1

ui_page TABID_GENERAL, TABID_ROOT, _stTabTitles, _iTabIconID

inFieldHeight = 19
inFieldWidth = 135
x4 = 0
x5 = x4 + infieldWidth
yCurr = 4

if i1stRowContent = CONTENT_PROPERTY then
_stSelected = “”
_stPropID = stPropertyID1

r = REQUEST ("Property_Name", _stPropID, _typeName, _groupName, _propertyName)
	
	if r > 2 then
		_stSelected = _propertyName
	else
		_stSelected = ""
	endif
	
	ui_custom_popup_infield "stPropertyID1", x4, yCurr-4, x5-x4, inFieldHeight,
		1, 3, 1, _stSelected,
		parentPropertiesArray

endif

!—————————————————————————————————————————-
!解説:インターフェースのレイアウト ———————————————————ここまで—
!—————————————————————————————————————————-

GDLは既存のスクリプトをコピペして、必要な改造をしていくことでやりたいことが実現しやすいですので、こちらからGSMファイルをダウンロードしてご利用ください。

プロパティ取得_AC25.gsm ※Googleドライブのリンクになります。GetPropertyGDL_AC25.zip

【注意事項 グラフィソフト追記】
本GDLオブジェクトは、自己責任においてご利用ください。

0件の返信0