Javascript 从SVG加载的Fabric JS形状的位置不正确
我正在尝试将svg添加到画布并对其进行缩放。最后,我需要获得单个对象。所以我用这种可怕的方法来解决解组问题。但在这种情况下,立场是不正确的。谁能告诉我一条路径的绝对位置(左边和上面)Javascript 从SVG加载的Fabric JS形状的位置不正确,javascript,fabricjs,Javascript,Fabricjs,我正在尝试将svg添加到画布并对其进行缩放。最后,我需要获得单个对象。所以我用这种可怕的方法来解决解组问题。但在这种情况下,立场是不正确的。谁能告诉我一条路径的绝对位置(左边和上面) var canvas=newfabric.canvas('c'); var-str=''; var-svg; fabric.loadSVGFromString(str,函数(对象,选项){ svg=fabric.util.groupSVGElements(对象、选项); svg.scaleToHeight(can
var canvas=newfabric.canvas('c');
var-str='';
var-svg;
fabric.loadSVGFromString(str,函数(对象,选项){
svg=fabric.util.groupSVGElements(对象、选项);
svg.scaleToHeight(canvas.height);
canvas.add(svg);
svg.center();
canvas.renderAll();
svg.setCoords();
var bounds=svg.getObjects();
console.log(界限[1]);
边界[1].group.setFill('#00000');
console.log((边界[1].getLeft()+边界[1].group.getLeft());
console.log(边界[1].getTop()+边界[1].group.getTop());
风险值项目;
loadSVGFromString(str,函数(对象,选项){
var group=newfabric.group(对象、选项);
canvas.add(组);
group.scaleToHeight(canvas.getHeight());
group.center();
canvas.renderAll();
项目=组。\u对象;
组。_restoreObjectsState();
画布。移除(组);
canvas.renderAll();
对于(var i=0;i
我回答我的问题是因为有人可能会觉得它有用。我就是这样做的
1.使用fabric.util.groupSVGElements加载svg和组,因为它提供了最正确的位置
2.将svg对象添加到单独的组中,以便我可以再次解组对象
3.最后,将未分组的对象位置设置为svg路径对象位置(我知道这很愚蠢,但没有其他解决方案)
var canvas=newfabric.canvas('c');
var-str='';
var-svg;
fabric.loadSVGFromString(str,函数(对象,选项){
svg=fabric.util.groupSVGElements(对象、选项);
svg.scaleToHeight(canvas.height);
canvas.add(svg);
svg.center();
canvas.renderAll();
svg.setCoords();
var bounds=svg.getObjects();
console.log(界限[1]);
边界[0].group.setFill('#00000');
loadSVGFromString(str,函数(对象,选项){
var group=newfabric.group(对象、选项);
canvas.add(组);
group.scaleToHeight(canvas.getHeight());
canvas.renderAll();
变量项=组。\u对象;
组。_restoreObjectsState();
画布。移除(组);
对于(var i=0;i
尝试模拟对象移动,不要设置另一个顶部和左侧值,
对我来说就是这样
fabric.loadSVGFromURL(url, function (objects, options) {
canvas.add.apply(canvas, objects);
}, function (item, object) {
object.set('top', object.top + 400);
object.set('left', object.left + 300);
});
您需要调用loadSVGFromURL,但不必执行其他操作两次。正确的代码(typescript)应为:
fabric.loadSVGFromURL(url,
(objects, options) => {
const svg = fabric.fabric.util.groupSVGElements(objects, options);
// canvas scale to svg
canvas.setWidth(svg.width);
canvas.setHeight(svg.height);
//or svg scale to canvas
//svg.scaleToHeight(canvas.height);
//Glitch, need to do this twice to make things right
fabric.loadSVGFromURL(url,
(objects, options) => {
var group = new fabric.Group(objects, options);
group.scaleToHeight(canvas.getHeight());
var items = group._objects;
group._restoreObjectsState();
for (let i = 0; i < items.length; i++) {
canvas.add(items[i]);
}
canvas.renderAll();
});
});
fabric.loadSVGFromURL(url,
(对象、选项)=>{
const svg=fabric.fabric.util.groupSVGElements(对象、选项);
//画布缩放到svg
canvas.setWidth(svg.width);
canvas.setHeight(svg.height);
//或svg缩放到画布
//svg.scaleToHeight(canvas.height);
//Glitch,需要做两次才能把事情做好
fabric.loadSVGFromURL(url,
(对象、选项)=>{
var group=newfabric.group(对象、选项);
group.scaleToHeight(canvas.getHeight());
变量项=组。\u对象;
组。_restoreObjectsState();
for(设i=0;i