キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
BMP#07 announcement

5月開催 BIMマネージャープログラム受講申し込み受付中!

  

ラベルに参照点を設定する方法

参照点ラベル.png

デフォルトのラベルやオブジェクト等によくあるこの様なクリックして直感的に位置を選択できる参照点。

スクリーンショット 2022-08-17 12.55.37.png

今回は、この参照点をGDLを使ってラベルに設定する方法です!
また、ラベルを新規から作成する方法と「要素IDラベル」スクリプトまで合わせてご紹介致します。

 

ーーーーーーーーー目次ーーーーーーーーー

ーーーーーーーーーーーーーーーーーーーー

 

1.ラベルを新規作成

ファイル → ライブラリーとオブジェクト → 新規オブジェクト

 

参照点ラベル-2.png

 

新規オブジェクトをクリックすると、GDLの作成画面が表示されます。

続いて、GDLをラベルとして使えるように設定します。

①サブタイプを選択 → ②図面シンボル → ③ラベル → 選択

 

参照点ラベル-3.png

 

画面左のパラメータ部分をクリックすると、次の様なパラメータがデフォルトで準備されています。

 

参照点ラベル-4.png

 

2.参照点のパラメータを作成

 

パラメータ画面から新規作成をクリックし、変数名を「iReferencePoint」とします。
タイプは、「整数」、名前は、「参照点」とします。

(Tips 一番下のパラメータを先にクリックした状態で新規作成する事で、一番下に作成されます。)

 

参照点ラベル-5.png

 

続いて左側のメニュー中の[マスタ]をクリックして開きます。

以下をコピーして貼り付けます。

 

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

 

[マスタ]の画面では、この様になっています。

 

参照点ラベル-6.png

 

次に、左側のメニュー中のスクリプト内の[パラメータ]をクリックして開きます。
以下をコピーして貼り付けます。

 

!=========================================================
!参照点を選択できるようにする
!=========================================================

values{2} "iReferencePoint"  _valuesRefPoint, _stRefPoint

 

[パラメータ]の画面では、この様になっています。

 

参照点ラベル-7.png

 

画面左のメニュー中上側の[パラメータ]を開き、最初に作成したパラメータ「iReferencePoint」を確認すると、参照点が[マスタ]と[パラメータ]で追加した内容で選択出来る様になっている事を確認します。

 

参照点ラベル-8.png

 

3.インターフェーススクリプトを作成

 

参照点ラベル-1.png

 

目的のクリックして直感的に選択出来る様にする為には、左側メニュー中の[インターフェース]にスクリプトを書いていきます。

左側のメニュー、スクリプト内の[インターフェース]をクリックして開きます。
以下をコピーして貼り付けます。

 

! =============================================================================
! 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

 

上側のタブから[スクリプトを確認]をクリックして、スクリプトに問題がないかを確認します。

 

参照点ラベル-10.png

 

上側のタブの[プレビュー]で参照点が表示されるかを確認します。

 

参照点ラベル-11.png

 

最後に上側のタブの[デフォルトとして設定]をONにして完成です。

 

参照点ラベル-12.png

 

ここまでで完成です。続いて、ラベルを保存します。
ファイル → 名前を付けて保存をクリックします。
埋め込みライブラリに、名前を「参照点ラベル」として保存します。

(今回は、最後に保存をしましたが、先に済ませる事をお勧めします。)

 

4.完成したラベルツールの確認

 

平面図に戻ってラベルツールで、動作を確認します。

ラベルツールを選択して、ラベルタイプから保存した「参照点ラベル」を選択し、設定画面の下側に「LABEL_設定」の項目が出来ていればOKです。

 

参照点ラベル-13.png

 

取りあえず、このままだと何も出来ないラベルなので、要素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でした。

共同執筆者