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

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

  1. Barraga

    Barraga Гость

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

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

    размер точек и толщину линий выбирать с помощью меню из набора значений 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

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

    Barraga Гость

    Репутация:
    0
    Если бы знал, не просил бы совета.
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

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

    Barraga Гость

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

     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

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

    a0z Well-Known Member

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

    lazybiz Well-Known Member
    C\C++ Team

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

    Barraga Гость

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

    lazybiz Well-Known Member
    C\C++ Team

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

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