# IConstructMultipoint Interface

Provides access to members that construct multiple points using other geometries and values.

## Description

Constructs a Multipoint according to various properties of an input geometry or relations between input geometries. Useful in finding the points corresponding to properties that are not satisfied by a single output Point.

## Members

Name Description ConstructArcPoints Constructs the four arc points (fromPoint, toPoint, center point, intersection point of the tangents at fromPoint and toPoint, in that order) for the specified circular arc. ConstructDivideEqual Constructs cPoints points evenly distributed along the input curve. ConstructDivideLength Places points along the input curve each seperate by the specified distance. ConstructIntersection Constructs the point(s) of intersection/tangency between two segments. Different ways of extending the segments in order to locate additional points can be specified. ConstructIntersectionEx Constructs the point(s) of intersection/tangency between two segments. Different ways of extending the segments in order to locate additional points can be specified. ConstructTangent Constructs all points of tangency to a curve from a point.

### IConstructMultipoint.ConstructArcPoints Method

Constructs the four arc points (fromPoint, toPoint, center point, intersection point of the tangents at fromPoint and toPoint, in that order) for the specified circular arc.

``````Public Sub ConstructArcPoints ( _
ByVal a As ICircularArc _
)
``````
``````public void ConstructArcPoints (
ICircularArc a
);
``````

#### Description

Constructs a Multipoint consisting of four points (In that order): The Circular arc's From point, To point, Center point and the point of intersection between the tangents at the From and To points.

#### Remarks ``````private void ConstrConstructArcPoints()

{

IPoint centerPoint = new PointClass();

centerPoint.PutCoords(10, 0);

IPoint fromPoint = new PointClass();

fromPoint.PutCoords(0, 0);

IPoint toPoint = new PointClass();

toPoint.PutCoords(0, 20);

IConstructCircularArc circularArcConstruction = new CircularArcClass();

circularArcConstruction.ConstructThreePoints(fromPoint, centerPoint, toPoint, false);

IConstructMultipoint constructMultipoint = new MultipointClass();

constructMultipoint.ConstructArcPoints(circularArcConstruction as ICircularArc);

IPointCollection pointCollection = constructMultipoint as IPointCollection;

System.Windows.Forms.MessageBox.Show("From Point : " + pointCollection.get_Point(0).X + " , " + pointCollection.get_Point(0).Y + "\n" +

"To Point : " + pointCollection.get_Point(1).X + " , " + pointCollection.get_Point(1).Y + "\n" +

"Center Point : " + pointCollection.get_Point(2).X + " , " + pointCollection.get_Point(2).Y + "\n" +

"Intersection Point : " + pointCollection.get_Point(3).X + " , " + pointCollection.get_Point(3).Y + "\n"

);

}
``````
``````Private Sub ConstructArcPoints()

Dim pConstructCircularArc As ESRI.ArcGIS.Geometry.IConstructCircularArc

Dim pCArc As ESRI.ArcGIS.Geometry.ICircularArc

Dim pPoint1 As ESRI.ArcGIS.Geometry.IPoint

Dim pPoint2 As ESRI.ArcGIS.Geometry.IPoint

Dim pPoint3 As ESRI.ArcGIS.Geometry.IPoint

Dim pTcoll As ESRI.ArcGIS.Geometry.IPointCollection

Dim pConstructMultipoint As ESRI.ArcGIS.Geometry.IConstructMultipoint

Dim pMultipoint As ESRI.ArcGIS.Geometry.IMultipoint

pConstructMultipoint = New ESRI.ArcGIS.Geometry.Multipoint

pConstructCircularArc = New ESRI.ArcGIS.Geometry.CircularArc

pCArc = pConstructCircularArc

pPoint1 = New ESRI.ArcGIS.Geometry.Point

pPoint2 = New ESRI.ArcGIS.Geometry.Point

pPoint3 = New ESRI.ArcGIS.Geometry.Point

pPoint1.PutCoords(100, 100)

pPoint2.PutCoords(300, 300)

pPoint3.PutCoords(500, 150)

pConstructCircularArc.ConstructThreePoints(pPoint1, pPoint2, pPoint3, False)

pConstructMultipoint.ConstructArcPoints(pCArc)

pMultipoint = pConstructMultipoint

pTcoll = pMultipoint

Debug.Print("*********************************************")

Debug.Print(" Report the points")

Debug.Print("*********************************************")

Debug.Print("From Point : " & pTcoll.Point(0).X & " , " & pTcoll.Point(0).Y)

Debug.Print("To Point : " & pTcoll.Point(1).X & " , " & pTcoll.Point(1).Y)

Debug.Print("Center Point : " & pTcoll.Point(2).X & " , " & pTcoll.Point(2).Y)

