Ist Visual C++ dafür geeignet?
-
Hallo,
ich habe vor mir ein Programm zu schreiben, mit dem ich z.B. eine Temperaturkurve in einem Koordinatensystem einzeichnen und modifizieren kann. Die Kurve soll dann z.B. als Array gespeichert werden um sie anschließend einem µc zu übergeben, der die Temperaturkurve abfahren soll.
Zu diesem Zweck habe ich mir das Buch "Jetzt lerne ich Visual c++ 2010" von Dirk Louis gekauft und durchgearbeitet. In dem Buch werden unter anderem auch Grafikanwendungen angesprochen (namespace System::Drawing). Allerdings sind die Erläuterungen der .net Klassen nur wenig detailreich.
Jetzt wo ich das Buch durchgearbeitet habe stehe ich vor dem Problem, dass ich mich nicht in der Lage sehe, ein Programm zum Erstellen der Temperaturkurve zu schreiben. Vielleicht sollte ich noch erwähnen, dass ich, was das Programmieren angeht, kaum Erfahrungen habe. Ich habe zwar schon mehrere C und C++ Bücher durchgearbeitet aber selber programmiert habe ich noch nie etwas (mal abgesehen von den µc)
Die Funktionsweise für das Programm wäre eigentlich ganz einfach:
Ich klicke mit der Maus mehrere Punkte im Koordinatensystem an durch die anschließend ein Spline verlaufen soll. Dann wäre es schön, wenn ich die Punkte nachträglich mit der Maus verschieben könnte. Und abschließend müsste die Kurve noch in ein Array gespeichert werden.Nun meine Frage:
Ist das mit den Funktionen aus der .Net Bibliothek überhaupt möglich oder muss ich jetzt schon wieder was neues lernen ?Ein paar Punkte mit der Maus in ein Koordinatensystem einzeichnen und da anschließend einen Spline durchziehen zu lassen würde ich noch hinbekommen. Wie ich die Punkte dann anschließend mit der Maus verschieben könnte und wie die komplette Kurve in ein Array gespeichert wird, ist mir allerdings unklar.
MfG
Destro
-
you are far away
-
Lies: http://www.c-plusplus.net/forum/263084
C++/CLI ist nicht geeignet für dein Vorhaben.
Nimm entweder C#, C++, Java...
Ist das mit den Funktionen aus der .Net Bibliothek überhaupt möglich oder muss ich jetzt schon wieder was neues lernen ?
Ja, das ist möglich. [EDIT] Und das betrifft C++/CLI und C#, VB.NET, etc.
Wie ich die Punkte dann anschließend mit der Maus verschieben könnte und wie die komplette Kurve in ein Array gespeichert wird, ist mir allerdings unklar.
Indem Du auf das Click Ereignis reagierst. Im Handler des Click Ereignisses stellst Du fest ob ein Punkt "getroffen" wurde.
Wenn nein: tue nichts
Wenn ja: "selektiere" den Punkt und zeichne ihn an der Stelle wo sich der Cursor gerade befindet
-
Hallo destrono,
als Einsteig könnten die beiden Tutorials (für C#/.NET)
Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox)
Gezeichnete Objekte mit der Maus verschieben
für dich interessant sein.Edit: Und bei CodeProject gibt es schon ein komplettes Projekt (aber auch in C#), das deinen Anforderungen entsprechen müßte: Interpolation with Polynomials and Splines
-
theta schrieb:
Lies: http://www.c-plusplus.net/forum/263084
C++/CLI ist nicht geeignet für dein Vorhaben.
Nimm entweder C#, C++, Java...
1. Er will nur ein Miniprogramm schreiben
2. Er hat bereits ein Buch dazu gelesen=> Natürlich ist es in dem Fall geeignet. Hör doch mal auf dogmatischen Scheiß zu erzählen.
@destrono
Fang einfach an und melde Dich bei konkreten Fragen nochmal. Dir scheint einfach Praxiserfahrung zu fehlen. Es wundert mich schon ein wenig, dass Du mehrere Bücher durchgearbeitet hast und trotzdem an so einer Aufgabe scheiterst. Hast Du alles nur theoretisch gelernt ohne kleine Beispiele zu programmieren? Das ist garnicht gut um programmieren zu lernen.
-
Hallo,
danke für Eure Antworten und Tipps!
@Th69
super Links, danke dafür. Da ich aber Programmiererfahrung sammeln möchte, habe ich eigene Lösungen gesucht.
Ich habe jetzt also das Programm geschrieben und stehe nun immer noch vor dem Problem den gezeichneten Spline z.B. als Array zu exportieren.
Alles was ich habe ist eine Liste mit den Punkten, durch die der Spline gezeichnet wird.Beim Programmieren sind mir noch ein paar Fragen gekommen:
1. Die Funktion Graphics.DrawCurve(Pen, Point[]), mit der ich den Spline zeichnen lasse, erwartet ein Point Array. Da ich meine Punkte dynamisch zur Laufzeit erweitern möchte, habe ich sie in eine Liste (List) gespeichert und wollte einfach die Methode ToArray auf das Listobjekt aufrufen, um den Spline zeichnen zu lassen. Dabei habe ich folgenden Compilerfehler erhalten:
Fehler 4 error C2664: 'void System::Drawing::Graphics::DrawCurve(System::Drawing::Pen ^,cli::array<Type,dimension> ^)': Konvertierung des Parameters 2 von 'cli::array<Type> ^' in 'cli::array<Type,dimension> ^' nicht möglich
Wisst ihr, woran das liegt?
Ich habe mir beholfen, indem ich die Elemente der Liste in einer for-Schleife in ein Array kopiere.
2. Da ich die Größe des Panels, in das gezeichnet wird, an die Größe des Fensters anpassen lasse, muss ich die Länge und Breite des Panels anpassen. Dazu habe ich einfach versucht in der Form1_SizeChanged Ereignisbehandlungsmethode folgendes zu schreiben:
this->panel1->Size.Height = ...
this->panel1->Size.Width = ...
Leider wird dieser Aufruf einfach ignoriert. Bei der Location-Eigenschaft sieht es genau so aus.
Hier habe ich mir beholfen, indem ich ein neues Size Object angelegt habe, dieses mit den gewünschten Werten versehen habe und es anschließend der panel1->Size Eigenschaft zugeordnet habe.
3. Wenn man irgendwelche Werte ändert und das Panel veranlasst sich neu zu zeichnen flackert das Bild. Leider konnte ich keine Doppelpufferungseigenschaft beim Panel finden, so wie es sie beim Formular (Form1) gäbe. Heißt diese Eigenschaft beim Panel einfach nur anders, oder gibt es so etwas nicht? Wenn es diese Eigenschaft nicht geben sollte, kann ich mir dann selber was schreiben?
4. Ich möchte die groupBox gerne mit Trennstrichen optisch unterteilen. Hat Visual C++ 2010 dafür auch eine Komponente?
Wäre super, wenn ihr mir bei diesen Fragen helfen könntet. Am wichtigsten wäre dabei für mich, den Spline als Array zu exportieren, damit mein µc damit etwas anfangen kann.Kann ich das Programm hier irgendwo hochladen? Dann kann man sich darunter vielleicht mehr vorstellen.
MfG
Destrono