__attribute__((used)) char* vizRenderFromString(const char *string, const char *format, const char *engine) { Agraph_t *graph; char *result; unsigned int length; if (context == NULL) { context = gvContext(); gvAddLibrary(context, &gvplugin_core_LTX_library); gvAddLibrary(context, &gvplugin_dot_layout_LTX_library); gvAddLibrary(context, &gvplugin_neato_layout_LTX_library); } graph = agmemread((char *) string); gvLayout(context, graph, engine); gvRenderData(context, graph, format, &result, &length); gvFreeLayout(context, graph); agclose(graph); return result; }
// render to a malloc'ed data string, to be free'd by caller. char* renderdata(Agraph_t *g, const char *format) { int err; char *data; unsigned int length; if (!g) return NULL; err = gvRenderData(gvc, g, format, &data, &length); if (err) return NULL; data = (char*)realloc(data, length + 1); return data; }
static bool GenDrawFormatFile(Digraph& dg, VNG_Param& param, const string& fmt, char** result, unsigned int* length) { GVC_t* gvc = gvContext(); //创建图 Agraph_t* g = CreateGraph(dg, param); gvLayout(gvc,g,"dot"); //写入到缓存数组中 gvRenderData(gvc,g,fmt.c_str(), result, length); //gvFreeRenderData(result); gvFreeLayout(gvc,g); agclose(g); // gvfreecontext函数返回错误个数 // 错误数为0表示没有问题 return (gvFreeContext(gvc) == 0); }
GraphVizUtils::VerticesCoordinates GraphVizUtils::getVerticesCoordinates( GraphIF * graph, GraphVizEngine layoutEngine, GraphDimmention graphMaxWidth, GraphDimmention graphMaxHeight) { GVC_t *gvc { }; Agraph_t *g { }; std::string dotFormatedGraph { }; char * graphRenderedData { }; unsigned int length { }; VerticesCoordinates verticesCoordinates { }; std::stringstream ss { }; gvc = gvContext(); dotFormatedGraph = OutputUtils::impl::DOT::exportGraph(graph); g = agmemread(dotFormatedGraph.c_str()); gvLayout(gvc, g, EnumUtils::getGraphVizEngineString(layoutEngine)); gvRenderData(gvc, g, "plain", &graphRenderedData, &length); ss << graphRenderedData; switch (layoutEngine) { case GraphVizEngine::DOT: break; case GraphVizEngine::NEATO: verticesCoordinates = GraphVizUtils::impl::getVerticesCoordinatesAsNeato(ss, graph->getNumberOfVertices(), graphMaxWidth, graphMaxHeight); break; default: break; } gvFreeRenderData(graphRenderedData); gvFreeLayout(gvc, g); agclose(g); gvFreeContext(gvc); return verticesCoordinates; }
__attribute__((used)) char* vizRenderFromString(char *string, char *format) { GVC_t *context = gvContext(); gvAddLibrary(context, &gvplugin_core_LTX_library); gvAddLibrary(context, &gvplugin_dot_layout_LTX_library); Agraph_t *graph = agmemread(string); gvLayout(context, graph, "dot"); char *result; unsigned int length; gvRenderData(context, graph, format, &result, &length); gvFreeLayout(context, graph); agclose(graph); gvFinalize(context); gvFreeContext(context); return result; }