ThinkGeo.com    |     Documentation    |     Premium Support

Notification per Feature Prior to Labeling

Is there a means, maybe with an override, of being notified during the labeling process of each feature, of a given layer, before it is labeled? 


What I would like to do is construct a modified label based on the value of its corresponding column and have the labeling process use the modified label.


Thanks,


Dennis


 



Hi Dennis,


You can use the following code ,



    public class MyTextStyle : TextStyle
    {
        public MyTextStyle()
            : base()
        { }

        public MyTextStyle(string textColumnName, GeoFont textFont, GeoSolidBrush textSolidBrush)
            : base(textColumnName, textFont, textSolidBrush)
        { }

        protected override void DrawCore(IEnumerable<Feature> features, GeoCanvas canvas, Collection<SimpleCandidate> labelsInThisLayer, Collection<SimpleCandidate> labelsInAllLayers)
        {
            foreach (var item in features)
            {
                item.ColumnValues["name"] = "value";
            }
            base.DrawCore(features, canvas, labelsInThisLayer, labelsInAllLayers);
        }

        public static TextStyle CreateSimpleTextStyle(string textColumnName, string fontFamilyName, float fontSize, DrawingFontStyles drawingFontStyle, GeoColor fontColor)
        {
            GeoFont font = new GeoFont(fontFamilyName, fontSize, drawingFontStyle);
            GeoSolidBrush txtBrush = new GeoSolidBrush(fontColor);
            MyTextStyle result = new MyTextStyle(textColumnName, font, txtBrush);

            return result;
        }
    }

layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = MyTextStyle.CreateSimpleTextStyle("columnName", "Arial", 10, DrawingFontStyles.Regular, GeoColor.StandardColors.Black);


Hope it helps,


Edgar