デフォルトのラベルやオブジェクト等によくあるこの様なクリックして直感的に位置を選択できる参照点。
今回は、この参照点をGDLを使ってラベルに設定する方法です!
また、ラベルを新規から作成する方法と「要素IDラベル」スクリプトまで合わせてご紹介致します。
1.ラベルを新規作成
ファイル → ライブラリーとオブジェクト → 新規オブジェクト
新規オブジェクトをクリックすると、GDLの作成画面が表示されます。
続いて、GDLをラベルとして使えるように設定します。
①サブタイプを選択 → ②図面シンボル → ③ラベル → 選択
画面左のパラメータ部分をクリックすると、次の様なパラメータがデフォルトで準備されています。
2.参照点のパラメータを作成
パラメータ画面から新規作成をクリックし、変数名を「iReferencePoint」とします。
タイプは、「整数」、名前は、「参照点」とします。
(Tips 一番下のパラメータを先にクリックした状態で新規作成する事で、一番下に作成されます。)
続いて左側のメニュー中の[マスタ]をクリックして開きます。
以下をコピーして貼り付けます。
dim _stRefPoint[9]
_stRefPoint[1] = `左上`
_stRefPoint[2] = `上部中`
_stRefPoint[3] = `右上`
_stRefPoint[4] = `左中`
_stRefPoint[5] = `中央中`
_stRefPoint[6] = `右中`
_stRefPoint[7] = `左下`
_stRefPoint[8] = `中央下`
_stRefPoint[9] = `右下`
dim _valuesRefPoint[9]
for i = 1 to 9
_valuesRefPoint[i] = i
next i
[マスタ]の画面では、この様になっています。
次に、左側のメニュー中のスクリプト内の[パラメータ]をクリックして開きます。
以下をコピーして貼り付けます。
!=========================================================
!参照点を選択できるようにする
!=========================================================
values{2} "iReferencePoint" _valuesRefPoint, _stRefPoint
[パラメータ]の画面では、この様になっています。
画面左のメニュー中上側の[パラメータ]を開き、最初に作成したパラメータ「iReferencePoint」を確認すると、参照点が[マスタ]と[パラメータ]で追加した内容で選択出来る様になっている事を確認します。
3.インターフェーススクリプトを作成
目的のクリックして直感的に選択出来る様にする為には、左側メニュー中の[インターフェース]にスクリプトを書いていきます。
次に、左側のメニュー中のスクリプト内の[インターフェース]をクリックして開きます。
以下をコピーして貼り付けます。
! =============================================================================
! UIダイアログボックスのタイトル名
! =============================================================================
UI_DIALOG "Label_設定"
! =============================================================================
! ページ設定1
! =============================================================================
! ------------------------------------------------------------------------------
pageStartY = 5
yPos0 = pageStartY + 5
outFldWdt = 50
outFldHgt = 15
inFldWdt = 100
inFldWdt2 = 150
xPos0 = 45
xPos1 = 10
xPos2 = 125
yPos1 = 85
! ------------------------------------------------------------------------------
! ------------------------------------
!参照点の設定
! ------------------------------------
_referenceFlag = 0
if LABEL_HAS_POINTER then _referenceFlag = 4
ui_outfield `参照点`, xPos0, yPos0, outFldWdt, outFldHgt, _referenceFlag
_picX = 13
_picY = 13
_idxTooltip = 1
for _iRowNum = 1 to 3
for _iColNum = 1 to 3
_imageIndex = _iColNum + (_iRowNum - 1) * 3
_imageName = "ui_anchor0" + str(_imageIndex, 1, 0) + "_hl(1)"
ui_pict_radiobutton{2} "iReferencePoint", _iColNum + (_iRowNum - 1) * 3, "", _imageName, xPos2 + (_iColNum - 1) * _picX, yPos0 + (_iRowNum - 1) * _picY, _picX, _picY ui_tooltip _stRefPoint[_idxTooltip]
_idxTooltip = _idxTooltip + 1
next _iColNum
next _iRowNum
! ------------------------------------------------------------------------------
ui_separator 10, 70, 400, 70
上側のタブから[スクリプトを確認]をクリックして、スクリプトに問題がないかを確認します。
上側のタブの[プレビュー]で参照点が表示されるかを確認します。
最後に上側のタブの[デフォルトとして設定]をONにして完成です。
ここまでで完成です。続いて、ラベルを保存します。
ファイル → 名前を付けて保存をクリックします。
今回は、埋め込みライブラリに、名前を「参照点ラベル」として保存します。
4.完成したラベルツールの確認
平面図に戻ってラベルツールで、動作を確認します。
ラベルツールを選択して、ラベルタイプから保存した「参照点ラベル」を選択し、設定画面の下側に「LABEL_設定」の項目が出来ていればOKです。
取りあえず、このままだと何も出来ないラベルなので、要素IDを取得するラベルを作成したいと思います。
5.要素IDラベル作成
先に保存をします。
開いている「参照点ラベル」に対して、ファイル → 名前を付けて保存をクリックします。
埋め込みライブラリに、名前を「要素IDラベル」として保存します。
左側のメニュー中のスクリプト内の[2D]をクリックして開きます。
以下をコピーして貼り付けます。
! =============================================================================
! フォント設定
! =============================================================================
DEFINE STYLE font_style AC_TextFont_1, AC_TextSize_1, 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)
! ------------------------------------
!文字の幅を取得
! ------------------------------------
font_W = STW (_MasterID) / 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 = -font_W/2-_frameOffset
if iReferencePoint = 1 | iReferencePoint = 4 | iReferencePoint = 7 then _posX = font_W/2+ _frameOffset
if iReferencePoint = 7 | iReferencePoint = 8 | iReferencePoint = 9 then _posY = font_height/2+ _frameOffset
if iReferencePoint = 1 | iReferencePoint = 2 | iReferencePoint = 3 then _posY = -font_height/2-_frameOffset
add2 _posX, _posY
! =============================================================================
! 枠
! =============================================================================
!IF LABEL_FRAME_ON then
IF AC_bLabelFrame then
! ------------------------------------
!枠のペン設定
! ------------------------------------
pen AC_LabelPointerPen
! ------------------------------------
!枠の線種設定
! ------------------------------------
line_type AC_LabelPointerLineType
! ------------------------------------
!枠を作成
! コマンド : LINE2 , RECT2 , POLY2 etc
! ------------------------------------
RECT2 -font_W/2-_frameOffset, -font_H/2-_frameOffset, font_W/2+ _frameOffset,font_H/2+ _frameOffset
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 !(塗りつぶし種類)
POLY2_b 5 , frame_fill ,fillPenFg,fillPenBg,
-font_W/2-_frameOffset , -font_H/2-_frameOffset , 1 ,
font_W/2+ _frameOffset , -font_H/2-_frameOffset , 1 ,
font_W/2+ _frameOffset , font_H/2+ _frameOffset , 1 ,
-font_W/2-_frameOffset ,font_H/2+ _frameOffset , 1 ,
-font_W/2-_frameOffset , -font_H/2-_frameOffset , 1
ENDIF
! =============================================================================
! テキスト
! =============================================================================
! ------------------------------------
!テキストのペン設定
! ------------------------------------
pen AC_TextPen_1
text2 0, 0, _MasterID
細かいコマンドの説明は、GDLリファレンスにて確認して下さい。
今回の目的、参照点をクリックして直感的に選択して移動する部分は、46行目〜62行目となっています。
- 5行目「DEFINE STYLE」で文字の配置位置を中央に設定
- 9行目「 REQUEST」でフォントの各部の高さを取得
- 14行目 上記で取得した高さを元に文字の高さを計算しています
- 24行目「REQUEST」で要素IDを取得
- 30行目「STW」で要素IDの文字幅を取得
- 48行目で枠のオフセットの値を縮尺に合わせる
- 54行目〜59行目までは、要素IDの文字幅と枠のオフセット値を中心からの移動距離で各ポイント毎の”_posX”と”_posY”に代入しています
- 61行目「add2」で上記の代入された数値で座標を移動させています
以上でラベルに参照点を設定するTipsでした。