diff options
author | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2009-06-23 10:31:25 (GMT) |
---|---|---|
committer | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2009-06-23 10:31:25 (GMT) |
commit | 9271046a02c5e8b62a9ed92e914ab6cf30938fc7 (patch) | |
tree | deb469a4f6787224ec84f74052eaec7c02e484ff /primitive.cc | |
parent | 4480b67f960af29106e66d1c24e211cf4368f33b (diff) |
Clifford Wolf:
Cleanups and improvements: values and expressions
Avoid unnaccesary nodes in csg tree
git-svn-id: http://svn.clifford.at/openscad/trunk@11 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'primitive.cc')
-rw-r--r-- | primitive.cc | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/primitive.cc b/primitive.cc index 9f5e7f3..91f84d5 100644 --- a/primitive.cc +++ b/primitive.cc @@ -73,24 +73,25 @@ AbstractNode *PrimitiveModule::evaluate(const Context *ctx, const QVector<QStrin if (type == CUBE) { Value size = c.lookup_variable("size"); Value center = c.lookup_variable("center"); - if (size.is_vector) { + if (size.type == Value::VECTOR) { node->x = size.x; node->y = size.y; node->z = size.z; - } else if (!size.is_nan) { - node->x = size.x; - node->y = size.x; - node->z = size.x; } - if (!center.is_vector && !center.is_nan) { - node->center = center.x != 0; + if (size.type == Value::NUMBER) { + node->x = size.num; + node->y = size.num; + node->z = size.num; + } + if (center.type == Value::BOOL) { + node->center = center.b; } } if (type == SPHERE) { Value r = c.lookup_variable("r"); - if (!r.is_vector && !r.is_nan) { - node->r1 = r.x; + if (r.type == Value::NUMBER) { + node->r1 = r.num; } } @@ -100,21 +101,21 @@ AbstractNode *PrimitiveModule::evaluate(const Context *ctx, const QVector<QStrin Value r1 = c.lookup_variable("r1"); Value r2 = c.lookup_variable("r2"); Value center = c.lookup_variable("center"); - if (!h.is_vector && !h.is_nan) { - node->h = h.x; + if (h.type == Value::NUMBER) { + node->h = h.num; } - if (!r.is_vector && !r.is_nan) { - node->r1 = r.x; - node->r2 = r.x; + if (r.type == Value::NUMBER) { + node->r1 = r.num; + node->r2 = r.num; } - if (!r1.is_vector && !r1.is_nan) { - node->r1 = r1.x; + if (r1.type == Value::NUMBER) { + node->r1 = r1.num; } - if (!r2.is_vector && !r2.is_nan) { + if (r2.type == Value::NUMBER) { node->r2 = r2.x; } - if (!center.is_vector && !center.is_nan) { - node->center = center.x != 0; + if (center.type == Value::BOOL) { + node->center = center.b; } } @@ -212,11 +213,11 @@ QString PrimitiveNode::dump(QString indent) const { QString text; if (type == CUBE) - text.sprintf("cube(size = [%f %f %f], center = %d);\n", x, y, z, center ? 1 : 0); + text.sprintf("cube(size = [%f %f %f], center = %s);\n", x, y, z, center ? "true" : "false"); if (type == SPHERE) text.sprintf("sphere(r = %f);\n", r1); if (type == CYLINDER) - text.sprintf("cylinder(h = %f, r1 = %f, r2 = %f, center = %d);\n", h, r1, r2, center ? 1 : 0); + text.sprintf("cylinder(h = %f, r1 = %f, r2 = %f, center = %s);\n", h, r1, r2, center ? "true" : "false"); return indent + text; } |