サポート > PC-MAPPING ヒント集 > スクリプト > スクリプトによる注記属性の引き出し線位置の設定
スクリプトによる注記属性の引き出し線位置の設定
前景レイヤーポイント内部属性「X」,「Y」フィールドの座標値とポイント座標値を比較し、その差分を「注記属性」フィールドの文字ボックスの引き出し線「X」「Y」欄へ反映するスクリプトです。
■ サンプル
サンプル[script20.zip(約17KB)]をダウンロードする
sample.pcm:サンプルプロジェクト
PcmSetTbLineXY.js:サンプルJScript
PcmSetTbLineXY.vbs:サンプルVBScript

■ 準備
JScriptの場合「PcmSetTbLineXY.js」、VBScriptの場合「PcmSetTbLineXY.vbs」を記述します。
ここでは、「PcmSetTbLineXY.js」を例に記述します。

  1. ダウンロードしたファイルを「C:\sample\script20」フォルダーへ解凍します。

  2. ダウンロードしたスクリプトファイル「PcmSetTbLineXY.js」をユーザーメニューに登録します。
    [ワークスペース]リボン-[カスタマイズ]-[ユーザーメニュー]を実行して[ユーザー定義メニュー1]ダイアログボックスを表示します。
    <追加>ボタンをクリックし、[ユーザー定義メニュー2]ダイアログボックスを表示します。
    スクリプトを以下のように設定します。

  3. サンプルプロジェクト「sample.pcm」を開きます。

  4. 画面には、「sample」レイヤーポイント内部属性「注記属性」フィールドの設定を表記しています。

  5. [注記属性の設定]ダイアログボックスの文字ボックス<設定>ボタンから[文字ボックス]ダイアログボックスを表示します。
    引き出し線「X」「Y」欄は0になっています。

  6. 「sample」レイヤーポイント内部属性「X」「Y」フィールドには、引き出し線の座標値(平面直角座標系)が入力されています。

■ 解説
要点1
[文字ボックス]ダイアログボックスの引き出し線「X」「Y」欄の値(mm)は図葉上サイズなので、実長から図葉上サイズに変更するために、「sample」レイヤーの座標系情報から付帯情報の縮尺を取得します。

var dblScale = 1 / objCi.InfoDouble(11);

要点2
「注記属性」フィールドから「注記属性」の設定値を取得します。

var objData = objLDb.GetCellData(i, lngLFID, false);

要点3
「注記属性」の設定値から「文字ボックス」の設定値を取得します。

var objTb = objData.TextBox();

要点4
[文字ボックス]ダイアログボックスの引き出し線「X」「Y」欄の値(mm)は図葉上サイズなので、実長から図葉上サイズに変更するために、
ポイント座標値からの相対サイズ(m)=(引き出し線座標値-ポイント座標値)
1(m)=1000(mm)
図葉上サイズ(mm)=相対サイズ(m)×1000(mm)×縮尺
の計算を行い、入力します。

objTb.LineDy = ( objLDb.GetCellAsDouble(i, lngLFID2, false) - objLyr.PntGetPos(i, 1, 1) ) * 1000 * dblScale;
objTb.LineDx = ( objLDb.GetCellAsDouble(i, lngLFID3, false) - objLyr.PntGetPos(i, 0, 1) ) * 1000 * dblScale;

要点5
変更した「文字ボックス」の設定値を「注記属性」の設定値に反映します。

objData.TextBox = objTb;

要点6
変更した「注記属性」の設定値を「注記属性」フィールドに反映します。

blnTemp = objLDb.SetCellData(i, lngLFID, objData);

■ 実行
  1. サンプルプロジェクト「sample.pcm」を開きます。

  2. [ユーザーメニュー]リボン-[作図]-[引き出し線位置の設定]を実行します。

  3. すると、引き出し線が表示されます。

  4. [文字ボックス]ダイアログボックスの引き出し線「X」「Y」欄を見ると、値が入力されている事がわかります。

■ 注意
  • [文字ボックス]ダイアログボックスの引き出し線「X」「Y」は、ポイント座標値からの相対的な図葉上サイズになるため、有効小数点以下桁数には制限があります。
    よって、ポイント内部属性「X」「Y」フィールドの座標値(平面直角座標系)と厳密には一致しません。
  • このスクリプトは、平面直角座標系のみ対応しています。