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

  • Автор темы Автор темы Barraga
  • Дата начала Дата начала
B

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;
}
 
Так ты ничего и не просишь. То ли ты хочешь чтобы тебе программу написали, то ли ты просто показал кусок нерабочего кода... Что нужно то?
 
Это задание (в цитате), что смог сам сделать приведено выше (в коде). Не смейтесь сильно, я только учусь.

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

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

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

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

создание нового рисунка, т.е. удаление всех нарисованных объектов, установка переменных в начальное положение и очистка экрана цветом фона по умолчанию.
 
Я наверное тебя огорчу, но редактор тебе тут никто делать не будет.
Если у тебя что-то где-то в нем не получается - спрашивай так чтобы все поняли. А свои посты в стиле "Написать редактор. Вот я набросал код ... " ты себе над кроватью повесь.
Тебя в школе/институте/семье не учили как правильно задавать вопросы?
 
Когда "не хочет компилироваться", приводят ошибки компиляции. На дворе же лето, телепаты в отпуск махнули.
 
Barraga, Ты не обессудь, но вопросы все-таки надо задавать правильно и тогда мы тебе поможем. Показывай ошибки компилятора.
 
Barraga, Ты не обессудь, но вопросы все-таки надо задавать правильно и тогда мы тебе поможем. Показывай ошибки компилятора.
lazybiz, я новичок в программировании, не всё даётся легко, а ещё и времени маловато. Если можешь ответить в личке? ICQ 389981668
 
Возможно поздно увидел.. Но во-первых ты мне и сам можешь в личку написать, в конце концов тебе это надо, а во-вторых зачем личка если есть форум?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!