Laden...

Problem globale Nullpunktverschiebung/Vorzeichenänderung

Erstellt von oehrle vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.039 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 8 Jahren
Problem globale Nullpunktverschiebung/Vorzeichenänderung

Hallo, bin gearde dabei mir eine Oberfläche für ein kleines Zeichentool zu erstellen.
Dazu habe ich folgendes Problem:

Ich habe ein Canvas definiert, in dem ich Zeichnen möchte.
Wenn ich ein Zylinder oder ähnliches Zeichne, dann sollte man direkt mit definierten Nullpunkten areiten können.

Ich stelle mir das so vor, das ich zuerst eine globale Drehung der Vorzeichen für X- und Y-Achse mache (Scaletransform).
Dann lege ich den Nullpunkt fest, in Y-Achse auf Fenstermitte, in X-Achse 100 Einheiten vom rechten Rand entfernt (TranslateTransform).

Diese beiden Transformationen fasse ich in einer TransformGroup zusammen.
Diese TransformGroup weise ich dann dem Canvas zu. Dann denke ich mir, das alle Elemente die ich dem Canvas zuweise, automatisch nch dieser TransformGroup beim zufügen gezeichnet werden.
Ist aber nicht so, das passt nicht.
Mache ich einen Denkfehler?

Habe mal den Code beigefügt. Die Linie wird über das Click-Event ausgelöst.


 public MainWindow()
        {
            InitializeComponent();
            
            
            //// Transformationen festlegen
            //// Transformation von Stackpanel, damit die Y-Achse mit positiver Richtung nach oben verläuft
            Basistransformation.ScaleTransformGlobal = new ScaleTransform(){ScaleX = 1, ScaleY = -1};

            //// Nullpunktverschiebung in X- und Y-Koordinate festlegen
            //// X-Nullpunkt 20 Einheiten von linkem Rand
            //// Y-Nullpunkt in vertikaler Mitte
            Basistransformation.NullpunktverschiebungGlobal = new TranslateTransform((Canvas.Width / 2.0) + 20, -Canvas.Height / 2.0);
            
            //// Transformgruppe ertellen, dieser die Y-Achsenspiegelung zufügen und dann die TransformGroup dem Canvas zuweisen
            Basistransformation.TransformGroupGlobal = new TransformGroup();
            Basistransformation.TransformGroupGlobal.Children.Add(Basistransformation.ScaleTransformGlobal);
            Basistransformation.TransformGroupGlobal.Children.Add(Basistransformation.NullpunktverschiebungGlobal);


            //// Dem Canvas die globale Transformation zuweisen (Vorzeichenänderung X/Y-Achse, Nullpunktverschiebung)
            Canvas.LayoutTransform = Basistransformation.TransformGroupGlobal;
            



        }


 private void Btn_Test_OnClick(object sender, RoutedEventArgs e)
        {
            //// Path definieren
            Path pthTest = new Path(){Stroke = Brushes.Red, StrokeThickness = 4};
            
            //// PathFigure definieren
            PathFigure pthFgrTest = new PathFigure(){StartPoint = new Point(0,0)};
            pthFgrTest.Segments.Add(new LineSegment(new Point(200,20), true));
            //pthFgrTest.Segments.Add(new LineSegment(new Point(200, -250), true));
            //pthFgrTest.Segments.Add(new LineSegment(new Point(200, -250), true));
            
            //// PathGeometry definieren, zuweisen vpn PathFigure
            PathGeometry pthGeoTest = new PathGeometry();
            pthGeoTest.Figures.Add(pthFgrTest);
            
            //// Dem Path die PathGeomtry zuweisen, 
            pthTest.Data = pthGeoTest;
            //pthTest.LayoutTransform = Basistransformation.TransformGroupGlobal;

            //// Dem Canvas den PAth mit den Zeichnungsinformationen zuweisen
            Canvas.Children.Add(pthTest);
}


N
232 Beiträge seit 2011
vor 8 Jahren

Ich kann es auch nach zweimaligen Lesen noch nicht so ganz nachvollziehen. Kannst du ein Beispielprojekt hochladen? Es wäre einfacher um das mal eben nachzustellen.