void write_header(const osmium::io::Header& header) override final { std::string out = "<?xml version='1.0' encoding='UTF-8'?>\n"; if (m_file.is_true("xml_change_format")) { out += "<osmChange version=\"0.6\" generator=\""; xml_string(out, header.get("generator").c_str()); out += "\">\n"; } else { out += "<osm version=\"0.6\""; std::string xml_josm_upload = header.get("xml_josm_upload"); if (xml_josm_upload == "true" || xml_josm_upload == "false") { out += " upload=\""; out += xml_josm_upload; out += "\""; } out += " generator=\""; xml_string(out, header.get("generator").c_str()); out += "\">\n"; } for (const auto& box : header.boxes()) { out += " <bounds"; oprintf(out, " minlon=\"%.7f\"", box.bottom_left().lon()); oprintf(out, " minlat=\"%.7f\"", box.bottom_left().lat()); oprintf(out, " maxlon=\"%.7f\"", box.top_right().lon()); oprintf(out, " maxlat=\"%.7f\"/>\n", box.top_right().lat()); } std::promise<std::string> promise; m_output_queue.push(promise.get_future()); promise.set_value(std::move(out)); }
static void map_begin_page(GVJ_t * job) { obj_state_t *obj = job->obj; char *s; switch (job->render.id) { case FORMAT_IMAP: core_fputs(job, "base referer\n"); if (obj->url && obj->url[0]) { core_fputs(job, "default "); core_fputs(job, xml_string(obj->url)); core_fputs(job, "\n"); } break; case FORMAT_ISMAP: if (obj->url && obj->url[0]) { core_fputs(job, "default "); core_fputs(job, xml_string(obj->url)); core_fputs(job, " "); core_fputs(job, xml_string(obj->u.g->name)); core_fputs(job, "\n"); } break; case FORMAT_CMAPX: s = xml_string(obj->u.g->name); core_fputs(job, "<map id=\""); core_fputs(job, s); core_fputs(job, "\" name=\""); core_fputs(job, s); core_fputs(job, "\">\n"); break; default: break; } }
static void svg_begin_job(GVJ_t * job) { char *s; gvputs(job, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"); if ((s = agget(job->gvc->g, "stylesheet")) && s[0]) { gvputs(job, "<?xml-stylesheet href=\""); gvputs(job, s); gvputs(job, "\" type=\"text/css\"?>\n"); } #if 0 gvputs(job, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"\n"); gvputs(job, " \"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\""); /* This is to work around a bug in the SVG 1.0 DTD */ gvputs(job, " [\n <!ATTLIST svg xmlns:xlink CDATA #FIXED \"http://www.w3.org/1999/xlink\">\n]"); #else gvputs(job, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n"); gvputs(job, " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"); #endif gvputs(job, "<!-- Generated by "); gvputs(job, xml_string(job->common->info[0])); gvputs(job, " version "); gvputs(job, xml_string(job->common->info[1])); gvputs(job, " ("); gvputs(job, xml_string(job->common->info[2])); gvputs(job, ")\n"); gvputs(job, " -->\n"); }
void write_tags(const osmium::TagList& tags) { for (const auto& tag : tags) { write_prefix(); m_out += " <tag k=\""; xml_string(m_out, tag.key()); m_out += "\" v=\""; xml_string(m_out, tag.value()); m_out += "\"/>\n"; } }
static void svg_begin_cluster(GVJ_t * job) { obj_state_t *obj = job->obj; gvputs(job, "<g id=\""); gvputs(job, xml_string(obj->id)); gvputs(job, "\" class=\"cluster\">"); gvputs(job, "<title>"); gvputs(job, xml_string(agnameof(obj->u.g))); gvputs(job, "</title>\n"); }
static void svg_begin_node(GVJ_t * job) { obj_state_t *obj = job->obj; gvputs(job, "<g id=\""); gvputs(job, xml_string(obj->id)); if (job->layerNum > 1) gvprintf (job, "_%s", xml_string(job->gvc->layerIDs[job->layerNum])); gvputs(job, "\" class=\"node\">"); gvputs(job, "<title>"); gvputs(job, xml_string(agnameof(obj->u.n))); gvputs(job, "</title>\n"); }
static void svg_print_id_class(GVJ_t * job, char* id, char* idx, char* kind, void* obj) { char* str; gvputs(job, "<g id=\""); gvputs(job, xml_string(id)); if (idx) gvprintf (job, "_%s", xml_string(idx)); gvprintf(job, "\" class=\"%s", kind); if ((str = agget(obj, "class")) && *str) { gvputs(job, " "); gvputs(job, xml_string(str)); } gvputs(job, "\""); }
static void svg_begin_edge(GVJ_t * job) { obj_state_t *obj = job->obj; char *ename; gvputs(job, "<g id=\""); gvputs(job, xml_string(obj->id)); gvputs(job, "\" class=\"edge\">"); gvputs(job, "<title>"); ename = strdup_and_subst_obj("\\E", (void *) (obj->u.e)); gvputs(job, xml_string(ename)); free(ename); gvputs(job, "</title>\n"); }
void relation(const osmium::Relation& relation) { if (m_write_change_ops) { open_close_op_tag(relation.visible() ? (relation.version() == 1 ? operation::op_create : operation::op_modify) : operation::op_delete); } write_prefix(); m_out += "<relation"; write_meta(relation); if (relation.tags().empty() && relation.members().empty()) { m_out += "/>\n"; return; } m_out += ">\n"; for (const auto& member : relation.members()) { write_prefix(); m_out += " <member type=\""; m_out += item_type_to_name(member.type()); oprintf(m_out, "\" ref=\"%" PRId64 "\" role=\"", member.ref()); xml_string(m_out, member.role()); m_out += "\"/>\n"; } write_tags(relation.tags()); write_prefix(); m_out += "</relation>\n"; }
static void EmbedText(sdot_op* o, int param) { GLfloat x,y; glColor4f(view->penColor.R,view->penColor.G,view->penColor.B,view->penColor.A); view->Topview->global_z=view->Topview->global_z+o->layer*LAYER_DIFF+0.05; switch (o->op.u.text.align) { case xd_left: x=o->op.u.text.x ; break; case xd_center: x=o->op.u.text.x - o->op.u.text.width / 2.0; break; case xd_right: x=o->op.u.text.x - o->op.u.text.width; break; } y=o->op.u.text.y; if (!o->font) { o->font=glNewFont( view->widgets, xml_string (o->op.u.text.text), &view->penColor, pangotext, font_op->op.u.font.name,font_op->op.u.font.size,0); //glNewFont(glCompSet * s, char *text, glCompColor * c, glCompFontType type, char *fontdesc, int fs)*/ } glCompDrawText3D(o->font,x,y,view->Topview->global_z,o->op.u.text.width,font_op->op.u.font.size); }
void write_meta(const osmium::OSMObject& object) { oprintf(m_out, " id=\"%" PRId64 "\"", object.id()); if (object.version()) { oprintf(m_out, " version=\"%d\"", object.version()); } if (object.timestamp()) { m_out += " timestamp=\""; m_out += object.timestamp().to_iso(); m_out += "\""; } if (!object.user_is_anonymous()) { oprintf(m_out, " uid=\"%d\" user=\"", object.uid()); xml_string(m_out, object.user()); m_out += "\""; } if (object.changeset()) { oprintf(m_out, " changeset=\"%d\"", object.changeset()); } if (m_write_visible_flag) { if (object.visible()) { m_out += " visible=\"true\""; } else { m_out += " visible=\"false\""; } } }
static void svg_begin_layer(GVJ_t * job, char *layername, int layerNum, int numLayers) { gvputs(job, "<g id=\""); gvputs(job, xml_string(layername)); gvputs(job, "\" class=\"layer\">\n"); }
static void svg_begin_graph(GVJ_t * job) { obj_state_t *obj = job->obj; gvputs(job, "<!--"); if (agnameof(obj->u.g)[0]) { gvputs(job, " Title: "); gvputs(job, xml_string(agnameof(obj->u.g))); } gvprintf(job, " Pages: %d -->\n", job->pagesArraySize.x * job->pagesArraySize.y); gvprintf(job, "<svg width=\"%dpt\" height=\"%dpt\"\n", job->width, job->height); gvprintf(job, " viewBox=\"%.2f %.2f %.2f %.2f\"", job->canvasBox.LL.x, job->canvasBox.LL.y, job->canvasBox.UR.x, job->canvasBox.UR.y); /* namespace of svg */ gvputs(job, " xmlns=\"http://www.w3.org/2000/svg\""); /* namespace of xlink */ gvputs(job, " xmlns:xlink=\"http://www.w3.org/1999/xlink\""); gvputs(job, ">\n"); }
bool COfficeFileFormatChecker::isOpenOfficeFlatFormatFile(unsigned char* pBuffer,int dwBytes) { const char *odfFormatLine = "office:document xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\""; std::string xml_string((char*)pBuffer, dwBytes); if (std::string::npos == xml_string.find(odfFormatLine)) { return false; } const char *odtFormatLine = "application/vnd.oasis.opendocument.text"; const char *odsFormatLine = "application/vnd.oasis.opendocument.spreadsheet"; const char *odpFormatLine = "application/vnd.oasis.opendocument.presentation"; if (std::string::npos != xml_string.find(odtFormatLine)) { nFileType = AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT_FLAT; } else if (std::string::npos != xml_string.find(odsFormatLine)) { nFileType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS_FLAT; } else if (std::string::npos != xml_string.find(odpFormatLine)) { nFileType = AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP_FLAT; } if (nFileType != AVS_OFFICESTUDIO_FILE_UNKNOWN) return true; return false; }
bool treeFromUrdfFile(const string& file, Tree& tree,const bool consider_root_link_inertia) { ifstream ifs(file.c_str()); std::string xml_string( (std::istreambuf_iterator<char>(ifs) ), (std::istreambuf_iterator<char>() ) ); return treeFromUrdfString(xml_string,tree,consider_root_link_inertia); }
static void svg_begin_anchor(GVJ_t * job, char *href, char *tooltip, char *target, char *id) { gvputs(job, "<g"); if (id) { gvputs(job, " id=\"a_"); gvputs(job, xml_string(id)); gvputs(job, "\""); } gvputs(job, ">"); gvputs(job, "<a"); #if 0 /* the svg spec implies this can be omitted: http://www.w3.org/TR/SVG/linking.html#Links */ gvputs(job, " xlink:type=\"simple\""); #endif if (href && href[0]) { gvputs(job, " xlink:href=\""); gvputs(job, href); gvputs(job, "\""); } #if 0 /* linking to itself, just so that it can have a xlink:link in the anchor, seems wrong. * it changes the behavior in browsers, the link apears in the bottom information bar */ else { assert(id && id[0]); /* there should always be an id available */ gvputs(job, " xlink:href=\"#"); gvputs(job, xml_url_string(href)); gvputs(job, "\""); } #endif if (tooltip && tooltip[0]) { gvputs(job, " xlink:title=\""); gvputs(job, xml_string0(tooltip, 1)); gvputs(job, "\""); } if (target && target[0]) { gvputs(job, " target=\""); gvputs(job, xml_string(target)); gvputs(job, "\""); } gvputs(job, ">\n"); }
static void svg_begin_cluster(GVJ_t * job) { obj_state_t *obj = job->obj; svg_print_id_class(job, obj->id, NULL, "cluster", obj->u.sg); gvputs(job, ">\n"); gvputs(job, "<title>"); gvputs(job, xml_string(agnameof(obj->u.g))); gvputs(job, "</title>\n"); }
/** * Must be called before the first use of the Crowd Client. */ void crowd_init() { user_xml_name = xml_string("user"); groups_xml_name = xml_string("groups"); group_xml_name = xml_string("group"); name_xml_name = xml_string("name"); token_xml_name = xml_string("token"); session_xml_name = xml_string("session"); cookie_config_xml_name = xml_string("cookie-config"); secure_xml_name = xml_string("secure"); domain_xml_name = xml_string("domain"); if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { fprintf(stderr, PACKAGE_STRING " failed to initialise libcurl."); exit(1); } xmlInitParser(); }
/* svg_begin_page: * Currently, svg output does not support pages. * FIX: If implemented, we must guarantee the id is unique. */ static void svg_begin_page(GVJ_t * job) { obj_state_t *obj = job->obj; /* its really just a page of the graph, but its still a graph, * and it is the entire graph if we're not currently paging */ gvputs(job, "<g id=\""); gvputs(job, xml_string(obj->id)); gvputs(job, "\" class=\"graph\""); gvprintf(job, " transform=\"scale(%g %g) rotate(%d) translate(%g %g)\">\n", job->scale.x, job->scale.y, -job->rotation, job->translation.x, -job->translation.y); /* default style */ if (agnameof(obj->u.g)[0]) { gvputs(job, "<title>"); gvputs(job, xml_string(agnameof(obj->u.g))); gvputs(job, "</title>\n"); } }
bool jointPosLimitsFromUrdfFile(const std::string& file, std::vector<std::string> & joint_names, KDL::JntArray & min, KDL::JntArray & max) { ifstream ifs(file.c_str()); std::string xml_string( (std::istreambuf_iterator<char>(ifs) ), (std::istreambuf_iterator<char>() ) ); return jointPosLimitsFromUrdfString(xml_string,joint_names,min,max); }
static void svg_begin_edge(GVJ_t * job) { obj_state_t *obj = job->obj; char *ename; svg_print_id_class(job, obj->id, NULL, "edge", obj->u.e); gvputs(job, ">\n"); gvputs(job, "<title>"); ename = strdup_and_subst_obj("\\E", (void *) (obj->u.e)); gvputs(job, xml_string(ename)); free(ename); gvputs(job, "</title>\n"); }
static void svg_begin_node(GVJ_t * job) { obj_state_t *obj = job->obj; char* idx; if (job->layerNum > 1) idx = job->gvc->layerIDs[job->layerNum]; else idx = NULL; svg_print_id_class(job, obj->id, idx, "node", obj->u.n); gvputs(job, ">\n"); gvputs(job, "<title>"); gvputs(job, xml_string(agnameof(obj->u.n))); gvputs(job, "</title>\n"); }
void changeset(const osmium::Changeset& changeset) { write_prefix(); m_out += "<changeset"; oprintf(m_out, " id=\"%" PRId32 "\"", changeset.id()); if (changeset.created_at()) { m_out += " created_at=\""; m_out += changeset.created_at().to_iso(); m_out += "\""; } oprintf(m_out, " num_changes=\"%" PRId32 "\"", changeset.num_changes()); if (changeset.closed_at()) { m_out += " closed_at=\""; m_out += changeset.closed_at().to_iso(); m_out += "\" open=\"false\""; } else { m_out += " open=\"true\""; } if (changeset.bounds()) { oprintf(m_out, " min_lon=\"%.7f\"", changeset.bounds().bottom_left().lon_without_check()); oprintf(m_out, " min_lat=\"%.7f\"", changeset.bounds().bottom_left().lat_without_check()); oprintf(m_out, " max_lon=\"%.7f\"", changeset.bounds().top_right().lon_without_check()); oprintf(m_out, " max_lat=\"%.7f\"", changeset.bounds().top_right().lat_without_check()); } if (!changeset.user_is_anonymous()) { m_out += " user=\""; xml_string(m_out, changeset.user()); oprintf(m_out, "\" uid=\"%d\"", changeset.uid()); } if (changeset.tags().empty()) { m_out += "/>\n"; return; } m_out += ">\n"; write_tags(changeset.tags()); write_prefix(); m_out += "</changeset>\n"; }
static void svg_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, int arrow_at_end, int filled) { int gid = 0; obj_state_t *obj = job->obj; if (filled == GRADIENT) { gid = svg_gradstyle(job, A, n); } else if (filled == (RGRADIENT)) { gid = svg_rgradstyle(job, A, n); } gvputs(job, "<path"); if (obj->labeledgealigned) { gvputs(job, " id=\""); gvputs(job, xml_string(obj->id)); gvputs(job, "_p\" "); } svg_grstyle(job, filled, gid); gvputs(job, " d=\""); svg_bzptarray(job, A, n); gvputs(job, "\"/>\n"); }
static boolean pango_textlayout(textpara_t * para, char **fontpath) { static char buf[1024]; /* returned in fontpath, only good until next call */ static PangoFontMap *fontmap; static PangoContext *context; static PangoFontDescription *desc; static char *fontname; static double fontsize; static gv_font_map* gv_fmap; char *fnt, *psfnt = NULL; PangoLayout *layout; PangoRectangle logical_rect; cairo_font_options_t* options; PangoFont *font; #ifdef ENABLE_PANGO_MARKUP PangoAttrList *attrs; GError *error = NULL; int flags; #endif char *text; double textlayout_scale; if (!context) { fontmap = pango_cairo_font_map_new(); gv_fmap = get_font_mapping(fontmap); context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP(fontmap)); options=cairo_font_options_create(); cairo_font_options_set_antialias(options,CAIRO_ANTIALIAS_GRAY); cairo_font_options_set_hint_style(options,CAIRO_HINT_STYLE_FULL); cairo_font_options_set_hint_metrics(options,CAIRO_HINT_METRICS_ON); cairo_font_options_set_subpixel_order(options,CAIRO_SUBPIXEL_ORDER_BGR); pango_cairo_context_set_font_options(context, options); pango_cairo_context_set_resolution(context, FONT_DPI); cairo_font_options_destroy(options); g_object_unref(fontmap); } if (!fontname || strcmp(fontname, para->fontname) != 0 || fontsize != para->fontsize) { fontname = para->fontname; fontsize = para->fontsize; pango_font_description_free (desc); if (para->postscript_alias) { psfnt = fnt = gv_fmap[para->postscript_alias->xfig_code].gv_font; if(!psfnt) psfnt = fnt = pango_psfontResolve (para->postscript_alias); } else fnt = fontname; desc = pango_font_description_from_string(fnt); /* all text layout is done at a scale of FONT_DPI (nominaly 96.) */ pango_font_description_set_size (desc, (gint)(fontsize * PANGO_SCALE)); if (fontpath && (font = pango_font_map_load_font(fontmap, context, desc))) { /* -v support */ const char *fontclass; fontclass = G_OBJECT_CLASS_NAME(G_OBJECT_GET_CLASS(font)); buf[0] = '\0'; if (psfnt) { strcat(buf, "(ps:pango "); strcat(buf, psfnt); strcat(buf, ") "); } strcat(buf, "("); strcat(buf, fontclass); strcat(buf, ") "); #ifdef HAVE_PANGO_FC_FONT_LOCK_FACE if (strcmp(fontclass, "PangoCairoFcFont") == 0) { FT_Face face; PangoFcFont *fcfont; FT_Stream stream; FT_StreamDesc streamdesc; fcfont = PANGO_FC_FONT(font); face = pango_fc_font_lock_face(fcfont); if (face) { strcat(buf, "\""); strcat(buf, face->family_name); strcat(buf, ", "); strcat(buf, face->style_name); strcat(buf, "\" "); stream = face->stream; if (stream) { streamdesc = stream->pathname; if (streamdesc.pointer) strcat(buf, (char*)streamdesc.pointer); else strcat(buf, "*no pathname available*"); } else strcat(buf, "*no stream available*"); } pango_fc_font_unlock_face(fcfont); } else #endif { PangoFontDescription *tdesc; char *tfont; tdesc = pango_font_describe(font); tfont = pango_font_description_to_string(tdesc); strcat(buf, "\""); strcat(buf, tfont); strcat(buf, "\" "); g_free(tfont); } *fontpath = buf; } } #ifdef ENABLE_PANGO_MARKUP if ((para->font) && (flags = para->font->flags)) { unsigned char buf[BUFSIZ]; agxbuf xb; agxbinit(&xb, BUFSIZ, buf); agxbput(&xb,"<span"); if (flags & HTML_BF) agxbput(&xb," weight=\"bold\""); if (flags & HTML_IF) agxbput(&xb," style=\"italic\""); if (flags & HTML_UL) agxbput(&xb," underline=\"single\""); if (flags & HTML_S) agxbput(&xb," strikethrough=\"true\""); agxbput (&xb,">"); if (flags & HTML_SUP) agxbput(&xb,"<sup>"); if (flags & HTML_SUB) agxbput(&xb,"<sub>"); agxbput (&xb,xml_string(para->str)); if (flags & HTML_SUB) agxbput(&xb,"</sub>"); if (flags & HTML_SUP) agxbput(&xb,"</sup>"); agxbput (&xb,"</span>"); if (!pango_parse_markup (agxbuse(&xb), -1, 0, &attrs, &text, NULL, &error)) { fprintf (stderr, "Error - pango_parse_markup: %s\n", error->message); text = para->str; attrs = NULL; } agxbfree (&xb); } else { text = para->str; attrs = NULL; } #else text = para->str; #endif layout = pango_layout_new (context); para->layout = (void *)layout; /* layout free with textpara - see labels.c */ para->free_layout = pango_free_layout; /* function for freeing pango layout */ pango_layout_set_text (layout, text, -1); pango_layout_set_font_description (layout, desc); #ifdef ENABLE_PANGO_MARKUP if (attrs) pango_layout_set_attributes (layout, attrs); #endif pango_layout_get_extents (layout, NULL, &logical_rect); /* if pango doesn't like the font then it sets width=0 but height = garbage */ if (logical_rect.width == 0) logical_rect.height = 0; textlayout_scale = POINTS_PER_INCH / (FONT_DPI * PANGO_SCALE); para->width = (int)(logical_rect.width * textlayout_scale + 1); /* round up so that width/height are never too small */ para->height = (int)(logical_rect.height * textlayout_scale + 1); /* FIXME -- Horrible kluge !!! */ /* For now we are using pango for single line blocks only. * The logical_rect.height seems to be too high from the font metrics on some platforms. * Use an assumed height based on the point size. */ para->height = (int)(para->fontsize * 1.1 + .5); /* The y offset from baseline to 0,0 of the bitmap representation */ #if defined PANGO_VERSION_MAJOR && (PANGO_VERSION_MAJOR >= 1) para->yoffset_layout = pango_layout_get_baseline (layout) * textlayout_scale; #else { /* do it the hard way on rhel5/centos5 */ PangoLayoutIter *iter = pango_layout_get_iter (layout); para->yoffset_layout = pango_layout_iter_get_baseline (iter) * textlayout_scale; } #endif /* The distance below midline for y centering of text strings */ para->yoffset_centerline = 0.2 * para->fontsize; if (logical_rect.width == 0) return FALSE; return TRUE; }
static void svg_textspan(GVJ_t * job, pointf p, textspan_t * span) { obj_state_t *obj = job->obj; PostscriptAlias *pA; char *family = NULL, *weight = NULL, *stretch = NULL, *style = NULL; unsigned int flags; gvputs(job, "<text"); switch (span->just) { case 'l': gvputs(job, " text-anchor=\"start\""); break; case 'r': gvputs(job, " text-anchor=\"end\""); break; default: case 'n': gvputs(job, " text-anchor=\"middle\""); break; } p.y += span->yoffset_centerline; if (!obj->labeledgealigned) gvprintf(job, " x=\"%g\" y=\"%g\"", p.x, -p.y); pA = span->font->postscript_alias; if (pA) { switch (GD_fontnames(job->gvc->g)) { case PSFONTS: family = pA->name; weight = pA->weight; style = pA->style; break; case SVGFONTS: family = pA->svg_font_family; weight = pA->svg_font_weight; style = pA->svg_font_style; break; default: case NATIVEFONTS: family = pA->family; weight = pA->weight; style = pA->style; break; } stretch = pA->stretch; gvprintf(job, " font-family=\"%s", family); if (pA->svg_font_family) gvprintf(job, ",%s", pA->svg_font_family); gvputs(job, "\""); if (weight) gvprintf(job, " font-weight=\"%s\"", weight); if (stretch) gvprintf(job, " font-stretch=\"%s\"", stretch); if (style) gvprintf(job, " font-style=\"%s\"", style); } else gvprintf(job, " font-family=\"%s\"", span->font->name); if ((span->font) && (flags = span->font->flags)) { if ((flags & HTML_BF) && !weight) gvprintf(job, " font-weight=\"bold\""); if ((flags & HTML_IF) && !style) gvprintf(job, " font-style=\"italic\""); if ((flags & (HTML_UL|HTML_S|HTML_OL))) { int comma = 0; gvprintf(job, " text-decoration=\""); if ((flags & HTML_UL)) { gvprintf(job, "underline"); comma = 1; } if ((flags & HTML_OL)) { gvprintf(job, "%soverline", (comma?",":"")); comma = 1; } if ((flags & HTML_S)) gvprintf(job, "%sline-through", (comma?",":"")); gvprintf(job, "\""); } if ((flags & HTML_SUP)) gvprintf(job, " baseline-shift=\"super\""); if ((flags & HTML_SUB)) gvprintf(job, " baseline-shift=\"sub\""); } gvprintf(job, " font-size=\"%.2f\"", span->font->size); switch (obj->pencolor.type) { case COLOR_STRING: if (strcasecmp(obj->pencolor.u.string, "black")) gvprintf(job, " fill=\"%s\"", obj->pencolor.u.string); break; case RGBA_BYTE: gvprintf(job, " fill=\"#%02x%02x%02x\"", obj->pencolor.u.rgba[0], obj->pencolor.u.rgba[1], obj->pencolor.u.rgba[2]); break; default: assert(0); /* internal error */ } gvputs(job, ">"); if (obj->labeledgealigned) { gvprintf (job, "<textPath xlink:href=\"#%s_p\" startOffset=\"50%%\">", xml_string(obj->id)); gvprintf (job, "<tspan x=\"0\" dy=\"%g\">", -p.y); } gvputs(job, xml_string0(span->str, TRUE)); if (obj->labeledgealigned) gvprintf (job, "</tspan></textPath>"); gvputs(job, "</text>\n"); }
void Run::Print(GVJ_t* job, unsigned int index) const { gvprintf(job, "<pp IX='%d'/><cp IX='%d'/>%s\n", index, index, _text ? xml_string(_text) : ""); /* para mark + char mark + actual text */ }
int createModel(std::string model_name, double pos_x, double pos_y, double pos_z, double orient_x, double orient_y, double orient_z, double orient_w, double is_static, std::string path){ /// Сначала сделаем такую штуку // Пусть у нас будет создан узел, РосНод к кторому будем постоянно подключаться чтобы не плоожить нового. //Каждый раз когда функция вызвается будем создавать топик и подключаться к соответствующей службе // Теперь. // Мы начинаем разбирать что е будет делать криэйтМодел() // // Создаем службу к которой будем подключаться с топиком по созданию моделей. // Записываем в структуру что будем отправлять у нас 8 параметров, которые не надо особо преобразовывать, просто правильно записать. // И их будем отправлять. // // Так вот дальше мы смотрим путь до файла. // По идее если мы просто собираем нашу модель, то нам нужно создать строковую переменную в которой сформируем ХМЛ код модели // Создали модель и в сетку столкновений вставляем имя модели с .stl а в визуализацию файл с .dae // Ну и теперь все это собрали и запихиваем // и отправляем через srvice.call() //// Try To Spawn MODELS // string model_name # name of the model to be spawn // string model_xml # this should be an urdf or gazebo xml // string robot_namespace # spawn robot and all ROS interfaces under this namespace // geometry_msgs/Pose initial_pose # only applied to canonical body // string reference_frame # initial_pose is defined relative to the frame of this model/body // # if left empty or "world", then gazebo world frame is used // # if non-existent model/body is specified, an error is returned // # and the model is not spawned // --- // bool success # return true if spawn successful // string status_message # comments if available printf("%s\n","CreateModel Called" ); ros::NodeHandle node_to_spawn_model; ros::ServiceClient service_to_spawn_model = node_to_spawn_model.serviceClient<gazebo_msgs::SpawnModel>("/gazebo/spawn_sdf_model"); gazebo_msgs::SpawnModel new_model_data; geometry_msgs::Pose model_position; model_position.position.x = pos_x; model_position.position.y = pos_y; model_position.position.z = pos_z; model_position.orientation.x = orient_x; model_position.orientation.y = orient_y; model_position.orientation.z = orient_z; model_position.orientation.w = 1.0; ///////////////////////////////////////// FILE CONNECT ///// Connect To Files std::string xml_string(""); FILE* pointer_to_file; pointer_to_file = fopen(path.c_str(), "r+"); if (pointer_to_file != NULL) { // Чтение из файла while(!feof(pointer_to_file)){ char _mystring [100]; fgets (_mystring , 100 , pointer_to_file); xml_string.append(_mystring); } fclose(pointer_to_file); } else { fclose(pointer_to_file); return 2; } ///////////////////////////////////////// // std::string true_str("true"); std::string false_str("false"); int start_pos = xml_string.find("<static>") + STATIC_POSITION_OFFSET; int end_pos = xml_string.find("</static>"); if ( start_pos != std::string::npos){ if (is_static) { xml_string.replace(start_pos, end_pos - start_pos, true_str ); } else { xml_string.replace(start_pos, end_pos - start_pos, false_str ); } } else { std::string static_true_str("<static>true</static>"); std::string static_false_str("<static>false</static>"); start_pos = xml_string.find("</model>"); if (is_static) { xml_string.insert(start_pos, static_true_str ); } else { xml_string.insert(start_pos, static_false_str ); } } ////////////////////////////////////////////////////// new_model_data.request.model_xml = xml_string; new_model_data.request.model_name = model_name; new_model_data.request.initial_pose = model_position; if (service_to_spawn_model.call(new_model_data)) { geometry_msgs::Twist twist; twist.linear.x = 0.0; twist.linear.y = 0.0; twist.linear.z = 0.0; twist.angular.x = 0.0; twist.angular.y = 0.0; twist.angular.z = 0.0; ModelPosition *etalon_model_position = new ModelPosition(model_name, model_position, twist); ros::NodeHandle node_to_get_model_coords; ros::ServiceClient service_to_get_model_coords = node_to_get_model_coords.serviceClient<gazebo_msgs::GetModelState>("/gazebo/get_model_state"); gazebo_msgs::GetModelState model_data; model_data.request.model_name = model_name; usleep(50000); int error_with_model_created = service_to_get_model_coords.call(model_data); ModelPosition *actual_model_position; if (error_with_model_created){ actual_model_position = new ModelPosition(model_name, model_data.response.pose, model_data.response.twist); if (!etalon_model_position->isEqualToEtalon(actual_model_position)) {return 3;} } else{ return 6;} // Test Other Models delete actual_model_position; CHECK_OTHER_MODELS_POSITIONS; gl_map_of_models_positions[model_name] = etalon_model_position; return 0; } else { return 1; } };
static void map_output_shape (GVJ_t *job, map_shape_t map_shape, pointf * AF, int nump, char* url, char *tooltip, char *target) { int i; static point *A; static int size_A; if (!AF || !nump) return; if (size_A < nump) { size_A = nump + 10; A = realloc(A, size_A * sizeof(point)); } for (i = 0; i < nump; i++) PF2P(AF[i], A[i]); if (job->render.id == FORMAT_IMAP && url && url[0]) { switch (map_shape) { case MAP_RECTANGLE: /* Y_GOES_DOWN so need UL to LR */ core_printf(job, "rect %s %d,%d %d,%d\n", url, A[0].x, A[1].y, A[1].x, A[0].y); break; case MAP_CIRCLE: core_printf(job, "circle %s %d,%d,%d\n", url, A[0].x, A[0].y, A[1].x-A[0].x); break; case MAP_POLYGON: core_printf(job, "poly %s", url); for (i = 0; i < nump; i++) core_printf(job, " %d,%d", A[i].x, A[i].y); core_fputs(job, "\n"); break; default: assert(0); break; } } else if (job->render.id == FORMAT_ISMAP && url && url[0]) { switch (map_shape) { case MAP_RECTANGLE: /* Y_GOES_DOWN so need UL to LR */ core_printf(job, "rectangle (%d,%d) (%d,%d) %s %s\n", A[0].x, A[1].y, A[1].x, A[0].y, url, tooltip); break; default: assert(0); break; } } else if (job->render.id == FORMAT_CMAP || job->render.id == FORMAT_CMAPX) { switch (map_shape) { case MAP_CIRCLE: core_fputs(job, "<area shape=\"circle\""); break; case MAP_RECTANGLE: core_fputs(job, "<area shape=\"rect\""); break; case MAP_POLYGON: core_fputs(job, "<area shape=\"poly\""); break; default: assert(0); break; } if (url && url[0]) { core_fputs(job, " href=\""); core_fputs(job, xml_string(url)); core_fputs(job, "\""); } if (target && target[0]) { core_fputs(job, " target=\""); core_fputs(job, xml_string(target)); core_fputs(job, "\""); } if (tooltip && tooltip[0]) { core_fputs(job, " title=\""); core_fputs(job, xml_string(tooltip)); core_fputs(job, "\""); } /* * alt text is intended for the visually impaired, but such * folk are not likely to be clicking around on a graph anyway. * IE on the PC platform (but not on Macs) incorrectly * uses (non-empty) alt strings instead of title strings for tooltips. * To make tooltips work and avoid this IE issue, * while still satisfying usability guidelines * that require that there is always an alt string, * we generate just an empty alt string. */ core_fputs(job, " alt=\"\""); core_fputs(job, " coords=\""); switch (map_shape) { case MAP_CIRCLE: core_printf(job, "%d,%d,%d", A[0].x, A[0].y, A[1].x); break; case MAP_RECTANGLE: /* Y_GOES_DOWN so need UL to LR */ core_printf(job, "%d,%d,%d,%d", A[0].x, A[1].y, A[1].x, A[0].y); break; case MAP_POLYGON: core_printf(job, "%d,%d", A[0].x, A[0].y); for (i = 1; i < nump; i++) core_printf(job, " %d,%d", A[i].x, A[i].y); break; default: break; } if (job->render.id == FORMAT_CMAPX) core_fputs(job, "\"/>\n"); else core_fputs(job, "\">\n"); } }
static void svg_comment(GVJ_t * job, char *str) { gvputs(job, "<!-- "); gvputs(job, xml_string(str)); gvputs(job, " -->\n"); }