mirror of https://github.com/vitalif/openscad
Clifford Wolf:
Added missing "N.dim != 0" checks as needed e.g. for "if (false);" child nodes (fixes bug reported by Andrew Plumb) git-svn-id: http://svn.clifford.at/openscad/trunk@204 b57f626f-c46c-0410-a088-ec61d464b74cstl_dim
parent
a02e00083f
commit
966eb8f55e
|
@ -76,7 +76,8 @@ CGAL_Nef_polyhedron CsgNode::render_cgal_nef_polyhedron() const
|
||||||
continue;
|
continue;
|
||||||
if (first) {
|
if (first) {
|
||||||
N = v->render_cgal_nef_polyhedron();
|
N = v->render_cgal_nef_polyhedron();
|
||||||
first = false;
|
if (N.dim != 0)
|
||||||
|
first = false;
|
||||||
} else if (N.dim == 2) {
|
} else if (N.dim == 2) {
|
||||||
if (type == CSG_TYPE_UNION) {
|
if (type == CSG_TYPE_UNION) {
|
||||||
N.p2 += v->render_cgal_nef_polyhedron().p2;
|
N.p2 += v->render_cgal_nef_polyhedron().p2;
|
||||||
|
|
|
@ -241,14 +241,16 @@ static CGAL_Nef_polyhedron render_cgal_nef_polyhedron_backend(const AbstractNode
|
||||||
return *that->cgal_nef_cache[cache_id];
|
return *that->cgal_nef_cache[cache_id];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_first = true;
|
bool first = true;
|
||||||
CGAL_Nef_polyhedron N;
|
CGAL_Nef_polyhedron N;
|
||||||
foreach (AbstractNode *v, that->children) {
|
foreach (AbstractNode *v, that->children) {
|
||||||
if (v->modinst->tag_background)
|
if (v->modinst->tag_background)
|
||||||
continue;
|
continue;
|
||||||
if (is_first)
|
if (first) {
|
||||||
N = v->render_cgal_nef_polyhedron();
|
N = v->render_cgal_nef_polyhedron();
|
||||||
else if (N.dim == 2) {
|
if (N.dim != 0)
|
||||||
|
first = false;
|
||||||
|
} else if (N.dim == 2) {
|
||||||
if (intersect)
|
if (intersect)
|
||||||
N.p2 *= v->render_cgal_nef_polyhedron().p2;
|
N.p2 *= v->render_cgal_nef_polyhedron().p2;
|
||||||
else
|
else
|
||||||
|
@ -259,7 +261,6 @@ static CGAL_Nef_polyhedron render_cgal_nef_polyhedron_backend(const AbstractNode
|
||||||
else
|
else
|
||||||
N.p3 += v->render_cgal_nef_polyhedron().p3;
|
N.p3 += v->render_cgal_nef_polyhedron().p3;
|
||||||
}
|
}
|
||||||
is_first = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
that->cgal_nef_cache.insert(cache_id, new CGAL_Nef_polyhedron(N), N.weight());
|
that->cgal_nef_cache.insert(cache_id, new CGAL_Nef_polyhedron(N), N.weight());
|
||||||
|
|
|
@ -92,7 +92,8 @@ CGAL_Nef_polyhedron RenderNode::render_cgal_nef_polyhedron() const
|
||||||
continue;
|
continue;
|
||||||
if (first) {
|
if (first) {
|
||||||
N = v->render_cgal_nef_polyhedron();
|
N = v->render_cgal_nef_polyhedron();
|
||||||
first = false;
|
if (N.dim != 0)
|
||||||
|
first = false;
|
||||||
} else if (N.dim == 2) {
|
} else if (N.dim == 2) {
|
||||||
N.p2 += v->render_cgal_nef_polyhedron().p2;
|
N.p2 += v->render_cgal_nef_polyhedron().p2;
|
||||||
} else if (N.dim == 3) {
|
} else if (N.dim == 3) {
|
||||||
|
|
|
@ -200,7 +200,8 @@ CGAL_Nef_polyhedron TransformNode::render_cgal_nef_polyhedron() const
|
||||||
continue;
|
continue;
|
||||||
if (first) {
|
if (first) {
|
||||||
N = v->render_cgal_nef_polyhedron();
|
N = v->render_cgal_nef_polyhedron();
|
||||||
first = false;
|
if (N.dim != 0)
|
||||||
|
first = false;
|
||||||
} else if (N.dim == 2) {
|
} else if (N.dim == 2) {
|
||||||
N.p2 += v->render_cgal_nef_polyhedron().p2;
|
N.p2 += v->render_cgal_nef_polyhedron().p2;
|
||||||
} else if (N.dim == 3) {
|
} else if (N.dim == 3) {
|
||||||
|
@ -284,7 +285,7 @@ QString TransformNode::dump(QString indent) const
|
||||||
{
|
{
|
||||||
if (dump_cache.isEmpty()) {
|
if (dump_cache.isEmpty()) {
|
||||||
QString text;
|
QString text;
|
||||||
text.sprintf("n%d: multmatrix([[%f %f %f %f], [%f %f %f %f], [%f %f %f %f], [%f %f %f %f]])", idx,
|
text.sprintf("n%d: multmatrix([[%f, %f, %f, %f], [%f, %f, %f, %f], [%f, %f, %f, %f], [%f, %f, %f, %f]])", idx,
|
||||||
m[0], m[4], m[ 8], m[12],
|
m[0], m[4], m[ 8], m[12],
|
||||||
m[1], m[5], m[ 9], m[13],
|
m[1], m[5], m[ 9], m[13],
|
||||||
m[2], m[6], m[10], m[14],
|
m[2], m[6], m[10], m[14],
|
||||||
|
|
Loading…
Reference in New Issue