Skip to content

Commit 3e4b295

Browse files
committed
misc fixes
1 parent 9aea9b9 commit 3e4b295

File tree

5 files changed

+130
-118
lines changed

5 files changed

+130
-118
lines changed

g2m/g2m.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,15 @@ bool g2m::startInterp(QProcess &tc) {
131131
return false;
132132
// run: rs274 file.ngc
133133
tc.start( interp , QStringList(file) );
134+
if (!tc.waitForStarted(5000)) {
135+
infoMsg("Interpreter failed to start");
136+
return false;
137+
}
134138
tc.write("3\n"); // "read tool file" command to rs274
135139
tc.write(tooltable.toLatin1());
136140
tc.write("\n"); // "enter"
137141
tc.write("1\n"); // "start interpreting" command to rs274
142+
tc.closeWriteChannel();
138143
return true;
139144
}
140145

@@ -257,13 +262,19 @@ bool g2m::startInterp2(QProcess &tc, QString tempFile) {
257262

258263
tc.start( interp , QStringList(tempFile) );
259264

265+
if (!tc.waitForStarted(5000)) {
266+
infoMsg("Interpreter failed to start");
267+
return false;
268+
}
269+
260270
tc.write("3\n"); // "read tool file" command to rs274
261271

262272
// qDebug() << tooltable.toLatin1();
263273

264274
tc.write(tooltable.toLatin1());
265275
tc.write("\n"); // "enter"
266276
tc.write("1\n"); // "start interpreting" command to rs274
277+
tc.closeWriteChannel();
267278
return true;
268279
}
269280

lex_analyzer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ int LexAnalyzer::token2i(unsigned int n, unsigned int offset) {
5252
if (tokens.size() < n+1 )
5353
return INT_MIN;
5454
char * end;
55-
int i = strtol( &tokens[n].c_str()[offset], &end, 10 );
55+
long i = strtol( &tokens[n].c_str()[offset], &end, 10 );
5656
//assert ( *end != 0 );
5757
return i;
5858
}

main.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
11
#include <QtWidgets>
2+
#include <QLoggingCategory>
3+
#include <QMessageLogContext>
4+
#include <QString>
5+
#include <QFile>
6+
#include <QTextStream>
7+
8+
void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
9+
Q_UNUSED(type);
10+
Q_UNUSED(context);
11+
if (msg.contains("QSocketNotifier"))
12+
return;
13+
QByteArray ba = msg.toLocal8Bit();
14+
fprintf(stderr, "%s\n", ba.constData());
15+
}
216

317
#include "mainwin.h"
418

@@ -9,7 +23,8 @@
923

1024
int main(int argv, char **args)
1125
{
12-
QSharedPointer<QCoreApplication> app;
26+
qInstallMessageHandler(customMessageHandler);
27+
QApplication *app;
1328

1429
// workaround for https://forum.qt.io/topic/53298/qcommandlineparser-to-select-gui-or-non-gui-mode
1530

@@ -27,9 +42,9 @@ int main(int argv, char **args)
2742
}
2843

2944
if (runCore) {
30-
app = QSharedPointer<QCoreApplication>(new QCoreApplication(argv, args));
45+
app = static_cast<QApplication*>(new QCoreApplication(argv, args));
3146
} else {
32-
app = QSharedPointer<QCoreApplication>(new QApplication(argv, args));
47+
app = new QApplication(argv, args);
3348
}
3449

3550
// end workaround
@@ -60,6 +75,9 @@ int main(int argv, char **args)
6075

6176
win->show();
6277

63-
return app->exec();
78+
int ret = app->exec();
79+
delete win;
80+
delete app;
81+
return ret;
6482
}
6583

mainwin.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ MainWindow::MainWindow(QWidget *parent, bool fileMode, QString fileName) :
3535
//connect( g2m, SIGNAL( gcodeLineMessage(QString) ), this, SLOT( appendGcodeLine(QString) ) );
3636
//connect( g2m, SIGNAL( canonLineMessage(QString) ), this, SLOT( appendCanonLine(QString) ) );
3737

38-
connect( g2m, SIGNAL( signalCanonLine(canonLine*) ), view, SLOT( appendCanonLine(canonLine*) ));
39-
connect( g2m, SIGNAL( signalNCend() ), view, SLOT( update() ) );
40-
connect( g2m, SIGNAL( signalError(QString) ), view, SLOT( update() ) );
38+
connect( g2m, SIGNAL( signalCanonLine(canonLine*) ), view, SLOT( appendCanonLine(canonLine*) ), Qt::QueuedConnection);
39+
connect( g2m, SIGNAL( signalNCend() ), view, SLOT( update() ), Qt::QueuedConnection);
40+
connect( g2m, SIGNAL( signalError(QString) ), view, SLOT( update() ), Qt::QueuedConnection);
4141

