Ne Anfängerfrage



  • Hallo zusammen,

    ich bin gerade dabei was in FLTK zu Programmieren.
    Ich habe eine GUI mit Buttons, und dazu die Callback Funktionen implentieren. FLTK hat eine Funktion draw() zum zeichnen von OpenGl, ich möchte nun, bei einem Mausklick jeweils verschiedene Graphiken hochladen, kann aber die Funktion draw() nihct mehrmals verwenden. WIe mache ich das am besten, habe versucht, es mit Zeigern zu machen, hat aber nicht geklappt?

    Kann mir jemand helfen bitte ?

    Grüße



  • elturco schrieb:

    kann aber die Funktion draw() nihct mehrmals verwenden.

    Wieso kannst du das nicht? Eine Funktion kannst du sooft verwenden wie du willst.



  • ich habe mich ein wenig falsch ausgedrückt, es sollen 3 geometrische Objekte dargestellt werden, ich hab unter draw schon bereits ein objekt festgelegt und kann nicht irgendwie draw1 und draw2 usw machen um die anderen Objekte mit einem mausklick darszustellen.



  • draw() nimmt doch sicher auch Parameter entgegen - und dort kannst du angeben, welches Objekt gezeichnet werden soll. (ich kenne die Funktion nicht, aber das geht entweder als draw(objectx); oder als objectx.draw(); )

    PS: Wenn wir dir weiter helfen sollen, wäre mehr Information nötig als "habe versucht, es mit Zeigern zu machen" - mit Zeigern kann man viel (auch viel Unsinn) machen 😉



  • Wenn draw() eine Methode von Klasse X ist, dann lege dir doch in X einen Vector an, wo du dir deine geometrischen Objekte merkst. draw() ist nur zum Zeichnen da, und nicht dafür, weitere geom. Objekte anzulegen. Das anlegen von geom. Objekten mußt du woanders machen. Deine Frage hat nichts speziell mit FLTK zu tun, es ist eine reine Designfrage. Du bist jetzt nur durch FLTK darauf gestossen. Neue Lib -> neue Möglichkeiten -> neue Erfahrungswerte. 😃



  • danke euch erstmal...

    Archi kannst Du mir dazu ein Beispiel geben oder irgendein hinweis wo ich das nachlesen kann ?

    Grüße



  • Kapsel doch die verschiedenen Aufgaben:

    void mach_objekt_1() { /*...*/ }
    void mach_objekt_2() { /*...*/ }
    void mach_objekt_3() { /*...*/ }
    void draw()
    {
       mach_objekt_1();
       mach_objekt_2();
       mach_objekt_3();
    }
    

    Gruß Hazzel



  • ja ok, das kann ich ohne weiteres machen, aber die Sache ist die, ich möchte das in einem GUI auswählen, welches Obejekt ich gezeichnet haben möchte.

    Ich habe keine Idee, wie ich in unter einem Callback Funktion, genau die Funktion machonjekt1() oder machObjekt2() die sich in der Funktion draw() befinden auswählen kann.



  • Du kannst in deiner Fensterklasse eine int-Variable anlegen und darin die Information speichern.

    enum
    {
      Auto,
      Baum,
      Haus
    };
    
    MyWindow
    {
    public:
      void set_info(int die_info)
      {
         info = die_info;
      }
    private:
      int info;
    };
    

    In der Callback-Funktion setzt du dann info auf Auto, Baum etc und in der draw machst du dann ne Fallunterscheidung.

    Gruß Hazzel :xmas1:



  • Danke Dir Hazzel,

    muss mir halt nochmal was einfallen lassen, wíe ich unter enum direkt die Funktionen deklalieren kann das kriege ich dann wohl mit den Zeiger hin, danke DIr aber...



  • Hazzel, wie mache ich das denn in Bezug auf Funktionen ? ich kann ja nicht Baum=quadrat(); deklarieren.



  • Wenn du das unbedingt willst, kannst du z.B. Functionsobjekte von Boost benutzen
    http://www.boost.org/doc/html/function.html
    Soweit ich das verstehe brauchst du das aber gar nicht. Du speicherst halt die Information aus dem enum in einer Variablen und machst dann in der draw() eine Fallunterscheidung:

    void draw()
    {
       if(info == Auto)
          tu_dies();
       else if(info == Baum)
          tu_jenes();
    }
    

    Gruß Hazzel



  • ich habe es jetzt, vielen vielen Dank


Anmelden zum Antworten