summaryrefslogtreecommitdiff
path: root/src/transform.cc
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2012-03-27 22:05:00 (GMT)
committerMarius Kintel <marius@kintel.net>2012-03-27 22:05:58 (GMT)
commit327310f190bbd81c7b71b568d5bf72bb900cc9db (patch)
tree9399bb490ecafe9f0c7fd209c680311d829eb631 /src/transform.cc
parent4394c7a030ce7a08c95bd1af2e8c38ffcf972439 (diff)
Rewrote the Value class to be based on boost::variant - this should reduce memory footprint and improve performance
Diffstat (limited to 'src/transform.cc')
-rw-r--r--src/transform.cc32
1 files changed, 16 insertions, 16 deletions
diff --git a/src/transform.cc b/src/transform.cc
index c2ac194..5b71346 100644
--- a/src/transform.cc
+++ b/src/transform.cc
@@ -87,29 +87,29 @@ AbstractNode *TransformModule::evaluate(const Context *ctx, const ModuleInstanti
{
Vector3d scalevec(1,1,1);
Value v = c.lookup_variable("v");
- if (!v.getv3(scalevec[0], scalevec[1], scalevec[2], 1.0)) {
+ if (!v.getVec3(scalevec[0], scalevec[1], scalevec[2], 1.0)) {
double num;
- if (v.getnum(num)) scalevec.setConstant(num);
+ if (v.getDouble(num)) scalevec.setConstant(num);
}
node->matrix.scale(scalevec);
}
else if (this->type == ROTATE)
{
Value val_a = c.lookup_variable("a");
- if (val_a.type == Value::VECTOR)
+ if (val_a.type() == Value::VECTOR)
{
Eigen::AngleAxisd rotx, roty, rotz;
double a;
- if (val_a.vec.size() > 0) {
- val_a.vec[0]->getnum(a);
+ if (val_a.toVector().size() > 0) {
+ val_a.toVector()[0].getDouble(a);
rotx = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitX());
}
- if (val_a.vec.size() > 1) {
- val_a.vec[1]->getnum(a);
+ if (val_a.toVector().size() > 1) {
+ val_a.toVector()[1].getDouble(a);
roty = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitY());
}
- if (val_a.vec.size() > 2) {
- val_a.vec[2]->getnum(a);
+ if (val_a.toVector().size() > 2) {
+ val_a.toVector()[2].getDouble(a);
rotz = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitZ());
}
node->matrix.rotate(rotz * roty * rotx);
@@ -119,10 +119,10 @@ AbstractNode *TransformModule::evaluate(const Context *ctx, const ModuleInstanti
Value val_v = c.lookup_variable("v");
double a = 0;
- val_a.getnum(a);
+ val_a.getDouble(a);
Vector3d axis(0,0,1);
- if (val_v.getv3(axis[0], axis[1], axis[2])) {
+ if (val_v.getVec3(axis[0], axis[1], axis[2])) {
if (axis.squaredNorm() > 0) axis.normalize();
}
@@ -136,7 +136,7 @@ AbstractNode *TransformModule::evaluate(const Context *ctx, const ModuleInstanti
Value val_v = c.lookup_variable("v");
double x = 1, y = 0, z = 0;
- if (val_v.getv3(x, y, z)) {
+ if (val_v.getVec3(x, y, z)) {
if (x != 0.0 || y != 0.0 || z != 0.0) {
double sn = 1.0 / sqrt(x*x + y*y + z*z);
x *= sn, y *= sn, z *= sn;
@@ -157,17 +157,17 @@ AbstractNode *TransformModule::evaluate(const Context *ctx, const ModuleInstanti
{
Value v = c.lookup_variable("v");
Vector3d translatevec(0,0,0);
- v.getv3(translatevec[0], translatevec[1], translatevec[2]);
+ v.getVec3(translatevec[0], translatevec[1], translatevec[2]);
node->matrix.translate(translatevec);
}
else if (this->type == MULTMATRIX)
{
Value v = c.lookup_variable("m");
- if (v.type == Value::VECTOR) {
+ if (v.type() == Value::VECTOR) {
for (int i = 0; i < 16; i++) {
size_t x = i / 4, y = i % 4;
- if (y < v.vec.size() && v.vec[y]->type == Value::VECTOR && x < v.vec[y]->vec.size())
- v.vec[y]->vec[x]->getnum(node->matrix(y, x));
+ if (y < v.toVector().size() && v.toVector()[y].type() == Value::VECTOR && x < v.toVector()[y].toVector().size())
+ v.toVector()[y].toVector()[x].getDouble(node->matrix(y, x));
}
}
}
contact: Jan Huwald // Impressum