diff options
author | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2009-06-21 06:53:46 (GMT) |
---|---|---|
committer | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2009-06-21 06:53:46 (GMT) |
commit | 1c2472067c3843342f56b5833c284106ab349417 (patch) | |
tree | fd6f914e8cf19337a14b9663b6bda4a6642b8a70 /value.cc | |
parent | e416017c5e0ef689e9fbc43b520632cde7927c26 (diff) |
Clifford Wolf:
Improved backend data structures
Added dump feature to backend data
git-svn-id: http://svn.clifford.at/openscad/trunk@4 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'value.cc')
-rw-r--r-- | value.cc | 57 |
1 files changed, 49 insertions, 8 deletions
@@ -19,9 +19,35 @@ */ #include "openscad.h" -#include <math.h> -Value& Value::operator = (const Value &v) { +Value::Value(const Value &v1, const Value &v2, const Value &v3) +{ + if (v1.is_nan || v1.is_vector) + goto create_nan; + if (v2.is_nan || v2.is_vector) + goto create_nan; + if (v3.is_nan || v3.is_vector) + goto create_nan; + + x = v1.x; + y = v1.y; + z = v1.z; + + is_vector = true; + is_nan = false; + return; + +create_nan: + x = 0; + y = 0; + z = 0; + + is_vector = false; + is_nan = true; +} + +Value& Value::operator = (const Value &v) +{ x = v.x; y = v.y; z = v.z; @@ -30,7 +56,8 @@ Value& Value::operator = (const Value &v) { return *this; } -Value Value::operator + (const Value &v) const { +Value Value::operator + (const Value &v) const +{ if (is_nan || v.is_nan) return Value(); if (is_vector && v.is_vector) @@ -40,7 +67,8 @@ Value Value::operator + (const Value &v) const { return Value(); } -Value Value::operator - (const Value &v) const { +Value Value::operator - (const Value &v) const +{ if (is_nan || v.is_nan) return Value(); if (is_vector && v.is_vector) @@ -50,7 +78,8 @@ Value Value::operator - (const Value &v) const { return Value(); } -Value Value::operator * (const Value &v) const { +Value Value::operator * (const Value &v) const +{ if (is_nan || v.is_nan) return Value(); if (is_vector && v.is_vector) { @@ -68,19 +97,22 @@ Value Value::operator * (const Value &v) const { return Value(x * v.x); } -Value Value::operator / (const Value &v) const { +Value Value::operator / (const Value &v) const +{ if (is_nan || v.is_nan || is_vector || v.is_vector) return Value(); return Value(x / v.x); } -Value Value::operator % (const Value &v) const { +Value Value::operator % (const Value &v) const +{ if (is_nan || v.is_nan || is_vector || v.is_vector) return Value(); return Value(fmod(x, v.x)); } -Value Value::inv() const { +Value Value::inv() const +{ if (is_nan) return Value(); if (is_vector) @@ -88,3 +120,12 @@ Value Value::inv() const { return Value(-x); } +QString Value::dump() const +{ + if (is_nan) + return QString("NaN"); + if (is_vector) + return QString("[%1 %2 %3]").arg(x, y, z); + return QString("%1").arg(x); +} + |