Debug.Print("Intersection Point : " & pTcoll.Point(3).X & " , " & pTcoll.Point(3).Y)

End Sub
``````

### IConstructMultipoint.ConstructDivideEqual Method

Constructs cPoints points evenly distributed along the input curve.

``````Public Sub ConstructDivideEqual ( _
ByVal inCurve As ICurve, _
ByVal numInnerPoints As Integer _
)
``````
``````public void ConstructDivideEqual (
ICurve inCurve,
int numInnerPoints
);
``````

#### Description

Constructs a Multipoint consisting of the From point of the input Curve, n inner points equally spaced over the length of the curve, and the To point of the curve.

#### Remarks

The number of points in the constructed multipoint is equal to the input numPoints plus the 2 endpoints. ``````private void ConstructDivideEqual()

{

IPoint centerPoint = new PointClass();

centerPoint.PutCoords(10, 0);

IPoint fromPoint = new PointClass();

fromPoint.PutCoords(0, 0);

IPoint toPoint = new PointClass();

toPoint.PutCoords(0, 20);

ICircularArc circularArcConstruction = new CircularArcClass();

circularArcConstruction.PutCoords(centerPoint, fromPoint, toPoint, esriArcOrientation.esriArcClockwise);

IConstructMultipoint constructMultipoint = new MultipointClass();

constructMultipoint.ConstructDivideEqual(circularArcConstruction as ICurve, 10);

IPointCollection pointCollection = constructMultipoint as IPointCollection;

System.Windows.Forms.MessageBox.Show("Number of points is: " + pointCollection.PointCount);

}
``````
``````Sub ConstructDivideEqual_Example()

Dim pCArc As ICircularArc, pConstructMultipoint As IConstructMultipoint

Dim pCenter As IPoint, pFrom As IPoint, pTo As IPoint

Dim ptc As IPointCollection

pCArc = New CircularArc

pCenter = New Point

pCenter.PutCoords(10, 0)

pFrom = New Point

pFrom.PutCoords(0, 0)

pTo = New Point

pTo.PutCoords(0, 20)

pCArc.PutCoords(pCenter, pFrom, pTo, esriArcOrientation.esriArcClockwise)

pConstructMultipoint = New Multipoint

pConstructMultipoint.ConstructDivideEqual(pCArc, 10)

ptc = pConstructMultipoint

Debug.Print("Number of points is: " & ptc.PointCount)

End Sub
``````

### IConstructMultipoint.ConstructDivideLength Method

Places points along the input curve each seperate by the specified distance.

``````Public Sub ConstructDivideLength ( _
ByVal inCurve As ICurve, _
ByVal separationDistance As Double _
)
``````
``````public void ConstructDivideLength (
ICurve inCurve,
double separationDistance
);
``````

#### Description

Constructs a Multipoint consisting of the endpoints of the Curve and the points along the length of the curve spaced a given distance apart from each other starting at the curve's From point and ending at the To point.

#### Remarks

If the final inner point is too close to the To point, that inner point is not included in the constructed multipoint. ``````//This example demonstrates how to use ConstructDivideLentgth

private void ConstructDivideLength()

{

IPoint centerPoint = new PointClass();

centerPoint.PutCoords(10, 0);

IPoint fromPoint = new PointClass();

fromPoint.PutCoords(0, 0);

IPoint toPoint = new PointClass();

toPoint.PutCoords(0, 20);

ICircularArc circularArcConstruction = new CircularArcClass();

circularArcConstruction.PutCoords(centerPoint, fromPoint, toPoint, esriArcOrientation.esriArcClockwise);

IConstructMultipoint constructMultipoint = new MultipointClass();

constructMultipoint.ConstructDivideLength(circularArcConstruction as ICurve, 10);

IPointCollection pointCollection = constructMultipoint as IPointCollection;

System.Windows.Forms.MessageBox.Show("Number of points is: " + pointCollection.PointCount);

}
``````
``````Sub ConstructDivideEqual_ConstructDivideLength_Example()

Dim pCArc As ICircularArc, pConstructMultipoint As IConstructMultipoint

Dim pCenter As IPoint, pFrom As IPoint, pTo As IPoint

Dim ptc As IPointCollection

pCArc = New CircularArc

pCenter = New Point

pCenter.PutCoords(10, 0)

pFrom = New Point

pFrom.PutCoords(0, 0)

pTo = New Point

pTo.PutCoords(0, 20)

pCArc.PutCoords(pCenter, pFrom, pTo, esriArcOrientation.esriArcClockwise)

pConstructMultipoint = New Multipoint

pConstructMultipoint.ConstructDivideLength(pCArc, pCArc.Length / 11)

ptc = pConstructMultipoint

