2022-08-25 06:10 PM
デフォルトのラベルやオブジェクト等によくあるこの様なクリックして直感的に位置を選択できる参照点。
今回は、この参照点をGDLを使ってラベルに設定する方法です!
また、ラベルを新規から作成する方法と「要素IDラベル」スクリプトまで合わせてご紹介致します。
ーーーーーーーーー目次ーーーーーーーーー
ーーーーーーーーーーーーーーーーーーーー
ファイル → ライブラリーとオブジェクト → 新規オブジェクト
新規オブジェクトをクリックすると、GDLの作成画面が表示されます。
続いて、GDLをラベルとして使えるように設定します。
①サブタイプを選択 → ②図面シンボル → ③ラベル → 選択
画面左のパラメータ部分をクリックすると、次の様なパラメータがデフォルトで準備されています。
パラメータ画面から新規作成をクリックし、変数名を「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」を確認すると、参照点が[マスタ]と[パラメータ]で追加した内容で選択出来る様になっている事を確認します。
目的のクリックして直感的に選択出来る様にする為には、左側メニュー中の[インターフェース]にスクリプトを書いていきます。
左側のメニュー、スクリプト内の[インターフェース]をクリックして開きます。
以下をコピーして貼り付けます。
! ============================================================================= ! 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にして完成です。
ここまでで完成です。続いて、ラベルを保存します。
ファイル → 名前を付けて保存をクリックします。
埋め込みライブラリに、名前を「参照点ラベル」として保存します。
(今回は、最後に保存をしましたが、先に済ませる事をお勧めします。)
平面図に戻ってラベルツールで、動作を確認します。
ラベルツールを選択して、ラベルタイプから保存した「参照点ラベル」を選択し、設定画面の下側に「LABEL_設定」の項目が出来ていればOKです。
取りあえず、このままだと何も出来ないラベルなので、要素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行目となっています。
以上でラベルに参照点を設定するTipsでした。