FAQ
ラインの始点から終点の方向へジオメトリを移動する方法

ナレッジ番号:5574 | 登録日:2023/07/27 | 更新日:2024/11/21

概要

図形を移動する方法はいくつかありますが、よく使われるのは ITransform2D::Move を使う方法です。この方法では引数に X方向、 Y方向の移動量を指定して図形を移動します。移動する方向と距離が予めわかっている場合はこれはとても便利な方法ですが、移動する方向と距離がラインで取得されている場合、またラインで指定した方がわかりやすい設計になる場合は ITransform2D::MoveVector を使う方が便利です。MoveVector メソッドでは引数を ILine で指定します。

使用例

あるラインに沿って平行移動するケースとしては、画面の表示範囲を特定の方向(上、下、右斜め上、左斜め下等)に現在の表示範囲分移動する場合などがあります。このようなケースでは移動する方向と長さをもったラインを用意してそれを引数とすると、移動の処理がわかりやすいコードになります。

サンプルコード

// 現在のエクステントの対角線を、左下が起点、右上が終点として取得する。
IEnvelope pEnvelope = ((IActiveView)(ArcMap.Document.FocusMap)).Extent.Envelope;
ILine pLine = new LineClass();
pLine.FromPoint = env.LowerLeft;
pLine.ToPoint = pEnvelope.UpperRight;

// 斜め右方向にアクティブなビューのエクステントを移動する。
ITransform2D pTransform2D = (ITransform2D)pEnvelope ;
pTransform2D.MoveVector(pLine);

// 移動した範囲を現在のエクステントとする。
((IActiveView)(ArcMap.Document.FocusMap)).Extent = pEnvelope;

//マップの再描画
((IActiveView)(ArcMap.Document.FocusMap)).Refresh();
 
'現在のエクステントの対角線を、左下が起点、右上が終点として取得する。
My.ArcMap.Application.CurrentTool = Nothing
Dim pEnvelope As IEnvelope = CType(My.ArcMap.Document.FocusMap, IActiveView).Extent.Envelope
Dim pLine As ILine = New LineClass()
pLine.FromPoint = pEnvelope.LowerLeft
pLine.ToPoint = pEnvelope.UpperRight

'斜め右方向にアクティブなビューのエクステントを移動する。
Dim pTransform2D As ITransform2D = CType(pEnvelope, ITransform2D)
pTransform2D.MoveVector(pLine)

'移動した範囲を現在のエクステントとする。
CType(My.ArcMap.Document.FocusMap, IActiveView).Extent = pEnvelope 

'マップの再描画
CType(My.ArcMap.Document.FocusMap, IActiveView).Refresh()
Image

メタデータ

機能

種類

製品