Hallo,
gibt es eine Methode in GDI+ mit der man eine Kontur (mehrere Linien aneinander gereiht) entlang der X-Achse spiegeln kann? Hae mal recherchiert, aber nichts gefunden.
Hallo oehrle,
kommt darauf an, wie du das genau meinst. Evtl. ist Graphics.Transform in Kombination mit Matrix.Scale (1, -1) was du suchst.
herbivore
Also,
ich zeichne Geraden entlang der X-Achse. Da habe ich einen Button, wenn der gedrückt wird einEingabefeld für die neue X-Position angezeigt. Mit dem anderen Button kann ich einen Winkel und die nächste X-Position angeben. Somit kann ich ein Rotationssymmstrisches Teil entlang der X-Achse zeichnen. Es ist dann halt nur der halbe Körper gezeichnet. Um einen kompletten Körper anzuzeigen, müßte man diese Kontur (habe diese in einem GraphicsPath abgelegt) einfach nach oben spiegeln können. Hab das mal mit Matrix probiert, bin mir nicht sicher ob das aber korrekt ist.
Geht sowas überhaupt mit Transform und Matrix?
Hallo oehrle,
ja, das geht wie in meinem letzten Beitrag beschrieben. Codebeispiele im Forum oder in der :rtfm: Doku.
herbivore
Hallo herbifore,
danke für die Hilfe. Leider klappts noch nicht, mit der Spiegelung.
Laut Doku:
Die Matrix-Klasse bietet mehrere Methoden zum Erstellen einer zusammengesetzten Transformation: Multiply, Rotate, RotateAt, Scale, Shear und Translate. Im folgenden Beispiel wird die Matrix einer zusammengesetzten Transformation erstellt, die zuerst eine Drehung um 30 Grad, dann eine Skalierung um den Faktor 2 in yRichtung und anschließend eine Verschiebung um 5 Einheiten in xRichtung ausführt:
Matrix myMatrix = new Matrix(); myMatrix.Rotate(30); myMatrix.Scale(1, 2, MatrixOrder.Append); myMatrix.Translate(5, 0, MatrixOrder.Append);
BEi Scale müßte (2,-1 oder 2,1) stehen, um an der X-Achse zu spiegeln.
Ich habs in einem Panel getestet, da habe ich mir zuerst ein Fadenkreuz mittig eingezeichnet un dann probiert, die Linienkontur zu spiegeln. Geht aber nicht. Ich habe hie rmal den Code, vielleicht ist da auch was verbogen??
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics graph = e.Graphics;
pen = new Pen(Brushes.Aquamarine, Width = 2);
graph.DrawLine(pen, 1.0F, panel1.Height / 2.0F, panel1.Width, panel1.Height / 2.0F);
fadenkreuz_X_start = new Point(0, panel1.Height / 2);
fadenkreuz_X_end = new Point((panel1.Location.X + panel1.Width), panel1.Height / 2);
// fadenkreuz_Y_start = new Point(panel1.Location.X + Randabstand , 0);
fadenkreuz_Y_start = new Point(Randabstand, 0);
// fadenkreuz_Y_end = new Point(panel1.Location.X + Randabstand, panel1.Height);
fadenkreuz_Y_end = new Point(Randabstand, panel1.Height);
stiftstärke = 2;
stiftfarbe = Color.Blue;
pen = new Pen(stiftfarbe, stiftstärke);
pen.DashStyle = DashStyle.DashDot;
// g.PageUnit = GraphicsUnit.Pixel;
graph.DrawLine(pen, fadenkreuz_X_start, fadenkreuz_X_end);
graph.DrawLine(pen, fadenkreuz_Y_start, fadenkreuz_Y_end);
// Nullpunktverschiebung
graph.TranslateTransform(Randabstand, panel1.Height / 2.0F);
GraphicsPath graphicsPath = new GraphicsPath();
graph.DrawLine(Konturform, 0,0,10,10);
graphicsPath.AddLine(0,0,10,10);
graph.DrawLine(Konturform, 10, 10, 35, 10);
graphicsPath.AddLine(10, 10, 35, 10);
graph.DrawLine(Konturform, 35,10,80,55);
graphicsPath.AddLine(35,10, 80, 55);
// graph.DrawPath(Rohkörper,graphicsPath);
Matrix myMatrix = new Matrix();
// myMatrix.Rotate(30);
myMatrix.Scale(2,-1, MatrixOrder.Append);
// myMatrix.Translate(25,25, MatrixOrder.Append);
graph.Transform.Translate(0,0,MatrixOrder.Append);
graph.DrawPath(new Pen(Color.DarkTurquoise,2), graphicsPath);
}
Wieso klappt das nicht?
Matrix myMatrix = new Matrix(); // myMatrix.Rotate(30); myMatrix.Scale(2,-1, MatrixOrder.Append); // myMatrix.Translate(25,25, MatrixOrder.Append); graph.Transform.Translate(0,0,MatrixOrder.Append); graph.DrawPath(new Pen(Color.DarkTurquoise,2), graphicsPath); }
Wieso klappt das nicht?
Wenn ich es richtig sehe, weist du deine myMatrix gar nicht zu...
Weeks of programming can save you hours of planning
Funktioniert, hatte die Matrix nicht zugewiesen, Danke.