Уроки, алгоритмы, программы, примеры

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Среда программирования: 
Code Blocks + MinGW

Чтобы приступить к процессу рисования в окне, желательно создать приложение-шаблон, имеющее область для рисования и кнопку, по нажатию на которую будет выполняться алгоритм прорисовки изображения.

Виджет, определяющий область рисования, называется drawing_area и создается функцией gtk_drawing_area_new()

GtkWidget* gtk_drawing_area_new(void);

Размер виджета по умолчанию может быть определён вызовом:

void  gtk_drawing_area_size (GtkDrawingArea  *darea,
                             gint             width,
                             gint             height);

Этот размер может быть изменён вызовом функции gtk_widget_set_size_request(), а размер определённый с помощью этой функции может быть изменен пользователем с помощью простого увеличения или уменьшения окна содержащего область рисования.

Второй виджет, который будем использовать в приложении, - это кнопка. Создать
его можно с помощью функции gtk_button_new_with_label();

GtkWidget* gtk_button_new_with_label (const gchar *label);

За расположение элементов на форме отвечает специальный виджет - упаковочный контейнер. Существует два вида упаковочных невидимых контейнеров для размещения виджетов, горизонтальный и вертикальный. Когда используется горизонтальный контейнер, объекты внутри него могут располагаться с права налево, или наоборот в зависимости от использованных вызовов. В вертикальном контейнере виджеты располагаются сверху вниз или снизу вверх. Создать его можно функцией

GtkWidget* gtk_box_new (GtkOrientation orientation,
                        gint           spacing);

За порядок отвечают функции gtk_box_pack_start() и gtk_box_pack_end(). Функция gtk_box_pack_start() размещает объекты сверху вниз в вертикальных контейнерах и слева направо в горизонтальных, а функция gtk_box_pack_end() соответственно снизу вверх и справа налево.

Таким образом полный код создания приложения-шаблона будет выглядеть так:

#include <gtk/gtk.h> // подключаем GTK+
 
/* Функция, вызываемая на событие нажатия кнопки */
void button_click (GtkButton *button, gpointer data)
{
  /* Действия, выполняемые на нажатие кнопки */
}
 
/* Основная функция с которой стартует выполнение программы */
int main( int argc, char *argv[])
{
    /* запустить GTK+ */
    gtk_init(&argc, &argv);
 
    /* создать новый виджет - окно и установить свойства*/
    GtkWidget *window;
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 800, 500);
    gtk_window_set_title(GTK_WINDOW(window), "Template");
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    /* Событие, которое отрабатывает на закрытие окна */
    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
 
    /* создать виджет - вертикального расположения элементов   */
    GtkWidget *vbox;
    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1);
    gtk_container_add(GTK_CONTAINER (window), vbox);
 
    /* создать виджет - область для рисования   */
    GtkWidget *drawing_area;
    drawing_area = gtk_drawing_area_new();
    /* разместить область в верхней части окна*/
    gtk_box_pack_start (GTK_BOX(vbox), drawing_area, TRUE, TRUE, 5);
 
    /* создать виджет - кнопка   */
    GtkWidget *button;
    button = gtk_button_new_with_label("Draw");
    gtk_container_set_border_width (GTK_CONTAINER (button), 10);
    /* разместить кнопку в нижней части окна*/
    gtk_box_pack_end (GTK_BOX(vbox), button, FALSE, FALSE, 10);
    /* Событие, которое отрабатывает на нажатие кнопки */
    g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(button_click), NULL);
 
    /* отобразить окно и все его виджеты */
    gtk_widget_show_all(window);
 
    /* передаём управление GTK+ */
    gtk_main();
 
    return 0;
}