使用svg.draw.js时多边形中的重复点

时间:2018-06-03 16:48:23

标签: javascript polygon svg.js

当我使用draw()创建多边形时,它会插入一些点2次。例如,当我创建一个有4个点的多边形时

<polygon id="SvgjsPolygon1063" points="179,177 179,177 397,147 323,381 323,381 88,350 88,350" class="labelbox shape"></polygon>

如果我从元素中手动删除重复点,我看到形状没有差异。但是如果我移动或重塑多边形,它会再插入7个点。

  • 如果是3点(三角形)多边形,则总点数为5.
  • 如果是4点多边形,则总点数为7.
  • 如果是5点多边形,则总点数为8.

如果您能够解释逻辑,那么它将会有所帮助,因此我可以保留唯一的点并正确地恢复它们。

来自main application的简化代码;

var createPolygon = function(){//TODO: bug: creating duplicate points
    var poly =  myCanvas.nested().polygon().addClass('labelpolygon shape').draw();
    poly.resize();
    poly.parent().draggable();

    poly.on('drawstart', function(e){
        document.addEventListener('keydown', function(e){
            if(e.keyCode == 13){
                poly.draw('done');
                poly.off('drawstart');
            }
        });
    });

    return poly;
}
myCanvas.on('mousedown', function(event){

    if(!alreadyDrawing){
        var currentTool = createPolygon(event,myCanvas);

        currentTool.on('drawstart', function(){
            alreadyDrawing = true;
        });
        currentTool.on('resizedone', function(){
            //update data
        });
        currentTool.draw(event);
        selectedElement = currentTool;
    }
});

myCanvas.on('mouseup', function(event){
    selectedElement.draw(event);
});

function attachEvents(currentTool){
    currentTool.parent().on('click',function(e) {
        currentTool.selectize({ rotationPoint: false});
        e.stopPropagation();
    });
}

1 个答案:

答案 0 :(得分:0)

在没有事件的情况下调用它时,

draw具有标准行为。在这种情况下,它会自动绑定到click事件。然后,当您开始使用事件呼叫draw时。它会弄乱逻辑并产生你得到的结果。

要解决此问题,请选择一个选项。 如果您想要更多控制权,请传递该事件。如果您对点击行为没问题,只需拨打draw不带任何参数