internal string AddGraphicToMap(IGeometry geom, IColor color, bool IsTempGraphic = false, esriSimpleMarkerStyle markerStyle = esriSimpleMarkerStyle.esriSMSCircle, int size = 5)
{
if (geom == null || ArcMap.Document == null || ArcMap.Document.FocusMap == null)
return string.Empty;
IElement element = null;
double width = 2.0;
geom.Project(ArcMap.Document.FocusMap.SpatialReference);
if (geom.GeometryType == esriGeometryType.esriGeometryPoint)
{
// Marker symbols
var simpleMarkerSymbol = new SimpleMarkerSymbol() as ISimpleMarkerSymbol;
simpleMarkerSymbol.Color = color;
simpleMarkerSymbol.Outline = true;
simpleMarkerSymbol.OutlineColor = color;
simpleMarkerSymbol.Size = size;
simpleMarkerSymbol.Style = markerStyle;
var markerElement = new MarkerElement() as IMarkerElement;
markerElement.Symbol = simpleMarkerSymbol;
element = markerElement as IElement;
}
else if (geom.GeometryType == esriGeometryType.esriGeometryPolyline)
{
// create graphic then add to map
var le = new LineElementClass() as ILineElement;
element = le as IElement;
var lineSymbol = new SimpleLineSymbolClass();
lineSymbol.Color = color;
lineSymbol.Width = width;
le.Symbol = lineSymbol;
}
else if (geom.GeometryType == esriGeometryType.esriGeometryPolygon)
{
// create graphic then add to map
IPolygonElement pe = new PolygonElementClass() as IPolygonElement;
element = pe as IElement;
IFillShapeElement fe = pe as IFillShapeElement;
var fillSymbol = new SimpleFillSymbolClass();
RgbColor selectedColor = new RgbColorClass();
selectedColor.Red = 0;
selectedColor.Green = 0;
selectedColor.Blue = 0;
selectedColor.Transparency = (byte)0;
fillSymbol.Color = selectedColor;
fe.Symbol = fillSymbol;
}
if (element == null)
return string.Empty;
element.Geometry = geom;
var mxdoc = ArcMap.Application.Document as IMxDocument;
var av = mxdoc.FocusMap as IActiveView;
var gc = av as IGraphicsContainer;
// store guid
var eprop = element as IElementProperties;
eprop.Name = Guid.NewGuid().ToString();
if (IsTempGraphic)
TempGraphicsList.Add(eprop.Name);
else
MapGraphicsList.Add(eprop.Name);
gc.AddElement(element, 0);
av.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
RaisePropertyChanged(() => HasMapGraphics);
return eprop.Name;
}