
前回記事「ARCHICAD|ラベルに参照点を設定する方法」に引き続き今回は、「建具符号ラベル」をご紹介致します。
ARCHICADの窓、ドアにはデフォルトで建具符号が用意されていて、モデル表示オプション(MVO)と連動する事が可能な便利なマークがあります。しかし、編集をするには階層が深く面倒に感じていました。

そこで、要素IDによる管理をしてみる事にしました。
その為には、建具符号が必要となりますので、その作成手順です。
1.建具符号ラベルを複製保存
前回作成した「参照点ラベル」を開きます。
平面図の画面からだと、ショートカット「command+shift+o」でライブラリ部分を開くが表示されます。
ツールバーからですと、ファイル → ライブラリーとオブジェクト → オブジェクトを開くでライブラリ部分を開くが表示されます。
参照点ラベル」を開いたら ファイル → 名前を付けて保存をクリックします。
埋め込みライブラリに、名前を「建具符号ラベル」として保存します。
2.パラメータの追加
今回は、パラメータに以下の3つを追加します。
- text_size_select
- marker_size
- h_font
画面左の上側の[パラメータ]をクリックして、追加していきます。
・text_size_select
このパラメータは、“用紙サイズ”と“モデルサイズ”を選択出来る様にする為の物です。
①新規作成 ② 変数名「text_size_select」③タイプ 「文字」 ④ 名前 「サイズの形式」⑤値は空欄とします。
値が空欄なのは、後ほどスクリプトのパラメータ側で、“用紙サイズ”と“モデルサイズ”を割り当てる為です。
・marker_size
①新規作成 ② 変数名「marker_size」③タイプ 「長さ」 ④ 名前 「マーカーサイズ」⑤値「420」とします。
・h_font
①新規作成 ② 変数名「h_font」③タイプ 「長さ」 ④ 名前 「マーカーサイズ」⑤値「1.7」とします。
3.用紙サイズ/モデルサイズを選択できるようにする
今回のスクリプトでは、「用紙サイズ」と「モデルサイズ」のいずれかを選択出来る様にします。
画面左のスクリプト内の[パラメータ]をクリックしてスクリプト画面を開き
前回のスクリプト下に下記をコピーして貼り付けます。
!=========================================================
!用紙サイズ/モデルサイズを選択できるようにする
!=========================================================
VALUES "text_size_select" "用紙サイズ" , "モデルサイズ"
以下の様になります。

画面上側のタブ、[スクリプトを確認]をクリックして、問題が無ければ、画面左の上側の[パラメータ]をクリックして、変数名「text_size_select」の値を確認して、“用紙サイズ”と“モデルサイズ”を選択出来る様になっていればOKです。

3.インターフェーススクリプト編集
続いて左側メニューのスクリプト内の[インターフェース]をクリックして前回のスクリプト下に
下記をコピーして貼り付けます。
! ------------------------------------------------------------------------------
ui_outfield "サイズの形式", xPos0, yPos1, 100
ui_infield "text_size_select", xPos2, yPos1-2,100,20
yPos1 = yPos1 +30
ui_outfield "マーカーサイズ", xPos0, yPos1, 100
ui_infield "marker_size", xPos2, yPos1 -2,50,20
yPos1 = yPos1 +30
ui_outfield "フォントサイズ", xPos0, yPos1, 100
ui_infield "h_font", xPos2, yPos1 -2,50,20

