summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2013-08-15 03:01:43 (GMT)
committerMarius Kintel <marius@kintel.net>2013-08-15 03:01:43 (GMT)
commitea606f69fcf5e0c75b2b484f49d6f3fe1c69ff78 (patch)
tree99724a00db25f825d68752230f2b89751ca6d42f /src
parent70247b75457afed5a1ca3c0caf1168dff22b690e (diff)
parentaf7e8320e2d0fda0e2b8505f50080ff3d33e7531 (diff)
Merge branch 'master' of github.com:openscad/openscad
Diffstat (limited to 'src')
-rw-r--r--src/CGALEvaluator.cc10
-rw-r--r--src/cgaladv.cc2
-rw-r--r--src/func.cc27
3 files changed, 24 insertions, 15 deletions
diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc
index 8e1b5eb..adaec4a 100644
--- a/src/CGALEvaluator.cc
+++ b/src/CGALEvaluator.cc
@@ -215,20 +215,24 @@ CGAL_Nef_polyhedron CGALEvaluator::applyResize(const CgaladvNode &node)
bbox_size.push_back( bb.xmax()-bb.xmin() );
bbox_size.push_back( bb.ymax()-bb.ymin() );
bbox_size.push_back( bb.zmax()-bb.zmin() );
+ int newsizemax_index = 0;
for (int i=0;i<3;i++) {
if (node.newsize[i]) {
if (bbox_size[i]==NT3(0)) {
- PRINT("WARNING: Cannot resize in direction normal to flat object");
+ PRINT("WARNING: Resize in direction normal to flat object is not implemented");
return N;
}
else {
scale[i] = NT3(node.newsize[i]) / bbox_size[i];
}
+ if ( node.newsize[i] > node.newsize[newsizemax_index] )
+ newsizemax_index = i;
}
}
- NT3 autoscale = std::max( scale[0], std::max( scale[1], scale[2] ));
+ NT3 autoscale = NT3( node.newsize[ newsizemax_index ] ) / bbox_size[ newsizemax_index ];
for (int i=0;i<3;i++) {
- if (node.autosize[i]) scale[i] = autoscale;
+ if (node.autosize[i] && node.newsize[i]==0)
+ scale[i] = autoscale;
}
Eigen::Matrix4d t;
diff --git a/src/cgaladv.cc b/src/cgaladv.cc
index ee3d657..8fd030a 100644
--- a/src/cgaladv.cc
+++ b/src/cgaladv.cc
@@ -98,7 +98,7 @@ AbstractNode *CgaladvModule::instantiate(const Context *ctx, const ModuleInstant
if ( va.size() >= 3 ) node->autosize[2] = va[2].toBool();
}
else if ( autosize.type() == Value::BOOL ) {
- node->autosize << true, true, true;
+ node->autosize << autosize.toBool(),autosize.toBool(),autosize.toBool();
}
}
diff --git a/src/func.cc b/src/func.cc
index eaaae74..20f487a 100644
--- a/src/func.cc
+++ b/src/func.cc
@@ -153,10 +153,10 @@ Value builtin_rands(const Context *, const EvalContext *evalctx)
deterministic = false;
}
else if (evalctx->numArgs() == 4 &&
- evalctx->getArgValue(0).type() == Value::NUMBER &&
- evalctx->getArgValue(1).type() == Value::NUMBER &&
- evalctx->getArgValue(2).type() == Value::NUMBER &&
- evalctx->getArgValue(3).type() == Value::NUMBER)
+ evalctx->getArgValue(0).type() == Value::NUMBER &&
+ evalctx->getArgValue(1).type() == Value::NUMBER &&
+ evalctx->getArgValue(2).type() == Value::NUMBER &&
+ evalctx->getArgValue(3).type() == Value::NUMBER)
{
deterministic_rng.seed( (unsigned int) evalctx->getArgValue(3).toDouble() );
deterministic = true;
@@ -165,19 +165,24 @@ Value builtin_rands(const Context *, const EvalContext *evalctx)
{
return Value();
}
-
+
double min = std::min( evalctx->getArgValue(0).toDouble(), evalctx->getArgValue(1).toDouble() );
double max = std::max( evalctx->getArgValue(0).toDouble(), evalctx->getArgValue(1).toDouble() );
+ size_t numresults = std::max( 0, static_cast<int>( evalctx->getArgValue(2).toDouble() ) );
boost::uniform_real<> distributor( min, max );
Value::VectorType vec;
- for (int i=0; i<evalctx->getArgValue(2).toDouble(); i++) {
- if ( deterministic ) {
- vec.push_back( Value( distributor( deterministic_rng ) ) );
- } else {
- vec.push_back( Value( distributor( lessdeterministic_rng ) ) );
+ if (min==max) { // workaround boost bug
+ for (size_t i=0; i < numresults; i++)
+ vec.push_back( Value( min ) );
+ } else {
+ for (size_t i=0; i < numresults; i++) {
+ if ( deterministic ) {
+ vec.push_back( Value( distributor( deterministic_rng ) ) );
+ } else {
+ vec.push_back( Value( distributor( lessdeterministic_rng ) ) );
+ }
}
}
-
return Value(vec);
}
contact: Jan Huwald // Impressum