diff options
-rw-r--r-- | src/CGALRenderer.cc | 48 | ||||
-rw-r--r-- | src/CSGTermRenderer.cc | 6 | ||||
-rw-r--r-- | src/mainwin.cc | 18 | ||||
-rw-r--r-- | src/openscad.cc | 6 | ||||
-rw-r--r-- | src/primitives.cc | 4 |
5 files changed, 45 insertions, 37 deletions
diff --git a/src/CGALRenderer.cc b/src/CGALRenderer.cc index 9e98b61..4963814 100644 --- a/src/CGALRenderer.cc +++ b/src/CGALRenderer.cc @@ -231,17 +231,19 @@ Response CGALRenderer::visit(State &state, const AbstractPolyNode &node) // Then apply polyset operation PolySet *ps = node.render_polyset(AbstractPolyNode::RENDER_CGAL, &this->psrenderer); - try { - CGAL_Nef_polyhedron N = renderCGALMesh(*ps); + if (ps) { + try { + CGAL_Nef_polyhedron N = renderCGALMesh(*ps); // print_messages_pop(); - node.progress_report(); - - ps->unlink(); - this->cache.insert(this->tree.getString(node), N); - } - catch (...) { // Don't leak the PolySet on ProgressCancelException - ps->unlink(); - throw; + node.progress_report(); + + ps->unlink(); + this->cache.insert(this->tree.getString(node), N); + } + catch (...) { // Don't leak the PolySet on ProgressCancelException + ps->unlink(); + throw; + } } } addToParent(state, node); @@ -274,18 +276,20 @@ CGAL_Nef_polyhedron CGALRenderer::renderCGALMesh(const AbstractPolyNode &node) // print_messages_push(); PolySet *ps = node.render_polyset(AbstractPolyNode::RENDER_CGAL); - try { - CGAL_Nef_polyhedron N = ps->renderCSGMesh(); - // FIXME: Insert into cache - // print_messages_pop(); - node.progress_report(); - - ps->unlink(); - return N; - } - catch (...) { // Don't leak the PolySet on ProgressCancelException - ps->unlink(); - throw; + if (ps) { + try { + CGAL_Nef_polyhedron N = ps->renderCSGMesh(); + // FIXME: Insert into cache + // print_messages_pop(); + node.progress_report(); + + ps->unlink(); + return N; + } + catch (...) { // Don't leak the PolySet on ProgressCancelException + ps->unlink(); + throw; + } } } #endif diff --git a/src/CSGTermRenderer.cc b/src/CSGTermRenderer.cc index 6f1f90c..0f5910f 100644 --- a/src/CSGTermRenderer.cc +++ b/src/CSGTermRenderer.cc @@ -100,8 +100,12 @@ static CSGTerm *render_csg_term_from_ps(const double m[20], Response CSGTermRenderer::visit(State &state, const AbstractPolyNode &node) { if (state.isPostfix()) { + CSGTerm *t1 = NULL; PolySet *ps = node.render_polyset(AbstractPolyNode::RENDER_OPENCSG, this->psrenderer); - CSGTerm *t1 = render_csg_term_from_ps(state.matrix(), this->highlights, this->background, ps, node.modinst, node); + if (ps) { + t1 = render_csg_term_from_ps(state.matrix(), this->highlights, this->background, + ps, node.modinst, node); + } this->stored_term[node.index()] = t1; addToParent(state, node); } diff --git a/src/mainwin.cc b/src/mainwin.cc index 7b69190..3e8ac45 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -147,9 +147,9 @@ MainWindow::MainWindow(const QString &filename) Value zero3; zero3.type = Value::VECTOR; - zero3.vec.append(new Value(0.0)); - zero3.vec.append(new Value(0.0)); - zero3.vec.append(new Value(0.0)); + zero3.append(new Value(0.0)); + zero3.append(new Value(0.0)); + zero3.append(new Value(0.0)); root_ctx.set_variable("$vpt", zero3); root_ctx.set_variable("$vpr", zero3); @@ -603,16 +603,16 @@ void MainWindow::compile(bool procevents) Value vpt; vpt.type = Value::VECTOR; - vpt.vec.append(new Value(-screen->object_trans_x)); - vpt.vec.append(new Value(-screen->object_trans_y)); - vpt.vec.append(new Value(-screen->object_trans_z)); + vpt.append(new Value(-screen->object_trans_x)); + vpt.append(new Value(-screen->object_trans_y)); + vpt.append(new Value(-screen->object_trans_z)); this->root_ctx.set_variable("$vpt", vpt); Value vpr; vpr.type = Value::VECTOR; - vpr.vec.append(new Value(fmodf(360 - screen->object_rot_x + 90, 360))); - vpr.vec.append(new Value(fmodf(360 - screen->object_rot_y, 360))); - vpr.vec.append(new Value(fmodf(360 - screen->object_rot_z, 360))); + vpr.append(new Value(fmodf(360 - screen->object_rot_x + 90, 360))); + vpr.append(new Value(fmodf(360 - screen->object_rot_y, 360))); + vpr.append(new Value(fmodf(360 - screen->object_rot_z, 360))); root_ctx.set_variable("$vpr", vpr); // Parse diff --git a/src/openscad.cc b/src/openscad.cc index 4f63bb4..be5b716 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -265,9 +265,9 @@ int main(int argc, char **argv) Value zero3; zero3.type = Value::VECTOR; - zero3.vec.append(new Value(0.0)); - zero3.vec.append(new Value(0.0)); - zero3.vec.append(new Value(0.0)); + zero3.append(new Value(0.0)); + zero3.append(new Value(0.0)); + zero3.append(new Value(0.0)); root_ctx.set_variable("$vpt", zero3); root_ctx.set_variable("$vpr", zero3); diff --git a/src/primitives.cc b/src/primitives.cc index 187a4ea..2c1cf1f 100644 --- a/src/primitives.cc +++ b/src/primitives.cc @@ -509,8 +509,8 @@ sphere_next_r2: double x,y; if (!this->points.vec[i]->getv2(x, y)) { PRINTF("ERROR: Unable to convert point at index %d to a vec2 of numbers", i); - // FIXME: Return NULL and make sure this is checked by all callers? - return p; + p->unlink(); + return NULL; } dd.points.append(DxfData::Point(x, y)); } |