使用EGE库设计一个绘制多边形的程序。并且满足以下要求: 1、可以绘制任意个多边形; 2、过程中要显示绘制路径,绘制结束后,填充多边形内部; 3、能够将已绘制完成的多边形保存到文件中,并且可以从文件中读取已保存的多边形,重新显示在界面上。main.cpp •用鼠标左键绘制多边形 •用鼠标右击结束绘制 •用键盘“S”将多边形保存到文件中 •用键盘“L”将多边形从文件中读出
时间: 2024-04-02 22:35:42 浏览: 63
画多边形的程序
4星 · 用户满意度95%
好的,我会按照你的要求来回答你的问题。
首先,我们需要用到EGE图形库来完成这个程序。EGE是易语言的一个图形库,但也可以用于C++语言的图形编程。我们需要在程序中引入EGE库的头文件和命名空间:
```cpp
#include <graphics.h>
using namespace ege;
```
接下来,我们需要定义一个多边形类,用来存储多边形的顶点坐标和颜色信息。多边形类的定义如下:
```cpp
class Polygon {
public:
Polygon();
void addPoint(int x, int y);
void setColor(COLORREF color);
void draw();
void fill();
void saveToFile(const char* filename);
void loadFromFile(const char* filename);
private:
vector<POINT> points;
COLORREF color;
};
```
其中,addPoint()方法用来添加多边形的顶点坐标,setColor()方法用来设置多边形的颜色,draw()方法用来绘制多边形的轮廓,fill()方法用来填充多边形的内部,saveToFile()方法用来将多边形保存到文件中,loadFromFile()方法用来从文件中读取多边形。
接下来,我们需要定义一个主函数,来实现鼠标和键盘的事件处理。主函数的代码如下:
```cpp
int main() {
initgraph(640, 480);
setbkcolor(WHITE);
bool drawing = false;
Polygon poly;
while (true) {
if (ismouseclick(WM_LBUTTONDOWN)) {
int x = mousex();
int y = mousey();
if (!drawing) {
poly = Polygon();
poly.addPoint(x, y);
drawing = true;
} else {
poly.addPoint(x, y);
}
setcolor(BLACK);
setfillcolor(BLACK);
fillcircle(x, y, 3);
if (poly.points.size() > 1) {
int x1 = poly.points.back().x;
int y1 = poly.points.back().y;
int x2 = poly.points[poly.points.size() - 2].x;
int y2 = poly.points[poly.points.size() - 2].y;
line(x1, y1, x2, y2);
}
} else if (ismouseclick(WM_RBUTTONDOWN)) {
if (drawing) {
drawing = false;
poly.draw();
poly.fill();
}
} else if (kbhit()) {
char c = getch();
if (c == 's') {
poly.saveToFile("polygon.dat");
} else if (c == 'l') {
poly.loadFromFile("polygon.dat");
poly.draw();
poly.fill();
}
}
}
closegraph();
return 0;
}
```
在主函数中,我们首先初始化图形界面,然后创建一个Polygon对象来存储正在绘制的多边形。然后使用一个while循环来监听鼠标和键盘事件。当鼠标左键按下时,我们根据坐标添加多边形的顶点,并绘制多边形的轮廓。当鼠标右键按下时,我们结束绘制多边形,并填充多边形的内部。当键盘按下时,我们可以使用“s”键将多边形保存到文件中,并使用“l”键从文件中读取多边形并在界面上显示。
最后,我们需要实现Polygon类中的各个方法。这里的具体实现方式可以根据自己的需求进行调整。下面是Polygon类的完整代码:
```cpp
class Polygon {
public:
Polygon() {
color = BLACK;
}
void addPoint(int x, int y) {
POINT point = {x, y};
points.push_back(point);
}
void setColor(COLORREF color) {
this->color = color;
}
void draw() {
setcolor(color);
for (int i = 0; i < points.size() - 1; i++) {
int x1 = points[i].x;
int y1 = points[i].y;
int x2 = points[i + 1].x;
int y2 = points[i + 1].y;
line(x1, y1, x2, y2);
}
int x1 = points.back().x;
int y1 = points.back().y;
int x2 = points.front().x;
int y2 = points.front().y;
line(x1, y1, x2, y2);
}
void fill() {
int n = points.size();
int* x = new int[n];
int* y = new int[n];
for (int i = 0; i < n; i++) {
x[i] = points[i].x;
y[i] = points[i].y;
}
setfillcolor(color);
fillpolygon(n, x, y);
delete[] x;
delete[] y;
}
void saveToFile(const char* filename) {
ofstream file(filename);
if (file.is_open()) {
file << points.size() << endl;
for (int i = 0; i < points.size(); i++) {
file << points[i].x << " " << points[i].y << endl;
}
file.close();
}
}
void loadFromFile(const char* filename) {
ifstream file(filename);
if (file.is_open()) {
int n;
file >> n;
points.clear();
for (int i = 0; i < n; i++) {
int x, y;
file >> x >> y;
addPoint(x, y);
}
file.close();
}
}
private:
vector<POINT> points;
COLORREF color;
};
```
这样,一个绘制多边形的程序就完成了。
阅读全文