Простейший графический редактор

Тема в разделе "Общие вопросы по С и С++", создана пользователем Barraga, 30 май 2011.

  1. Barraga

    Barraga Гость

    Реализовать простейший векторный графический редактор со следующим набором функциональных возможностей:

    задание цвета фона, на котором происходит рисование.
    рисование точек различного цвета и размера
    рисование ломаных линий различного цвета и толщины
    рисование многоугольников различного цвета

    размер точек и толщину линий выбирать с помощью меню из набора значений 1,3,5,7,9,11,13,15
    цвета фона и рисования выбирать с помощью меню из набора цветов

    сохранение полученного изображения в файле формата SVG

    создание нового рисунка, т.е. удаление всех нарисованных объектов, установка переменных в начальное положение и очистка экрана цветом фона по умолчанию.

    Не хочет компилироваться с помощью Make


    Код (C++):
    #pragma comment(lib, "opengl32.lib")
    #pragma comment(lib, "glu32.lib")
    #pragma comment(lib, "glut32.lib")
    #include "glut.h"
    #include "stdio.h"
    #include <windows.h>
    #include <iostream>
    #include "stdio.h"

    float width=640,height=480;
    void init()
    {
    glViewport(0.f,0.f,(GLsizei)width, (GLsizei)height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.f, (GLdouble)width/50, 0.f, (GLdouble)height/50, -1.f, 1.f);
    }

    void Display()
    {
    glClearColor(0.5,0.5,0.5,0.0);                    //Цвет, в который очищается окно
    glClear (GL_COLOR_BUFFER_BIT);                   //Очищение

    glColor3f(1.f,0.f,0.f);
    /*glBegin(GL_POLYGON);                                   //Начало сцены
    glVertex3f(1.25f, 1.25f, 0.f);
    glVertex3f(3.75f, 1.25f, 0.f);
    glVertex3f(3.75f, 3.75f, 0.f);
    glVertex3f(1.25f, 3.75f, 0.f);
    glEnd();*/



    glColor3f(1.f,1.f,0.f);
    glPointSize(5.f);
    glBegin(GL_POINTS);
    glVertex3f(4.f, 4.25f, 0.f);
    glVertex3f(-4.f, 4.25f, 0.f);
    glEnd();                         

    glFlush();

    }

    void MouseEvent(int button, int state, int x, int y)
    {
    printf("%d %d\n", x, y);
    }

    void MenuEvent(int element)
    {
    printf("%d\n", element);
    }

    int main(int argc, char** argv)

    {
    int MenuMain, MenuColor, MenuType, MenuTypePaint, MenuSize, MenuLineType;
    MenuType = glutCreateMenu(Menu_Type); //Создание меню Type
    glutAddMenuEntry("Point", 1);
    glutAddMenuEntry("Line", 2);
    glutAddMenuEntry("Strip", 3);
    glutAddMenuEntry("Polygon", 4);

    MenuMain = glutCreateMenu(Menu_Main); //Главное меню
    glutAddSubMenu("Color", MenuColor);
    glutAddSubMenu("Type", MenuType);
    glutAddSubMenu("TypePaint", MenuTypePaint);
    glutAddMenuEntry("Save file as...", 3);
    glutAddMenuEntry("Settings by defaunt", 4);
    glutAddMenuEntry("Exit", 5);
    glutAttachMenu(GLUT_RIGHT_BUTTON);

    glutMainLoop();

    }

    void Menu_Type(int value) //Меню выбора типа примитивов

    {

    }

    CHOOSECOLOR cc; // common dialog box structure
    static COLORREF acrCustClr[16]; // array of custom colors
    HWND hwnd; // owner window
    HBRUSH hbrush; // brush handle
    static DWORD rgbCurrent;

    void Menu_Color(int value) //Меню цвета
    {
    ZeroMemory(&cc, sizeof(cc));
    cc.lStructSize = sizeof(cc);
    cc.hwndOwner = hwnd;
    cc.lpCustColors = (LPDWORD) acrCustClr;
    cc.rgbResult = rgbCurrent;
    cc.Flags = CC_FULLOPEN | CC_RGBINIT;

    if (ChooseColor(&cc)==TRUE) //Откратия "ColorDialog"
    {
    hbrush = CreateSolidBrush(cc.rgbResult);
    rgbCurrent = cc.rgbResult;
    switch(value)
    {
    case(1) : R = (float) GetRValue(rgbCurrent) / 255; //Установка цвета приметивов
    G = (float) GetGValue(rgbCurrent) / 255;
    B = (float) GetBValue(rgbCurrent) / 255; break;
    case(2) : Rbg = (float) GetRValue(rgbCurrent) / 255; //Установка цвета окна
    Gbg = (float) GetGValue(rgbCurrent) / 255;
    Bbg = (float) GetBValue(rgbCurrent) / 255; break;
    };

    glutPostRedisplay();
    };
    }; //void Menu_Color(int value)

    void FuncSave() //Функция сохранения данных в файл
    {
    OPENFILENAME ofn;
    char szFile[260];
    HWND hwnd;
    HANDLE hf;

    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = hwnd;
    ofn.lpstrFile = szFile;

    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

    if (GetSaveFileName(&ofn) == TRUE)
    {
    FILE *out;
    out = fopen(szFile, "w");

    ...
    };

    glutPostRedisplay();
    }; //void FuncSave()

    int main(int argc, char* argv[])
    {
    //Инициализация glut

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(width, height);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("qwe");
    init();
    glutMouseFunc(MouseEvent);
    glutDisplayFunc(Display);

    int submenu = glutCreateMenu(MenuEvent);
    glutAddMenuEntry("11", 11);
    glutAddMenuEntry("22", 22);

    int g = glutCreateMenu(MenuEvent);
    glutAddMenuEntry("1", 1);
    glutAddMenuEntry("2", 2);
    glutAddSubMenu("3", submenu);
    glutAttachMenu(GLUT_RIGHT_BUTTON);

    glutMainLoop();

    return 0;
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    А почему не компилируется?
     
  3. Barraga

    Barraga Гость

    Если бы знал, не просил бы совета.
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Так ты ничего и не просишь. То ли ты хочешь чтобы тебе программу написали, то ли ты просто показал кусок нерабочего кода... Что нужно то?
     
  5. Barraga

    Barraga Гость

    Это задание (в цитате), что смог сам сделать приведено выше (в коде). Не смейтесь сильно, я только учусь.

     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Я наверное тебя огорчу, но редактор тебе тут никто делать не будет.
    Если у тебя что-то где-то в нем не получается - спрашивай так чтобы все поняли. А свои посты в стиле "Написать редактор. Вот я набросал код ... " ты себе над кроватью повесь.
    Тебя в школе/институте/семье не учили как правильно задавать вопросы?
     
  7. a0z

    a0z Well-Known Member

    Регистрация:
    15 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Когда "не хочет компилироваться", приводят ошибки компиляции. На дворе же лето, телепаты в отпуск махнули.
     
  8. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Barraga, Ты не обессудь, но вопросы все-таки надо задавать правильно и тогда мы тебе поможем. Показывай ошибки компилятора.
     
  9. Barraga

    Barraga Гость

    lazybiz, я новичок в программировании, не всё даётся легко, а ещё и времени маловато. Если можешь ответить в личке? ICQ 389981668
     
  10. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Возможно поздно увидел.. Но во-первых ты мне и сам можешь в личку написать, в конце концов тебе это надо, а во-вторых зачем личка если есть форум?
     
Загрузка...
Похожие Темы - Простейший графический редактор
  1. BlackShadow
    Ответов:
    1
    Просмотров:
    1.784
  2. pbnoob
    Ответов:
    8
    Просмотров:
    4.156
  3. sanch
    Ответов:
    3
    Просмотров:
    3.194
  4. smirnoff_911
    Ответов:
    1
    Просмотров:
    109
  5. SaiLight
    Ответов:
    2
    Просмотров:
    1.559

Поделиться этой страницей