diff options
-rw-r--r-- | src/CGALCache.cc | 10 | ||||
-rw-r--r-- | src/CGALEvaluator.cc | 8 | ||||
-rw-r--r-- | src/CGAL_Nef_polyhedron.cc | 2 | ||||
-rw-r--r-- | src/PolySetCGALEvaluator.cc | 20 | ||||
-rw-r--r-- | src/PolySetCache.cc | 4 | ||||
-rw-r--r-- | src/PolySetEvaluator.cc | 2 | ||||
-rw-r--r-- | src/cache.h | 2 | ||||
-rw-r--r-- | src/cgalutils.cc | 2 | ||||
-rw-r--r-- | src/color.cc | 5 | ||||
-rw-r--r-- | src/context.cc | 16 | ||||
-rw-r--r-- | src/control.cc | 2 | ||||
-rw-r--r-- | src/csgtermnormalizer.cc | 4 | ||||
-rw-r--r-- | src/dxfdata.cc | 14 | ||||
-rw-r--r-- | src/dxfdim.cc | 8 | ||||
-rw-r--r-- | src/dxftess-cgal.cc | 2 | ||||
-rw-r--r-- | src/dxftess-glu.cc | 18 | ||||
-rw-r--r-- | src/export.cc | 4 | ||||
-rw-r--r-- | src/import.cc | 8 | ||||
-rw-r--r-- | src/lexer.l | 2 | ||||
-rw-r--r-- | src/linearextrude.cc | 4 | ||||
-rw-r--r-- | src/mainwin.cc | 78 | ||||
-rw-r--r-- | src/module.cc | 2 | ||||
-rw-r--r-- | src/openscad.cc | 8 | ||||
-rw-r--r-- | src/parser.y | 8 | ||||
-rw-r--r-- | src/primitives.cc | 6 | ||||
-rw-r--r-- | src/printutils.cc | 1 | ||||
-rw-r--r-- | src/printutils.h | 10 | ||||
-rw-r--r-- | src/projection.cc | 2 | ||||
-rw-r--r-- | src/rotateextrude.cc | 4 | ||||
-rw-r--r-- | src/surface.cc | 4 | ||||
-rw-r--r-- | tests/regression/echotest/dim-all-expected.txt | 16 |
31 files changed, 137 insertions, 139 deletions
diff --git a/src/CGALCache.cc b/src/CGALCache.cc index 8a92082..1fc864a 100644 --- a/src/CGALCache.cc +++ b/src/CGALCache.cc @@ -12,7 +12,7 @@ const CGAL_Nef_polyhedron &CGALCache::get(const std::string &id) const { const CGAL_Nef_polyhedron &N = *this->cache[id]; #ifdef DEBUG - PRINTF("CGAL Cache hit: %s (%d bytes)", id.substr(0, 40).c_str(), N.weight()); + PRINTB("CGAL Cache hit: %s (%d bytes)", id.substr(0, 40) % N.weight()); #endif return N; } @@ -21,8 +21,8 @@ bool CGALCache::insert(const std::string &id, const CGAL_Nef_polyhedron &N) { bool inserted = this->cache.insert(id, new CGAL_Nef_polyhedron(N), N.weight()); #ifdef DEBUG - if (inserted) PRINTF("CGAL Cache insert: %s (%d bytes)", id.substr(0, 40).c_str(), N.weight()); - else PRINTF("CGAL Cache insert failed: %s (%d bytes)", id.substr(0, 40).c_str(), N.weight()); + if (inserted) PRINTB("CGAL Cache insert: %s (%d bytes)", id.substr(0, 40) % N.weight()); + else PRINTB("CGAL Cache insert failed: %s (%d bytes)", id.substr(0, 40) % N.weight()); #endif return inserted; } @@ -44,6 +44,6 @@ void CGALCache::clear() void CGALCache::print() { - PRINTF("CGAL Polyhedrons in cache: %d", this->cache.size()); - PRINTF("CGAL cache size in bytes: %d", this->cache.totalCost()); + PRINTB("CGAL Polyhedrons in cache: %d", this->cache.size()); + PRINTB("CGAL cache size in bytes: %d", this->cache.totalCost()); } diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc index bbf8cca..d44b5a9 100644 --- a/src/CGALEvaluator.cc +++ b/src/CGALEvaluator.cc @@ -87,7 +87,7 @@ void CGALEvaluator::process(CGAL_Nef_polyhedron &target, const CGAL_Nef_polyhedr catch (CGAL::Assertion_exception e) { // union && difference assert triggered by testdata/scad/bugs/rotate-diff-nonmanifold-crash.scad std::string opstr = op == CGE_UNION ? "union" : op == CGE_INTERSECTION ? "intersection" : op == CGE_DIFFERENCE ? "difference" : op == CGE_MINKOWSKI ? "minkowski" : "UNKNOWN"; - PRINTF("CGAL error in CGAL_Nef_polyhedron's %s operator: %s", opstr.c_str(), e.what()); + PRINTB("CGAL error in CGAL_Nef_polyhedron's %s operator: %s", opstr % e.what()); // Minkowski errors can result in corrupt polyhedrons if (op == CGE_MINKOWSKI) { @@ -357,7 +357,7 @@ void CGALEvaluator::addToParent(const State &state, const AbstractNode &node, co // Root node, insert into cache if (!isCached(node)) { if (!CGALCache::instance()->insert(this->tree.getIdString(node), N)) { - PRINTF("WARNING: CGAL Evaluator: Root node didn't fit into cache"); + PRINT("WARNING: CGAL Evaluator: Root node didn't fit into cache"); } } this->root = N; @@ -583,7 +583,7 @@ CGAL_Nef_polyhedron CGALEvaluator::evaluateCGALMesh(const PolySet &ps) pr.reduce(); int numpolygons_after = pr.polygons.size(); if (numpolygons_after < numpolygons_before) { - PRINTF("reduce polygons: %d -> %d", numpolygons_before, numpolygons_after); + PRINTB("reduce polygons: %d -> %d", numpolygons_before % numpolygons_after); } return CGAL_Nef_polyhedron(pr.toNef()); #endif @@ -632,7 +632,7 @@ CGAL_Nef_polyhedron CGALEvaluator::evaluateCGALMesh(const PolySet &ps) } } catch (CGAL::Assertion_exception e) { - PRINTF("CGAL error in CGAL_Nef_polyhedron3(): %s", e.what()); + PRINTB("CGAL error in CGAL_Nef_polyhedron3(): %s", e.what()); } CGAL::set_error_behaviour(old_behaviour); return CGAL_Nef_polyhedron(N); diff --git a/src/CGAL_Nef_polyhedron.cc b/src/CGAL_Nef_polyhedron.cc index 0f1e7ca..04783e5 100644 --- a/src/CGAL_Nef_polyhedron.cc +++ b/src/CGAL_Nef_polyhedron.cc @@ -100,7 +100,7 @@ PolySet *CGAL_Nef_polyhedron::convertToPolyset() ps = createPolySetFromPolyhedron(P); } catch (CGAL::Precondition_exception e) { - PRINTF("CGAL error in CGAL_Nef_polyhedron::convertToPolyset(): %s", e.what()); + PRINTB("CGAL error in CGAL_Nef_polyhedron::convertToPolyset(): %s", e.what()); } CGAL::set_error_behaviour(old_behaviour); } diff --git a/src/PolySetCGALEvaluator.cc b/src/PolySetCGALEvaluator.cc index 3cd6005..c3f4774 100644 --- a/src/PolySetCGALEvaluator.cc +++ b/src/PolySetCGALEvaluator.cc @@ -85,7 +85,7 @@ PolySet *PolySetCGALEvaluator::evaluatePolySet(const ProjectionNode &node) // N.p3 *= CGAL_Nef_polyhedron3(CGAL_Plane(0, 0, 1, 0), CGAL_Nef_polyhedron3::INCLUDED); sum *= Ncube; if (!sum.p3->is_simple()) { - PRINTF("WARNING: Body of projection(cut = true) isn't valid 2-manifold! Modify your design.."); + PRINT("WARNING: Body of projection(cut = true) isn't valid 2-manifold! Modify your design.."); goto cant_project_non_simple_polyhedron; } @@ -116,7 +116,7 @@ PolySet *PolySetCGALEvaluator::evaluatePolySet(const ProjectionNode &node) else { if (!sum.p3->is_simple()) { - PRINTF("WARNING: Body of projection(cut = false) isn't valid 2-manifold! Modify your design.."); + PRINT("WARNING: Body of projection(cut = false) isn't valid 2-manifold! Modify your design.."); goto cant_project_non_simple_polyhedron; } @@ -302,15 +302,15 @@ PolySet *PolySetCGALEvaluator::extrudeDxfData(const LinearExtrudeNode &node, Dxf if (dxf.paths[i].is_closed) continue; if (first_open_path) { - PRINTF("WARNING: Open paths in dxf_linear_extrude(file = \"%s\", layer = \"%s\"):", - node.filename.c_str(), node.layername.c_str()); + PRINTB("WARNING: Open paths in dxf_linear_extrude(file = \"%s\", layer = \"%s\"):", + node.filename % node.layername); first_open_path = false; } - PRINTF(" %9.5f %10.5f ... %10.5f %10.5f", - dxf.points[dxf.paths[i].indices.front()][0] / node.scale + node.origin_x, - dxf.points[dxf.paths[i].indices.front()][1] / node.scale + node.origin_y, - dxf.points[dxf.paths[i].indices.back()][0] / node.scale + node.origin_x, - dxf.points[dxf.paths[i].indices.back()][1] / node.scale + node.origin_y); + PRINTB(" %9.5f %10.5f ... %10.5f %10.5f", + (dxf.points[dxf.paths[i].indices.front()][0] / node.scale + node.origin_x) % + (dxf.points[dxf.paths[i].indices.front()][1] / node.scale + node.origin_y) % + (dxf.points[dxf.paths[i].indices.back()][0] / node.scale + node.origin_x) % + (dxf.points[dxf.paths[i].indices.back()][1] / node.scale + node.origin_y)); } @@ -397,7 +397,7 @@ PolySet *PolySetCGALEvaluator::evaluatePolySet(const RenderNode &node) PolySet *ps = NULL; if (!N.empty()) { if (N.dim == 3 && !N.p3->is_simple()) { - PRINTF("WARNING: Body of render() isn't valid 2-manifold!"); + PRINT("WARNING: Body of render() isn't valid 2-manifold!"); } else { ps = N.convertToPolyset(); diff --git a/src/PolySetCache.cc b/src/PolySetCache.cc index cff4e88..04f4127 100644 --- a/src/PolySetCache.cc +++ b/src/PolySetCache.cc @@ -21,8 +21,8 @@ void PolySetCache::setMaxSize(size_t limit) void PolySetCache::print() { - PRINTF("PolySets in cache: %d", this->cache.size()); - PRINTF("PolySet cache size in bytes: %d", this->cache.totalCost()); + PRINTB("PolySets in cache: %d", this->cache.size()); + PRINTB("PolySet cache size in bytes: %d", this->cache.totalCost()); } PolySetCache::cache_entry::cache_entry(const shared_ptr<PolySet> &ps) : ps(ps) diff --git a/src/PolySetEvaluator.cc b/src/PolySetEvaluator.cc index 537dc9d..e8a2c0c 100644 --- a/src/PolySetEvaluator.cc +++ b/src/PolySetEvaluator.cc @@ -24,7 +24,7 @@ shared_ptr<PolySet> PolySetEvaluator::getPolySet(const AbstractNode &node, bool if (PolySetCache::instance()->contains(cacheid)) { #ifdef DEBUG // For cache debugging - PRINTF("PolySetCache hit: %s", cacheid.substr(0, 40).c_str()); + PRINTB("PolySetCache hit: %s", cacheid.substr(0, 40)); #endif return PolySetCache::instance()->get(cacheid); } diff --git a/src/cache.h b/src/cache.h index 27eb1f9..ecf0c8b 100644 --- a/src/cache.h +++ b/src/cache.h @@ -178,7 +178,7 @@ void Cache<Key,T>::trim(int m) Node *u = n; n = n->p; #ifdef DEBUG - PRINTF("Trimming cache: %s (%d bytes)", str(boost::format("%1%") % *u->keyPtr).c_str(), u->c); + PRINTB("Trimming cache: %1% (%d bytes)", *u->keyPtr % u->c); #endif unlink(*u); } diff --git a/src/cgalutils.cc b/src/cgalutils.cc index 64782fb..e39c495 100644 --- a/src/cgalutils.cc +++ b/src/cgalutils.cc @@ -137,7 +137,7 @@ CGAL_Polyhedron *createPolyhedronFromPolySet(const PolySet &ps) P->delegate(builder); } catch (CGAL::Assertion_exception e) { - PRINTF("CGAL error in CGAL_Build_PolySet: %s", e.what()); + PRINTB("CGAL error in CGAL_Build_PolySet: %s", e.what()); delete P; P = NULL; } diff --git a/src/color.cc b/src/color.cc index 9224fd4..1d3eb3e 100644 --- a/src/color.cc +++ b/src/color.cc @@ -47,7 +47,6 @@ private: }; #include "colormap.h" - AbstractNode *ColorModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { ColorNode *node = new ColorNode(inst); @@ -77,8 +76,8 @@ AbstractNode *ColorModule::evaluate(const Context *ctx, const ModuleInstantiatio node->color[1] = color[1]/255; node->color[2] = color[2]/255; } else { - PRINTF_NOCACHE("WARNING: Color name \"%s\" unknown. Please see", colorname.c_str()); - PRINTF_NOCACHE("WARNING: http://en.wikipedia.org/wiki/Web_colors"); + PRINTB_NOCACHE("WARNING: Color name \"%s\" unknown. Please see", colorname); + PRINT_NOCACHE("WARNING: http://en.wikipedia.org/wiki/Web_colors"); } } Value alpha = c.lookup_variable("alpha"); diff --git a/src/context.cc b/src/context.cc index 8d7b903..b9e685c 100644 --- a/src/context.cc +++ b/src/context.cc @@ -101,10 +101,12 @@ void Context::set_variable(const std::string &name, const Value &value) void Context::set_constant(const std::string &name, const Value &value) { - if (this->constants.find(name) != this->constants.end()) - PRINTF("WARNING: Attempt to modify constant '%s'.",name.c_str()); - else + if (this->constants.find(name) != this->constants.end()) { + PRINTB("WARNING: Attempt to modify constant '%s'.", name); + } + else { this->constants[name] = value; + } } Value Context::lookup_variable(const std::string &name, bool silent) const @@ -124,7 +126,7 @@ Value Context::lookup_variable(const std::string &name, bool silent) const if (this->parent) return this->parent->lookup_variable(name, silent); if (!silent) - PRINTF("WARNING: Ignoring unknown variable '%s'.", name.c_str()); + PRINTB("WARNING: Ignoring unknown variable '%s'.", name); return Value(); } @@ -144,7 +146,7 @@ Value Context::evaluate_function(const std::string &name, } if (this->parent) return this->parent->evaluate_function(name, argnames, argvalues); - PRINTF("WARNING: Ignoring unknown function '%s'.", name.c_str()); + PRINTB("WARNING: Ignoring unknown function '%s'.", name); return Value(); } @@ -154,7 +156,7 @@ AbstractNode *Context::evaluate_module(const ModuleInstantiation &inst) const AbstractModule *m = this->modules_p->find(inst.name())->second; std::string replacement = Builtins::instance()->isDeprecated(inst.name()); if (!replacement.empty()) { - PRINTF("DEPRECATED: The %s() module will be removed in future releases. Use %s() instead.", inst.name().c_str(), replacement.c_str()); + PRINTB("DEPRECATED: The %s() module will be removed in future releases. Use %s() instead.", inst.name() % replacement); } return m->evaluate(this, &inst); } @@ -167,7 +169,7 @@ AbstractNode *Context::evaluate_module(const ModuleInstantiation &inst) const } } if (this->parent) return this->parent->evaluate_module(inst); - PRINTF("WARNING: Ignoring unknown module '%s'.", inst.name().c_str()); + PRINTB("WARNING: Ignoring unknown module '%s'.", inst.name()); return NULL; } diff --git a/src/control.cc b/src/control.cc index 2275c79..1d87551 100644 --- a/src/control.cc +++ b/src/control.cc @@ -132,7 +132,7 @@ AbstractNode *ControlModule::evaluate(const Context*, const ModuleInstantiation if (!inst->argnames[i].empty()) msg << inst->argnames[i] << " = "; msg << inst->argvalues[i]; } - PRINTF("%s", msg.str().c_str()); + PRINTB("%s", msg.str()); } if (type == ASSIGN) diff --git a/src/csgtermnormalizer.cc b/src/csgtermnormalizer.cc index c4caa8f..7a59aa1 100644 --- a/src/csgtermnormalizer.cc +++ b/src/csgtermnormalizer.cc @@ -13,10 +13,10 @@ shared_ptr<CSGTerm> CSGTermNormalizer::normalize(const shared_ptr<CSGTerm> &root int num = count(temp); #ifdef DEBUG - PRINTF("Normalize count: %d\n", num); + PRINTB("Normalize count: %d\n", num); #endif if (num > limit) { - PRINTF("WARNING: Normalized tree is growing past %d elements. Aborting normalization.\n", limit); + PRINTB("WARNING: Normalized tree is growing past %d elements. Aborting normalization.\n", limit); return root; } } diff --git a/src/dxfdata.cc b/src/dxfdata.cc index 2bc21e2..52493ac 100644 --- a/src/dxfdata.cc +++ b/src/dxfdata.cc @@ -77,7 +77,7 @@ DxfData::DxfData(double fn, double fs, double fa, std::ifstream stream(filename.c_str()); if (!stream.good()) { - PRINTF("WARNING: Can't open DXF file `%s'.", filename.c_str()); + PRINTB("WARNING: Can't open DXF file '%s'.", filename); return; } @@ -141,7 +141,7 @@ DxfData::DxfData(double fn, double fs, double fa, } catch (boost::bad_lexical_cast &blc) { if (!stream.eof()) { - PRINTF("WARNING: Illegal ID '%s' in `%s'", id_str.c_str(), filename.c_str()); + PRINTB("WARNING: Illegal ID '%s' in `%s'", id_str % filename); } break; } @@ -380,17 +380,17 @@ DxfData::DxfData(double fn, double fs, double fa, } } catch (boost::bad_lexical_cast &blc) { - PRINTF("WARNING: Illegal value %s in `%s'", data.c_str(), filename.c_str()); + PRINTB("WARNING: Illegal value %s in '%s'", data % filename); } } BOOST_FOREACH(const EntityList::value_type &i, unsupported_entities_list) { if (layername.empty()) { - PRINTF("WARNING: Unsupported DXF Entity `%s' (%x) in `%s'.", - i.first.c_str(), i.second, QuotedString(QDir::current().relativeFilePath(QString::fromStdString(filename)).toStdString()).c_str()); + PRINTB("WARNING: Unsupported DXF Entity '%s' (%x) in %s.", + i.first % i.second % QuotedString(QDir::current().relativeFilePath(QString::fromStdString(filename)).toStdString())); } else { - PRINTF("WARNING: Unsupported DXF Entity `%s' (%x) in layer `%s' of `%s'.", - i.first.c_str(), i.second, layername.c_str(), QuotedString(QDir::current().relativeFilePath(QString::fromStdString(filename)).toStdString()).c_str()); + PRINTB("WARNING: Unsupported DXF Entity '%s' (%x) in layer '%s' of %s.", + i.first % i.second % layername % QuotedString(QDir::current().relativeFilePath(QString::fromStdString(filename)).toStdString())); } } diff --git a/src/dxfdim.cc b/src/dxfdim.cc index 44b5d73..664fdb5 100644 --- a/src/dxfdim.cc +++ b/src/dxfdim.cc @@ -115,11 +115,13 @@ Value builtin_dxf_dim(const Context *ctx, const std::vector<std::string> &argnam return dxf_dim_cache[key] = Value((d->type & 64) ? d->coords[3][0] : d->coords[3][1]); } - PRINTF("WARNING: Dimension `%s' in `%s', layer `%s' has unsupported type!", name.c_str(), filename.c_str(), layername.c_str()); + PRINTB("WARNING: Dimension '%s' in '%s', layer '%s' has unsupported type!", + name % filename % layername); return Value(); } - PRINTF("WARNING: Can't find dimension `%s' in `%s', layer `%s'!", name.c_str(), filename.c_str(), layername.c_str()); + PRINTB("WARNING: Can't find dimension '%s' in '%s', layer '%s'!", + name % filename % layername); return Value(); } @@ -184,7 +186,7 @@ Value builtin_dxf_cross(const Context *ctx, const std::vector<std::string> &argn } } - PRINTF("WARNING: Can't find cross in `%s', layer `%s'!", filename.c_str(), layername.c_str()); + PRINTB("WARNING: Can't find cross in '%s', layer '%s'!", filename % layername); return Value(); } diff --git a/src/dxftess-cgal.cc b/src/dxftess-cgal.cc index 5b4e953..d1e79ad 100644 --- a/src/dxftess-cgal.cc +++ b/src/dxftess-cgal.cc @@ -166,7 +166,7 @@ void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool /* do_tr } catch (CGAL::Assertion_exception e) { - PRINTF("CGAL error in dxf_tesselate(): %s", e.what()); + PRINTB("CGAL error in dxf_tesselate(): %s", e.what()); CGAL::set_error_behaviour(old_behaviour); return; } diff --git a/src/dxftess-glu.cc b/src/dxftess-glu.cc index 4207bcd..1a8bfa5 100644 --- a/src/dxftess-glu.cc +++ b/src/dxftess-glu.cc @@ -109,45 +109,45 @@ static void STDCALL tess_end(void) static void STDCALL tess_error(GLenum errno) { fprintf(stderr, "GLU tesselation error %s", gluErrorString(errno)); - PRINTF("GLU tesselation error %s", gluErrorString(errno)); + PRINTB("GLU tesselation error %s", gluErrorString(errno)); } static void STDCALL tess_begin_data() { - PRINTF("GLU tesselation BEGIN_DATA\n"); + PRINT("GLU tesselation BEGIN_DATA\n"); } static void STDCALL tess_edge_flag(GLboolean flag) { -// PRINTF("GLU tesselation EDGE_FLAG\n"); +// PRINT("GLU tesselation EDGE_FLAG\n"); } static void STDCALL tess_edge_flag_data(GLboolean flag, void *polygon_data) { - PRINTF("GLU tesselation EDGE_FLAG_DATA\n"); + PRINT("GLU tesselation EDGE_FLAG_DATA\n"); } static void STDCALL tess_vertex_data(void *vertex_data, void *polygon_data) { - PRINTF("GLU tesselation VERTEX_DATA\n"); + PRINT("GLU tesselation VERTEX_DATA\n"); } static void STDCALL tess_end_data(void *polygon_data) { - PRINTF("GLU tesselation END_DATA\n"); + PRINT("GLU tesselation END_DATA\n"); } static void STDCALL tess_combine(GLdouble coords[3], void *vertex_data[4], GLfloat weight[4], void **outData ) { - PRINTF("GLU tesselation COMBINE\n"); + PRINT("GLU tesselation COMBINE\n"); } static void STDCALL tess_combine_data(GLdouble coords[3], void *vertex_data[4], GLfloat weight[4], void **outData, void *polygon_data) { - PRINTF("GLU tesselation COMBINE_DATA\n"); + PRINT("GLU tesselation COMBINE_DATA\n"); } static void STDCALL tess_error_data(GLenum errno, void *polygon_data ) { - PRINTF("GLU tesselation ERROR_DATA\n"); + PRINT("GLU tesselation ERROR_DATA\n"); } static bool point_on_line(double *p1, double *p2, double *p3) diff --git a/src/export.cc b/src/export.cc index 9414ebe..6dce699 100644 --- a/src/export.cc +++ b/src/export.cc @@ -113,7 +113,7 @@ void export_stl(CGAL_Nef_polyhedron *root_N, std::ostream &output) } catch (CGAL::Assertion_exception e) { - PRINTF("CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what()); + PRINTB("CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what()); } CGAL::set_error_behaviour(old_behaviour); } @@ -127,7 +127,7 @@ void export_off(CGAL_Nef_polyhedron *root_N, std::ostream &output) output << P; } catch (CGAL::Assertion_exception e) { - PRINTF("CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what()); + PRINTB("CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what()); } CGAL::set_error_behaviour(old_behaviour); } diff --git a/src/import.cc b/src/import.cc index 266aa4e..597ecfb 100644 --- a/src/import.cc +++ b/src/import.cc @@ -123,7 +123,7 @@ PolySet *ImportNode::evaluate_polyset(class PolySetEvaluator *) const handle_dep(this->filename); std::ifstream f(this->filename.c_str(), std::ios::in | std::ios::binary); if (!f.good()) { - PRINTF("WARNING: Can't open import file `%s'.", this->filename.c_str()); + PRINTB("WARNING: Can't open import file '%s'.", this->filename); return p; } @@ -160,7 +160,7 @@ PolySet *ImportNode::evaluate_polyset(class PolySetEvaluator *) const } } catch (boost::bad_lexical_cast &blc) { - PRINTF("WARNING: Can't parse vertex line `%s'.", line.c_str()); + PRINTB("WARNING: Can't parse vertex line '%s'.", line); i = 10; continue; } @@ -215,7 +215,7 @@ PolySet *ImportNode::evaluate_polyset(class PolySetEvaluator *) const p = createPolySetFromPolyhedron(poly); #else - PRINTF("WARNING: OFF import requires CGAL."); + PRINT("WARNING: OFF import requires CGAL."); #endif } @@ -229,7 +229,7 @@ PolySet *ImportNode::evaluate_polyset(class PolySetEvaluator *) const } else { - PRINTF("ERROR: Unsupported file format while trying to import file '%s'", this->filename.c_str()); + PRINTB("ERROR: Unsupported file format while trying to import file '%s'", this->filename); } if (p) p->convexity = this->convexity; diff --git a/src/lexer.l b/src/lexer.l index 77308a0..7f6586a 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -218,7 +218,7 @@ void includefile() handle_dep(boosty::absolute(finfo).string()); yyin = fopen(boosty::absolute(finfo).string().c_str(), "r"); if (!yyin) { - PRINTF("WARNING: Can't open input file `%s'.", filename.c_str()); + PRINTB("WARNING: Can't open input file '%s'.", filename); path_stack.pop_back(); return; } diff --git a/src/linearextrude.cc b/src/linearextrude.cc index 775eeb0..4f5fd14 100644 --- a/src/linearextrude.cc +++ b/src/linearextrude.cc @@ -71,7 +71,7 @@ AbstractNode *LinearExtrudeModule::evaluate(const Context *ctx, const ModuleInst Value slices = c.lookup_variable("slices", true); if (!file.text.empty()) { - PRINTF("DEPRECATED: Support for reading files in linear_extrude will be removed in future releases. Use a child import() instead."); + PRINT("DEPRECATED: Support for reading files in linear_extrude will be removed in future releases. Use a child import() instead."); node->filename = c.getAbsolutePath(file.text); } @@ -115,7 +115,7 @@ AbstractNode *LinearExtrudeModule::evaluate(const Context *ctx, const ModuleInst class PolySet *LinearExtrudeNode::evaluate_polyset(PolySetEvaluator *evaluator) const { if (!evaluator) { - PRINTF("WARNING: No suitable PolySetEvaluator found for %s module!", this->name().c_str()); + PRINTB("WARNING: No suitable PolySetEvaluator found for %s module!", this->name()); return NULL; } diff --git a/src/mainwin.cc b/src/mainwin.cc index 20f3c7c..ff6ce3e 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -575,11 +575,11 @@ void MainWindow::load() if (!this->fileName.isEmpty()) { QFile file(this->fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - PRINTA("Failed to open file: %1 (%2)", this->fileName, file.errorString()); + PRINTB("Failed to open file: %s (%s)", this->fileName.toStdString() % file.errorString().toStdString()); } else { QString text = QTextStream(&file).readAll(); - PRINTA("Loaded design `%1'.", this->fileName); + PRINTB("Loaded design '%s'.", this->fileName.toStdString()); editor->setPlainText(text); } } @@ -788,7 +788,7 @@ void MainWindow::compileCSG(bool procevents) if (highlight_terms.size() > 0) { - PRINTF("Compiling highlights (%zu CSG Trees)...", highlight_terms.size()); + PRINTB("Compiling highlights (%zu CSG Trees)...", highlight_terms.size()); if (procevents) QApplication::processEvents(); @@ -801,7 +801,7 @@ void MainWindow::compileCSG(bool procevents) if (background_terms.size() > 0) { - PRINTF("Compiling background (%zu CSG Trees)...", background_terms.size()); + PRINTB("Compiling background (%zu CSG Trees)...", background_terms.size()); if (procevents) QApplication::processEvents(); @@ -813,11 +813,11 @@ void MainWindow::compileCSG(bool procevents) } if (root_chain->polysets.size() > Preferences::inst()->getValue("advanced/openCSGLimit").toUInt()) { - PRINTF("WARNING: Normalized tree has %d elements!", int(root_chain->polysets.size())); - PRINTF("WARNING: OpenCSG rendering has been disabled."); + PRINTB("WARNING: Normalized tree has %d elements!", root_chain->polysets.size()); + PRINT("WARNING: OpenCSG rendering has been disabled."); } else { - PRINTF("Normalized CSG tree has %d elements", int(root_chain->polysets.size())); + PRINTB("Normalized CSG tree has %d elements", root_chain->polysets.size()); this->opencsgRenderer = new OpenCSGRenderer(this->root_chain, this->highlights_chain, this->background_chain, @@ -828,7 +828,7 @@ void MainWindow::compileCSG(bool procevents) this->background_chain); PRINT("CSG generation finished."); int s = t.elapsed() / 1000; - PRINTF("Total rendering time: %d hours, %d minutes, %d seconds", s / (60*60), (s / 60) % 60, s % 60); + PRINTB("Total rendering time: %d hours, %d minutes, %d seconds", (s / (60*60)) % ((s / 60) % 60) % (s % 60)); if (procevents) QApplication::processEvents(); } @@ -943,11 +943,11 @@ void MainWindow::actionSave() setCurrentOutput(); QFile file(this->fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { - PRINTA("Failed to open file for writing: %1 (%2)", this->fileName, file.errorString()); + PRINTB("Failed to open file for writing: %s (%s)", this->fileName.toStdString() % file.errorString().toStdString()); } else { QTextStream(&file) << this->editor->toPlainText(); - PRINTA("Saved design `%1'.", this->fileName); + PRINTB("Saved design '%s'.", this->fileName.toStdString()); this->editor->setContentModified(false); } clearCurrentOutput(); @@ -1174,31 +1174,31 @@ void MainWindow::actionRenderCGALDone(CGAL_Nef_polyhedron *root_N) CGALCache::instance()->print(); if (root_N->dim == 2) { - PRINTF(" Top level object is a 2D object:"); - PRINTF(" Empty: %6s", root_N->p2->is_empty() ? "yes" : "no"); - PRINTF(" Plane: %6s", root_N->p2->is_plane() ? "yes" : "no"); - PRINTF(" Vertices: %6d", (int)root_N->p2->explorer().number_of_vertices()); - PRINTF(" Halfedges: %6d", (int)root_N->p2->explorer().number_of_halfedges()); - PRINTF(" Edges: %6d", (int)root_N->p2->explorer().number_of_edges()); - PRINTF(" Faces: %6d", (int)root_N->p2->explorer().number_of_faces()); - PRINTF(" FaceCycles: %6d", (int)root_N->p2->explorer().number_of_face_cycles()); - PRINTF(" ConnComp: %6d", (int)root_N->p2->explorer().number_of_connected_components()); + PRINT(" Top level object is a 2D object:"); + PRINTB(" Empty: %6s", (root_N->p2->is_empty() ? "yes" : "no")); + PRINTB(" Plane: %6s", (root_N->p2->is_plane() ? "yes" : "no")); + PRINTB(" Vertices: %6d", root_N->p2->explorer().number_of_vertices()); + PRINTB(" Halfedges: %6d", root_N->p2->explorer().number_of_halfedges()); + PRINTB(" Edges: %6d", root_N->p2->explorer().number_of_edges()); + PRINTB(" Faces: %6d", root_N->p2->explorer().number_of_faces()); + PRINTB(" FaceCycles: %6d", root_N->p2->explorer().number_of_face_cycles()); + PRINTB(" ConnComp: %6d", root_N->p2->explorer().number_of_connected_components()); } if (root_N->dim == 3) { - PRINTF(" Top level object is a 3D object:"); - PRINTF(" Simple: %6s", root_N->p3->is_simple() ? "yes" : "no"); - PRINTF(" Valid: %6s", root_N->p3->is_valid() ? "yes" : "no"); - PRINTF(" Vertices: %6d", (int)root_N->p3->number_of_vertices()); - PRINTF(" Halfedges: %6d", (int)root_N->p3->number_of_halfedges()); - PRINTF(" Edges: %6d", (int)root_N->p3->number_of_edges()); - PRINTF(" Halffacets: %6d", (int)root_N->p3->number_of_halffacets()); - PRINTF(" Facets: %6d", (int)root_N->p3->number_of_facets()); - PRINTF(" Volumes: %6d", (int)root_N->p3->number_of_volumes()); + PRINT(" Top level object is a 3D object:"); + PRINTB(" Simple: %6s", (root_N->p3->is_simple() ? "yes" : "no")); + PRINTB(" Valid: %6s", (root_N->p3->is_valid() ? "yes" : "no")); + PRINTB(" Vertices: %6d", root_N->p3->number_of_vertices()); + PRINTB(" Halfedges: %6d", root_N->p3->number_of_halfedges()); + PRINTB(" Edges: %6d", root_N->p3->number_of_edges()); + PRINTB(" Halffacets: %6d", root_N->p3->number_of_halffacets()); + PRINTB(" Facets: %6d", root_N->p3->number_of_facets()); + PRINTB(" Volumes: %6d", root_N->p3->number_of_volumes()); } int s = this->progresswidget->elapsedTime() / 1000; - PRINTF("Total rendering time: %d hours, %d minutes, %d seconds", s / (60*60), (s / 60) % 60, s % 60); + PRINTB("Total rendering time: %d hours, %d minutes, %d seconds", (s / (60*60)) % ((s / 60) % 60) % (s % 60)); this->root_N = root_N; if (!this->root_N->empty()) { @@ -1313,21 +1313,21 @@ void MainWindow::actionExportSTLorOFF(bool) this->fileName.isEmpty() ? "Untitled"+suffix : QFileInfo(this->fileName).baseName()+suffix, stl_mode ? "STL Files (*.stl)" : "OFF Files (*.off)"); if (stl_filename.isEmpty()) { - PRINTF("No filename specified. %s export aborted.", stl_mode ? "STL" : "OFF"); + PRINTB("No filename specified. %s export aborted.", (stl_mode ? "STL" : "OFF")); clearCurrentOutput(); return; } std::ofstream fstream(stl_filename.toUtf8()); if (!fstream.is_open()) { - PRINTA("Can't open file \"%1\" for export", stl_filename); + PRINTB("Can't open file \"%s\" for export", stl_filename.toStdString()); } else { if (stl_mode) export_stl(this->root_N, fstream); else export_off(this->root_N, fstream); fstream.close(); - PRINTF("%s export finished.", stl_mode ? "STL" : "OFF"); + PRINTB("%s export finished.", (stl_mode ? "STL" : "OFF")); } clearCurrentOutput(); @@ -1366,19 +1366,19 @@ void MainWindow::actionExportDXF() this->fileName.isEmpty() ? "Untitled.dxf" : QFileInfo(this->fileName).baseName()+".dxf", "DXF Files (*.dxf)"); if (dxf_filename.isEmpty()) { - PRINTF("No filename specified. DXF export aborted."); + PRINT("No filename specified. DXF export aborted."); clearCurrentOutput(); return; } std::ofstream fstream(dxf_filename.toUtf8()); if (!fstream.is_open()) { - PRINTA("Can't open file \"%s\" for export", dxf_filename); + PRINTB("Can't open file \"%s\" for export", dxf_filename.toStdString()); } else { export_dxf(this->root_N, fstream); fstream.close(); - PRINTF("DXF export finished."); + PRINT("DXF export finished."); } clearCurrentOutput(); @@ -1399,19 +1399,19 @@ void MainWindow::actionExportCSG() this->fileName.isEmpty() ? "Untitled.csg" : QFileInfo(this->fileName).baseName()+".csg", "CSG Files (*.csg)"); if (csg_filename.isEmpty()) { - PRINTF("No filename specified. CSG export aborted."); + PRINT("No filename specified. CSG export aborted."); clearCurrentOutput(); return; } std::ofstream fstream(csg_filename.toUtf8()); if (!fstream.is_open()) { - PRINTA("Can't open file \"%s\" for export", csg_filename); + PRINTB("Can't open file \"%s\" for export", csg_filename.toStdString()); } else { fstream << this->tree.getString(*this->root_node) << "\n"; fstream.close(); - PRINTF("CSG export finished."); + PRINT("CSG export finished."); } clearCurrentOutput(); @@ -1425,7 +1425,7 @@ void MainWindow::actionExportImage() QString img_filename = QFileDialog::getSaveFileName(this, "Export Image", "", "PNG Files (*.png)"); if (img_filename.isEmpty()) { - PRINTF("No filename specified. Image export aborted."); + PRINT("No filename specified. Image export aborted."); clearCurrentOutput(); return; } diff --git a/src/module.cc b/src/module.cc index ba0112d..6641ff7 100644 --- a/src/module.cc +++ b/src/module.cc @@ -93,7 +93,7 @@ AbstractNode *ModuleInstantiation::evaluate(const Context *ctx) const { AbstractNode *node = NULL; if (this->ctx) { - PRINTF("WARNING: Ignoring recursive module instantiation of '%s'.", modname.c_str()); + PRINTB("WARNING: Ignoring recursive module instantiation of '%s'.", modname); } else { // FIXME: Casting away const.. ModuleInstantiation *that = (ModuleInstantiation*)this; diff --git a/src/openscad.cc b/src/openscad.cc index 9d5e44b..c687372 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -292,7 +292,7 @@ int main(int argc, char **argv) fs::current_path(original_path); std::ofstream fstream(csg_output_file); if (!fstream.is_open()) { - PRINTF("Can't open file \"%s\" for export", csg_output_file); + PRINTB("Can't open file \"%s\" for export", csg_output_file); } else { fstream << tree.getString(*root_node) << "\n"; @@ -322,7 +322,7 @@ int main(int argc, char **argv) } std::ofstream fstream(stl_output_file); if (!fstream.is_open()) { - PRINTF("Can't open file \"%s\" for export", stl_output_file); + PRINTB("Can't open file \"%s\" for export", stl_output_file); } else { export_stl(&root_N, fstream); @@ -341,7 +341,7 @@ int main(int argc, char **argv) } std::ofstream fstream(off_output_file); if (!fstream.is_open()) { - PRINTF("Can't open file \"%s\" for export", off_output_file); + PRINTB("Can't open file \"%s\" for export", off_output_file); } else { export_off(&root_N, fstream); @@ -356,7 +356,7 @@ int main(int argc, char **argv) } std::ofstream fstream(dxf_output_file); if (!fstream.is_open()) { - PRINTF("Can't open file \"%s\" for export", dxf_output_file); + PRINTB("Can't open file \"%s\" for export", dxf_output_file); } else { export_dxf(&root_N, fstream); diff --git a/src/parser.y b/src/parser.y index 7e27bfe..15a754b 100644 --- a/src/parser.y +++ b/src/parser.y @@ -559,7 +559,7 @@ int parserlex(void) void yyerror (char const *s) { // FIXME: We leak memory on parser errors... - PRINTF("Parser error in line %d: %s\n", lexerget_lineno(), s); + PRINTB("Parser error in line %d: %s\n", lexerget_lineno() % s); module = NULL; } @@ -593,7 +593,7 @@ AbstractModule *parse(const char *text, const char *path, int debug) Module::ModuleContainer::iterator curr = iter++; curr->second = Module::compile_library(curr->first); if (!curr->second) { - PRINTF("WARNING: Failed to compile library `%s'.", curr->first.c_str()); + PRINTB("WARNING: Failed to compile library '%s'.", curr->first); module->usedlibs.erase(curr); } } @@ -615,7 +615,7 @@ Module *Module::compile_library(const std::string &filename) std::string cache_id = idstream.str(); if (libs_cache.find(filename) != libs_cache.end() && libs_cache[filename].cache_id == cache_id) { - PRINTF("%s", libs_cache[filename].msg.c_str()); + PRINTB("%s", libs_cache[filename].msg); return &(*libs_cache[filename].mod); } @@ -635,7 +635,7 @@ Module *Module::compile_library(const std::string &filename) print_messages_push(); - PRINTF("Compiling library `%s'.", filename.c_str()); + PRINTB("Compiling library '%s'.", filename); libs_cache_ent e = { NULL, cache_id, std::string("WARNING: Library `") + filename + "' tries to recursively use itself!" }; if (libs_cache.find(filename) != libs_cache.end()) delete libs_cache[filename].mod; diff --git a/src/primitives.cc b/src/primitives.cc index 466a0c7..feaa1a4 100644 --- a/src/primitives.cc +++ b/src/primitives.cc @@ -148,11 +148,11 @@ AbstractNode *PrimitiveModule::evaluate(const Context *ctx, const ModuleInstanti node->fa = c.lookup_variable("$fa").num; if (node->fs < F_MINIMUM) { - PRINTF("WARNING: $fs too small - clamping to %f", F_MINIMUM); + PRINTB("WARNING: $fs too small - clamping to %f", F_MINIMUM); node->fs = F_MINIMUM; } if (node->fa < F_MINIMUM) { - PRINTF("WARNING: $fa too small - clamping to %f", F_MINIMUM); + PRINTB("WARNING: $fa too small - clamping to %f", F_MINIMUM); node->fa = F_MINIMUM; } @@ -505,7 +505,7 @@ sphere_next_r2: for (size_t i=0; i<this->points.vec.size(); i++) { double x,y; if (!this->points.vec[i]->getv2(x, y)) { - PRINTF("ERROR: Unable to convert point at index %d to a vec2 of numbers", int(i)); + PRINTB("ERROR: Unable to convert point at index %d to a vec2 of numbers", i); delete p; return NULL; } diff --git a/src/printutils.cc b/src/printutils.cc index 0749587..a8b62aa 100644 --- a/src/printutils.cc +++ b/src/printutils.cc @@ -1,6 +1,5 @@ #include "printutils.h" #include <stdio.h> -#include <QDate> std::list<std::string> print_messages_stack; OutputHandlerFunc *outputhandler = NULL; diff --git a/src/printutils.h b/src/printutils.h index 761e6c8..521682c 100644 --- a/src/printutils.h +++ b/src/printutils.h @@ -4,7 +4,7 @@ #include <string> #include <list> #include <iostream> -#include <QFileInfo> +#include <boost/format.hpp> typedef void (OutputHandlerFunc)(const std::string &msg, void *userdata); extern OutputHandlerFunc *outputhandler; @@ -17,13 +17,9 @@ void print_messages_push(); void print_messages_pop(); void PRINT(const std::string &msg); -#define PRINTF(_fmt, ...) do { QString _m; _m.sprintf(_fmt, ##__VA_ARGS__); PRINT(_m.toStdString()); } while (0) -#define PRINTA(_fmt, ...) do { QString _m = QString(_fmt).arg(__VA_ARGS__); PRINT(_m.toStdString()); } while (0) +#define PRINTB(_fmt, _arg) do { PRINT(str(boost::format(_fmt) % _arg)); } while (0) void PRINT_NOCACHE(const std::string &msg); -#define PRINTF_NOCACHE(_fmt, ...) do { QString _m; _m.sprintf(_fmt, ##__VA_ARGS__); PRINT_NOCACHE(_m.toStdString()); } while (0) -#define PRINTA_NOCACHE(_fmt, ...) do { QString _m = QString(_fmt).arg(__VA_ARGS__); PRINT_NOCACHE(_m.toStdString()); } while (0) - -std::ostream &operator<<(std::ostream &os, const QFileInfo &fi); +#define PRINTB_NOCACHE(_fmt, _arg) do { PRINT_NOCACHE(str(boost::format(_fmt) % _arg)); } while (0) #endif diff --git a/src/projection.cc b/src/projection.cc index a712800..d3e7e94 100644 --- a/src/projection.cc +++ b/src/projection.cc @@ -72,7 +72,7 @@ AbstractNode *ProjectionModule::evaluate(const Context *ctx, const ModuleInstant PolySet *ProjectionNode::evaluate_polyset(PolySetEvaluator *evaluator) const { if (!evaluator) { - PRINTF("WARNING: No suitable PolySetEvaluator found for %s module!", this->name().c_str()); + PRINTB("WARNING: No suitable PolySetEvaluator found for %s module!", this->name()); return NULL; } diff --git a/src/rotateextrude.cc b/src/rotateextrude.cc index 0da30ce..e279cf1 100644 --- a/src/rotateextrude.cc +++ b/src/rotateextrude.cc @@ -67,7 +67,7 @@ AbstractNode *RotateExtrudeModule::evaluate(const Context *ctx, const ModuleInst Value scale = c.lookup_variable("scale", true); if (!file.text.empty()) { - PRINTF("DEPRECATED: Support for reading files in rotate_extrude will be removed in future releases. Use a child import() instead."); + PRINT("DEPRECATED: Support for reading files in rotate_extrude will be removed in future releases. Use a child import() instead."); node->filename = c.getAbsolutePath(file.text); } @@ -93,7 +93,7 @@ AbstractNode *RotateExtrudeModule::evaluate(const Context *ctx, const ModuleInst PolySet *RotateExtrudeNode::evaluate_polyset(PolySetEvaluator *evaluator) const { if (!evaluator) { - PRINTF("WARNING: No suitable PolySetEvaluator found for %s module!", this->name().c_str()); + PRINTB("WARNING: No suitable PolySetEvaluator found for %s module!", this->name()); return NULL; } diff --git a/src/surface.cc b/src/surface.cc index fe1c6aa..e927beb 100644 --- a/src/surface.cc +++ b/src/surface.cc @@ -100,7 +100,7 @@ PolySet *SurfaceNode::evaluate_polyset(class PolySetEvaluator *) const std::ifstream stream(filename.c_str()); if (!stream.good()) { - PRINTF("WARNING: Can't open DAT file `%s'.", filename.c_str()); + PRINTB("WARNING: Can't open DAT file '%s'.", filename); return NULL; } @@ -132,7 +132,7 @@ PolySet *SurfaceNode::evaluate_polyset(class PolySetEvaluator *) const } catch (boost::bad_lexical_cast &blc) { if (!stream.eof()) { - PRINTF("WARNING: Illegal value in '%s': %s", filename.c_str(), blc.what()); + PRINTB("WARNING: Illegal value in '%s': %s", filename % blc.what()); } break; } diff --git a/tests/regression/echotest/dim-all-expected.txt b/tests/regression/echotest/dim-all-expected.txt index 60f36d5..a16c580 100644 --- a/tests/regression/echotest/dim-all-expected.txt +++ b/tests/regression/echotest/dim-all-expected.txt @@ -1,16 +1,16 @@ -WARNING: Unsupported DXF Entity `LEADER' (1) in `dim-all.dxf'. +WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: linearX = 51.44957554275 -WARNING: Unsupported DXF Entity `LEADER' (1) in `dim-all.dxf'. +WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: linearY = 29.13025467434 -WARNING: Unsupported DXF Entity `LEADER' (1) in `dim-all.dxf'. +WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: aligned = 60 -WARNING: Unsupported DXF Entity `LEADER' (1) in `dim-all.dxf'. +WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: ordinateX = -49.17542445724 -WARNING: Unsupported DXF Entity `LEADER' (1) in `dim-all.dxf'. +WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: ordinateY = 30.86974532565 -WARNING: Unsupported DXF Entity `LEADER' (1) in `dim-all.dxf'. +WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: radius = 60 -WARNING: Unsupported DXF Entity `LEADER' (1) in `dim-all.dxf'. +WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: diameter = 120 -WARNING: Unsupported DXF Entity `LEADER' (1) in `dim-all.dxf'. +WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: arc = 59.03624346792 |