0

就目前而言,SVG-edit 2.6:

The select tool selects objects when the selection box intersects with an objects b.box(Bounding Box).

我认为这是错误的用户体验。

选择工具应仅选择符合以下条件的对象:

- 吞没整个对象 - 或 - 与实际对象相交

我迷失在整个应用程序的 1000 多个 LOC 中。任何人都知道我可以在哪里摆弄代码以使其工作和/或任何可能的想法如何实现我的上述任何建议?

4

1 回答 1

1

为了在选择框“吞噬整个对象”时选择元素,您可以尝试以下操作:-

1)制作选择框时,检查元素的四个角是否都在选择框内。您可以使用 getBBox() 获得四个元素点。如:-

var bbox=element.getBBox();
var x=bbox.x;
var y=bbox.y;
var width=bbox.width;
var height=bbox.height;

var point1={
x:x,
y:y
};

var point2={
x:x+width,
y:y
};

var point3={
x:x+width,
y:y+height
};

var point4={
x:x,
y:y+height
};

现在将所有点与选择矩形进行比较,如果所有点都在选择矩形内,则选择元素。

2)现在关于“实际对象”。我认为您的意思是元素的实际形状,而不是 BBox。为此,一种解决方案是将您的形状转换为“路径”,然后获取路径的所有“节点”。最后将所有这些节点(点)与选择矩形一一进行比较。

要获取路径中的点,请尝试使用此功能:-

 function path2Array(path) {

                        var pointsArray = new Array();
                        for (var i = 0; i < path.getTotalLength(); i++) {
                                var point = path.getPointAtLength(i);
                                var cordinatesXY = {
                                        x: point.x,
                                        y: point.y
                                }    
                                pointsArray.push(cordinatesXY);
                        } 
                        return pointsArray;
                }

;

(这就是我想出的)。:-)

于 2014-01-30T18:16:15.080 回答