-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmainwindow.cpp
More file actions
102 lines (91 loc) · 3.06 KB
/
Copy pathmainwindow.cpp
File metadata and controls
102 lines (91 loc) · 3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(Rasterizer *rasterizer, QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
rasterizer_(rasterizer),
scene_(-100, -100, 200, 200)
{
ui->setupUi(this);
ui->graphicsView->setScene(&scene_);
ui->graphicsView->setDragMode(QGraphicsView::ScrollHandDrag);
ui->graphicsView->scale(50, 50);
QObject::connect(ui->btnRasterize, SIGNAL(clicked()), this, SLOT(doRasterize()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::doRasterize()
{
bool ok;
bool incorrect_values = false;
double resX = ui->lineEdit_resolutionX->text().toDouble(&ok);
if (!ok) {
incorrect_values = true;
ui->lineEdit_resolutionX->setText("Incorrect!");
}
double resY = ui->lineEdit_resolutionY->text().toDouble(&ok);
if (!ok) {
incorrect_values = true;
ui->lineEdit_resolutionY->setText("Incorrect!");
}
double aX = ui->lineEdit_aX->text().toDouble(&ok);
if (!ok) {
incorrect_values = true;
ui->lineEdit_aX->setText("Incorrect!");
}
double aY = ui->lineEdit_aY->text().toDouble(&ok);
if (!ok) {
incorrect_values = true;
ui->lineEdit_aY->setText("Incorrect!");
}
double bX = ui->lineEdit_bX->text().toDouble(&ok);
if (!ok) {
incorrect_values = true;
ui->lineEdit_bX->setText("Incorrect!");
}
double bY = ui->lineEdit_bY->text().toDouble(&ok);
if (!ok) {
incorrect_values = true;
ui->lineEdit_bY->setText("Incorrect!");
}
double cX = ui->lineEdit_cX->text().toDouble(&ok);
if (!ok) {
incorrect_values = true;
ui->lineEdit_cX->setText("Incorrect!");
}
double cY = ui->lineEdit_cY->text().toDouble(&ok);
if (!ok) {
incorrect_values = true;
ui->lineEdit_cY->setText("Incorrect!");
}
if (incorrect_values) return;
rasterizer_->setResolution(SizeF(resX, resY));
rasterizer_->setTriangle(PointF(aX, aY), PointF(bX, bY), PointF(cX, cY));
scene_.clear();
if (ui->checkBox_grid->isChecked()) {
QPen cellPen(Qt::lightGray);
for (double i = 0.0; i < 100.0; i+= resX) {
scene_.addLine(i, -100, i, 100, cellPen);
scene_.addLine(-i, -100, -i, 100, cellPen);
}
for (double i = 0.0; i < 100.0; i+= resY) {
scene_.addLine(-100, i, 100, i, cellPen);
scene_.addLine(-100, -i, 100, -i, cellPen);
}
}
std::vector<Point>* points = rasterizer_->rasterize();
if (ui->checkBox_pixels->isChecked()) {
QPen rectPen(ui->checkBox_grid->isChecked() ? Qt::black : Qt::green);
QBrush rectBrush(Qt::green);
for (std::vector<Point>::iterator i = points->begin(); i != points->end(); ++i) {
scene_.addRect(resX * i->x(), -resY * i->y(), resX, -resY, rectPen, rectBrush);
}
}
if (ui->checkBox_triangle->isChecked()) {
scene_.addLine(aX, -aY, bX, -bY);
scene_.addLine(aX, -aY, cX, -cY);
scene_.addLine(bX, -bY, cX, -cY);
}
}