ArcGIS Pro 3.1 API Reference Guide
ArcGIS.Core.CIM Namespace / CIMGeometricEffectDashes Class
Members Example Version

CIMGeometricEffectDashes Class
Represents the dashes geometric effect which creates a dynamic multipart line geometry from a line feature or the outline of a polygon based on a template.
Object Model
CIMGeometricEffectDashes ClassCIMGeometricEffectDashes ClassCIMGeometricEffectDashes Class
Syntax
Example
Snippet Dash line with two markers - Method I
/// <summary>
/// Create a line symbol with a dash and two markers.<br/>          
/// </summary>
/// <remarks>
/// This line symbol comprises three symbol layers listed below: 
/// 1. A solid stroke that has dashes.
/// 1. A circle marker.
/// 1. A square marker.
/// ![LineSymbolTwoMarkers](http://Esri.github.io/arcgis-pro-sdk/images/Symbology/line-dash-two-markers.png)
/// </remarks>
/// <returns></returns>
internal static Task<CIMLineSymbol> CreateLineDashTwoMarkersAync()
{
    return QueuedTask.Run<CIMLineSymbol>(() =>
    {

        var dash2MarkersLine = new CIMLineSymbol();

        var mySymbolLyrs = new CIMSymbolLayer[]
        {
            new CIMSolidStroke()
            {
                Color = ColorFactory.Instance.BlackRGB,
                Enable = true,
                ColorLocked = true,
                CapStyle = LineCapStyle.Round,
                JoinStyle = LineJoinStyle.Round,
                LineStyle3D = Simple3DLineStyle.Strip,
                MiterLimit = 10,
                Width = 1,
                CloseCaps3D = false,
                Effects = new CIMGeometricEffect[]
                {
                    new CIMGeometricEffectDashes()
                    {
                        CustomEndingOffset = 0,
                        DashTemplate = new double[] {20, 10, 20, 10},
                        LineDashEnding = LineDashEnding.HalfPattern,
                        OffsetAlongLine = 0,
                        ControlPointEnding = LineDashEnding.NoConstraint
                    },
                    new CIMGeometricEffectOffset()
                    {
                        Method = GeometricEffectOffsetMethod.Bevelled,
                        Offset = 0,
                        Option = GeometricEffectOffsetOption.Fast
                    }
                },
            },
            CreateCircleMarkerPerSpecs(),
            CreateSquareMarkerPerSpecs()
        };
        dash2MarkersLine.SymbolLayers = mySymbolLyrs;
        return dash2MarkersLine;
    });
}
private static CIMMarker CreateCircleMarkerPerSpecs()
{
    var circleMarker = SymbolFactory.Instance.ConstructMarker(ColorFactory.Instance.BlackRGB, 5, SimpleMarkerStyle.Circle) as CIMVectorMarker;
    //Modifying the marker to align with line
    //First define "markerplacement"
    CIMMarkerPlacementAlongLineSameSize markerPlacement = new CIMMarkerPlacementAlongLineSameSize()
    {
        AngleToLine = true,
        Offset = 0,
        Endings = PlacementEndings.Custom,
        OffsetAlongLine = 15,
        PlacementTemplate = new double[] { 60 }
    };
    //assign the markerplacement to the marker
    circleMarker.MarkerPlacement = markerPlacement;
    return circleMarker;
}
private static CIMMarker CreateSquareMarkerPerSpecs()
{
    var squareMarker = SymbolFactory.Instance.ConstructMarker(ColorFactory.Instance.BlueRGB, 5, SimpleMarkerStyle.Square) as CIMVectorMarker;
    CIMMarkerPlacementAlongLineSameSize markerPlacement2 = new CIMMarkerPlacementAlongLineSameSize()
    {
        AngleToLine = true,
        Endings = PlacementEndings.Custom,
        OffsetAlongLine = 45,
        PlacementTemplate = new double[] { 60 },
    };
    squareMarker.MarkerPlacement = markerPlacement2;
    return squareMarker;
}
Snippet Dash line with two markers - Method II
/// <summary>
/// Create a line symbol with a dash and two markers. <br/>
/// In this pattern of creating this symbol, a [CIMVectorMarker](https://pro.arcgis.com/en/pro-app/sdk/api-reference/#topic6176.html) object is created as a new [CIMSymbolLayer](https://pro.arcgis.com/en/pro-app/sdk/api-reference/#topic5503.html).
/// The circle and square markers created by [ContructMarker](https://pro.arcgis.com/en/pro-app/sdk/api-reference/#topic12350.html) method is then assigned to the [MarkerGraphics](https://pro.arcgis.com/en/pro-app/sdk/api-reference/#topic6188.html) property of the CIMVectorMarker. 
/// When using this method, the CIMVectorMarker's [Frame](https://pro.arcgis.com/en/pro-app/sdk/api-reference/#topic6187.html) property needs to be set to the [CIMMarker](https://pro.arcgis.com/en/pro-app/sdk/api-reference/#topic3264.html) object's Frame. 
/// Similarly, the CIMVectorMarker's [Size](https://pro.arcgis.com/en/pro-app/sdk/api-reference/#topic3284.html) property needs to be set to the CIMMarker object's size.
/// </summary>
/// <remarks>
/// This line symbol comprises three symbol layers listed below: 
/// 1. A solid stroke that has dashes.
/// 1. A circle marker.
/// 1. A square marker.
/// ![LineSymbolTwoMarkers](http://Esri.github.io/arcgis-pro-sdk/images/Symbology/line-dash-two-markers.png)
/// </remarks>
/// <returns></returns>

