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));  		} | 
