1
我一直在为SVG开发图形编辑器,以便我的用户通过其Web浏览器访问它。它基于SVG编辑并以Javascript编写。在C++库中使用Javascript应用程序在SVG路径上执行操作
目前的应用程序缺乏称为“布尔操作”的东西,那就是用户选择2个或更多形状并将它们结合在一起的能力。
我发现了一个名为LIB2GEOM的C++库,它应该处理这些操作,我相信这也是Inkscape所使用的。
那么他们有可能将这个库与我的应用程序连接起来,因为它不是用Javascript编写的?
<div id="svgcontainer"></div>
<script>
function path2poly()
{
var subj_polygons = [[{X:10,Y:10},{X:110,Y:10},{X:110,Y:110},{X:10,Y:110}],
[{X:20,Y:20},{X:20,Y:100},{X:100,Y:100},{X:100,Y:20}]];
var clip_polygons = [[{X:50,Y:50},{X:150,Y:50},{X:150,Y:150},{X:50,Y:150}],
[{X:60,Y:60},{X:60,Y:140},{X:140,Y:140},{X:140,Y:60}]];
var scale = 100;
subj_polygons = scaleup(subj_polygons, scale);
clip_polygons = scaleup(clip_polygons, scale);
var cpr = new ClipperLib.Clipper();
cpr.AddPolygons(subj_polygons, ClipperLib.PolyType.ptSubject);
cpr.AddPolygons(clip_polygons, ClipperLib.PolyType.ptClip);
var subject_fillType = ClipperLib.PolyFillType.pftNonZero;
var clip_fillType = ClipperLib.PolyFillType.pftNonZero;
var clipTypes = [ClipperLib.ClipType.ctUnion];
var clipTypesTexts = "Union";
var solution_polygons, svg, cont = document.getElementById('svgcontainer');
var i;
for(i = 0; i < clipTypes.length; i++) {
solution_polygons = new ClipperLib.Polygons();
cpr.Execute(clipTypes[i], solution_polygons, subject_fillType, clip_fillType);
//console.log(JSON.stringify(solution_polygons));
alert(polys2path(solution_polygons, scale));
}
}
// helper function to scale up polygon coordinates
function scaleup(poly, scale) {
var i, j;
if (!scale) scale = 1;
for(i = 0; i < poly.length; i++) {
for(j = 0; j < poly[i].length; j++) {
poly[i][j].X *= scale;
poly[i][j].Y *= scale;
}
}
return poly;
}
// converts polygons to SVG path string
function polys2path (poly, scale) {
var path = "", i, j;
if (!scale) scale = 1;
for(i = 0; i < poly.length; i++) {
for(j = 0; j < poly[i].length; j++) {
if (!j) path += "M";
else path += "L";
path += (poly[i][j].X/scale) + ", " + (poly[i][j].Y/scale);
}
path += "Z";
}
return path;
}
</script>
这是否意味着我将翻译库的JavaScript? – 2013-03-28 06:01:01
我想这应该是更容易使用一些包装从Javascript调用C++。 – chunkyguy 2013-03-28 06:23:46
我不认为emscripten可以处理这样复杂的图书馆翻译,我只是怀疑它。 – 2014-02-22 18:56:01