コード例 #1
0
		RectangleDragInfo AddRectangle(RectangularArea area)
		{
			var info = new RectangleDragInfo
			{
				Area = area,
				Rectangle = new Rectangle
				{
					Fill = Brushes.Red,
					StrokeThickness = 5,
					Opacity = 0.3,
					Stroke = Brushes.Yellow,
					Width = area.Width,
					Height = area.Height
				},
				StartPoint = new Point(area.X, area.Y)
			};
			Canvas.SetLeft(info.Rectangle, area.X);
			Canvas.SetTop(info.Rectangle, area.Y);
			canvas.Children.Add(info.Rectangle);
			areaInfos.Add(info);
			return info;
		}
コード例 #2
0
		void canvas_MouseDown(object sender, MouseButtonEventArgs e)
		{
			if (Keyboard.Modifiers == ModifierKeys.None)
			{
				e.Handled = true;
				var startPoint = e.GetPosition(canvas);
				if (dragInfo is NoArea)
				{
					if (circleButton.IsChecked == true)
					{
						// create circle
						canvas.CaptureMouse();
						var area = new Cylinder { X = startPoint.X, Y = startPoint.Y, R = 0 };
						var info = AddCylinder(area);
						dragInfo = info;
						Region.Areas.Add(info.Area);
					}
					else if (rectangleButton.IsChecked == true)
					{
						// create rectangle
						canvas.CaptureMouse();
						var area = new RectangularArea { X = startPoint.X, Y = startPoint.Y, Height = 0, Width = 0 };
						var info = AddRectangle(area);
						dragInfo = info;
						Region.Areas.Add(info.Area);
					}
					else if (deleteButton.IsChecked == true && e.Source is Shape)
					{
						// delete shape
						foreach (var info in areaInfos.ToArray())
						{
							// remove area
							var circleDragInfo = info as CircleDragInfo;
							if (circleDragInfo != null &&
								(circleDragInfo.Center == e.Source || circleDragInfo.Circle == e.Source))
							{
								areaInfos.Remove(circleDragInfo);
								Region.Areas.Remove(circleDragInfo.Area);
								canvas.Children.Remove(circleDragInfo.Center);
								canvas.Children.Remove(circleDragInfo.Circle);
							}
							var rectangleDragInfo = info as RectangleDragInfo;
							if (rectangleDragInfo != null && (rectangleDragInfo.Rectangle == e.Source))
							{
								areaInfos.Remove(rectangleDragInfo);
								Region.Areas.Remove(rectangleDragInfo.Area);
								canvas.Children.Remove(rectangleDragInfo.Rectangle);
							}
							if (info is NoArea) throw new Exception("NoArea should not be in the list");
						}
					}
				}
			}
		}