//Set the element name string elementName = "ArrowTest"; //Get the graphics container from the page layout (set elsewhere) IActiveView activeView = (IActiveView)pageLayout; IGraphicsContainer graphicsContainer = (IGraphicsContainer)pageLayout; //Find all existing elements with specified name //Build a list of elements and then loop over the list to delete them List<IElement> elementsToDelete = new List<IElement>(); graphicsContainer.Reset(); IElementProperties3 elementProperties3 = null; IElement element = null; while ((element = graphicsContainer.Next()) != null) { elementProperties3 = (IElementProperties3)element; if (elementProperties3.Name == elementName) { elementsToDelete.Add(element); } } foreach (IElement elementToDelete in elementsToDelete) { graphicsContainer.DeleteElement(elementToDelete); } //Define color IRgbColor rgbColor = new RgbColorClass(); rgbColor.RGB = Color.Black.ToArgb(); //Define an arrow marker IArrowMarkerSymbol arrowMarkerSymbol = new ArrowMarkerSymbolClass(); arrowMarkerSymbol.Color = rgbColor; arrowMarkerSymbol.Size = 6; arrowMarkerSymbol.Length = 8; arrowMarkerSymbol.Width = 6; //Add an offset to make sure the square end of the line is hidden arrowMarkerSymbol.XOffset = 0.8; //Create cartographic line symbol ICartographicLineSymbol cartographicLineSymbol = new CartographicLineSymbolClass(); cartographicLineSymbol.Color = rgbColor; cartographicLineSymbol.Width = 1; //Define simple line decoration ISimpleLineDecorationElement simpleLineDecorationElement = new SimpleLineDecorationElementClass(); //Place the arrow at the end of the line (the "To" point in the geometry below) simpleLineDecorationElement.AddPosition(1); simpleLineDecorationElement.MarkerSymbol = arrowMarkerSymbol; //Define line decoration ILineDecoration lineDecoration = new LineDecorationClass(); lineDecoration.AddElement(simpleLineDecorationElement); //Set line properties ILineProperties lineProperties = (ILineProperties)cartographicLineSymbol; lineProperties.LineDecoration = lineDecoration; //Define line element ILineElement lineElement = new LineElementClass(); lineElement.Symbol = (ILineSymbol)cartographicLineSymbol; //Create the line geometry IPoint fromPoint = new PointClass(); fromPoint.X = 4.0; fromPoint.Y = 0.8; IPoint toPoint = new PointClass(); toPoint.X = 5.0; toPoint.Y = 0.8; IPolyline polyline = new PolylineClass(); polyline.FromPoint = fromPoint; polyline.ToPoint = toPoint; //Cast to Element and set geometry element = (IElement)lineElement; element.Geometry = polyline; //Set the name elementProperties3.Name = elementName; //Add element to graphics container graphicsContainer.AddElement(element, 0); //Clear the graphics selection (graphics are selected when added) IGraphicsContainerSelect graphicsContainerSelect = (IGraphicsContainerSelect)graphicsContainer; graphicsContainerSelect.UnselectAllElements(); activeView.Refresh();
Thanks!It helps!
Putting Code for creating two sided arrow symbol in a line.
hope this shall help some one.
/// <summary>
/// Crates MultiLayerLineSymbol with Two Sided arrow.
/// </summary>
/// <returns></returns>
private ISymbol Create_MultiLayerLineSymbol()
{
// Create Arrow Marker Symbol
IArrowMarkerSymbol pAMS = new ArrowMarkerSymbolClass();
pAMS.Style = esriArrowMarkerStyle.esriAMSPlain;
pAMS.Length = Constants.AMS_LENGTH;
pAMS.Width = Constants.AMS_WIDTH;
// Line Decoration Element
SimpleLineDecorationElementClass sldElement = new SimpleLineDecorationElementClass();
sldElement.AddPosition(1);
sldElement.FlipFirst = true;
sldElement.FlipAll = false;
sldElement.Rotate = true;
sldElement.MarkerSymbol = (IMarkerSymbol)pAMS;
sldElement.PositionAsRatio = true;
// Line Decoration
LineDecoration ld = new LineDecorationClass();
ld.AddElement(sldElement);
// Cartographic Line Symbol
CartographicLineSymbolClass cls = new CartographicLineSymbolClass();
// Line Properties. In order to set additional properties like offsets and dash patterns we must create an ILineProperties object
ILineProperties lp = cls as ILineProperties; //QI
lp.Offset = Constants.CLS_LINE_PROP_OFFSET;
//lp.Flip = true;
lp.LineDecoration = ld;
cls.Cap = esriLineCapStyle.esriLCSButt;
cls.Join = esriLineJoinStyle.esriLJSRound;
cls.Width =Constants.CLS_WIDTH;
//---[START]--------------------------- 2nd CartographicLineSymbolClass ----------------------------
// for putting the arrow marker at opposite end of the line.
// Line Decoration Element
SimpleLineDecorationElementClass sldElement1 = new SimpleLineDecorationElementClass();
sldElement1.AddPosition(0);
sldElement1.FlipFirst = true;
sldElement1.FlipAll = false;
sldElement1.Rotate = true;
sldElement1.MarkerSymbol = (IMarkerSymbol)pAMS;
sldElement1.PositionAsRatio = true;
// Line Decoration
LineDecoration ld1 = new LineDecorationClass();
ld1.AddElement(sldElement1);
// Cartographic Line Symbol
CartographicLineSymbolClass cls1 = new CartographicLineSymbolClass();
// Line Properties. In order to set additional properties like offsets and dash patterns we must create an ILineProperties object
ILineProperties lp1 = cls1 as ILineProperties; //QI
lp1.Offset =Constants.CLS_LINE_PROP_OFFSET;
//lp.Flip = true;
lp1.LineDecoration = ld1;
cls1.Cap = esriLineCapStyle.esriLCSButt;
cls1.Join = esriLineJoinStyle.esriLJSRound;
cls1.Width = Constants.CLS_WIDTH;
//---[END]--------------------------- 2nd CartographicLineSymbolClass ------------------------------
IMultiLayerLineSymbol multiLayerLineSymbol = new MultiLayerLineSymbolClass();
multiLayerLineSymbol.AddLayer((ILineSymbol)cls);
multiLayerLineSymbol.AddLayer((ILineSymbol)cls1);
return multiLayerLineSymbol as ISymbol;
}