テクニカルサポート 年末年始休業について
休業期間:12月28日(土)~ 1月5日(日) 最終受付:12月27日(金) 17:00まで
休業期間中にいただたお問い合わせは、1月6日(月)より、順次、対応再開いたします。
2024-06-24 11:43 PM - 編集済み 2024-06-25 08:40 PM
※本記事は、旧サイト「How to use Archicad」より、UNSUNGHEROさん の2022年3月24日の記事を転載しています。
【グラフィソフト追記】
この投稿では、自作のGDLオブジェクトのスクリプトの記載、及びオブジェクトデータのダウンロードができますが、自己責任においてご利用ください。
——–
「テキスト/自動テキスト」のラベルを使えば任意のプロパティを表示することができます。
<YouTube:【ARCHICAD 21新機能】自動テキストラベルの拡張> https://youtu.be/TSBhx9nlZhc
また、テキストの自動テキストを使ってそれをラベルとして登録することが可能です。
<YouTube:【ARCHICAD 22 新機能】カスタム図形ラベル> https://youtu.be/ZJUQm6VBnME
このようにGDLでオブジェクトを作らなくてもArchicadにはプロパティを扱う仕組みが用意されています。
GDLを使ったラベル作成では、
などのGDLを活用することで効率的なデータフローを実現することができます。
それでは、プロパティの値をGDLで取得する設定について説明します。 ソースは標準で利用できる「プロパティラベル」から、プロパティの値をGDLで取得するところについて抜き出したものです。
この仕組みを利用するには添付のGSMファイルからマスタスクリプト、2Dスクリプト、パラメータスクリプト、インターフェーススクリプトをコピーアンドペーストしていただき、パラメータには新規作成して変数とタイプを設定してください。
オブジェクトのサブタイプは「ラベル」を選択します。
下図にあるように
変数名:i1stRowContentをタイプ:整数
変数名:stPropertyID1をタイプ:テキスト
として設定します。
マスタスクリプトには下記の内容をコピーしてペーストしてください。
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スクリプトではプロパティをオブジェクト側に読み込んで、テキストとしてアウトプットするためにプロパティのタイプ毎に処理を行っています。
!—————————————————————————————————————————–
!解説:プロパティ値を取得する ——————————————————————ここから—
! ※プロパティのデータタイプ毎の処理をしている。
!—————————————————————————————————————————–
_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]
その中からプロパティ値に関するところだけを抽出したのが下図のスクリプトです。
!——————————————————————————————————————————————
!解説:パラメータ「i1stRowContent」で「コンテンツタイプ」を選択できるようにする—–ここから—
!——————————————————————————————————————————————
dim _stRowContent[1]
_stRowContent[1] = プロパティ値
values{2} “i1stRowContent” CONTENT_PROPERTY, _stRowContent[1]
!——————————————————————————————————————————————
!解説:パラメータ「i1stRowContent」で「コンテンツタイプ」を選択できるようにする—–ここまで—
!——————————————————————————————————————————————
ここではどのプロパティの値をGDL側に流すかを選択するインターフェースを設定します。
!—————————————————————————————————————————-
!解説:プロパティ名を取得する ——————————————————————ここから—
!—————————————————————————————————————————-
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オブジェクトは、自己責任においてご利用ください。