CustomTheme.cs
上传用户:sex100000
上传日期:2013-11-09
资源大小:1377k
文件大小:5k
源码类别:

GIS编程

开发平台:

C#

  1. // Copyright 2006 - Morten Nielsen (www.iter.dk)
  2. //
  3. // This file is part of SharpMap.
  4. // SharpMap is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU Lesser General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // (at your option) any later version.
  8. // 
  9. // SharpMap is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU Lesser General Public License for more details.
  13. // You should have received a copy of the GNU Lesser General Public License
  14. // along with SharpMap; if not, write to the Free Software
  15. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  16. using System;
  17. using System.Collections.Generic;
  18. using System.Text;
  19. namespace SharpMap.Rendering.Thematics
  20. {
  21. /// <summary>
  22. /// The CustomTheme class is used for defining your own thematic rendering by using a custom get-style-delegate.
  23. /// </summary>
  24. public class CustomTheme : ITheme
  25. {
  26. /// <summary>
  27. /// Custom Style Delegate method
  28. /// </summary>
  29. /// <remarks>
  30. /// The GetStyle delegate is used for determining the style of a feature using the <see cref="StyleDelegate"/> property.
  31. /// The method must take a <see cref="SharpMap.Data.FeatureDataRow"/> and return an <see cref="SharpMap.Styles.IStyle"/>.
  32. /// If the method returns null, the default style will be used for rendering.
  33. /// <para>
  34. /// <example>
  35. /// The following example can used for highlighting all features where the attribute "NAME" starts with "S".
  36. /// <code lang="C#">
  37. /// SharpMap.Rendering.Thematics.CustomTheme iTheme = new SharpMap.Rendering.Thematics.CustomTheme(GetCustomStyle);
  38. /// SharpMap.Styles.VectorStyle defaultstyle = new SharpMap.Styles.VectorStyle(); //Create default renderstyle
  39. /// defaultstyle.Fill = Brushes.Gray;
  40. /// iTheme.DefaultStyle = defaultstyle;
  41. /// 
  42. /// [...]
  43. /// 
  44. /// //Set up delegate for determining fill-color.
  45. /// //Delegate will fill all objects with a yellow color where the attribute "NAME" starts with "S".
  46. /// private static SharpMap.Styles.VectorStyle GetCustomStyle(SharpMap.Data.FeatureDataRow row)
  47. /// {
  48. /// 
  49. ///  if (row["NAME"].ToString().StartsWith("S"))
  50. ///  {
  51. ///  SharpMap.Styles.VectorStyle style = new SharpMap.Styles.VectorStyle();
  52. ///  style.Fill = Brushes.Yellow;
  53. ///  return style;
  54. ///  }
  55. ///  else
  56. ///  return null; //Return null which will render the default style
  57. /// }
  58. /// </code>
  59. /// </example>
  60. /// </para>
  61. /// </remarks>
  62. /// <param name="dr">Feature</param>
  63. /// <returns>Style to be applied to feature</returns>
  64. public delegate SharpMap.Styles.IStyle GetStyleMethod(SharpMap.Data.FeatureDataRow dr);
  65. private SharpMap.Styles.IStyle _DefaultStyle;
  66. /// <summary>
  67. /// Gets or sets the default style when an attribute isn't found in any bucket
  68. /// </summary>
  69. public SharpMap.Styles.IStyle DefaultStyle
  70. {
  71. get { return _DefaultStyle; }
  72. set { _DefaultStyle = value; }
  73. }
  74. private GetStyleMethod _getStyleDelegate;
  75. /// <summary>
  76. /// Gets or sets the style delegate used for determining the style of a feature
  77. /// </summary>
  78. /// <remarks>
  79. /// The delegate must take a <see cref="SharpMap.Data.FeatureDataRow"/> and return an <see cref="SharpMap.Styles.IStyle"/>.
  80. /// If the method returns null, the default style will be used for rendering.
  81. /// <example>
  82. /// The example below creates a delegate that can be used for assigning the rendering of a road theme. If the road-class
  83. /// is larger than '3', it will be rendered using a thick red line.
  84. /// <code lang="C#">
  85. /// private static SharpMap.Styles.VectorStyle GetRoadStyle(SharpMap.Data.FeatureDataRow row)
  86. /// {
  87. /// SharpMap.Styles.VectorStyle style = new SharpMap.Styles.VectorStyle();
  88. /// if(((int)row["RoadClass"])>3)
  89. /// style.Line = new Pen(Color.Red,5f);
  90. /// else
  91. /// style.Line = new Pen(Color.Black,1f);
  92. /// return style;
  93. /// }
  94. /// </code>
  95. /// </example>
  96. /// </remarks>
  97. /// <seealso cref="GetStyleMethod"/>
  98. public GetStyleMethod StyleDelegate
  99. {
  100. get { return _getStyleDelegate; }
  101. set { _getStyleDelegate = value; }
  102. }
  103. /// <summary>
  104. /// Initializes a new instance of the <see cref="CustomTheme"/> class
  105. /// </summary>
  106. /// <param name="getStyleMethod"></param>
  107. public CustomTheme(GetStyleMethod getStyleMethod)
  108. {
  109. _getStyleDelegate = getStyleMethod;
  110. }
  111. #region ITheme Members
  112. /// <summary>
  113. /// Returns the <see cref="System.Drawing.Color">color</see> based on an attribute value
  114. /// </summary>
  115. /// <param name="row">DataRow</param>
  116. /// <returns>Style generated by GetStyle-Delegate</returns>
  117. public SharpMap.Styles.IStyle GetStyle(SharpMap.Data.FeatureDataRow row)
  118. {
  119. SharpMap.Styles.IStyle style = _getStyleDelegate(row);
  120. if (style != null)
  121. return style;
  122. else
  123. return _DefaultStyle;
  124. }
  125. #endregion
  126. }
  127. }