閉じる

プロパティの値をGDLオブジェクトに読み込む方法

【グラフィソフト追記】
この投稿では、自作の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スクリプト >

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オブジェクトは、自己責任においてご利用ください。

記事をシェア!

コメントを残す

2019 © GRAPHISOFT JAPAN