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

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

Barraga

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

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

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

lazybiz

Well-known member
03.11.2010
1 339
0
#4
Так ты ничего и не просишь. То ли ты хочешь чтобы тебе программу написали, то ли ты просто показал кусок нерабочего кода... Что нужно то?
 
B

Barraga

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

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

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

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

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

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

lazybiz

Well-known member
03.11.2010
1 339
0
#6
Я наверное тебя огорчу, но редактор тебе тут никто делать не будет.
Если у тебя что-то где-то в нем не получается - спрашивай так чтобы все поняли. А свои посты в стиле "Написать редактор. Вот я набросал код ... " ты себе над кроватью повесь.
Тебя в школе/институте/семье не учили как правильно задавать вопросы?
 

a0z

Well-known member
15.03.2011
108
0
#7
Когда "не хочет компилироваться", приводят ошибки компиляции. На дворе же лето, телепаты в отпуск махнули.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#8
Barraga, Ты не обессудь, но вопросы все-таки надо задавать правильно и тогда мы тебе поможем. Показывай ошибки компилятора.
 
B

Barraga

#9
Barraga, Ты не обессудь, но вопросы все-таки надо задавать правильно и тогда мы тебе поможем. Показывай ошибки компилятора.
lazybiz, я новичок в программировании, не всё даётся легко, а ещё и времени маловато. Если можешь ответить в личке? ICQ 389981668
 

lazybiz

Well-known member
03.11.2010
1 339
0
#10
Возможно поздно увидел.. Но во-первых ты мне и сам можешь в личку написать, в конце концов тебе это надо, а во-вторых зачем личка если есть форум?