這段代碼:
#include <fstream>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
namespace bg = boost::geometry;
int main()
{
std::ofstream svg ( "test.svg" );
boost::geometry::svg_mapper<bg::model::d2::point_xy<double>, true, double> mapper ( svg, 6000, 3000 );
bg::model::polygon<bg::model::d2::point_xy<double>> square{
{{0, 0}, {0, 1000}, {1000, 1000}, {1000, 0}, {0, 0}}};
const std::string style{"fill-opacity:1.0;fill:rgb(128,128,128);stroke:rgb(0,0,0);stroke-width:5"};
mapper.add ( square );
mapper.map ( square, style, 1.0 );
}
產生這個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">
<g fill-rule="evenodd"><path d="M 1500,3000 L 1500,0 L 4500,0 L 4500,3000 L 1500,3000 z " style="fill-opacity:1.0;fill:rgb(128,128,128);stroke:rgb(0,0,0);stroke-width:5"/></g>
</svg>
從輸入多邊形到映射的 svg 幾何圖形發生以下轉換:
(0, 0) -> (1500,3000)
(0, 1000) -> (1500,0)
(1000, 1000) -> (4500,0)
(1000, 0) -> (4500,3000)
(0, 0) -> (1500,3000)
盯著它看,你會看到應用了一些轉換,如下所示:
- 1500 x
- 3000 年
- 3x 縮放 x
- -3x 以 y 為單位縮放
我的問題是——是什么推動了這種轉變,我可以阻止它嗎?如果我不能阻止它,我可以自己檢索或計算它嗎?
原因是我正在制作許多復雜的 SVG,并希望它們都在同一個框架中。因此,如果在一個像素(10,10)處有一個圓圈,我希望所有影像的大小相同,圓圈位于完全相同的位置。我試圖做到這一點,viewBox但縮放和平移太難預測,無法保持影像一致。
uj5u.com熱心網友回復:
svg_mapperadd根據所有-ed 幾何計算邊界框。
然后,amap_transformer用于縮小到所需的寬度/高度。
與您可能期望的相反,除了擴展邊界框之外什么add都不做。同樣,在第一次呼叫之后,沒有其他對用于轉換的邊界框有任何影響。mapadd
換句話說,您可以使用某種固定邊界框,僅添加它,然后將您的幾何圖形映射到該“畫布”中:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/432798.html
上一篇:SVG在縮放頁面時防止縮放
下一篇:如何縮放SVG以適應div
