Wie kann ich ein Dreieck von einer Funktion hineinladen?
-
Hallo zusammen
Ich bin daran, ein 3D Engine-Editor zu entwickeln. Doch nun komme ich nicht mehr weiter, denn ich will, dass wenn man dem MenuItem Triangle anklickt ein Dreieck in den Editor geladen wird. Das mache ich mit dem Click-Event. Das sieht so aus:
public void Process(Device device) { device.Clear(ClearFlags.Target, Color.Black, 0.0f, 0); device.BeginScene(); device.VertexFormat = CustomVertex.TransformedColored.Format; this.triangleToolStripMenuItem.Click += new EventHandler(this.triangleToolStripMenuItem_Click); device.EndScene(); device.Present(); } public void triangleToolStripMenuItem_Click(object sender, EventArgs e) { device.SetStreamSource(0, MyVertexBuffer, 0); device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 1); }
Doch nun wenn ich das Programm starte, und den MenuItem Triangle drücke, kommt eine Fehlermeldung:
Microsoft. NET Framework
Unbehandelte Ausnahme in einer Komponente der Anwendung. Wenn Sie auf "Weiter" klicken, ignoriert die Anwendung den Fehler und setzt den Vorgang fort.
Fehler in der Anwendung
Wenn ich den Debugger starte, dann mekert er bei DrawPrimitives().
Kann mir jemand helfen und sagen was ich falsch gemacht habe?
Gruss Patrick
-
Eglifisch1 schrieb:
Wenn ich den Debugger starte, dann mekert er bei DrawPrimitives().
Wie wär's, wenn du mal die genaue Fehlermeldung postest?
-
Vieleicht liegt es daran das du die Scene beendet hast wenn der Menüpunkt aufgerufen wird.
-
Aber ich rufe die Funktion zwieschen BegineScene und EndScene auf. Kann man nicht mit einer anderen Funktion arbeiten, als mit triangleToolStripMenuItem_Click()?
Oder man überprüft, mit der if-Anweisung, ob der MenuItem Triangle angeklickt wurde, würde das gehen?
Wenn ja, kann mir jemand ein Beispiel geben?
Was ist für mein Projekt besser geeignet, C# oder VB?
-
_matze schrieb:
Eglifisch1 schrieb:
Wenn ich den Debugger starte, dann mekert er bei DrawPrimitives().
Wie wär's, wenn du mal die genaue Fehlermeldung postest?
-
Die Fehlermeldung habe ich bereits gepostet.
Hier nochmals:
Microsoft. NET Framework
Unbehandelte Ausnahme in einer Komponente der Anwendung. Wenn Sie auf "Weiter" klicken, ignoriert die Anwendung den Fehler und setzt den Vorgang fort.
Fehler in der Anwendung
-
Eglifisch1 schrieb:
Die Fehlermeldung habe ich bereits gepostet.
Hier nochmals:
Microsoft. NET Framework
Unbehandelte Ausnahme in einer Komponente der Anwendung. Wenn Sie auf "Weiter" klicken, ignoriert die Anwendung den Fehler und setzt den Vorgang fort.
Fehler in der Anwendung
Das ist die Meldung ohne Debugger. Daher habe ich dich passend zitiert und nach der Fehlermeldung im Debugger gefragt.
-
Also die Fehlermeldung im Debugger:
InvalidCallException wurde nicht behandelt.
Fehler in der Anwendung.
Hinweise zu Fehlermeldung:
Für Ausnahmen die Allgemeine Hilfe aufrufen.
-
Eglifisch1 schrieb:
Aber ich rufe die Funktion zwieschen BegineScene und EndScene auf. Kann man nicht mit einer anderen Funktion arbeiten, als mit triangleToolStripMenuItem_Click()?
Du rufts sie dort nicht auf du setzt sie dort,aufgerufen wird sie wenn das Menüitem geclickt wird.
-
Kann mir niemand sagen, wo das Probelm liegt?
Und eventuell ein Beispiel geben kann.
-
+= Weist nur den EventHandler zu und führt nichts aus,dannach wird der Code weiter ausgeführt das Programm wartet nicht an der Stelle bis das Menüitem geklickt wird.
-
Kannst du mir sagen, was ich dann schreiben muss, damit es funktionniert?
-
Da fehlen bei dir aber noch einige Grundlagen (wenn du das mit dem Event-Handler noch nicht verstanden hast).
Die einfachste Möglichkeit ist, einfach eine boolsche Variable zu benutzen:
public void Process(Device device) { device.Clear(ClearFlags.Target, Color.Black, 0.0f, 0); device.BeginScene(); device.VertexFormat = CustomVertex.TransformedColored.Format; if(draw_triangle) { device.SetStreamSource(0, MyVertexBuffer, 0); device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 1); } device.EndScene(); device.Present(); } private bool draw_triangle = false; public void triangleToolStripMenuItem_Click(object sender, EventArgs e) { draw_triangle = true; }
Den Event-Handler mußt du dann natürlich vorher einmal registrieren (z.B. im Konstruktor).
Evtl. mußt du auch ein Neuzeichnen im MenuItem-Click erzwingen.
-
Danke schön, für dieses gutes Beispiel. Ich habe C# nicht wirklich gelernt, ich dachte ich könnte mein wissen von C++ übernehemen für C#!
Gruss Patrick