4.2Dスクリプトの編集
左側メニューのスクリプト内の[2D]をクリックしてスクリプト画面に
下記をコピーして貼り付けます。
! =============================================================================
! フォント設定
! =============================================================================
IF text_size_select = "用紙サイズ" THEN
!用紙サイズで文字サイズを指定する(h_fontパラメータの値をmm)
_fontSize = h_font*1000
ELSE
!モデルサイズでサイズを指定する(h_fontパラメータの値をmm)
_fontSize = h_font/GLOB_SCALE*1000 *100
ENDIF
DEFINE STYLE font_style AC_TextFont_1, _fontSize, 5, 0
SET STYLE font_style
n = REQUEST ("Height_of_style","font_style", height, descent, leading)
font_height = height / 1000 * GLOB_SCALE
font_descent = descent / 1000 * GLOB_SCALE
font_leading = leading / 1000 * GLOB_SCALE
font_H = font_height - font_descent - font_leading
! =============================================================================
! 出力文字設定
! =============================================================================
! ------------------------------------
!親要素のIDを取得
! ------------------------------------
_MasterID = ""
result = REQUEST("Full_ID_of_parent", "", _MasterID)
! ------------------------------------
!文字列を記号と番号に分ける
! ------------------------------------
windType = ""
num = 0
if result = 0 then
windType = "<ID>"
num_str = "0"
else
nn = SPLIT(_MasterID,"%s %n",windType,num)
num_str = str("%.0" , num)
endif
! ------------------------------------
!文字の幅を取得
! ------------------------------------
windType_W = STW (windType) / 1000 * GLOB_SCALE
num_W = STW (num_str) / 1000 * GLOB_SCALE
! =============================================================================
! テキスト位置
! =============================================================================
! LABEL_HAS_POINTER - ポインタ有無
! LABEL_POSITION - ポインタの座標
if not(LABEL_HAS_POINTER) then
add2 LABEL_POSITION [2][1] + LABEL_POSITION [3][1],
LABEL_POSITION [2][2] + LABEL_POSITION [3][2]
endif
! =============================================================================
! 参照点によるテキスト位置の移動
! =============================================================================
_frameOffset = LABEL_FRAME_OFFSET* GLOB_SCALE/1000
_posX = 0
_posY = 0
if iReferencePoint = 3 | iReferencePoint = 6 | iReferencePoint = 9 then _posX = -marker_size-_frameOffset
if iReferencePoint = 1 | iReferencePoint = 4 | iReferencePoint = 7 then _posX = marker_size+ _frameOffset
if iReferencePoint = 7 | iReferencePoint = 8 | iReferencePoint = 9 then _posY = marker_size+ _frameOffset
if iReferencePoint = 1 | iReferencePoint = 2 | iReferencePoint = 3 then _posY = -marker_size-_frameOffset
add2 _posX, _posY
! =============================================================================
! 枠
! =============================================================================
!IF LABEL_FRAME_ON then
IF AC_bLabelFrame then
! ------------------------------------
!枠のペン設定
! ------------------------------------
pen AC_LabelPointerPen
! ------------------------------------
!枠の線種設定
! ------------------------------------
line_type AC_LabelPointerLineType
! ------------------------------------
!枠を作成
! コマンド : LINE2 , RECT2 , POLY2 etc
! ------------------------------------
IF text_size_select = "用紙サイズ" THEN
!用紙サイズで指定する
marker_size = marker_size *GLOB_SCALE/100
ELSE
!モデルサイズで指定する
marker_size = marker_size
ENDIF
LINE2 -marker_size, 0 , marker_size , 0
CIRCLE2 0, 0, marker_size
hotspot2 0,0
hotspot2 marker_size,0
hotspot2 -marker_size,0
ENDIF
! =============================================================================
! 塗りつぶし
! =============================================================================
IF AC_bLabelOpaqueFill THEN
! ------------------------------------
!枠のペン設定
! ------------------------------------
pen AC_LabelTextBgrPen
! ------------------------------------
!塗りつぶしを作成
! コマンド : POLY2_b , POLY2 etc
! ------------------------------------
!===============frame_fillの設定
!frame_fill = 1 !輪郭線のみ
frame_fill = 2 !塗りつぶしのみ
!frame_fill = 1+2 !輪郭線+塗りつぶし
!frame_fill = 1+2+4 !輪郭線+塗りつぶし+開いたポリゴンを閉じる
fill_types = 65
fillPenFg = AC_LabelTextBgrPen
fillPenBg = AC_LabelTextBgrPen
!===============円型塗りつぶし
set fill fill_types !fill_typesパラメータに追加(塗りつぶし種類)
!fillPenFg パラメータに追加(前景ペン)
!fillPenBg パラメータに追加(背景ペン)
r = marker_size !円の半径
!frame_fill = 1 !輪郭線のみ
frame_fill = 2 !塗りつぶしのみ
!frame_fill = 1+2 !輪郭線+塗りつぶ
!AC_LabelTextBgrPen
poly2_B 2,frame_fill,AC_TextPen_1, AC_LabelTextBgrPen,
0,0,900 , ! 円弧の中心点を設定
r,360,4000 ! 円弧の角度を設定
!===============
ENDIF
! =============================================================================
! テキスト
! =============================================================================
! ------------------------------------
!テキストのペン設定
! ------------------------------------
pen AC_TextPen_1
text2 0, marker_size/2, windType
text2 0, -marker_size/2, num_str
上部タブの[スクリプトを確認]をクリックして、問題がなければOKです。
ラベルを配置する前の設定画面では、以下の様になっていると思います。

最後に、建具ID名称の付け方は、「AW10」の様に最初にAW等の記号、そのまま続けて数字又はスペースを入れた後に、数字を入力となっています。
以上が「要素IDから建具符号ラベル」の作り方でした。
参照点ラベルをベースにする事で、色々なラベルに変える事が出来ますので、ラベルのテンプレートとして利用すると良いですね。