Цвет заливки С++ в фигурах с использованием FLTK не работает для кругов

Я установил FLTK 1.3.X с сайта fltk.org на свой компилятор Visual Studio 2012 и использовал книгу PPP для программирования на C++ (это). Моя проблема связана с заполнением формы. Например, обратите внимание на этот код:

#include <Simple_window.h>

using namespace Graph_lib;
int main()
{
    Simple_window win(Point(100,100), 1000, 600, "Binary_tree");
    Graph_lib::Circle c(Point(200,200),50);
    c.set_color(Color::red);
    c.set_fill_color(Color::blue);
    Graph_lib::Ellipse e(Point(100,100),50,30);
    e.set_color(Color::blue);
    e.set_fill_color(Color::red);
    Graph_lib::Rectangle r(Point(250,200),Point(350,300));
    r.set_color(Color::green);
    r.set_fill_color(Color::red);
    win.attach(r);
    win.attach(e);
    win.attach(c);
    win.wait_for_button();
}

Когда я запускаю программу, все три Shapes рисуются в окне, но заполняется только Rectangle! Почему? set_color работает для троих и видимо set_fill_color определено для всех Shapes и оно тоже должно работать но почему не для Circle и Ellipse?

Это файлы .CPP и .h ( )


person zhiar    schedule 28.08.2014    source источник
comment
Нет никакой идеи!?   -  person zhiar    schedule 30.08.2014
comment
Это не имеет ничего общего с fltk: это связано с graph_lib, которая написана поверх fltk. Откуда вы взяли graph_lib и на какой платформе вы работаете?   -  person cup    schedule 02.09.2014
comment
Моя машина - Windows 7, а компилятор - M Visual Studio 2012. Я установил FLTK версии 1.3.2, и я думаю, что Graph_lib пришел из нее.   -  person zhiar    schedule 03.09.2014
comment
Потребовалось время, чтобы найти graph_lib — он взят с сайта Stourstrup. Так или иначе, запустили вашу программу, и она заполняет круг и эллипс. Он входит в подпрограмму fl_arci.cxx Fl_Graphics_Driver::pie, которая должна заполнить круг.   -  person cup    schedule 04.09.2014
comment
Какую версию FLTK вы использовали? 1.3.2?   -  person zhiar    schedule 04.09.2014
comment
Да - 1.3.2. Возможно, ваш FLTK был построен неправильно. Вы собрали его из исходников или получили в виде готовой библиотеки? Если вы не собирали его из исходного кода, получите исходный код с сайта fltk, перейдите в каталог IDE, преобразуйте решение VS10 в VS11 и перестройте.   -  person cup    schedule 04.09.2014
comment
Извините, я не знаком с этими фразами, но чтобы сообщить вам, как я установил FLTK, прочитайте это. Я ценю ваше дальнейшее руководство.   -  person zhiar    schedule 04.09.2014
comment
На шаге 3 вместо перехода в VC6 и использования dsw вам следует перейти в VC2010 и преобразовать это решение. Он более совместим с VS11.   -  person cup    schedule 04.09.2014
comment
Хорошо, я делаю это на шаге 3 и продолжаю остальные шаги, как и раньше. Но что я должен сделать, это переустановить FLTK на существующий или я должен как-то удалить (?) эту версию и установить ее снова тем же новым способом?   -  person zhiar    schedule 05.09.2014
comment
Вместо установки/переустановки вы можете сделать это - установить переменную среды FLTK в каталог 1.3.2. Затем в include добавьте $(FLTK) и libs добавьте $(FLTK)/lib.   -  person cup    schedule 05.09.2014


Ответы (1)


Возможно, это вы начали тему по этой проблеме на другом сайте, где я нашел решение, но чтобы помочь другим, которые также борются с этой проблемой, я сделаю этот пост. Здесь вы можете загрузить рабочую библиотеку Stroustrup. Если вы не хотите переписывать все файлы, просто измените код в функции "Circle::draw_lines()" в Graph.cpp на этот и перекомпилируйте библиотеку:

if (fill_color().visibility()) {    // fill
    fl_color(fill_color().as_int());
    fl_pie(point(0).x,point(0).y,r+r-1,r+r-1,0,360);
    fl_color(color().as_int()); // reset color
}

if (color().visibility()) {
    fl_color(color().as_int());
    fl_arc(point(0).x,point(0).y,r+r,r+r,0,360);
}
person Thelastpolaris    schedule 14.11.2015