public void EditProp_Click(object sender, RoutedEventArgs e) { switch (selObject.Type) { case TargetObject.RLS: { RLSListWindow dlg = new RLSListWindow(); dlg.rlsList = new List <RLS>(rlModel.RLSPositionList[selObject.Index].rlsList); foreach (RLS rls in dlg.rlsList) { ListBoxItem lbi = new ListBoxItem(); dlg.RLSList_Set(ref lbi, rls); dlg.rlsListBox.Items.Add(lbi); } dlg.ShowDialog(); if (dlg.DialogResult == (bool?)true) { // Удалить графически foreach (RLS rls in rlModel.RLSPositionList[selObject.Index].rlsList) { modelCanvas.Children.Remove(rls.Pathes[GRID]); modelCanvas.Children.Remove(rls.Pathes[VSR]); } if (dlg.rlsList.Count == 0) { // Если список пуст, то удалить и физически rlModel.RLSPositionList.RemoveAt(selObject.Index); UpdateRLSIndexes(); } else // Обновить графику для текущей позиции { rlModel.RLSPositionList[selObject.Index].rlsList = new List <RLS>(dlg.rlsList); foreach (RLS rls in rlModel.RLSPositionList[selObject.Index].rlsList) { rls.RateAnimation = new DoubleAnimation(0.0, 360.0, TimeSpan.FromMinutes(1 / rls.Rate)); rls.RateAnimation.RepeatBehavior = RepeatBehavior.Forever; string UID = SetUID(); this.RegisterName(UID, rls.RateTransform); rlModel.playStrBoard.Children.Add(rls.RateAnimation); RLSDraw(rlModel.RLSPositionList[selObject.Index].Position, rls); Storyboard.SetTargetName(rls.RateAnimation, UID); Storyboard.SetTargetProperty(rls.RateAnimation, new PropertyPath(RotateTransform.AngleProperty)); rls.Pathes[GRID].Tag = rlModel.RLSPositionList.IndexOf(rlModel.RLSPositionList[selObject.Index]); rls.Pathes[VSR].Tag = rlModel.RLSPositionList.IndexOf(rlModel.RLSPositionList[selObject.Index]); } } } }; break; case TargetObject.Path: { }; break; } }
public void modelCanvas_MouseLeftButtonDown(object sender, MouseEventArgs e) { Point mViewerPos = Mouse.GetPosition(modelScrollViewer); Point mCanvasPos = Mouse.GetPosition(modelCanvas); switch (editMode) { case (EditMode.Hand): { prvMousePosition = mViewerPos; crtMousePosition = prvMousePosition; } break; case (EditMode.RLS): { if (trgObject == TargetObject.None) { RLSListWindow dlg = new RLSListWindow(); dlg.rlsList = new List <RLS> { }; dlg.ShowDialog(); if (dlg.DialogResult == (bool?)true) { RLSPosition rlsPos = new RLSPosition(mCanvasPos); rlModel.RLSPositionList.Add(rlsPos); foreach (RLS rls in dlg.rlsList) { rls.RateAnimation = new DoubleAnimation(0.0, 360.0, TimeSpan.FromMinutes(1 / rls.Rate)); rls.RateAnimation.RepeatBehavior = RepeatBehavior.Forever; string UID = SetUID(); this.RegisterName(UID, rls.RateTransform); rlModel.playStrBoard.Children.Add(rls.RateAnimation); RLSDraw(rlsPos.Position, rls); Storyboard.SetTargetName(rls.RateAnimation, UID); Storyboard.SetTargetProperty(rls.RateAnimation, new PropertyPath(RotateTransform.AngleProperty)); rlsPos.rlsList.Add(rls); rls.Pathes[GRID].Tag = rlModel.RLSPositionList.IndexOf(rlsPos); rls.Pathes[VSR].Tag = rlModel.RLSPositionList.IndexOf(rlsPos); } } } else if (trgObject == TargetObject.RLS) { prvMousePosition = mCanvasPos; crtMousePosition = prvMousePosition; //MessageBox.Show("РЛС. Индекс = " + trgIndex.ToString() + Environment.NewLine + // "Выделана РЛС = " + selTrgIndex); } } break; case (EditMode.Path): { if (trgObject == TargetObject.None) { newTracePolyLine = new Polyline(); newTracePolyLine.Stroke = Brushes.Blue; newTracePolyLine.StrokeThickness = 5.0; newTracePolyLine.StrokeDashArray.Add(10.0); newTracePolyLine.StrokeDashArray.Add(5.0); newTracePolyLine.Points.Add(mCanvasPos); newTracePolyLine.Points.Add(mCanvasPos); modelCanvas.Children.Add(newTracePolyLine); editMode = EditMode.PathDraw; } } break; case (EditMode.PathDraw): { if ((newTracePolyLine.Points.Count > 1) && (newTracePolyLine.Points[newTracePolyLine.Points.Count - 2] == mCanvasPos)) { double traceLength = 0.0; for (int i = 1; i < newTracePolyLine.Points.Count; i++) { traceLength += Math.Sqrt(Math.Pow((newTracePolyLine.Points[i].Y - newTracePolyLine.Points[i - 1].Y), 2) + Math.Pow((newTracePolyLine.Points[i].X - newTracePolyLine.Points[i - 1].X), 2)); } traceLength /= RLModel.PX2KM; // graphic to real length TraceOptionsWindow dlg = new TraceOptionsWindow(); dlg.lenghtTextBox.Text = traceLength.ToString("F"); dlg.ShowDialog(); if (dlg.DialogResult == (bool?)true) { FOTrace newFOTrace = new FOTrace(); newFOTrace.Length = traceLength; newFOTrace.Speed = dlg.speedSlider.Value; newFOTrace.IndvNumb = UInt32.Parse(dlg.indvNumbTextBox.Text); newFOTrace.BgnOT = double.Parse(dlg.bgnOTTextBox.Text); newFOTrace.EndOT = double.Parse(dlg.endOTTextBox.Text); newFOTrace.BgnH = double.Parse(dlg.bgnHTextBox.Text); newFOTrace.EndH = double.Parse(dlg.endHTextBox.Text); newFOTrace.Trouble = dlg.troubleCheckBox.IsChecked.Value; for (int i = 0; i < newTracePolyLine.Points.Count; i++) { newFOTrace.PntList.Add(new Point(newTracePolyLine.Points[i].X / RLModel.PX2KM, newTracePolyLine.Points[i].Y / RLModel.PX2KM)); } double a = -Math.Atan((newTracePolyLine.Points[1].X - newTracePolyLine.Points[0].X) / (newTracePolyLine.Points[1].Y - newTracePolyLine.Points[0].Y)) * 180 / Math.PI; if (newTracePolyLine.Points[1].Y - newTracePolyLine.Points[0].Y >= 0) { a += 180; } newFOTrace.FORotateTransform = new RotateTransform(a - 90.0, 0.0, 0.0); newFOTrace.FOTransTransform = new TranslateTransform(newTracePolyLine.Points[0].X, newTracePolyLine.Points[0].Y); #region SetPlayAnimation newFOTrace.FOXAnim = new DoubleAnimationUsingPath(); newFOTrace.FOXAnim.RepeatBehavior = new RepeatBehavior(1); if (newFOTrace.Speed != 0.0) { newFOTrace.FOXAnim.Duration = new Duration(TimeSpan.FromHours(newFOTrace.Length / newFOTrace.Speed)); } else { newFOTrace.FOXAnim.Duration = Duration.Forever; } string UID = SetUID(); this.RegisterName(UID, newFOTrace.FOTransTransform); Storyboard.SetTargetName(newFOTrace.FOXAnim, UID); Storyboard.SetTargetProperty(newFOTrace.FOXAnim, new PropertyPath(TranslateTransform.XProperty)); newFOTrace.FOXAnim.Source = PathAnimationSource.X; newFOTrace.FOYAnim = new DoubleAnimationUsingPath(); newFOTrace.FOYAnim.RepeatBehavior = new RepeatBehavior(1); if (newFOTrace.Speed != 0.0) { newFOTrace.FOYAnim.Duration = new Duration(TimeSpan.FromHours(newFOTrace.Length / newFOTrace.Speed)); } else { newFOTrace.FOYAnim.Duration = Duration.Forever; } UID = SetUID(); this.RegisterName(UID, newFOTrace.FOTransTransform); Storyboard.SetTargetName(newFOTrace.FOYAnim, UID); Storyboard.SetTargetProperty(newFOTrace.FOYAnim, new PropertyPath(TranslateTransform.YProperty)); newFOTrace.FOYAnim.Source = PathAnimationSource.Y; newFOTrace.FOAAnim = new DoubleAnimationUsingPath(); newFOTrace.FOAAnim.RepeatBehavior = new RepeatBehavior(1); if (newFOTrace.Speed != 0.0) { newFOTrace.FOAAnim.Duration = new Duration(TimeSpan.FromHours(newFOTrace.Length / newFOTrace.Speed)); } else { newFOTrace.FOAAnim.Duration = Duration.Forever; } UID = SetUID(); this.RegisterName(UID, newFOTrace.FORotateTransform); Storyboard.SetTargetName(newFOTrace.FOAAnim, UID); Storyboard.SetTargetProperty(newFOTrace.FOAAnim, new PropertyPath(RotateTransform.AngleProperty)); newFOTrace.FOAAnim.Source = PathAnimationSource.Angle; #endregion SetPlayAnimation TraceDraw(newFOTrace); rlModel.playStrBoard.Children.Add(newFOTrace.FOXAnim); rlModel.playStrBoard.Children.Add(newFOTrace.FOYAnim); rlModel.playStrBoard.Children.Add(newFOTrace.FOAAnim); rlModel.FOTraceList.Add(newFOTrace); } newTracePolyLine.Points.Clear(); editMode = EditMode.Path; } else { newTracePolyLine.Points.Add(mCanvasPos); } } break; } }