⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 label.cs

📁 Sharp Map 用于制作GIS系统S harp Map 用于制作GIS系统S harp Map 用于制作GIS系统
💻 CS
字号:
// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk)
//
// This file is part of SharpMap.
// SharpMap is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
// 
// SharpMap is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.

// You should have received a copy of the GNU Lesser General Public License
// along with SharpMap; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 

using System;
using System.Collections.Generic;
using System.Text;

namespace SharpMap.Rendering
{

	/// <summary>
	/// Defines an axis-aligned box around a label, used for collision detection
	/// </summary>
	public class LabelBox : IComparable<LabelBox>
	{
		/// <summary>
		/// Initializes a new LabelBox instance
		/// </summary>
		/// <param name="left">Left side of box</param>
		/// <param name="top">Top of box</param>
		/// <param name="width">Width of the box</param>
		/// <param name="height">Height of the box</param>
		public LabelBox(float left, float top, float width, float height)
		{
			_left = left;
			_top = top;
			_width = width;
			_height = height;
		}

		/// <summary>
		/// Initializes a new LabelBox instance based on a rectangle
		/// </summary>
		/// <param name="rectangle"></param>
		public LabelBox(System.Drawing.RectangleF rectangle)
		{
			_left = rectangle.X;
			_top = rectangle.Y;
			_width = rectangle.Width;
			_height = rectangle.Height;
		}

		private float _left;

		/// <summary>
		/// The Left tie-point for the Label
		/// </summary>
		public float Left
		{
			get { return _left; }
			set { _left = value; }
		}
		private float _top;

		/// <summary>
		/// The Top tie-point for the label
		/// </summary>
		public float Top
		{
			get { return _top; }
			set { _top = value; }
		}
		private float _width;

		/// <summary>
		/// Width of the box
		/// </summary>
		public float Width
		{
			get { return _width; }
			set { _width = value; }
		}

		private float _height;

		/// <summary>
		/// Height of the box
		/// </summary>
		public float Height
		{
			get { return _height; }
			set { _height = value; }
		}

		/// <summary>
		/// Right side of the box
		/// </summary>
		public float Right
		{
			get { return _left + _width; }
		}

		/// <summary>
		/// Bottom of th ebox
		/// </summary>
		public float Bottom
		{
			get { return _top - _height; }
		}

		/// <summary>
		/// Determines whether the boundingbox intersects another boundingbox
		/// </summary>
		/// <param name="box"></param>
		/// <returns></returns>
		public bool Intersects(LabelBox box)
		{
			return !(box.Left > this.Left+this.Width ||
					 box.Left+box.Width < this.Left ||
					 box.Top-box.Height > this.Top ||
					 box.Top < this.Top-this.Height);
		}

		#region IComparable<LabelBox> Members

		/// <summary>
		/// Returns 0 if the boxes intersects each other
		/// </summary>
		/// <param name="other">labelbox to perform intersectiontest with</param>
		/// <returns>0 if the intersect</returns>
		public int CompareTo(LabelBox other)
		{
			if (this.Intersects(other))
				return 0;
			else if (other.Left > this.Left+this.Width ||
				other.Top - other.Height > this.Top)
				return 1;
			else
				return -1;
		}

		#endregion
	}

	/// <summary>
	/// Class for storing a label instance
	/// </summary>
	public class Label : IComparable<Label>, IComparer<Label>
	{
		/// <summary>
		/// Initializes a new Label instance
		/// </summary>
		/// <param name="text">Text to write</param>
		/// <param name="labelpoint">Position of label</param>
		/// <param name="rotation">Rotation</param>
		/// <param name="priority">Label priority used for collision detection</param>
		/// <param name="collisionbox">Box around label for collision detection</param>
		/// <param name="style">The style of the label</param>
		public Label(string text, System.Drawing.PointF labelpoint, float rotation, int priority, LabelBox collisionbox, SharpMap.Styles.LabelStyle style)
		{
			_Text = text;
			_LabelPoint = labelpoint;
			_Rotation = rotation;
			_Priority = priority;
			_box = collisionbox;
			_Style = style;
		}

		private string _Text;

		/// <summary>
		/// The text of the label
		/// </summary>
		public string Text
		{
			get { return _Text; }
			set { _Text = value; }
		}

		private System.Drawing.PointF _LabelPoint;

		/// <summary>
		/// Label position
		/// </summary>
		public System.Drawing.PointF LabelPoint
		{
			get { return _LabelPoint; }
			set { _LabelPoint = value; }
		}

		private System.Drawing.Font _Font;

		/// <summary>
		/// Label font
		/// </summary>
		public System.Drawing.Font Font
		{
			get { return _Font; }
			set { _Font = value; }
		}

		private float _Rotation;

		/// <summary>
		/// Label rotation
		/// </summary>
		public float Rotation
		{
			get { return _Rotation; }
			set { _Rotation = value; }
		}
		private int _Priority;

		/// <summary>
		/// Text rotation in radians
		/// </summary>
		public int Priority
		{
			get { return _Priority; }
			set { _Priority = value; }
		}

		private LabelBox _box;

		/// <summary>
		/// Label box
		/// </summary>
		public LabelBox Box
		{
			get { return _box; }
			set { _box = value; }
		}

		private SharpMap.Styles.LabelStyle _Style;

		/// <summary>
		/// Gets or sets the <see cref="SharpMap.Styles.LabelStyle"/> of this label
		/// </summary>
		public SharpMap.Styles.LabelStyle Style
		{
			get { return _Style; }
			set { _Style = value; }
		}	

		#region IComparable<Label> Members

		/// <summary>
		/// Tests if two label boxes intersects
		/// </summary>
		/// <param name="other"></param>
		/// <returns></returns>
		public int CompareTo(Label other)
		{
			if (this == other)
				return 0;
			else if (_box == null)
				return -1;
			else if (other.Box == null)
				return 1;
			else
				return _box.CompareTo(other.Box);
		}

		#endregion

		
		#region IComparer<Label> Members

		/// <summary>
		/// Checks if two labels intersect
		/// </summary>
		/// <param name="x"></param>
		/// <param name="y"></param>
		/// <returns></returns>
		public int Compare(Label x, Label y)
		{
			return x.CompareTo(y);
		}

		#endregion
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -