بسم الله الرحمن الرحيم
الطريقة التي إتبعتها في عمل برنامج Paint
أولا لقد قمت بكتابة كلاس لكل من أوامر الرسم من أمر رسم الخط و أمر رسم المربع و غيره
و كمثال هذا كلاس للنقطة و كلاس لرسم الخط:
#ifndef GLINTPOINT_H
#define GLINTPOINT_H
const int SCREEN_HEIGHT=480;
const int SCREEN_WIDTH=640;
class GLintPoint{
public:
GLintPoint(){
x=0;
y=0;
}
GLint x, y;
};
#endif#ifndef LINE_H
#define LINE_H
#include "glintpoint.h"
class Line{
public:
GLintPoint linePoint;
int LINE_WIDTH;
int LINE_HEIGHT;
Line(){
LINE_WIDTH=40;
LINE_HEIGHT=60;
linePoint.x=50;
linePoint.y=SCREEN_HEIGHT-20;
}
GLint getX(){
return linePoint.x;
}
GLint getY(){
return linePoint.y;
}
GLint getNextX(){
return (linePoint.x+LINE_WIDTH);
}
GLint getNextY(){
return (linePoint.y-LINE_HEIGHT);
}
void drawLineTool(){
glBegin(GL_LINES);
glVertex2i(80,(SCREEN_HEIGHT-30));
glVertex2i(60,(SCREEN_HEIGHT-70));
glEnd();
glFlush();
}
void drawPressedLineTool(){
glColor3f(0.0f, 0.0f, 0.0f);
glRecti(getX(),getY(),getNextX(),getNextY());
glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_LINES);
glVertex2i(80,(SCREEN_HEIGHT-30));
glVertex2i(60,(SCREEN_HEIGHT-70));
glEnd();
glFlush();
}
};
#endifالكلاس الأول سهل و مفهوم و لكن فيه أيضا متغيران لتحديد حجم الشاشة التي سأعمل عليها للرسم
أما الكلاس الثاني فهو لتحديد رسمة الخط و شكلها على شريط الأدوات كما ترون
int LINE_WIDTH
int LINE_HEIGHT
هذه لتحديد حجم المربع الذي سيرسم فيه الخط على شريط الأدوات
أما drawLine
فهي لرسم أدات الخط على شريط الأدوات بالشكل العادي
أما drawPressedLineTool
فهي تعنى برسم الأداة بألوان مغايرة عند الضغط عليها في شريط الأدوات
أما في الملف الرئيسي الذي يحتوي على Main
فهذا شكل Mouse Function
void myMouse(int button, int state, int x, int y)
{
if(line.getX()<x && line.getY()>y && line.getNextX()>x && line.getNextY()<(SCREEN_HEIGHT-y) && button == GLUT_LEFT_BUTTON && state == GLUT_DOWN){
setFalse();
linePressed=true;
drawToolsRectangle();
line.drawPressedLineTool();
pointsNumber=0;
}
glColor3f(Red, Green, Blue);
if(linePressed && x>100 && button == GLUT_LEFT_BUTTON && state == GLUT_DOWN){
if(pointsNumber==0){
linePoint.x=x;
linePoint.y=y;
glBegin(GL_POINT);
glVertex2i(linePoint.x,SCREEN_HEIGHT-linePoint.y);
glEnd();
glFlush();
pointsNumber++;
}
else if(pointsNumber==1){
pointsNumber=0;
glBegin(GL_LINES);
glVertex2i(linePoint.x,SCREEN_HEIGHT-linePoint.y);
glVertex2i(x,SCREEN_HEIGHT-y);
glEnd();
glFlush();
}
}
if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN){
myDisplay();
}
}و كما ترون قمت بتحديد الأداة التي قمت بالضط عليها عن طريق Boolean و التي هي linePressed
و من ثم أقوم بإعادة رسم شرط الأدوات كي أزيل أي أداة كنت قد ضغط عليها قبلا و أقوم بإعادة رسم الأدات التي
ضغط عليها بألوان أخرى كي تكون مميزة كما رأينا في الكلاس Line في الأعلى
و بعدها هناك أرى إن كان مكان الضغط على الماوس هو مكان الرسم أم لا
و أقوم بالرسم ، و هنا لأنني أقوم برسم خط بين نقطتين فقط فقد إحتجت إلى variable لحساب كلما
أرسلت نقطتين عن طريق الماوس أقوم برسم خط بينهما و الذي هو pointsNumber
أتمنى أن أكون قد أفدتكم بهذا
و كن فتى في ذرى العلياء همّته
موقع خاص بي
قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا
برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

