19
21
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
24
27
MainWindow::~MainWindow()
29
void MainWindow::on_LoadModelButton_clicked()
32
void MainWindow::initialize()
31
QString fileName = QFileDialog::getOpenFileName(this, "Model File Loader", "./", "*.fab");
32
string result = printer.loadFabFile(fileName.toStdString());
33
if(result.compare("") == 0)
36
string info = Util::toString<int>(printer.numLoadedPaths())+" paths loaded from file "+fileName.toStdString();
38
maxProgress = printer.numLoadedPaths(); //sets the max progress to the number of paths
39
ExecutePathLabel->setText(info.c_str());
41
//Show the loaded material calibrations.
42
vector<string> result;
43
printer.loadedMaterialCalibrations(result);
44
bayMaterialCalibration0->clear();
45
bayMaterialCalibration1->clear();
46
for(vector<string>::iterator i = result.begin(); i != result.end(); ++i)
48
int numLoadedBays = printer.numLoadedBays();
49
if(numLoadedBays >= 1)
51
bayMaterialCalibration0->addItem(i->c_str());
53
if(numLoadedBays >= 2)
55
bayMaterialCalibration1->addItem(i->c_str());
57
if(numLoadedBays >= 3)
59
bayMaterialCalibration2->addItem(i->c_str());
62
ExecuteButton->setEnabled(true);
63
ExecuteButton->setFocus();
67
Util::messageBox(result);
37
disconnect(PauseFabButton, SIGNAL(clicked()), printer, SLOT(pausePrint()));
38
disconnect(CancelFabButton, SIGNAL(clicked()), printer, SLOT(cancelPrint()));
39
disconnect(RedoPathButton, SIGNAL(clicked()), printer, SLOT(redoPath()));
40
disconnect(ForceStopButton, SIGNAL(clicked()), printer, SLOT(stopMotors()));
41
disconnect(ResetPosButton, SIGNAL(clicked()), printer, SLOT(resetPos()));
45
printer = new FabAtHomePrinter();
46
connect(LoadConfigButton, SIGNAL(clicked()), this, SLOT(loadConfig()));
47
connect(PauseFabButton, SIGNAL(clicked()), printer, SLOT(pausePrint()));
48
connect(CancelFabButton, SIGNAL(clicked()), printer, SLOT(cancelPrint()));
49
connect(RedoPathButton, SIGNAL(clicked()), printer, SLOT(redoPath()));
50
connect(ForceStopButton, SIGNAL(clicked()), printer, SLOT(stopMotors()));
51
connect(ResetPosButton, SIGNAL(clicked()), printer, SLOT(resetPos()));
52
connect(MoveButton, SIGNAL(clicked()), printer, SLOT(move()));
53
connect(ResetPosButton, SIGNAL(clicked()), this, SLOT(resetValues()));
54
connect(LoadModelButton, SIGNAL(clicked()), this, SLOT(loadModel()));
55
//connect(XCommandedField, SIGNAL(valueChanged(double), printer, SLOT()
56
//TO_DO: add signal/slots for position boxes
71
void MainWindow::on_LoadConfigButton_clicked()
59
void MainWindow::loadConfig()
74
62
QString str = QFileDialog::getOpenFileName(this,"Config File Loader", "../../media/Printer Configs", "*.config");
75
string result = printer.initialize(str.toStdString());
63
string result = printer->initialize(str.toStdString());
77
64
if(result.compare("") == 0)
79
66
//correctModule = true;
82
69
XLabel->setText("X");
83
70
YLabel->setText("Y");
84
71
ZLabel->setText("Z");
85
int numLoadedBays = printer.numLoadedBays();
73
//TO_DO: add increment variables
75
//sets minimum and maximum position so user cannot scroll past certain point
76
XCommandedField->setMinimum(printer->axes["X"].motor->getMinPosition());
77
XCommandedField->setMaximum(printer->axes["X"].motor->getMaxPosition());
78
YCommandedField->setMinimum(printer->axes["Y"].motor->getMinPosition());
79
YCommandedField->setMaximum(printer->axes["Y"].motor->getMaxPosition());
80
ZCommandedField->setMinimum(printer->axes["Z"].motor->getMinPosition());
81
ZCommandedField->setMaximum(printer->axes["Z"].motor->getMaxPosition());
82
int numLoadedBays = printer->numLoadedBays();
86
83
if(numLoadedBays >= 1)
88
85
bayLabel0->setText("Bay 0");
86
bayCommandedPosition0->setMinimum(printer->tool.bays["Bay 0"].motor->getMinPosition());
87
bayCommandedPosition0->setMaximum(printer->tool.bays["Bay 0"].motor->getMaxPosition());
90
89
if(numLoadedBays >= 2)
112
111
Util::messageBox(result);
117
void MainWindow::on_MoveButton_clicked()
119
printer.axes["X"].motor->moveAbsolute(XCommandedField->text().toDouble(), XVelocityField->text().toDouble(), XAccelerationField->text().toDouble());
120
printer.axes["Y"].motor->moveAbsolute(YCommandedField->text().toDouble(), YVelocityField->text().toDouble(), YAccelerationField->text().toDouble());
121
printer.axes["Z"].motor->moveAbsolute(ZCommandedField->text().toDouble(), ZVelocityField->text().toDouble(), ZAccelerationField->text().toDouble());
122
int numLoadedBays = printer.numLoadedBays();
123
if(numLoadedBays >= 1)
125
printer.tool.bays["Bay 0"].motor->moveAbsolute(bayCommandedPosition0->text().toDouble(), bayVelocity0->text().toDouble(), bayAcceleration0->text().toDouble());
127
if(numLoadedBays >= 2)
129
printer.tool.bays["Bay 1"].motor->moveAbsolute(bayCommandedPosition1->text().toDouble(), bayVelocity1->text().toDouble(), bayAcceleration1->text().toDouble());
131
if(numLoadedBays >= 3)
133
printer.tool.bays["Bay 2"].motor->moveAbsolute(bayCommandedPosition2->text().toDouble(), bayVelocity2->text().toDouble(), bayAcceleration2->text().toDouble());
137
void MainWindow::on_ExecuteButton_clicked()
142
void MainWindow::on_PauseFabButton_clicked()
144
printer.pausePrint();
147
void MainWindow::on_CancelFabButton_clicked()
149
printer.cancelPrint();
152
void MainWindow::on_ExitButton_clicked()
154
disablePositionDisplay();
118
void MainWindow::resetValues()
120
XCommandedField->setValue(0.000000);
121
YCommandedField->setValue(0.000000);
122
ZCommandedField->setValue(0.000000);
123
int numLoadedBays = printer->numLoadedBays();
124
if(numLoadedBays >= 1)
126
bayCommandedPosition0->setValue(0.00000);
128
if(numLoadedBays >= 2)
130
bayCommandedPosition1->setValue(0.000000);
132
if(numLoadedBays >= 3)
134
bayCommandedPosition2->setValue(0.000000);
138
void MainWindow::loadModel()
140
QString fileName = QFileDialog::getOpenFileName(this, "Model File Loader", "./", "*.fab");
141
string result = printer->loadFabFile(fileName.toStdString());
142
if(result.compare("") == 0)
145
string info = Util::toString<int>(printer->numLoadedPaths())+" paths loaded from file "+fileName.toStdString();
147
maxProgress = printer->numLoadedPaths(); //sets the max progress to the number of paths
148
ExecutePathLabel->setText(info.c_str());
150
//Show the loaded material calibrations.
151
vector<string> result;
152
printer->loadedMaterialCalibrations(result);
153
bayMaterialCalibration0->clear();
154
bayMaterialCalibration1->clear();
155
for(vector<string>::iterator i = result.begin(); i != result.end(); ++i)
157
int numLoadedBays = printer->numLoadedBays();
158
if(numLoadedBays >= 1)
160
bayMaterialCalibration0->addItem(i->c_str());
162
if(numLoadedBays >= 2)
164
bayMaterialCalibration1->addItem(i->c_str());
166
if(numLoadedBays >= 3)
168
bayMaterialCalibration2->addItem(i->c_str());
171
ExecuteButton->setEnabled(true);
172
ExecuteButton->setFocus();
176
Util::messageBox(result);
179
void MainWindow::move()
181
printer->axes["X"].motor->moveAbsolute(XCommandedField->text().toDouble(), XVelocityField->text().toDouble(), XAccelerationField->text().toDouble());
182
printer->axes["Y"].motor->moveAbsolute(YCommandedField->text().toDouble(), YVelocityField->text().toDouble(), YAccelerationField->text().toDouble());
183
printer->axes["Z"].motor->moveAbsolute(ZCommandedField->text().toDouble(), ZVelocityField->text().toDouble(), ZAccelerationField->text().toDouble());
184
int numLoadedBays = printer->numLoadedBays();
185
if(numLoadedBays >= 1)
187
printer->tool.bays["Bay 0"].motor->moveAbsolute(bayCommandedPosition0->text().toDouble(), bayVelocity0->text().toDouble(), bayAcceleration0->text().toDouble());
189
if(numLoadedBays >= 2)
191
printer->tool.bays["Bay 1"].motor->moveAbsolute(bayCommandedPosition1->text().toDouble(), bayVelocity1->text().toDouble(), bayAcceleration1->text().toDouble());
193
if(numLoadedBays >= 3)
195
printer->tool.bays["Bay 2"].motor->moveAbsolute(bayCommandedPosition2->text().toDouble(), bayVelocity2->text().toDouble(), bayAcceleration2->text().toDouble());
159
199
void MainWindow::disablePositionDisplay()
161
enablePosDisplay = false;
201
enablePosDisplay = false;
164
204
void MainWindow::toggleAxes(bool enabled)
224
264
//Display the position data in text fields
225
temp = Util::toString<double>(printer.axes["X"].motor->getPosition());
265
temp = Util::toString<double>(printer->axes["X"].motor->getPosition());
226
266
XDisplay->setText(temp.c_str());
227
temp = Util::toString<double>(printer.axes["Y"].motor->getPosition());
267
temp = Util::toString<double>(printer->axes["Y"].motor->getPosition());
228
268
YDisplay->setText(temp.c_str());
229
temp = Util::toString<double>(printer.axes["Z"].motor->getPosition());
269
temp = Util::toString<double>(printer->axes["Z"].motor->getPosition());
230
270
ZDisplay->setText(temp.c_str());
231
int numLoadedBays = printer.numLoadedBays();
271
int numLoadedBays = printer->numLoadedBays();
232
272
if(numLoadedBays >= 1)
234
temp = Util::toString<double>(printer.tool.bays["Bay 0"].motor->getPosition());
274
temp = Util::toString<double>(printer->tool.bays["Bay 0"].motor->getPosition());
236
276
if(numLoadedBays >= 2)
238
temp = Util::toString<double>(printer.tool.bays["Bay 1"].motor->getPosition());
278
temp = Util::toString<double>(printer->tool.bays["Bay 1"].motor->getPosition());
239
279
bayMotorPosition1->setText(temp.c_str());
241
281
if(numLoadedBays >= 3)
243
temp = Util::toString<double>(printer.tool.bays["Bay 2"].motor->getPosition());
283
temp = Util::toString<double>(printer->tool.bays["Bay 2"].motor->getPosition());
244
284
bayMotorPosition2->setText(temp.c_str());