-1

After creating a window and drawing some shapes in it, I realized I cant make a point and just appear it on the window. I've searched the manual but I cant make anything out of it. Im using the fltk 1.3.0. How can I do it ?

Antonis
  • 23
  • 3

2 Answers2

0

Fltk comes with a bunch of example projects that are helpful. If you look at the line_style example you can easily reduce it to something drawing points like this:

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/fl_draw.H>

class TestWindow : public Fl_Window {
    void draw()
    {
        fl_color(255, 0, 0);
        fl_begin_points();
        fl_point(50, 50);
        fl_point(51, 51);
        fl_end_points();
    }
public:
    TestWindow(int w, int h, const char *l = 0)
        : Fl_Window(w, h, l) {}
};

int main(int argc, char ** argv) {
    Fl_Window *window = new TestWindow(200, 200);
    window->end();
    window->show(argc, argv);
    return Fl::run();
}

But just as a word of advice, drawing single points directly onto the window is rarely the smart thing to do. Drawing into images/buffers and then displaying them is the better alternative most of the time.

edit:

here's is an example of putting the drawing code in the main function.

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/fl_draw.H>

class TestWindow : public Fl_Window {
    void draw() {}
public:
    TestWindow(int w, int h, const char *l = 0) : Fl_Window(w, h, l) {}
};

int main(int argc, char ** argv) {
    Fl_Window *window = new TestWindow(200, 200);
    window->end();
    window->show(argc, argv);
    window->make_current();
    fl_color(255, 0, 0);
    fl_begin_points();
    fl_point(50, 50);
    fl_point(51, 51);
    fl_end_points();

    return Fl::run();
}

You should take notice of the disclaimer for make_current in the manual

Danger: incremental update is very hard to debug and maintain!

None of this is good practise beyond using it for simple exercises.

PeterT
  • 7,981
  • 1
  • 26
  • 34
  • Do I need to write a class to represent the point? Cant I just go in main() and do that directly? Im trying to read the manual and to find examples but I cant quite understand how all that works, is it easy to give me any source ? – Antonis Apr 07 '19 at 08:41
  • The source code download contains all the examples. The drawing functions and which contexts they can be used in [is well documented](https://www.fltk.org/doc-1.4/drawing.html). I added an example with the drawing code in main. – PeterT Apr 07 '19 at 10:12
0

Based on the previous answer to this question, I found this in the documentation:

fl_begin_points() Starts drawing a list of points. Points are added to the list with fl_vertex()

So this is some code that shows some points (I added more to really see the points):

#include <FL/fl_draw.H>
#include <FL/Fl.H>
#include <FL/Fl_Window.H>

class Drawing : public Fl_Window {
    void draw(){
        fl_begin_points();
        //adding cushion to points to be able to see them.
        //center at 10,10
        fl_vertex(9,9);
        fl_vertex(9,10);
        fl_vertex(9,11);
        fl_vertex(10,9);
        fl_vertex(10,10);
        fl_vertex(10,11);
        fl_vertex(11,9);
        fl_vertex(11,10);
        fl_vertex(11,11);
        fl_end_points();

        fl_color(FL_BLACK);
    }
    public:
     Drawing(int w, int h, const char *l = 0) : Fl_Window(w, h, l){}

};

int main(int argc, char **argv){

    Fl_Window *window = new Drawing(340,180);
    window->end();
    window->show(argc, argv);
    return Fl::run();
}
alt440
  • 51
  • 1
  • 6