internal static Task<CIMLineSymbol> CreateLineDashTwoMarkers2Async()
{
    return QueuedTask.Run<CIMLineSymbol>(() =>
    {
        //default line symbol that will get modified.
        var dash2MarkersLine = new CIMLineSymbol();
        //circle marker to be used in our line symbol as a layer
        var circleMarker = SymbolFactory.Instance.ConstructMarker(ColorFactory.Instance.BlackRGB, 5, SimpleMarkerStyle.Circle) as CIMVectorMarker;
        //circle marker to be used in our line symbol as a layer
        var squareMarker = SymbolFactory.Instance.ConstructMarker(ColorFactory.Instance.BlueRGB, 5, SimpleMarkerStyle.Square) as CIMVectorMarker;
        //Create the array of layers that make the new line symbol
        CIMSymbolLayer[] mySymbolLyrs =
        {
            new CIMSolidStroke() //dash line
            {
                Color = ColorFactory.Instance.BlackRGB,
                Enable = true,
                ColorLocked = true,
                CapStyle = LineCapStyle.Round,
                JoinStyle = LineJoinStyle.Round,
                LineStyle3D = Simple3DLineStyle.Strip,
                MiterLimit = 10,
                Width = 1,
                CloseCaps3D = false,
                Effects = new CIMGeometricEffect[]
                {
                    new CIMGeometricEffectDashes()
                    {
                        CustomEndingOffset = 0,
                        DashTemplate = new double[] {20, 10, 20, 10},
                        LineDashEnding = LineDashEnding.HalfPattern,
                        OffsetAlongLine = 0,
                        ControlPointEnding = LineDashEnding.NoConstraint
                    },
                    new CIMGeometricEffectOffset()
                    {
                        Method = GeometricEffectOffsetMethod.Bevelled,
                        Offset = 0,
                        Option = GeometricEffectOffsetOption.Fast
                    }
                }
            },
            new CIMVectorMarker() //circle marker
            {
                MarkerGraphics = circleMarker.MarkerGraphics,
                Frame = circleMarker.Frame, //need to match the CIMVector marker's frame to the circleMarker's frame.
                Size = circleMarker.Size,    //need to match the CIMVector marker's size to the circleMarker's size.                    
               MarkerPlacement = new CIMMarkerPlacementAlongLineSameSize()
               {
                   AngleToLine = true,
                   Offset = 0,
                   Endings = PlacementEndings.Custom,
                   OffsetAlongLine = 15,
                   PlacementTemplate = new double[] {60},
               }
               
            },
            new CIMVectorMarker() //square marker
            {
               MarkerGraphics = squareMarker.MarkerGraphics,
               Frame = squareMarker.Frame, //need to match the CIMVector marker's frame to the squareMarker frame.
               Size = squareMarker.Size, //need to match the CIMVector marker's size to the squareMarker size.
               MarkerPlacement = new CIMMarkerPlacementAlongLineSameSize()
               {
                   AngleToLine = true,
                   Endings = PlacementEndings.Custom,
                   OffsetAlongLine = 45,
                   PlacementTemplate = new double[] {60},
               }                       
            }
        };
        dash2MarkersLine.SymbolLayers = mySymbolLyrs;
        return dash2MarkersLine;
    });

}
Inheritance Hierarchy

System.Object
   ArcGIS.Core.CIM.CIMObject
      ArcGIS.Core.CIM.CIMGeometricEffect
         ArcGIS.Core.CIM.CIMGeometricEffectDashes

Requirements

Target Platforms: Windows 11, Windows 10

ArcGIS Pro version: 3.0 or higher.
See Also