FAQ
ArcObjects でジオメトリを拡大/縮小 (スケーリング) する方法

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

概要

ArcObjects でジオメトリを拡大/縮小する方法について説明します。ジオメトリをスケーリングするには ITransform2D::Scale() メソッドを使用します。

ジオメトリを拡大/縮小する際、どの点を中心点 (下図の X) として拡大/縮小するかによってスケールした後のジオメトリの位置が異なります。

中心点の与え方

拡大/縮小の中心点がジオメトリの内部の点である場合、その点はスケール後も移動しないジオメトリ内部の点となります。中心点を重心にすると、全方位的にスケーリングされます。拡大/縮小の中心点はジオメトリの外部の点でもかまいません。拡大しながら移動するジオメトリはジオメトリの外部の点を中心として拡大することで表現できるでしょう。X 方向、Y 方向の拡大率を 1 より大きく指定すれば拡大に、1 より小さく指定すれば縮小になります。また、 X 方向の拡大率に負の値を指定すると左右が反転し、Y 方向に拡大率に負の値を指定すると上下が反転します。そのため、元の形を保つためには X 方向、Y 方向共に正の値を指定します。

サンプル コード

サンプル コードでは、マップに追加されている最上位のレイヤーの OBJECT ID #1 を取得し、ジオメトリの重心を取得しています。取得後、ITransform::Scale メソッドを使用し、ジオメトリのスケールを拡大/縮小しています。

IGeometry pGeometry = ((IFeatureLayer)ArcMap.Document.FocusMap.get_Layer(0)).FeatureClass.GetFeature(1).ShapeCopy;
IPointCollection ptCol = (IPointCollection)pGeometry ;
IPoint pPT = ((IGeometry5)pGeometry ).CentroidEx; //ジオメトリの重心を取得する
ITransform2D pTransform = (ITransform2D)pGeometry ;
pTransform.Scale(pPT, 4, 4);      //pPTを中心に 4 倍に拡大する。
//pTransform.Scale(pPT, 0.5, 0.5);  //pPTを中心に半分に縮小する。
Dim pGeo As IGeometry pGeometry = CType(My.ArcMap.Document.FocusMap.Layer(0), IFeatureLayer).FeatureClass.GetFeature(1).ShapeCopy
Dim ptCol As IPointCollection = pGeometry 
Dim pPT As IPoint = CType(pGeometry , IGeometry5).CentroidEx ’ジオメトリの重心を取得する
Dim pTransform As ITransform2D = pGeometry 
pTransform.Scale(pPT, 4, 4)      'pPTを中心に 4 倍に拡大する。
'pTransform.Scale(pPT, 0.5, 0.5)  'pPTを中心に半分に縮小する。

参考情報

メタデータ

機能

種類

製品