2011-11-07 8 views
2

私は格子ライブラリを参照してくださいBoost Geometry 私はそれを見ていますが、少なくとも少しグラフィカルで何かとの作業に関するチュートリアルを参照してください。だから、Nランダムポリゴン(色のサイズと形がランダム)を作成し、thamをベクター画像としてSVGのように作成する簡単なチュートリアルを手伝ってもらえるかなと思いますか?Boost.Geometry:ポリゴンの単純な配列を作成し、thamをsvgイメージとして保存するにはどうすればよいですか?

+0

これは役に立ちます:https://svn.boost.org/trac/boost/wiki/LibrariesUnderConstruction#Boost.Plot – AraK

答えて

9

...解決済み:Googleでthis古いコードを見つけることができます。最新のブースト1.47.0でコンパイルされません。そこでここではとても長い話短い...あなたはそれを修正しようとすると、あなたは、いくつかの時代遅れのドキュメント上の例えばhereを取得したいあなたはそれを動作させるために行うものです:boost/geometry/extensions/io/svg/ため

ダウンロード3コードファイル、それらはヘッダーのみです

、今あなたが現在ブーストコードを更新し、固定されたコンパイルできます

#include <iostream> 
#include <fstream> 
#include <boost/assign.hpp> 

#include <boost/algorithm/string.hpp> 
#include <boost/geometry/geometry.hpp> 
#include <boost/geometry/geometries/geometries.hpp> 
#include <boost/geometry/algorithms/envelope.hpp> 

#include <boost/geometry/extensions/io/svg/svg_mapper.hpp> 

template <typename Geometry1, typename Geometry2> 
void create_svg(std::string const& filename, Geometry1 const& a, Geometry2 const& b) 
{ 
    typedef typename boost::geometry::point_type<Geometry1>::type point_type; 
    std::ofstream svg(filename.c_str()); 

    boost::geometry::svg_mapper<point_type> mapper(svg, 400, 400); 
    mapper.add(a); 
    mapper.add(b); 

    mapper.map(a, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:2"); 
    mapper.map(b, "opacity:0.8;fill:none;stroke:rgb(255,128,0);stroke-width:4;stroke-dasharray:1,7;stroke-linecap:round"); 
} 

int main() 
{ 
    using namespace boost::assign; 


    boost::geometry::model::ring<boost::geometry::model::d2::point_xy<double> > ring; 
    ring += 
     boost::geometry::model::d2::point_xy<double>(4.0, -0.5), boost::geometry::model::d2::point_xy<double>(3.5, 1.0), 
     boost::geometry::model::d2::point_xy<double>(2.0, 1.5), boost::geometry::model::d2::point_xy<double>(3.5, 2.0), 
     boost::geometry::model::d2::point_xy<double>(4.0, 3.5), boost::geometry::model::d2::point_xy<double>(4.5, 2.0), 
     boost::geometry::model::d2::point_xy<double>(6.0, 1.5), boost::geometry::model::d2::point_xy<double>(4.5, 1.0), 
     boost::geometry::model::d2::point_xy<double>(4.0, -0.5); 


    boost::geometry::model::box<boost::geometry::model::d2::point_xy<double> > box; 
    boost::geometry::envelope(ring, box); 
    std::cout 
     << "make_envelope:" 
     << boost::geometry::dsv(box) 
     << std::endl; 

    create_svg("make_envelope.svg", ring, box); 
} 

これは、これを描画します:

enter image description here

(ない画像が、Googleクロームで開閉可能なベクトルSVGファイル= ))これはC++でベクトルからSVGファイルを作成する方法です=)

+0

+1を送信してください!ブースト::ジオメトリは、まだそのディレクトリが1.48に存在しないので、まだ遷移中です。 – kfmfe04

+0

@Rella対応するread()操作はありますか?つまり、svgにポリゴンを描画すると、どうすればboost :: geometry :: model :: polygonに読み込むことができますか? –

関連する問題