4 using System.Collections.Generic;
5 using System.ComponentModel;
7 using System.Windows.Controls;
15 public partial class CanvasUserControl : UserControl
44 get {
return straightLaneBuildingRenderer; }
64 private CanvasMover mover;
68 internal CanvasMover Mover {
get {
return mover; } }
73 private CanvasZoomer zoomer;
77 internal CanvasZoomer Zoomer {
get {
return zoomer; } }
82 private CanvasRoadPreviewer roadPreviewer;
86 internal CanvasRoadPreviewer RoadPreviewer {
get {
return roadPreviewer; } }
97 get {
return generatorPossibleLocationsRenderer; }
105 InitializeComponent();
106 List<VisualCanvasRenderer> renderers =
new List<VisualCanvasRenderer>();
108 renderers.Add(topologyRenderer);
110 renderers.Add(simulationTrafficRenderer);
112 renderers.Add(straightLaneBuildingRenderer);
114 renderers.Add(bezierLaneBuildingRenderer);
116 topologyCanvas.CreateNewVisual());
117 renderers.Add(generatorPossibleLocationsRenderer);
122 { LaneType.Straight, straightLaneBuildingRenderer },
123 { LaneType.Bezier, bezierLaneBuildingRenderer }
124 }, topologyRenderer);
132 private void UserControl_Loaded(
object sender, RoutedEventArgs e)
134 if (!DesignerProperties.GetIsInDesignMode(
this))
137 roadPreviewer.LaneTypeWasChanged();
138 generatorPossibleLocationsRenderer.Lanes =
CanvasViewModel.GeometricTopology.Lanes;
139 Window.GetWindow(
this).KeyDown += CanvasUserControl_KeyDown;
140 topologyRenderer.GeometricTopology =
CanvasViewModel.GeometricTopology;
141 topologyRenderer.RenderTopology();
150 private void CanvasUserControl_KeyDown(
object sender, KeyEventArgs e)
152 if (e.Key == Key.Escape)
154 roadPreviewer.ClearPreviewOfBuildingOfAnyRoads();
163 private void topologyCanvas_MouseLeftButtonUp(
object sender, MouseButtonEventArgs e)
167 roadPreviewer.MouseLeftButtonUp(e.GetPosition(topologyCanvas));
171 Lane laneWhereGeneratorToAdd = generatorPossibleLocationsRenderer.MouseLeftButtonUp();
172 if (laneWhereGeneratorToAdd != null)
175 topologyRenderer.RenderTopology();
176 generatorPossibleLocationsRenderer.MouseMove(e.GetPosition(topologyCanvas));
186 private void topologyCanvas_MouseLeftButtonDown(
object sender, MouseButtonEventArgs e)
190 roadPreviewer.MouseLeftButtonDown(e.GetPosition(topologyCanvas));
199 private void topologyCanvas_MouseMove(
object sender, MouseEventArgs e)
201 Point currentMouseLocationOnCanvas = e.GetPosition(topologyCanvas);
203 if (e.RightButton == MouseButtonState.Pressed)
205 mover.SetLastMousePositionToRenderersForMovingCanvas(currentMouseLocationOnCanvas);
207 else if (e.LeftButton == MouseButtonState.Pressed)
211 roadPreviewer.MovePointOfLaneIfCursorIsNear(currentMouseLocationOnCanvas);
216 mover.ResetLastMousePositionToRenderersForMovingCanvas();
219 roadPreviewer.RenderBuildingLane(currentMouseLocationOnCanvas);
223 generatorPossibleLocationsRenderer.MouseMove(currentMouseLocationOnCanvas);
233 private void topologyCanvas_MouseWheel(
object sender, MouseWheelEventArgs e)
235 Slider zoomSlider = (Window.GetWindow(
this) as
MainWindow).bottomPanelUserControl.zoomSlider;
236 zoomer.SetCurrentCursorPositionAsZoomPoint(e.GetPosition(topologyCanvas));
248 private void topologyCanvas_KeyUp(
object sender, KeyEventArgs e)
250 if (e.Key == Key.Escape)
252 roadPreviewer.ClearPreviewOfBuildingOfAnyRoads();
261 private void topologyCanvas_MouseRightButtonDown(
object sender, MouseButtonEventArgs e)
263 mover.SetLastMousePositionToRenderersForMovingCanvas(e.GetPosition(topologyCanvas));
Geometric topology renderer.
Renderer for drawing bezier lanes during their building.
Previewer of building roads on canvas.
Simulation traffic renderer.
Viewmodel for canvas panel.
Actions related to moving with canvas.
Renderer for drawing lanes during their building.
Contains actions related to zooming.
CanvasUserControl()
Initialize canvas control.