About the Displaying symbol-based MOLE graphics on a MapControl Sample
[C#]
MoleDisplay.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.DefenseSolutions; using ESRI.ArcGIS.Display; namespace MoleBasicDisplay { public partial class MoleDisplay : Form { ESRI.ArcGIS.Display.IScreenDisplay sc; String[] sic = { "SFAPC----------", "SFAPCF---------", "SFAPFH---------", "SFAPCL---------", "SFAPM----------" }; Random m = new Random(); public MoleDisplay() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { LoadDefaultMapData(); } // Load the MOLE Base Map file on the map control. private void LoadDefaultMapData() { string dataPath = GetSdkDataPath() + @"MilitaryOverlayEditor\"; string defaultMxDoc = dataPath + "molebasemap.mxd"; object missing = System.Reflection.Missing.Value; if (this.axMapControl1.CheckMxFile(defaultMxDoc)) this.axMapControl1.LoadMxFile(defaultMxDoc, missing, missing); else { string errorMsg = "Could not load default map document - Application may not work!"; errorMsg += "\n" + defaultMxDoc; System.Diagnostics.Trace.WriteLine(errorMsg); MessageBox.Show(errorMsg); } } // Adds multiple MOLE graphics to the screen display. private void btnAddGraphics_Click(object sender, EventArgs e) { // Get a screen display object. sc = axMapControl1.ActiveView.ScreenDisplay; sc.StartDrawing (0,(short)ESRI.ArcGIS.Display.esriDisplayCacheFlags.esriDisplayCacheNoFlags ); for (int i = 0; i < sic.Length; i++) { IMoleSymbol markerSymbol = new MoleMarkerSymbolClass(); markerSymbol.SymbolID = sic[i]; IPoint point = new PointClass(); point = createRandomPoint(); ESRI.ArcGIS.Display.IMarkerSymbol mm = (IMarkerSymbol)markerSymbol; mm.Color = ceateRandomColor(); ISymbol moleSym = mm as ISymbol; sc.SetSymbol(moleSym); sc.DrawPoint(point); } sc.FinishDrawing(); } public IPoint createRandomPoint() { IPoint point = null; point = new PointClass(); point.PutCoords(m.Next(-170, 170), m.Next(-80, 80)); return point ; } public ESRI.ArcGIS.Display.IColor ceateRandomColor() { IRgbColor rgb = new RgbColorClass(); rgb.Red = m.Next(0, 255); rgb.Green = m.Next(0, 255); rgb.Blue = m.Next(0, 255); return rgb as IColor; } // Clears all graphics from the screen display. private void btnClearGraphics_Click(object sender, EventArgs e) { if (sc != null) sc.Invalidate(axMapControl1.Extent, true, 0); } private string GetSdkDataPath() { //get the ArcGIS path from the registry Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ESRI\ArcGIS_SXS_SDK"); string path = Convert.ToString(key.GetValue("InstallDir")); //set the of the logo string str = System.IO.Path.Combine(path, @"Samples\data\"); if (!System.IO.Directory.Exists(str)) { MessageBox.Show("Path :" + str + " does not exist!"); return string.Empty; } return str; } } }
[Visual Basic .NET]
MoleDisplay.vb
Public Class MoleDisplay Dim COUNT As Int32 Dim m_Random As New Random Dim sicArray() As String = {"SFAPC----------", "SFAPCF---------", "SFAPFH---------", "SFAPCL---------", "SFAPM----------"} Dim sd As ESRI.ArcGIS.Display.IScreenDisplay #Region "class constructor" Public Sub New() ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine) InitializeComponent() End Sub #End Region Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load COUNT = 5 AxMapControl1.LoadMxFile(GetSdkDataPath() + "MilitaryOverlayEditor\MoleBasemap.mxd") ' drawSymbols() End Sub Private Sub drawSymbols() ' get screen display from active view sd = AxMapControl1.ActiveView.ScreenDisplay sd.StartDrawing(sd.hDC, ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache) Dim i As String For Each i In sicArray 'create point Dim point As ESRI.ArcGIS.Geometry.IPoint point = CreateRandomPoint() 'create marker symbol from mole marker symbol class Dim markerSym As ESRI.ArcGIS.DefenseSolutions.IMoleSymbol markerSym = New ESRI.ArcGIS.DefenseSolutions.MoleMarkerSymbolClass() 'set the symbol id on the marker symbol markerSym.SymbolID = i 'assign color to the symbol Dim m As ESRI.ArcGIS.Display.IMarkerSymbol m = markerSym m.Color = CreateRandomColor() 'now that we have the symbol add it to screen display sd.SetSymbol(m) sd.DrawPoint(point) Next i sd.FinishDrawing() End Sub Public Function CreateRandomPoint() As ESRI.ArcGIS.Geometry.IPoint ' Create a new point and set its properties Dim point As ESRI.ArcGIS.Geometry.IPoint point = New ESRI.ArcGIS.Geometry.PointClass() point.PutCoords(m_Random.Next(-30, 30), m_Random.Next(-30, 30)) Return point End Function Public Function CreateRandomColor() As ESRI.ArcGIS.Display.IColor Dim rgb As ESRI.ArcGIS.Display.IRgbColor rgb = New ESRI.ArcGIS.Display.RgbColorClass() rgb.Red = m_Random.Next(0, 255) rgb.Green = m_Random.Next(0, 255) rgb.Blue = m_Random.Next(0, 255) Return rgb End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click drawSymbols() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click sd.Invalidate(AxMapControl1.Extent, True, ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache) End Sub Private Function GetSdkDataPath() As String 'get the ArcGIS path from the registry Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\ESRI\ArcGIS_SXS_SDK") Dim path As String = Convert.ToString(key.GetValue("InstallDir")) 'set the of the logo Dim str As String = System.IO.Path.Combine(path, "Samples\data\") If (Not System.IO.Directory.Exists(str)) Then MessageBox.Show("Path :" & str & " does not exist!") Return String.Empty End If Return str End Function End Class