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);
}
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.