diff options
| author | Bob Jamison <ishmalius@gmail.com> | 2008-08-10 19:52:42 +0000 |
|---|---|---|
| committer | ishmal <ishmal@users.sourceforge.net> | 2008-08-10 19:52:42 +0000 |
| commit | 1cab8dabb11ed50bc67da97ad002a1e481cfefc7 (patch) | |
| tree | b47a456e1674d4bed77227ba3a4a9edd34bd06e5 /src/extension/internal/pov-out.cpp | |
| parent | Fix for ID clash resolution: avoid finding spurious references associated wit... (diff) | |
| download | inkscape-1cab8dabb11ed50bc67da97ad002a1e481cfefc7.tar.gz inkscape-1cab8dabb11ed50bc67da97ad002a1e481cfefc7.zip | |
clean up code slightly
(bzr r6604)
Diffstat (limited to 'src/extension/internal/pov-out.cpp')
| -rw-r--r-- | src/extension/internal/pov-out.cpp | 129 |
1 files changed, 64 insertions, 65 deletions
diff --git a/src/extension/internal/pov-out.cpp b/src/extension/internal/pov-out.cpp index ea746eae7..6b8a5ce07 100644 --- a/src/extension/internal/pov-out.cpp +++ b/src/extension/internal/pov-out.cpp @@ -48,33 +48,26 @@ namespace Internal { - - //######################################################################## -//# U T I L I T Y +//# M E S S A G E S //######################################################################## - - -/** - * This function searches the Repr tree recursively from the given node, - * and adds refs to all nodes with the given name, to the result vector - */ -static void -findElementsByTagName(std::vector<Inkscape::XML::Node *> &results, - Inkscape::XML::Node *node, - char const *name) +static void err(const char *fmt, ...) { - if ( !name || strcmp(node->name(), name) == 0 ) - results.push_back(node); + va_list args; + g_log(NULL, G_LOG_LEVEL_WARNING, "Pov-out err: "); + va_start(args, fmt); + g_logv(NULL, G_LOG_LEVEL_WARNING, fmt, args); + va_end(args); + g_log(NULL, G_LOG_LEVEL_WARNING, "\n"); +} - for (Inkscape::XML::Node *child = node->firstChild() ; child ; - child = child->next()) - findElementsByTagName( results, child, name ); -} +//######################################################################## +//# U T I L I T Y +//######################################################################## @@ -112,7 +105,7 @@ static PovOutput::String dstr(double d) return s; } - +#define DSTR(d) (dstr(d).c_str()) /** @@ -137,7 +130,7 @@ void PovOutput::out(const char *fmt, ...) */ void PovOutput::vec2(double a, double b) { - out("<%s, %s>", dstr(a).c_str(), dstr(b).c_str()); + out("<%s, %s>", DSTR(a), DSTR(b)); } @@ -147,7 +140,7 @@ void PovOutput::vec2(double a, double b) */ void PovOutput::vec3(double a, double b, double c) { - out("<%s, %s, %s>", dstr(a).c_str(), dstr(b).c_str(), dstr(c).c_str()); + out("<%s, %s, %s>", DSTR(a), DSTR(b), DSTR(c)); } @@ -157,8 +150,7 @@ void PovOutput::vec3(double a, double b, double c) */ void PovOutput::vec4(double a, double b, double c, double d) { - out("<%s, %s, %s, %s>", dstr(a).c_str(), dstr(b).c_str(), - dstr(c).c_str(), dstr(d).c_str()); + out("<%s, %s, %s, %s>", DSTR(a), DSTR(b), DSTR(c), DSTR(d)); } @@ -208,7 +200,7 @@ bool PovOutput::doHeader() out("/*###################################################################\n"); out("### This PovRay document was generated by Inkscape\n"); out("### http://www.inkscape.org\n"); - out("### Created: %s", ctime(&tim)); + out("### Created: %s", ctime(&tim)); out("### Version: %s\n", INKSCAPE_VERSION); out("#####################################################################\n"); out("### NOTES:\n"); @@ -374,7 +366,7 @@ bool PovOutput::doCurve(SPItem *item, const String &id) } else { - g_warning("logical error, because pathv_to_linear_and_cubic_beziers was used"); + err("logical error, because pathv_to_linear_and_cubic_beziers was used"); return false; } @@ -395,14 +387,14 @@ bool PovOutput::doCurve(SPItem *item, const String &id) double cminy = cminmax.min()[Y]; double cmaxy = cminmax.max()[Y]; - out("#declare %s_MIN_X = %s;\n", id.c_str(), dstr(cminx).c_str()); - out("#declare %s_CENTER_X = %s;\n", id.c_str(), dstr((cmaxx+cminx)/2.0).c_str()); - out("#declare %s_MAX_X = %s;\n", id.c_str(), dstr(cmaxx).c_str()); - out("#declare %s_WIDTH = %s;\n", id.c_str(), dstr(cmaxx-cminx).c_str()); - out("#declare %s_MIN_Y = %s;\n", id.c_str(), dstr(cminy).c_str()); - out("#declare %s_CENTER_Y = %s;\n", id.c_str(), dstr((cmaxy+cminy)/2.0).c_str()); - out("#declare %s_MAX_Y = %s;\n", id.c_str(), dstr(cmaxy).c_str()); - out("#declare %s_HEIGHT = %s;\n", id.c_str(), dstr(cmaxy-cminy).c_str()); + out("#declare %s_MIN_X = %s;\n", id.c_str(), DSTR(cminx)); + out("#declare %s_CENTER_X = %s;\n", id.c_str(), DSTR((cmaxx+cminx)/2.0)); + out("#declare %s_MAX_X = %s;\n", id.c_str(), DSTR(cmaxx)); + out("#declare %s_WIDTH = %s;\n", id.c_str(), DSTR(cmaxx-cminx)); + out("#declare %s_MIN_Y = %s;\n", id.c_str(), DSTR(cminy)); + out("#declare %s_CENTER_Y = %s;\n", id.c_str(), DSTR((cmaxy+cminy)/2.0)); + out("#declare %s_MAX_Y = %s;\n", id.c_str(), DSTR(cmaxy)); + out("#declare %s_HEIGHT = %s;\n", id.c_str(), DSTR(cmaxy-cminy)); if (shapeInfo.color.length()>0) out("#declare %s_COLOR = %s;\n", id.c_str(), shapeInfo.color.c_str()); @@ -423,30 +415,36 @@ bool PovOutput::doCurve(SPItem *item, const String &id) } /** - * Output the curve data to buffer + * Descend the svg tree recursively, translating data */ -bool PovOutput::doCurvesRecursive(SPDocument *doc, Inkscape::XML::Node *node) +bool PovOutput::doTreeRecursive(SPDocument *doc, SPObject *obj) { - /** - * If the object is an Item, try processing it - */ - char *str = (char *) node->attribute("id"); - SPObject *reprobj = doc->getObjectByRepr(node); - if (SP_IS_ITEM(reprobj) && str) + + String id; + if (!obj->id) { - SPItem *item = SP_ITEM(reprobj); - String id = str; + char buf[16]; + sprintf(buf, "id%d", idIndex++); + id = buf; + } + else + { + id = obj->id; + } + + if (SP_IS_ITEM(obj)) + { + SPItem *item = SP_ITEM(obj); if (!doCurve(item, id)) return false; } /** * Descend into children - */ - for (Inkscape::XML::Node *child = node->firstChild() ; child ; - child = child->next()) + */ + for (SPObject *child = obj->firstChild() ; child ; child = child->next) { - if (!doCurvesRecursive(doc, child)) + if (!doTreeRecursive(doc, child)) return false; } @@ -456,7 +454,7 @@ bool PovOutput::doCurvesRecursive(SPDocument *doc, Inkscape::XML::Node *node) /** * Output the curve data to buffer */ -bool PovOutput::doCurves(SPDocument *doc) +bool PovOutput::doTree(SPDocument *doc) { double bignum = 1000000.0; minx = bignum; @@ -464,7 +462,7 @@ bool PovOutput::doCurves(SPDocument *doc) miny = bignum; maxy = -bignum; - if (!doCurvesRecursive(doc, doc->rroot)) + if (!doTreeRecursive(doc, doc->root)) return false; //## Let's make a union of all of the Shapes @@ -511,7 +509,7 @@ bool PovOutput::doCurves(SPDocument *doc) out(" * Allow the user to redefine the Z-Increment\n"); out(" */\n"); out("#ifndef (AllShapes_Z_Increment)\n"); - out("#declare AllShapes_Z_Increment = %s;\n", dstr(zinc).c_str()); + out("#declare AllShapes_Z_Increment = %s;\n", DSTR(zinc)); out("#end\n"); out("\n"); out("#declare AllShapes_Z_Scale = 1.0;\n"); @@ -536,14 +534,14 @@ bool PovOutput::doCurves(SPDocument *doc) out("}\n"); - out("#declare %s_MIN_X = %s;\n", pfx, dstr(minx).c_str()); - out("#declare %s_CENTER_X = %s;\n", pfx, dstr((maxx+minx)/2.0).c_str()); - out("#declare %s_MAX_X = %s;\n", pfx, dstr(maxx).c_str()); - out("#declare %s_WIDTH = %s;\n", pfx, dstr(maxx-minx).c_str()); - out("#declare %s_MIN_Y = %s;\n", pfx, dstr(miny).c_str()); - out("#declare %s_CENTER_Y = %s;\n", pfx, dstr((maxy+miny)/2.0).c_str()); - out("#declare %s_MAX_Y = %s;\n", pfx, dstr(maxy).c_str()); - out("#declare %s_HEIGHT = %s;\n", pfx, dstr(maxy-miny).c_str()); + out("#declare %s_MIN_X = %s;\n", pfx, DSTR(minx)); + out("#declare %s_CENTER_X = %s;\n", pfx, DSTR((maxx+minx)/2.0)); + out("#declare %s_MAX_X = %s;\n", pfx, DSTR(maxx)); + out("#declare %s_WIDTH = %s;\n", pfx, DSTR(maxx-minx)); + out("#declare %s_MIN_Y = %s;\n", pfx, DSTR(miny)); + out("#declare %s_CENTER_Y = %s;\n", pfx, DSTR((maxy+miny)/2.0)); + out("#declare %s_MAX_Y = %s;\n", pfx, DSTR(maxy)); + out("#declare %s_HEIGHT = %s;\n", pfx, DSTR(maxy-miny)); out("/*##############################################\n"); out("### end %s\n", id.c_str()); out("##############################################*/\n"); @@ -568,6 +566,7 @@ void PovOutput::reset() nrNodes = 0; nrSegments = 0; nrShapes = 0; + idIndex = 0; outbuf.clear(); povShapes.clear(); } @@ -583,9 +582,9 @@ void PovOutput::saveDocument(SPDocument *doc, gchar const *uri) //###### SAVE IN POV FORMAT TO BUFFER //# Lets do the curves first, to get the stats - if (!doCurves(doc)) + if (!doTree(doc)) { - g_warning("Could not output curves for %s\n", uri); + err("Could not output curves for %s", uri); return; } @@ -594,7 +593,7 @@ void PovOutput::saveDocument(SPDocument *doc, gchar const *uri) if (!doHeader()) { - g_warning("Could not write header for %s\n", uri); + err("Could not write header for %s", uri); return; } @@ -602,7 +601,7 @@ void PovOutput::saveDocument(SPDocument *doc, gchar const *uri) if (!doTail()) { - g_warning("Could not write footer for %s\n", uri); + err("Could not write footer for %s", uri); return; } @@ -641,7 +640,7 @@ void PovOutput::saveDocument(SPDocument *doc, gchar const *uri) * API call to save document */ void -PovOutput::save(Inkscape::Extension::Output *mod, +PovOutput::save(Inkscape::Extension::Output */*mod*/, SPDocument *doc, gchar const *uri) { saveDocument(doc, uri); @@ -652,7 +651,7 @@ PovOutput::save(Inkscape::Extension::Output *mod, /** * Make sure that we are in the database */ -bool PovOutput::check (Inkscape::Extension::Extension *module) +bool PovOutput::check (Inkscape::Extension::Extension */*module*/) { /* We don't need a Key if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_OUTPUT_POV)) |
