ThinkGeo.com    |     Documentation    |     Premium Support

HaloPen effect for TextStyle

Hi


I am using TextStyle to display tags/label around a point based feature added in InMemoryFeature layer.


I need to show rectangle box around text(Tag/Label) for TextStyle. I tried using HaloPen, but could not see any effect.


Please suggest me how can I implement this.


Also, the associated text is overlapping the point feature slightly,  

So when the text and the point have the same color, the text is not really readable.


-Sunil



 



 


Hi Sunil,
Just from your description, I think the HaloPen doesn’t fit your requirement, HaloPen shows the text with halo following the path of the Route, Shown as below:

Do you mean that showing the border of the Text like as following?

If it is, I think we need to develop our own inherited from ZoomLevel and overwrite the method DrawCore, here is the demo code, and hope it's helpful to you.

Note: The comment "todo" is the place where you need to implement it 

 

   class customZoomLevel : ZoomLevel
    {
        protected override void DrawCore(GeoCanvas canvas, IEnumerable<Feature> features, Collection<SimpleCandidate> currentLayerLabels, Collection<SimpleCandidate> allLayerLabels)
        {
            base.DrawCore(canvas, features, currentLayerLabels, allLayerLabels);

            //Todo: All have been drawn, now we need to draw the rectangle based on the text
            if (!string.IsNullOrEmpty(DefaultTextStyle.TextColumnName))
            {
                // Draw canvas
                Collection<RectangleShape> recs = GenerateTextBorders(new List<Feature>(features));
                // Use AreaStyle to draw the rectangle
                AreaStyle areaStyle = new AreaStyle(); // Todo: Define the style based on your requirement

                Collection<BaseShape> baseshapes = new Collection<BaseShape>();
                foreach (RectangleShape item in recs)
                {
                    baseshapes.Add(item);
                }

                areaStyle.Draw(baseshapes, canvas, currentLayerLabels, allLayerLabels);
            }
        }

        private Collection<RectangleShape> GenerateTextBorders(List<Feature> textPointFeatures)
        {
            // Get the rectangle based on text
        }
    }


Thanks,
Johnny

Hi Johny, 
 Thanks for reply. 
  
 I’ll try this code for showing rectangle around text, but I also need to show HaloPen effect as you explained. 
 Could you please tell me how do I show HaloPen effect for the Text. 
  
 Thanks 
 Sunil

 


Hi Sunil,
To add the outline color, we just need to set the HaloPen and HaloPenWidth property, here is the sample code:
layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle("STATE_NAME", "Arial", 12, false, GeoColor.SimpleColors.Red, GeoColor.SimpleColors.Yellow, 5, 0, 0);
           
And then we get the result like below:
 
Thanks,
Johnny