This patch adds the command line switch --query-all which dumps id,x,y,w,h for all objects with an Id.
Index: main.cpp =================================================================== --- main.cpp (revision 16644) +++ main.cpp (working copy) @@ -148,6 +148,7 @@ SP_ARG_QUERY_Y, SP_ARG_QUERY_WIDTH, SP_ARG_QUERY_HEIGHT, + SP_ARG_QUERY_ALL, SP_ARG_QUERY_ID, SP_ARG_VERSION, SP_ARG_VACUUM_DEFS, @@ -166,8 +167,9 @@ static void do_export_emf(SPDocument* doc, gchar const* uri, char const *mime); #endif //WIN32 static void do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axis, const gchar *id); +static void do_query_all (SPDocument *doc); +static void do_query_all_recurse (SPObject *o);
- static gchar *sp_global_printer = NULL; static gchar *sp_export_png = NULL; static gchar *sp_export_dpi = NULL; @@ -196,6 +198,7 @@ static gboolean sp_query_y = FALSE; static gboolean sp_query_width = FALSE; static gboolean sp_query_height = FALSE; +static gboolean sp_query_all = FALSE; static gchar *sp_query_id = NULL; static int sp_new_gui = FALSE; static gboolean sp_vacuum_defs = FALSE; @@ -367,6 +370,11 @@ N_("Query the height of the drawing or, if specified, of the object with --query-id"), NULL},
+ {"query-all", 'S', + POPT_ARG_NONE, &sp_query_all, SP_ARG_QUERY_ALL, + N_("List id,x,y,w,h for all objects"), + NULL}, + {"query-id", 'I', POPT_ARG_STRING, &sp_query_id, SP_ARG_QUERY_ID, N_("The ID of the object whose dimensions are queried"), @@ -791,7 +799,9 @@ do_export_emf(doc, sp_export_emf, "image/x-emf"); } #endif //WIN32 - if (sp_query_width || sp_query_height) { + if (sp_query_all) { + do_query_all (doc); + } else if (sp_query_width || sp_query_height) { do_query_dimension (doc, true, sp_query_width? NR::X : NR::Y, sp_query_id); } else if (sp_query_x || sp_query_y) { do_query_dimension (doc, false, sp_query_x? NR::X : NR::Y, sp_query_id); @@ -846,8 +856,45 @@ } }
+static void +do_query_all (SPDocument *doc) +{ + SPObject *o = NULL;
+ o = SP_DOCUMENT_ROOT(doc); + + if (o) { + sp_document_ensure_up_to_date (doc); + do_query_all_recurse(o); + } +} + static void +do_query_all_recurse (SPObject *o) +{ + SPItem *item = ((SPItem *) o); + if (o->id && SP_IS_ITEM(item)) { + NR::Maybe<NR::Rect> area = item->getBounds(sp_item_i2doc_affine(item)); + if (area) { + Inkscape::SVGOStringStream os; + os << o->id; + os << "," << area->min()[NR::X]; + os << "," << area->min()[NR::Y]; + os << "," << area->extent(NR::X); + os << "," << area->extent(NR::Y); + g_print ("%s\n", os.str().c_str()); + } + } + + SPObject *child = o->children; + while (child) { + do_query_all_recurse (child); + child = child->next; + } +} + + +static void sp_do_export_png(SPDocument *doc) { const gchar *filename = NULL;
This patch adds the command line switch --query-all which dumps id,x,y,w,h for all objects with an Id.
Index: main.cpp ======= ======= ======= ======= ======= ======= ======= ======= ==== ARG_QUERY_ Y, ARG_QUERY_ WIDTH, ARG_QUERY_ HEIGHT, ARG_QUERY_ ID, ARG_VERSION, ARG_VACUUM_ DEFS, emf(SPDocument* doc, gchar const* uri, char const *mime); all_recurse (SPObject *o);
=======
--- main.cpp (revision 16644)
+++ main.cpp (working copy)
@@ -148,6 +148,7 @@
SP_
SP_
SP_
+ SP_ARG_QUERY_ALL,
SP_
SP_
SP_
@@ -166,8 +167,9 @@
static void do_export_
#endif //WIN32
static void do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axis, const gchar *id);
+static void do_query_all (SPDocument *doc);
+static void do_query_
-
static gchar *sp_global_printer = NULL;
static gchar *sp_export_png = NULL;
static gchar *sp_export_dpi = NULL;
@@ -196,6 +198,7 @@
static gboolean sp_query_y = FALSE;
static gboolean sp_query_width = FALSE;
static gboolean sp_query_height = FALSE;
+static gboolean sp_query_all = FALSE;
static gchar *sp_query_id = NULL;
static int sp_new_gui = FALSE;
static gboolean sp_vacuum_defs = FALSE;
@@ -367,6 +370,11 @@
N_("Query the height of the drawing or, if specified, of the object with --query-id"),
NULL},
+ {"query-all", 'S', ARG_STRING, &sp_query_id, SP_ARG_QUERY_ID,
do_export_ emf(doc, sp_export_emf, "image/x-emf");
do_query_ dimension (doc, true, sp_query_width? NR::X : NR::Y, sp_query_id);
do_query_ dimension (doc, false, sp_query_x? NR::X : NR::Y, sp_query_id);
+ POPT_ARG_NONE, &sp_query_all, SP_ARG_QUERY_ALL,
+ N_("List id,x,y,w,h for all objects"),
+ NULL},
+
{"query-id", 'I',
POPT_
N_("The ID of the object whose dimensions are queried"),
@@ -791,7 +799,9 @@
}
#endif //WIN32
- if (sp_query_width || sp_query_height) {
+ if (sp_query_all) {
+ do_query_all (doc);
+ } else if (sp_query_width || sp_query_height) {
} else if (sp_query_x || sp_query_y) {
@@ -846,8 +856,45 @@
}
}
+static void
+do_query_all (SPDocument *doc)
+{
+ SPObject *o = NULL;
+ o = SP_DOCUMENT_ ROOT(doc) ; ensure_ up_to_date (doc); all_recurse( o); all_recurse (SPObject *o) (sp_item_ i2doc_affine( item)); :SVGOStringStre am os; NR::X); NR::Y); all_recurse (child); export_ png(SPDocument *doc)
+
+ if (o) {
+ sp_document_
+ do_query_
+ }
+}
+
static void
+do_query_
+{
+ SPItem *item = ((SPItem *) o);
+ if (o->id && SP_IS_ITEM(item)) {
+ NR::Maybe<NR::Rect> area = item->getBounds
+ if (area) {
+ Inkscape:
+ os << o->id;
+ os << "," << area->min()[NR::X];
+ os << "," << area->min()[NR::Y];
+ os << "," << area->extent(
+ os << "," << area->extent(
+ g_print ("%s\n", os.str().c_str());
+ }
+ }
+
+ SPObject *child = o->children;
+ while (child) {
+ do_query_
+ child = child->next;
+ }
+}
+
+
+static void
sp_do_
{
const gchar *filename = NULL;