Debug.Print("Number of points is: " & ptc.PointCount)

End Sub
``````

### IConstructMultipoint.ConstructIntersection Method

Constructs the point(s) of intersection/tangency between two segments. Different ways of extending the segments in order to locate additional points can be specified.

``````Public Sub ConstructIntersection ( _
ByVal segment1 As ISegment, _
ByVal extension1 As esriSegmentExtension, _
ByVal segment2 As ISegment, _
ByVal extension2 As esriSegmentExtension, _
[ByRef params1 As Object], _
[ByRef params2 As Object], _
[ByRef isTangentPoint As Object] _
)
``````
``````public void ConstructIntersection (
ISegment segment1,
esriSegmentExtension extension1,
ISegment segment2,
esriSegmentExtension extension2,
ref object params1,
ref object params2,
ref object isTangentPoint
);
``````

#### Description

Constructs a Multipoint containing the points of intersection and tangency between two input geometries. The input geometries can be extended by any of the esriSegmentExtension methods. Optionally, the construction method also returns the relative position and tangency of the intersection point along each curve.

#### Remarks ``````private void ConstructIntersection()

{

IPoint[] points = new IPoint;

for(int i = 0; i < 4; i++)

{

points[i] = new PointClass();

}

points.PutCoords(150, 100);

points.PutCoords(200, 600);

points.PutCoords(400, 600);

points.PutCoords(450, 100);

IBezierCurveGEN bezierCurve = new BezierCurveClass();

bezierCurve.PutCoords(ref points);

IPoint centerPoint = new PointClass();

centerPoint.PutCoords(300, 300);

IPoint fromPoint = new PointClass();

fromPoint.PutCoords(100, 100);

IPoint toPoint = new PointClass();

toPoint.PutCoords(500, 100);

IConstructCircularArc circularArcConstruction = new CircularArcClass();

circularArcConstruction.ConstructThreePoints(fromPoint, centerPoint, toPoint, false);

//params optional

object param0;

object param1;

object isTangentPoint;

IConstructMultipoint constructMultipoint = new MultipointClass();

constructMultipoint.ConstructIntersection(circularArcConstruction as ISegment, esriSegmentExtension.esriNoExtension, bezierCurve as ISegment, esriSegmentExtension.esriNoExtension, out param0, out param1, out isTangentPoint);

IMultipoint multipoint = constructMultipoint as IMultipoint;

IPointCollection pointCollection = multipoint as IPointCollection;

for (int i = 0; i < pointCollection.PointCount; i++)

{

System.Windows.Forms.MessageBox.Show("Point : " + i + " X = " + pointCollection.get_Point(i).X + " Y = " + pointCollection.get_Point(i).Y);

}

}
``````
``````Private Sub ConstructIntersection()

Dim pConstructCircularArc As ESRI.ArcGIS.Geometry.IConstructCircularArc

Dim pCArc As ESRI.ArcGIS.Geometry.ICircularArc

Dim pPoint1 As ESRI.ArcGIS.Geometry.IPoint

Dim pPoint2 As ESRI.ArcGIS.Geometry.IPoint

Dim pPoint3 As ESRI.ArcGIS.Geometry.IPoint

Dim pTcoll As ESRI.ArcGIS.Geometry.IPointCollection

Dim pConstructMultipoint As ESRI.ArcGIS.Geometry.IConstructMultipoint

Dim pMultipoint As ESRI.ArcGIS.Geometry.IMultipoint

Dim i As Long

Dim pBezier As ESRI.ArcGIS.Geometry.IBezierCurve

Dim pPtCon(0 To 3) As ESRI.ArcGIS.Geometry.IPoint

For i = 0 To 3

pPtCon(i) = New ESRI.ArcGIS.Geometry.Point

Next

pPtCon(0).PutCoords(150, 100)

pPtCon(1).PutCoords(200, 600)

pPtCon(2).PutCoords(400, 600)

pPtCon(3).PutCoords(450, 100)

pBezier = New ESRI.ArcGIS.Geometry.BezierCurve

pBezier.PutCoords(4, pPtCon(0))

pConstructMultipoint = New ESRI.ArcGIS.Geometry.Multipoint

pConstructCircularArc = New ESRI.ArcGIS.Geometry.CircularArc

pCArc = pConstructCircularArc

pPoint1 = New ESRI.ArcGIS.Geometry.Point

pPoint2 = New ESRI.ArcGIS.Geometry.Point

pPoint3 = New ESRI.ArcGIS.Geometry.Point

pPoint1.PutCoords(100, 100)

pPoint2.PutCoords(300, 300)

pPoint3.PutCoords(500, 100)

pConstructCircularArc.ConstructThreePoints(pPoint1, pPoint2, pPoint3, False)

