25 Temmuz 2017 Salı

geomety svg_mapper Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/geometry.hpp>
Polygon veya Multi Polygon nesnelerini svg olarak yazar.

Constructor
Nokta tipini belirlemek için şöyle yaparız.
using PointType = boost::geometry::model::d2::point_xy<double>;
Şöyle yaparız.
std::string filename = ...;
std::ofstream svg(filename);
boost::geometry::svg_mapper<PointType> mapper(svg, 400, 400);
svg_mapper yok olurken ofstream'e yazar

add metodu
Şöyle yaparız.
std::vector<TPolygon> polygons = ...;
mapper.add (polygons [1]);
Şöyle yaparız.
namespace bg = boost::geometry;
typedef bg::model::d2::point_xy<float> BoostPoint;
typedef bg::model::polygon<BoostPoint> BoostPolygon;
typedef bg::model::multi_polygon<BoostPolygon> BoostMultipolygon;

BoostPolygon input = ...;
BoostMultipolygon output = ...;

std::ofstream svg("output.svg");
boost::geometry::svg_mapper<BoostPoint> mapper(svg, 400, 400);
mapper.add(output);
mapper.add(input);
map metodu
Şöyle yaparız.
mapper.map(polygons, "fill:rgb(255,128,0);stroke:rgb(0,0,100);stroke-width:1");
Şöyle yaparız.
mapper.map(polygon,"fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);
  stroke-width:0");
Farklı dış çizgiler ve doldurma renkleri ile şöyle yaparız.
mapper.map(p1, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);
  stroke-width:2");
mapper.map(p2, "fill-opacity:0.5;fill:rgb(204,153,0);stroke:rgb(202,153,0);
  stroke-width:2");
Şöyle yaparız.
template <typename TPolygon>
void WritePolygonsToSVG(const std::vector<TPolygon>& polygons, 
  const std::string& filename)
{
  std::ofstream svg(filename);

  boost::geometry::svg_mapper<PointType> mapper(svg, 400, 400);

  for(size_t polygonID = 0; polygonID < polygons.size(); ++polygonID) {
    mapper.add(polygons[polygonID]);
    int redValue = 50 * polygonID; //This breaks with more than 5 polygons
    mapper.map(polygons[polygonID], 
      "fill:rgb(" + std::to_string(redValue) + 
      ",128,0);stroke:rgb(0,0,100);stroke-width:1");
  }
}





Hiç yorum yok:

Yorum Gönder