FAQ
ArcObjects でカーブを延長・短縮した位置を取得する方法

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

概要

ICurve::QueryPoint を利用するとカーブを延長(短縮)した位置を取得することができます。カーブ(Curve)とは、Envelope を除いた長さか周長をとりうるジオメトリです。Line、CircularArc、EllipticArc、BezierCurve、Path、Ring、Polyline、Polygon が該当します。

Image

 

進行方向に延長した点の取得

ICurve pCurve = pGeometry; //カーブをとりうるジオメトリ。
IPoint extpt = new PointClass();
//取得する点を受け取るポイントオブジェクトは、あらかじめ受け取る前に作成しておく。
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtTo, pCurve.Length + pCurve.Length, false, extpt);
//自分自身の長さ分延長した点を取得する
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtTo, 3, true, extpt)
//自分自身の長さを3倍に延長した点を取得する。比率で指定するので、第3引数は True にする。
Dim pCurve As ICurve = pGeometry 'カーブをとりうるジオメトリ。
Dim extpt As IPoint = New PointClass()
'取得する点を受け取るポイントオブジェクトは、あらかじめ受け取る前に作成しておく。
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtTo, pCurve.Length + pCurve.Length, False, extpt)
'自分自身の長さ分延長した点を取得する
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtTo, 3, True, extpt)
'自分自身の長さを3倍に延長した点を取得する。比率で指定するので、第3引数は True にする。

進行方向に短縮した点の取得

ICurve pCurve = pGeometry; //カーブをとりうるジオメトリ。
IPoint extpt = new PointClass();
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtTo, (pCurve.Length / 4), false, extpt);
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtFrom, (pCurve.Length / 4), false, extpt);
//自分自身の長さの 1/4 の長さの点を取得する。

pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtTo, 0.5, true, extpt);
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtFrom, 0.5, true, extpt);
//自分自身の長さの半分の点を取得する。比率で指定するので、第3引数は true にする。
//この場合は、esriExtendTangentAtTo、esriExtendTangentAtFrom のどちらでも同じ結果になります。
Dim pCurve As ICurve = pGeometry 'カーブをとりうるジオメトリ。
Dim extpt As IPoint = New PointClass()
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtTo, (pCurve.Length / 4), False, extpt)
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtFrom, (pCurve.Length / 4), False, extpt)
'自分自身の長さの 1/4 の長さの点を取得する。

pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtTo, 0.5, True, extpt)
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtFrom, 0.5, True, extpt)
'自分自身の長さの半分の点を取得する。比率で指定するので、第3引数はTrueにする。
'この場合は、esriExtendTangentAtTo、esriExtendTangentAtFrom のどちらでも同じ結果になります。

進行方向と逆に延長した点の取得

pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtFrom, -(pCurve.Length / 2), false, extpt);
//自分自身の長さの半分の点を取得する。
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtFrom, -0.5, true, extpt) ;
//自分自身の長さの半分の点を取得する。比率で指定するので、第三引数はTrueにする。
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtFrom, -(pCurve.Length / 2), False, extpt)
'自分自身の長さの半分の点を取得する。
pCurve.QueryPoint(esriSegmentExtension.esriExtendTangentAtFrom, -0.5, True, extpt) 
'自分自身の長さの半分の点を取得する。比率で指定するので、第三引数はTrueにする。

補足情報

ICurve.QueryPoint Method

メタデータ

機能

種類

製品