2013-03-28 78 views
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> 

回答

1

您可以嘗試使用emscripten交叉編譯成JS

+0

這是否意味着我將翻譯庫的JavaScript? – 2013-03-28 06:01:01

+0

我想這應該是更容易使用一些包裝從Javascript調用C++。 – chunkyguy 2013-03-28 06:23:46

+0

我不認爲emscripten可以處理這樣複雜的圖書館翻譯,我只是懷疑它。 – 2014-02-22 18:56:01

相關問題