pConstructMultipoint.ConstructIntersection(pCArc, ESRI.ArcGIS.Geometry.esriSegmentExtension.esriNoExtension, pBezier, ESRI.ArcGIS.Geometry.esriSegmentExtension.esriNoExtension)

pMultipoint = pConstructMultipoint

pTcoll = pMultipoint

Debug.Print("*********************************************")

Debug.Print(" Report the intersection points")

Debug.Print("*********************************************")

For i = 0 To pTcoll.PointCount - 1

Debug.Print("Point : " & pTcoll.Point(i).X & " , " & pTcoll.Point(i).Y)

Next

End Sub
``````

### IConstructMultipoint.ConstructIntersectionEx Method

Constructs the point(s) of intersection/tangency between two segments. Different ways of extending the segments in order to locate additional points can be specified.

``````Public Sub ConstructIntersectionEx ( _
ByVal segment1 As ISegment, _
ByVal extension1 As esriSegmentExtension, _
ByVal segment2 As ISegment, _
ByVal extension2 As esriSegmentExtension, _
[ByRef params1 As Double], _
[ByRef params2 As Double], _
[ByRef tangentBits As Integer] _
)
``````
``````public void ConstructIntersectionEx (
ISegment segment1,
esriSegmentExtension extension1,
ISegment segment2,
esriSegmentExtension extension2,
ref double params1,
ref double params2,
ref int tangentBits
);
``````

#### Description

Constructs a Multipoint containing the points of intersection and tangency between two input geometries. The input geometries can be extended by any of the esriSegmentExtension methods. Optionally, the construction method also returns the relative position and tangency of the intersection point along each curve.

#### Remarks ### IConstructMultipoint.ConstructTangent Method

Constructs all points of tangency to a curve from a point.

``````Public Sub ConstructTangent ( _
ByVal inCurve As ICurve, _
ByVal p As IPoint _
)
``````
``````public void ConstructTangent (
ICurve inCurve,
IPoint p
);
``````

#### Description

Creates a Multipoint consisting of all points along the input Segment that are Tangent to the input Point.

#### Remarks

Input must consist of a single segment and not polycurves. ``````private void ConstructTangent()

{

IPoint[] points = new IPoint;

for (int i = 0; i < 4; i++)

{

points[i] = new PointClass();

}

points.PutCoords(150, 100);

points.PutCoords(200, 600);

points.PutCoords(400, 600);

points.PutCoords(450, 100);

IBezierCurveGEN bezierCurve = new BezierCurveClass();

bezierCurve.PutCoords(ref points);

IConstructMultipoint constructMultipoint = new MultipointClass();

constructMultipoint.ConstructTangent(bezierCurve as ICurve, points);

IMultipoint multipoint = constructMultipoint as IMultipoint;

IPointCollection pointCollection = multipoint as IPointCollection;

//Report the points

for (int i = 0; i < pointCollection.PointCount; i++)

{

System.Windows.Forms.MessageBox.Show("Point : " + pointCollection.get_Point(i).X + " , " + pointCollection.get_Point(i).Y);

}

}
``````
``````Private Sub ConstructTangent()

Dim pTcoll As ESRI.ArcGIS.Geometry.IPointCollection

Dim pConstructMultipoint As ESRI.ArcGIS.Geometry.IConstructMultipoint

Dim pMultipoint As ESRI.ArcGIS.Geometry.IMultipoint

Dim i As Long

Dim pBezier As ESRI.ArcGIS.Geometry.IBezierCurve

Dim pPtCon(0 To 3) As ESRI.ArcGIS.Geometry.IPoint

For i = 0 To 3

pPtCon(i) = New ESRI.ArcGIS.Geometry.Point

Next

pPtCon(0).PutCoords(150, 100)

pPtCon(1).PutCoords(200, 600)

pPtCon(2).PutCoords(400, 600)

pPtCon(3).PutCoords(450, 100)

pBezier = New ESRI.ArcGIS.Geometry.BezierCurve

pBezier.PutCoords(4, pPtCon(0))

pConstructMultipoint = New ESRI.ArcGIS.Geometry.Multipoint

pConstructMultipoint.ConstructTangent(pBezier, pPtCon(0))

pMultipoint = pConstructMultipoint

pTcoll = pMultipoint

Debug.Print("*********************************************")

Debug.Print(" Report the points")

Debug.Print("*********************************************")

For i = 0 To pTcoll.PointCount - 1

Debug.Print("Point : " & pTcoll.Point(i).X & " , " & pTcoll.Point(i).Y)

Next

End Sub
``````

## Classes that implement IConstructMultipoint

Classes Description
Multipoint An ordered collection of points; optionally has measure, height and ID attributes.