Select to view content in your preferred language

Rotate point symbol based on a field

637
3
Jump to solution
02-06-2024 02:23 PM
AquanuityDevelopment
Occasional Contributor

I just could not make this attribute driven symbology feature to work using ArcGIS Pro SDK.  The following is a snippet of my code:

var render = lyr.CreateRenderer(simpleRender) as CIMSimpleRenderer;

var cimExpressionInfoZ = new CIMExpressionInfo { ReturnType=ExpressionReturnType.Numeric, Expression = "$feature.Direction" };
var cimVisualVariableInfoZ = new CIMVisualVariableInfo { VisualVariableInfoType = VisualVariableInfoType.Expression, ValueExpressionInfo = cimExpressionInfoZ};

var listCIMVisualVariables = new List<CIMVisualVariable>
{
new CIMRotationVisualVariable {
VisualVariableInfoZ = cimVisualVariableInfoZ,
RotationTypeZ=SymbolRotationType.Arithmetic
}
};

render.VisualVariables = listCIMVisualVariables.ToArray();

lyr.SetRenderer(render);

 

I would like to rotate the symbol based on a field called "Direction" with angles range 0 - 360.  The symbols have been rotated but not according to the values in "Direction" fields.  Any help will be great appreciated.

 

0 Kudos
1 Solution

Accepted Solutions
GKmieliauskas
Esri Regular Contributor

Hi,

Try code below. It works for me.

        protected override async void OnClick()
        {
            var featLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().First();
            await QueuedTask.Run(() =>
            {
                var render = featLayer.GetRenderer() as CIMSimpleRenderer;
                var cimVisualVariableInfoXY = new CIMVisualVariableInfo
                {
                    RandomMax = 360,
                    RandomMin = 0,
                    VisualVariableInfoType = VisualVariableInfoType.None
                };
                var cimExpressionInfoZ = new CIMExpressionInfo
                {
                    Title = "Custom",
                    ReturnType = ExpressionReturnType.Default,
                    Expression = "$feature.Direction"
                };
                var cimVisualVariableInfoZ = new CIMVisualVariableInfo
                {
                    RandomMax = 360,
                    RandomMin = 0,
                    VisualVariableInfoType = VisualVariableInfoType.Expression,
                    ValueExpressionInfo = cimExpressionInfoZ
                };
                var listCIMVisualVariables = new List<CIMVisualVariable>
                {
                    new CIMRotationVisualVariable {
                        VisualVariableInfoX = cimVisualVariableInfoXY,
                        VisualVariableInfoY = cimVisualVariableInfoXY,
                        VisualVariableInfoZ = cimVisualVariableInfoZ,
                        RotationTypeZ=SymbolRotationType.Arithmetic,
                        NormalToSurface = false
                    }
                };
                render.VisualVariables = listCIMVisualVariables.ToArray();
                featLayer.SetRenderer(render);
            });
        }

View solution in original post

3 Replies
GKmieliauskas
Esri Regular Contributor

Hi,

Try code below. It works for me.

        protected override async void OnClick()
        {
            var featLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().First();
            await QueuedTask.Run(() =>
            {
                var render = featLayer.GetRenderer() as CIMSimpleRenderer;
                var cimVisualVariableInfoXY = new CIMVisualVariableInfo
                {
                    RandomMax = 360,
                    RandomMin = 0,
                    VisualVariableInfoType = VisualVariableInfoType.None
                };
                var cimExpressionInfoZ = new CIMExpressionInfo
                {
                    Title = "Custom",
                    ReturnType = ExpressionReturnType.Default,
                    Expression = "$feature.Direction"
                };
                var cimVisualVariableInfoZ = new CIMVisualVariableInfo
                {
                    RandomMax = 360,
                    RandomMin = 0,
                    VisualVariableInfoType = VisualVariableInfoType.Expression,
                    ValueExpressionInfo = cimExpressionInfoZ
                };
                var listCIMVisualVariables = new List<CIMVisualVariable>
                {
                    new CIMRotationVisualVariable {
                        VisualVariableInfoX = cimVisualVariableInfoXY,
                        VisualVariableInfoY = cimVisualVariableInfoXY,
                        VisualVariableInfoZ = cimVisualVariableInfoZ,
                        RotationTypeZ=SymbolRotationType.Arithmetic,
                        NormalToSurface = false
                    }
                };
                render.VisualVariables = listCIMVisualVariables.ToArray();
                featLayer.SetRenderer(render);
            });
        }
AquanuityDevelopment
Occasional Contributor

@GKmieliauskas Thanks a lot.  It is working now!

0 Kudos
CharlesMacleod
Esri Regular Contributor

nice one!

0 Kudos