Add a North Arrow to the Page Layout from the Map.
[C#]
///<summary>Add a North Arrow to the Page Layout from the Map.</summary>
///
///<param name="pageLayout">An IPageLayout interface.</param>
///<param name="map">An IMap interface.</param>
///
///<remarks></remarks>
public void AddNorthArrow(ESRI.ArcGIS.Carto.IPageLayout pageLayout, ESRI.ArcGIS.Carto.IMap map)
{
if(pageLayout == null || map == null)
{
return;
}
ESRI.ArcGIS.Geometry.IEnvelope envelope = new ESRI.ArcGIS.Geometry.EnvelopeClass();
envelope.PutCoords(0.2, 0.2, 5, 5); // Specify the location and size of the north arrow
ESRI.ArcGIS.esriSystem.IUID uid = new ESRI.ArcGIS.esriSystem.UIDClass();
uid.Value = "esriCarto.MarkerNorthArrow";
// Create a Surround. Set the geometry of the MapSurroundFrame to give it a location
// Activate it and add it to the PageLayout's graphics container
ESRI.ArcGIS.Carto.IGraphicsContainer graphicsContainer = pageLayout as ESRI.ArcGIS.Carto.IGraphicsContainer; // Dynamic Cast
ESRI.ArcGIS.Carto.IActiveView activeView = pageLayout as ESRI.ArcGIS.Carto.IActiveView; // Dynamic Cast
ESRI.ArcGIS.Carto.IFrameElement frameElement = graphicsContainer.FindFrame(map);
ESRI.ArcGIS.Carto.IMapFrame mapFrame = frameElement as ESRI.ArcGIS.Carto.IMapFrame; // Dynamic Cast
ESRI.ArcGIS.Carto.IMapSurroundFrame mapSurroundFrame = mapFrame.CreateSurroundFrame(uid as ESRI.ArcGIS.esriSystem.UID, null); // Dynamic Cast
ESRI.ArcGIS.Carto.IElement element = mapSurroundFrame as ESRI.ArcGIS.Carto.IElement; // Dynamic Cast
element.Geometry = envelope;
element.Activate(activeView.ScreenDisplay);
graphicsContainer.AddElement(element, 0);
ESRI.ArcGIS.Carto.IMapSurround mapSurround = mapSurroundFrame.MapSurround;
// Change out the default north arrow
ESRI.ArcGIS.Carto.IMarkerNorthArrow markerNorthArrow = mapSurround as ESRI.ArcGIS.Carto.IMarkerNorthArrow; // Dynamic Cast
ESRI.ArcGIS.Display.IMarkerSymbol markerSymbol = markerNorthArrow.MarkerSymbol;
ESRI.ArcGIS.Display.ICharacterMarkerSymbol characterMarkerSymbol = markerSymbol as ESRI.ArcGIS.Display.ICharacterMarkerSymbol; // Dynamic Cast
characterMarkerSymbol.CharacterIndex = 200; // change the symbol for the North Arrow
markerNorthArrow.MarkerSymbol = characterMarkerSymbol;
}
[Visual Basic .NET]
'''<summary>Add a North Arrow to the Page Layout from the Map.</summary>
'''
'''<param name="pageLayout">An IPageLayout interface.</param>
'''<param name="map">An IMap interface.</param>
'''
'''<remarks></remarks>
Public Sub AddNorthArrow(ByVal pageLayout As ESRI.ArcGIS.Carto.IPageLayout, ByVal map As ESRI.ArcGIS.Carto.IMap)
If pageLayout Is Nothing OrElse map Is Nothing Then
Return
End If
Dim envelope As ESRI.ArcGIS.Geometry.IEnvelope = New ESRI.ArcGIS.Geometry.EnvelopeClass
envelope.PutCoords(0.2, 0.2, 5, 5) ' Specify the location and size of the north arrow
Dim uid As ESRI.ArcGIS.esriSystem.IUID = New ESRI.ArcGIS.esriSystem.UIDClass
uid.Value = "esriCarto.MarkerNorthArrow"
' Create a Surround. Set the geometry of the MapSurroundFrame to give it a location
' Activate it and add it to the PageLayout's graphics container
Dim graphicsContainer As ESRI.ArcGIS.Carto.IGraphicsContainer = TryCast(pageLayout, ESRI.ArcGIS.Carto.IGraphicsContainer) ' Dynamic Cast
Dim activeView As ESRI.ArcGIS.Carto.IActiveView = TryCast(pageLayout, ESRI.ArcGIS.Carto.IActiveView) ' Dynamic Cast
Dim frameElement As ESRI.ArcGIS.Carto.IFrameElement = graphicsContainer.FindFrame(map)
Dim mapFrame As ESRI.ArcGIS.Carto.IMapFrame = TryCast(frameElement, ESRI.ArcGIS.Carto.IMapFrame) ' Dynamic Cast
Dim mapSurroundFrame As ESRI.ArcGIS.Carto.IMapSurroundFrame = mapFrame.CreateSurroundFrame(TryCast(uid, ESRI.ArcGIS.esriSystem.UID), Nothing) ' Dynamic Cast
Dim element As ESRI.ArcGIS.Carto.IElement = TryCast(mapSurroundFrame, ESRI.ArcGIS.Carto.IElement) ' Dynamic Cast
element.Geometry = envelope
element.Activate(activeView.ScreenDisplay)
graphicsContainer.AddElement(element, 0)
Dim mapSurround As ESRI.ArcGIS.Carto.IMapSurround = mapSurroundFrame.MapSurround
' Change out the default north arrow
Dim markerNorthArrow As ESRI.ArcGIS.Carto.IMarkerNorthArrow = TryCast(mapSurround, ESRI.ArcGIS.Carto.IMarkerNorthArrow) ' Dynamic Cast
Dim markerSymbol As ESRI.ArcGIS.Display.IMarkerSymbol = markerNorthArrow.MarkerSymbol
Dim characterMarkerSymbol As ESRI.ArcGIS.Display.ICharacterMarkerSymbol = TryCast(markerSymbol, ESRI.ArcGIS.Display.ICharacterMarkerSymbol) ' Dynamic Cast
characterMarkerSymbol.CharacterIndex = 200 ' change the symbol for the North Arrow
markerNorthArrow.MarkerSymbol = characterMarkerSymbol
End Sub