Working with IEllipticArc properties
Do the following steps to work with IEllipticArc properties:
- Create three points with the names of startPoint, centerPoint, and endPoint.
- Define a new elliptic arc using centerPoint, startPoint, and endPoint. Now, you have an elliptic arc to work with and the IEllipticArc interface to get the various properties of the elliptic arc, such as CenterPoint, FromAngle, CentralAngle, ToAngle, IsLine, IsPoint, IsMinor, IsCounterClockwise, and so on. A method is also provided to display the created elliptic arc in ArcMap.
The following code example shows how to work with IEllipticArc properties:
[C#]
public void ShowEllipticArcProperties()
{
// Get the application handle and the display.
//Use IEllipticArc.PutCoords to input the center, start, and end points to create an EllipticArc.
IPoint startPoint = new PointClass();
startPoint.PutCoords(100, 100);
IPoint centerPoint = new PointClass();
centerPoint.PutCoords(250, 100);
IPoint endPoint = new PointClass();
endPoint.PutCoords(400, 100);
IEllipticArc ellipticArc = new EllipticArcClass();
//Draw an elliptic arc with a solid line symbol.
ellipticArc.PutCoords(false, centerPoint, startPoint, endPoint, Math.PI, 1 / 3,
esriArcOrientation.esriArcClockwise);
//Display the arc.
ISimpleLineSymbol symbol = new SimpleLineSymbol();
symbol.Style = esriSimpleLineStyle.esriSLSDot;
IMxApplication mxApplication = m_application as IMxApplication;
IDisplay display = mxApplication.Display;
DisplayArc(mxApplication, display as IScreenDisplay, ellipticArc, symbol as
ISymbol);
//Use IEllipticArc.QueryCoords to get the statistics of the elliptic arc.
System.Windows.Forms.MessageBox.Show("The statistics of the Elliptic arc are: "
+ "\n" + "Center Point : " + "\n" + " X coord: " + ellipticArc.CenterPoint.X
+ "\n" + " Y coord: " + ellipticArc.CenterPoint.Y + "\n" + "IsCircular: " +
ellipticArc.IsCircular + "\n" + "From Angle: " + ellipticArc.get_FromAngle
(false) + "\n" + "Central Angle: " + ellipticArc.CentralAngle + "\n" +
"To Angle: " + ellipticArc.get_ToAngle(false) + "\n" + "IsLine: " +
ellipticArc.IsLine + "\n" + "IsPoint: " + ellipticArc.IsPoint + "\n" +
"IsMinor: " + ellipticArc.IsMinor + "\n" + "IsCCW: " +
ellipticArc.IsCounterClockwise);
}
private void DisplayArc(IMxApplication mxApplication, IScreenDisplay sreenDisplay,
IEllipticArc ellipticArc, ISymbol lineSymbol)
{
short oldActiveCache = sreenDisplay.ActiveCache;
//Add the new arc to a segment collection.
ISegment segment = ellipticArc as ISegment;
ISegmentCollection polyline = new Polyline()as ISegmentCollection;
object Missing = Type.Missing;
polyline.AddSegment(segment, ref Missing, ref Missing);
sreenDisplay.ActiveCache = (short)esriScreenCache.esriNoScreenCache;
sreenDisplay.StartDrawing(mxApplication.Display.hDC, (short)
esriScreenCache.esriNoScreenCache);
sreenDisplay.SetSymbol(lineSymbol);
sreenDisplay.DrawPolyline(polyline as IGeometry);
sreenDisplay.FinishDrawing();
sreenDisplay.ActiveCache = oldActiveCache;
}
[VB.NET]
Public Sub Test()
' Get the application handle and the display.
Dim pMxApp As IMxApplication, pSDisplay As IScreenDisplay
pMxApp = MxApplication
pSDisplay = pMxApp.Display
'Use IEllipticArc.PutCoords to input the center, start, and end points to create an EllipticArc.
Dim pCPt As IPoint, pSPt As IPoint, pEPt As IPoint
pSPt = eCreatePoint(100, 100)
pCPt = eCreatePoint(250, 100)
pEPt = eCreatePoint(400, 100)
Dim pEllipticArc As IEllipticArc
pEllipticArc = New EllipticArc
'Draw an elliptic arc with a solid line symbol.
pEllipticArc.PutCoords(False, pCPt, pSPt, pEPt, 3.14, 1 / 3, esriArcOrientation.esriArcClockwise)
DisplayArc(pMxApp, pSDisplay, pEllipticArc, esriSimpleLineStyle.esriSLSSolid)
'Use IEllipticArc.QueryCoords to get the statistics of the elliptic arc.
Dim pEArc As IEllipticArc
pEArc = pEllipticArc
Dim NL As String, TB As String
NL = Chr(13) & Chr(10) ' Define newline.
TB = Chr(9) ' Define tab
MsgBox("The statistics of the Elliptic arc are: " + NL + _
"Center Point : " + NL + _
" X coord: " + TB + Str(pEArc.CenterPoint.x) + NL + _
" Y coord: " + TB + Str(pEArc.CenterPoint.y) + NL + _
"IsCircular: " + TB + Str(pEArc.IsCircular) + NL + _
"From Angle: " + TB + Str(pEArc.fromAngle(False)) + NL + _
"Central Angle: " + TB + Str(pEArc.CentralAngle) + NL + _
"To Angle: " + TB + Str(pEArc.ToAngle(False)) + NL + _
"IsLine: " + TB + Str(pEArc.IsLine) + NL + _
"IsPoint: " + TB + Str(pEArc.IsPoint) + NL + _
"IsMinor: " + TB + Str(pEArc.isMinor) + NL + _
"IsCCW: " + TB + Str(pEArc.IsCounterClockwise))
End Sub
Public Function eSimpleLine(ByVal currStyle) As ISimpleLineSymbol
eSimpleLine = New SimpleLineSymbol
eSimpleLine.Style = currStyle
End Function
Public Sub DisplayArc(ByVal pMxApp As IMxApplication, ByVal pSDisplay As IScreenDisplay, ByVal pEArc As IEllipticArc, ByVal currStyle)
Dim lOldActiveCache As Long
lOldActiveCache = pSDisplay.ActiveCache
'Add the new arc to a segment collection.
Dim pSeg As ISegment
pSeg = pEArc
Dim pPolyline As ISegmentCollection
pPolyline = New Polyline
pPolyline.AddSegment(pSeg)
With pSDisplay
.ActiveCache = esriScreenCache.esriNoScreenCache ' esriNoScreenCache = -1.
.StartDrawing(pMxApp.Display.hDC, esriScreenCache.esriNoScreenCache)
.SetSymbol(eSimpleLine(currStyle))
.DrawPolyline(pPolyline)
.FinishDrawing()
.ActiveCache = lOldActiveCache
End With
End Sub
Public Function eCreatePoint(ByVal x As Double, ByVal y As Double) As IPoint
eCreatePoint = New Point
eCreatePoint.PutCoords(x, y)
End Function
To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
Development licensing | Deployment licensing |
---|---|
ArcGIS for Desktop Basic | ArcGIS for Desktop Basic |
ArcGIS for Desktop Standard | ArcGIS for Desktop Standard |
ArcGIS for Desktop Advanced | ArcGIS for Desktop Advanced |
Engine Developer Kit | Engine |