Using Rendering with CustomTheme

Topics: SharpMap Project, SharpMap v0.9 / v1.x, SharpMap v2.0
Dec 5, 2008 at 11:28 AM

Hi I’m implementing application that uses a custom thematic rendering based on the vector layer Theme, I find a way to hold the vector layer style through the GetStyleMethod , some thing like this

 

 

….

VectorLayer vectorLayer = new VectorLayer(“Shape_Nb_1”);

vectorLayer.DataSource = new ShapeFile(fileName, true);

             

CustomTheme myTheme = new CustomTheme(GetAreasStyle);

vectorLayer.Theme = myTheme;

…..

 

private VectorStyle GetAreasStyle(SharpMap.Data.FeatureDataRow row)

{

VectorStyle style = new VectorStyle();

      style.Fill = Brushes.IndianRed;

return style ;

}

 

Until know it’s ok, but I need to know the vector layer name in side the GetAreasStyle method, ( in this case it’s (“Shape_Nb_1”).

how can I retrieve this information inside the GetAreasStyle method

 

thx for all kind of suggestion

Coordinator
Dec 5, 2008 at 1:09 PM
Hi case_tunisia, you may be able to do it with anonymous delegates  - these have the avantage that variables accessible in the method in which the anonymous delegate is defined are available within the delegate.

I dont have time this second to write a demo but maybe this will help (untried untested)



In your layerBuilding method..

CustomTheme myTheme = new CustomTheme(BuildMyStyle(vectorLayer.LayerName)); //buildMyStyle returns another method



//method which returns another method
GetStyleMethod BuildMyStyle(string layerName)
{
    return (GetStyleMethod ) delegate(FeatureDataRow fdr){ return CustomStyleBuilder(fdr, layerName);}


//method which returns a style but also takes layername as a property
VectorStyle CustomStyleBuilder(FeatureDataRow fdr, string layerName)
{
// do your thing
}
Dec 5, 2008 at 1:56 PM

Hi Johndiss, thank very much, it works very fine,

Here the fine code :

VectorLayer vectorLayer = new VectorLayer(ShapeName);

vectorLayer.DataSource = new ShapeFile(fileName, true);

               

CustomTheme myTheme = CustomTheme(BuildMyStyle(vectorLayer.LayerName));

vectorLayer.Theme = myTheme;

….

 

 

CustomTheme.GetStyleMethod BuildMyStyle(string layerName)

{

return (CustomTheme.GetStyleMethod) delegate(FeatureDataRow fdr) { return CustomStyleBuilder(fdr, layerName); };

}

 

VectorStyle CustomStyleBuilder(FeatureDataRow row, string layerName)

{

VectorStyle style = new SharpMap.Styles.VectorStyle();

MessageBox.Show(layerName);

 

 // trt of the layer theme configuration based on layer name

 

return styles

}