我有一些奇怪的行爲與svg_mapper。至少我覺得這很奇怪,但我也是新來提升:: geometry,所以我可能會做一些愚蠢的事情。boost :: geometry svg_mapper svg起源,我的圖像翻轉?
svg的起源似乎位於左下角,但據我所知,一個svg的默認原點應該在左上角。 svg_mapper似乎沒有任何操作座標系的接口,所以我很確定我沒有錯誤地配置我的映射器。
下面的代碼只是一個例子,實際上我繪製了一個網格結構,但問題是一樣的。我期望的是從左上角開始的一條紅線(0,0),第二個點位於右側,然後是右下角的最後一個位置。但不,它從左下到右上。
這是從svg_mapper的預期行爲還是我沒有正確使用它?
typedef boost::geometry::model::d2::point_xy<double> point_type;
typedef boost::geometry::model::linestring<point_type> linestring_type;
typedef boost::geometry::svg_mapper<point_type> mapper_type;
std::ofstream svg("map.svg");
mapper_type mapper(svg, 400, 400);
linestring_type ls2{{0.0, 0.0}, {100.0, 0.0}, {400.0, 400.0}};
mapper.add(ls2);
mapper.map(ls2, "stroke:rgb(250,0,0);stroke-width:2");
上面的圖片是一個PNG但SVG生成這個樣子的:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<polyline points="0,400 100,400 400,0" style="stroke:rgb(250,0,0);stroke-width:2;fill:none"/>
</svg>
編輯>>使用boost 1.61
一個很好的解釋。謝謝rhashimoto! 硬編碼轉換策略有點奇怪,如果你可以用自己的策略替代,本來會很好,但至少現在我知道爲什麼了:)我會解決它。 – DbgCtrl
注意到svg_mapper的另一個「奇怪」的東西。在正x方向上,所有的東西都被轉換成svg寬度的一半。 – DbgCtrl
您應該確保SVG實際上是在HTML頁面中繪製的,或者是具有與'svg_mapper'構造函數(示例代碼中的400x400)相同的寬度和高度(或至少具有相同寬高比)的任何位置。 – rhashimoto