2017-07-20 10 views
0

有効なGraphViz /ドットグラフの構文を含むC++ Qtアプリケーション(Ubuntu上)に文字列があります。私は様々なオンラインツール(このようなもの:http://www.webgraphviz.com/)が吐き出されたイメージに似た、このテキストからイメージファイル/オブジェクトを生成したいと思います。たぶん私は間違った検索用語を使用しているかもしれませんが、私はこれに関連するヘルプを見つけることができないようです。GraphVizグラフの画像をドットテキストで生成するC++

私は基本的にしたいことは、このようなものです:

generate_dot_graph_image(std::string dot_text, std::string image_file_path) 

その他の詳細:私は解決策(基本的に元のグラフ未使用のエッジを除去した後)ダイクストラソルバーを持って、私は私の内部で視覚化したいです応用。ソルバーにはすでにソリューションを文字列に変換するオプションが含まれています。これは、上にリンクされたユーティリティなどのユーティリティを使用してドットグラフとして解析できます。しかし、私が望むのは、C++の内部からこれを行うことができることです。

+0

私はあなたが何をしたいかわかりません。コンソールアプリからgraphvizを呼び出そうとしていますか?どのOS? wxWidgets、QT、MFC、およびアプリケーションの表示から – lakeweb

+0

私はLinux(ubuntu)のQTアプリケーションに取り組んでいます。私はDIjkstraソルバーから、私のアプリケーション内で視覚化したい点グラフ(テキスト文字列)としての解を持っています。このために私はそれをイメージに変換する必要があります。 – Ali250

+0

元の質問に追加の詳細を追加しました。 – Ali250

答えて

1

私はGraphVizライブラリを使いたいと思っていました。あなたはsudo apt-get install graphviz-libsudo apt-get install libgraphviz-devを使ってUbuntuにインストールできます。それが終わったらだ:

#include <graphviz/gvc.h> 

bool DotGraphGenerator::saveImage() 
{ 
    std::string o_arg = std::string("-o") + "/path/to/image_file.png"; 
    char* args[] = {const_cast<char*>("dot"), const_cast<char*>("Tpng"), const_cast<char*>("-Gsize=8,4!"), const_cast<char*>("-Gdpi=100"), 
    const_cast<char*>(DOT_TEXT_FILE.c_str()), //DOT_TEXT_FILE is the file path in which the graph is saved as valid DOT syntax 
    const_cast<char*>(o_arg.c_str()) }; 

    const int argc = sizeof(args)/sizeof(args[0]); 
    Agraph_t *g, *prev = NULL; 
    GVC_t *gvc; 

    gvc = gvContext(); 
    gvParseArgs(gvc, argc, args); 

    while ((g = gvNextInputGraph(gvc))) 
    { 
    if (prev) 
    { 
     gvFreeLayout(gvc, prev); 
     agclose(prev); 
    } 
    gvLayoutJobs(gvc, g); 
    gvRenderJobs(gvc, g); 
    prev = g; 
    } 

    return !gvFreeContext(gvc); 
} 

GVCはCライブラリで、関数は、引数として非const C文字列、初めに、したがってconst_castsを取ります。また、-Gsize=8,4-Gdpi=100の引数を変更することによって、イメージサイズを編集することもできます。現在の設定では、8 * 100 x 4 * 100 = 800x400の画像ファイルを取得します。とにかく、これらの引数は、bashからdotコマンドを実行するときに適用するものと同じです。それ以外

は、このコードは、基本的には、ライブラリマニュアルとしてGraphvizの中の例のいずれかからコピーされます。http://www.graphviz.org/pdf/libguide.pdf

関連する問題