Objekte Zeichnen mit C++, welche Art?



  • Hallo

    Ich möchte gern so eine Art "Paint" programmieren, nur speziell für mich.
    d.H so feste Symbole wie einen Temperaturfühler, oder ne Pumpe in so einer Werkzeugkiste, das man sich sein eigenes Bildchen zusammenbauen kann.

    z.B. Ein Rohr zu einer Pumpe und dann weiter

    Die Frage ist nun, soll ich für jedes Objekt ein eigenes Objekt anlegen und das auf nen TImage halt malen z.B.

    void __fastcall Pumpe::PumpeZeichnen(int Radius, TColor Farbe)
    {
      Picture->Bitmap->Height = Radius;
      Picture->Bitmap->Width = Radius;
    
      Transparent = true;
    
      canvas = Picture->Bitmap->Canvas;
      canvas->Refresh();
    
      //weißes Rechteck zeichnen
      canvas->Pen->Width = 0;
      canvas->Pen->Color = clWhite;
      canvas->Brush->Color = clWhite;
      canvas->Rectangle(0,0,Radius,Radius);
    
      canvas->Pen->Width = 2;
      canvas->Pen->Color = Farbe;
      canvas->Ellipse(0,0,Radius,Radius);
    
      canvas->MoveTo(0,Radius * 0.6);
      canvas->LineTo(Radius/2, 0);
      canvas->LineTo(Radius,Radius * 0.6);
    }
    

    Oder wäre es einfacher die Symbole , extern zu malen , da man sie hier bestimmt für das Auge appetitlicher zeichnen könnte, und in einem geeigeneten Format, abspeicher, und dann dort aufruft.

    Jedoch müsste man die Sysmbole verschieben , routieren und skalieren können.

    Was wäre hier sinnvoller?
    Hat jemand schon Erfahrungen gesammelt?
    Lieber alles selber zeichnen und recht schlicht
    oder Fremdzeichnen und aufrufen, aber dennoch skalieren können.

    alx



  • Mit TImage hast du Möglichkeiten das bild zu skalieren (Strech evtl noch Proportional und dann die größe das Image verschieben)

    Allerdings würde ich das alles gleich auf dem Form per Canvas zeichnen
    (oder wenn es nur ein bestimmter Bereich sein soll auf einem dem entsprechendem Panel)
    und dann ein bisschen Mathematik und selber etwas schreiben fürs skalen und rotieren



  • Multi schrieb:

    Allerdings würde ich das alles gleich auf dem Form per Canvas zeichnen
    (oder wenn es nur ein bestimmter Bereich sein soll auf einem dem entsprechendem Panel)

    Ich würde dafür eher eine TPaintBox nehmen, denn genau für sowas ist die da. 🙂



  • Also alles selber zeichnen und zur laufzeit berechnen.
    Keine fertigen Bilder skalieren drehen ecT?



  • Braunstein schrieb:

    Multi schrieb:

    Allerdings würde ich das alles gleich auf dem Form per Canvas zeichnen
    (oder wenn es nur ein bestimmter Bereich sein soll auf einem dem entsprechendem Panel)

    Ich würde dafür eher eine TPaintBox nehmen, denn genau für sowas ist die da. 🙂

    Stimmt auch wieder 😃

    aLeXanDer.. schrieb:

    Also alles selber zeichnen und zur laufzeit berechnen.
    Keine fertigen Bilder skalieren drehen ecT?

    Ja 😉



  • Hi,

    jedes zu zeichnende Element sollte eine Klasse darstellen, die Du von entsprechenden virtuellen Basisklassen ableiten must.
    In der Basisklasse hast Du eine rein virtuelle Funktion Zeichne oder Draw je nach Belieben, die Du in jeder Klasse definieren must.
    Wichtig ist da nur die richtige Ableitungsfolge, aber da kann Scott Meyers weiterhelfen (effektiv C++..., Mehr effektiv C++...).
    Worüber Du nur klar werden must, ist: willst Du vorher Größe, Ursprung und Rotation festlegen und dan nur Zeichne aufrufen oder willst Du nur Zeichne aufrufen und die Parameter übergeben.
    Wenn die einzelnen zu zeichnenden Objekte keine Beziehung zunander haben wäre der aufruf mit Parametern besser, wenn Du dagegen das Gleiche Objekt 10 mal in gleicher Höhe, Größe und Lage nebeneinander zeichnen willst die Variante mit Parameter setzen und dan zeichnen.
    Auch solltest du dir darüber einig werden, was Du bemaßt, den Mittelpunkt oder die linke obere Ecke.

    Gruß Mümmel


Anmelden zum Antworten