ThinkGeo.com    |     Documentation    |     Premium Support

Legend adornment layer with background color

 


Hi all, 


 


I have been looking at the code sample for making an Legend Adornment Layer. wiki.thinkgeo.com/wiki/Map_S...ment_Layer


I like to say the code sample is very helpful and provided a great starting points. 




What is the best way to have the legent overlay present with a solid background color? As demostrated in the code sample, the adornment layer is transparent. This makes the legend very hard to see when you have other layers visible.


I have tired:




legendBitmap = new Bitmap((int)legendIconWidth, (int)legendIconHeight );
legendBitmap.MakeTransparent( Color.Gray );

But it doesn't work. All I want to achieve is to place the legend inside a square gray rectangle.




Your assistnace will be very thanksful. 



 


Hi Keith,
First of all, Bitmap.MakeTransparent method is used for making the specified color transparent on the bitmap, you can see from the documentation on this API provided by Microsoft. So, maybe it won’t give you what you want in this case.
In fact, there is a way to set background transparency of AdormantLayer. In the overridden DrawCore method of LengendAdornmentLayer, you have to add a code line at the end of this method:
base.DrawCore(canvas, labelsInAllLayers);
 
When initializing the LengedAdornmentLayer, you need to set the Width and Height property properly, and then set the BackgroundMask to the AreaStyle you want. Below is a code snippet that shows how to initialize the LengendAdormentLayer:
 LegendAdornmentLayer textAdornmentLayer = new LegendAdornmentLayer(10.0f, 10.0f, winformsMap1.Overlays);
            
            textAdornmentLayer.Width = 125;
            textAdornmentLayer.Height = 100;
 
            textAdornmentLayer.BackgroundMask.OutlinePen.Color = GeoColor.SimpleColors.BrightBlue;
            textAdornmentLayer.BackgroundMask.FillSolidBrush = new GeoSolidBrush(GeoColor.FromArgb(50, GeoColor.SimpleColors.Orange));
 
 
Further questions please let me know.
Thanks.
James

Keith, 
  
   We have a new LegendAdornmentLayer in the works that is much more dynamic.  We will keep you posted on that and may be able to send you the code if you are interested.  We would appreciate your feedback! 
  
 Thanks, 
  
 David

David and James, 


Thanks for the fast reply. 


Would the new LegendAdornmentLayer be availble for download from the code library? I would very much like to have look at it and provide feedback to improve. 


Or if you can please email it to mike (mikel@axim.com.au) for evaluation. Thank you for your assistance. 


 



James,  



The code snippet you have mentioned to set Width, Height and BackgroundMask properties. But they are currently not present in the base. Are they newly introduced in the new LegendAdornmentLayer David has mentioned in above?



 


Keith,
All of the three properties were added to the AdornmentLayer right at the end of January this year in assembly MapSuiteCore.dll of version 4.5.91, you need to update the assembly to this version or higher in order to apply these properties to AdornmentLayer, I didn’t make this point clear, sorry for the inconvenience.
Further questions please let me know.
PS: our Guru is working on the new Sample for LegendAdornmentLayer, I will let you know once he completed.
Thanks.
James