4242
connect( g2m, SIGNAL( signalError(QString) ), ui->stderror, SLOT( setPlainText(QString) ) );
4343

view.cpp

Lines changed: 93 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <QKeyEvent>
1212
#include <QDebug>
1313
#include <QWidget>
14+
#include <QSurfaceFormat>
1415

1516
#include "canonMotion.hpp"
1617

@@ -74,6 +75,13 @@ void View::keyPressEvent(QKeyEvent *e) {
7475
View::View(QWidget *parent) : QGLViewer(parent) {
7576
setAttribute(Qt::WA_DeleteOnClose);
7677

78+
QSurfaceFormat format = QSurfaceFormat::defaultFormat();
79+
format.setDepthBufferSize(24);
80+
format.setStencilBufferSize(0);
81+
format.setAlphaBufferSize(0);
82+
format.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
83+
setFormat(format);
84+
7785
lines.reserve(20000);
7886
}
7987

@@ -126,7 +134,7 @@ void View::init() {
126134
//glDisable(GL_CULL_FACE);
127135
//glLineStipple(2, 0xFFFF);
128136
glDisable(GL_LIGHTING);
129-
glClearColor(0.0,0.0,0.25,0);
137+
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
130138
//glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
131139
//glLineWidth(3);
132140

@@ -148,9 +156,8 @@ void View::initializeGL() {
148156
}
149157

150158
void View::appendCanonLine(canonLine *l) {
151-
//QMutexLocker locker(&mutex);
152159
lines.push_back(l);
153-
dirty = true; // for updateGLViewer()
160+
dirty = true;
154161

155162
if (l->isMotion()) {
156163
Point pos1 = l->point(0);
@@ -170,146 +177,122 @@ void View::appendCanonLine(canonLine *l) {
170177
aabb[ i] = qMin(aabb[ i], oaabbmin[i]);
171178
aabb[3+i] = qMax(aabb[3+i], oaabbmax[i]);
172179
}
173-
174-
//qDebug() << "getAABB()" << aabb[0] << aabb[1] << aabb[2] << aabb[3] << aabb[4] << aabb[5];
175180
}
176181
}
177182

178-
void View::drawObjects(bool simplified = false) {
179-
Q_UNUSED(simplified);
180-
181-
if (lines.size() == 0)
183+
void View::drawObjects(bool simplified) {
184+
if (lines.empty())
182185
return;
183-
184-
//int nbSteps = 600;
185-
//int nbSub = 50;
186-
187-
// QMutexLocker locker(&mutex);
188-
189-
/*
190-
if (simplified) {
191-
nbSteps = 60;
192-
nbSub = 2;
193-
}*/
194186

195-
// qDebug() << "lines.size: " << lines.size();
196-
197-
double step_size = 0.1;
198-
199-
if (simplified)
200-
step_size = 0.75;
201-
187+
double step_size = simplified ? 0.75 : 0.1;
202188
double inv_ds = 1.0 / step_size;
203189

204190
int skip_dyn = 1;
205191
double line_width = 3.0;
206192

207-
if (lines.size() > 10000) { // skip some segments in big gcode files
208-
skip_dyn = 2;
209-
line_width = 2.0; // thinner lines
210-
}
211-
212193
if (lines.size() > 100000) {
213194
skip_dyn = 4;
214195
line_width = 1.0;
196+
} else if (lines.size() > 10000) {
197+
skip_dyn = 2;
198+
line_width = 2.0;
215199
}
216200

217-
int skip = (simplified) ? skip_dyn * 2 : skip_dyn;
201+
int skip = simplified ? skip_dyn * 2 : skip_dyn;
218202

219-
//glEnable(GL_MULTISAMPLE);
220-
//glEnable(GL_LINE_SMOOTH);
221-
//glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
222-
//glHint(GL_MULTISAMPLE_FILTER_HINT_NV, GL_NICEST);
203+
std::vector<float> traverseVertices;
204+
std::vector<float> feedVertices;
205+
traverseVertices.reserve(lines.size() * 6);
206+
feedVertices.reserve(lines.size() * 6);
223207

224-
/*
225-
glEnable(GL_BLEND);
226-
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
227-
glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
228-
*/
229-
230-
for (unsigned long i = 0; i < lines.size(); i+=skip) {
208+
for (size_t i = 0; i < lines.size(); i += skip) {
231209
g2m::canonLine *l = lines[i];
232-
if (l->isMotion()) {
233-
double move_length = l->length();
234-
int n_samples = std::max((int)(move_length * inv_ds ), 2);
235-
double interval_size = move_length /(double)(n_samples-1);
236-
210+
if (!l->isMotion())
211+
continue;
212+
213+
double move_length = l->length();
214+
int n_samples = std::max(static_cast<int>(move_length * inv_ds), 2);
215+
double interval_size = move_length / (n_samples - 1);
216+
217+
for (int j = 0; j < n_samples - 1; ++j) {
218+
double t1 = j * interval_size;
219+
double t2 = (j + 1) * interval_size;
220+
Point pos1 = l->point(t1);
221+
Point pos2 = l->point(t2);
222+
223+
float vertices[] = {
224+
static_cast<float>(pos1.x), static_cast<float>(pos1.y), static_cast<float>(pos1.z),
225+
static_cast<float>(pos2.x), static_cast<float>(pos2.y), static_cast<float>(pos2.z)
226+
};
227+
237228
if (l->getMotionType() == TRAVERSE) {
238-
glColor3f(0.0, 128.0/255.0 , 0.0/255.0);
239-
glLineWidth(2);
229+
traverseVertices.insert(traverseVertices.end(), vertices, vertices + 6);
240230
} else {
241-
glColor3f(255.0/255.0, 215.0/255.0, 94.0/255.0);
242-
glLineWidth(line_width);
243-
}
244-
245-
glBegin(GL_LINES);
246-
for (double m = 0; m <= n_samples-1; m+=0.5) {
247-
Point pos1 = l->point( (double)(m) * interval_size);
248-
glVertex3f(pos1.x, pos1.y, pos1.z);
249-
Point pos2 = l->point( std::min(1.0, (double)(m+0.5) * interval_size));
250-
glVertex3f(pos2.x, pos2.y, pos2.z);
231+
feedVertices.insert(feedVertices.end(), vertices, vertices + 6);
251232
}
252-
glEnd();
253233
}
254-
255-
//glDisable(GL_BLEND);
256234
}
257-
235+
236+
glEnableClientState(GL_VERTEX_ARRAY);
237+
glVertexPointer(3, GL_FLOAT, 0, traverseVertices.data());
238+
239+
glColor3f(0.0, 128.0f/255.0f, 0.0f);
258240
glLineWidth(2);
259-
glColor3f(255.0, 0.0/255.0 , 0.0/255.0);
260-
glBegin(GL_LINES);
261-
262-
// Top
263-
glVertex3f(aabb[0], aabb[1], aabb[2]);
264-
glVertex3f(aabb[3], aabb[1], aabb[2]);
265-
glVertex3f(aabb[3], aabb[1], aabb[2]);
266-
glVertex3f(aabb[3], aabb[1], aabb[5]);
267-
glVertex3f(aabb[3], aabb[1], aabb[5]);
268-
glVertex3f(aabb[0], aabb[1], aabb[5]);
269-
glVertex3f(aabb[0], aabb[1], aabb[5]);
270-
glVertex3f(aabb[0], aabb[1], aabb[2]);
271-
272-
// Bottom
273-
glVertex3f(aabb[0], aabb[4], aabb[2]);
274-
glVertex3f(aabb[3], aabb[4], aabb[2]);
275-
glVertex3f(aabb[3], aabb[4], aabb[2]);
276-
glVertex3f(aabb[3], aabb[4], aabb[5]);
277-
glVertex3f(aabb[3], aabb[4], aabb[5]);
278-
glVertex3f(aabb[0], aabb[4], aabb[5]);
279-
glVertex3f(aabb[0], aabb[4], aabb[5]);
280-
glVertex3f(aabb[0], aabb[4], aabb[2]);
281-
282-
// Sides
283-
glVertex3f(aabb[0], aabb[1], aabb[2]);
284-
glVertex3f(aabb[0], aabb[4], aabb[2]);
285-
glVertex3f(aabb[3], aabb[1], aabb[2]);
286-
glVertex3f(aabb[3], aabb[4], aabb[2]);
287-
glVertex3f(aabb[3], aabb[1], aabb[5]);
288-
glVertex3f(aabb[3], aabb[4], aabb[5]);
289-
glVertex3f(aabb[0], aabb[1], aabb[5]);
290-
glVertex3f(aabb[0], aabb[4], aabb[5]);
291-
292-
glEnd();
241+
glDrawArrays(GL_LINES, 0, traverseVertices.size() / 3);
293242

294-
Vec qmin, qmax;
295-
qmin.x = aabb[0];
296-
qmin.y = aabb[1];
297-
qmin.z = aabb[2];
243+
glVertexPointer(3, GL_FLOAT, 0, feedVertices.data());
244+
glColor3f(255.0f/255.0f, 215.0f/255.0f, 94.0f/255.0f);
245+
glLineWidth(static_cast<float>(line_width));
246+
glDrawArrays(GL_LINES, 0, feedVertices.size() / 3);
298247

299-
qmax.x = aabb[3];
300-
qmax.y = aabb[4];
301-
qmax.z = aabb[5];
302-
setSceneBoundingBox(qmin, qmax);
248+
glDisableClientState(GL_VERTEX_ARRAY);
303249

304-
Vec c((aabb[0] + aabb[3])/2, (aabb[1] + aabb[4])/2, (aabb[2] + aabb[5])/2);
305-
setSceneCenter(c);
250+
glLineWidth(2);
251+
glColor3f(1.0f, 0.0f, 0.0f);
252+
253+
float aabbVerts[] = {
254+
static_cast<float>(aabb[0]), static_cast<float>(aabb[1]), static_cast<float>(aabb[2]),
255+
static_cast<float>(aabb[3]), static_cast<float>(aabb[1]), static_cast<float>(aabb[2]),
256+
static_cast<float>(aabb[3]), static_cast<float>(aabb[1]), static_cast<float>(aabb[2]),
257+
static_cast<float>(aabb[3]), static_cast<float>(aabb[1]), static_cast<float>(aabb[5]),
258+
static_cast<float>(aabb[3]), static_cast<float>(aabb[1]), static_cast<float>(aabb[5]),
259+
static_cast<float>(aabb[0]), static_cast<float>(aabb[1]), static_cast<float>(aabb[5]),
260+
static_cast<float>(aabb[0]), static_cast<float>(aabb[1]), static_cast<float>(aabb[5]),
261+
static_cast<float>(aabb[0]), static_cast<float>(aabb[1]), static_cast<float>(aabb[2]),
262+
263+
static_cast<float>(aabb[0]), static_cast<float>(aabb[4]), static_cast<float>(aabb[2]),
264+
static_cast<float>(aabb[3]), static_cast<float>(aabb[4]), static_cast<float>(aabb[2]),
265+
static_cast<float>(aabb[3]), static_cast<float>(aabb[4]), static_cast<float>(aabb[2]),
266+
static_cast<float>(aabb[3]), static_cast<float>(aabb[4]), static_cast<float>(aabb[5]),
267+
static_cast<float>(aabb[3]), static_cast<float>(aabb[4]), static_cast<float>(aabb[5]),
268+
static_cast<float>(aabb[0]), static_cast<float>(aabb[4]), static_cast<float>(aabb[5]),
269+
static_cast<float>(aabb[0]), static_cast<float>(aabb[4]), static_cast<float>(aabb[5]),
270+
static_cast<float>(aabb[0]), static_cast<float>(aabb[4]), static_cast<float>(aabb[2]),
271+
272+
static_cast<float>(aabb[0]), static_cast<float>(aabb[1]), static_cast<float>(aabb[2]),
273+
static_cast<float>(aabb[0]), static_cast<float>(aabb[4]), static_cast<float>(aabb[2]),
274+
static_cast<float>(aabb[3]), static_cast<float>(aabb[1]), static_cast<float>(aabb[2]),
275+
static_cast<float>(aabb[3]), static_cast<float>(aabb[4]), static_cast<float>(aabb[2]),
276+
static_cast<float>(aabb[3]), static_cast<float>(aabb[1]), static_cast<float>(aabb[5]),
277+
static_cast<float>(aabb[3]), static_cast<float>(aabb[4]), static_cast<float>(aabb[5]),
278+
static_cast<float>(aabb[0]), static_cast<float>(aabb[1]), static_cast<float>(aabb[5]),
279+
static_cast<float>(aabb[0]), static_cast<float>(aabb[4]), static_cast<float>(aabb[5])
280+
};
281+
282+
glVertexPointer(3, GL_FLOAT, 0, aabbVerts);
283+
glDrawArrays(GL_LINES, 0, 24);
284+
glDisableClientState(GL_VERTEX_ARRAY);
306285
}
307286

308287
void View::draw() {
309-
drawObjects();
288+
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
289+
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
290+
drawObjects(false);
310291
}
311292

312293
void View::fastDraw() {
294+
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
295+
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
313296
drawObjects(true);
314297
}
315298

0 commit comments

Comments
 (0)