0

現在のところ、SVG-edit 2.6:

選択ツールは、選択ボックスがオブジェクト b.box (境界ボックス) と交差するときにオブジェクトを選択します。

これは間違ったUXだと思います。

選択ツールは、次のいずれかのオブジェクトのみを選択する必要があります。

- オブジェクト全体を飲み込む - または - 実際のオブジェクトと交差する

アプリ全体の数千の LOC で迷っています。コードをいじって動作させることができるアイデアや、上記の提案のいずれかを達成する方法について考えられるアイデアを持っている人はいますか?

4

1 に答える 1

1

選択ボックス「オブジェクト全体を巻き込む」ときに要素を選択するには、これを試すことができます:-

1) 選択ボックスを作成する際に、要素の四隅がすべて選択ボックス内にあるかどうかを確認します。getBBox() を使用して要素の 4 つのポイントを取得できます。そのような:-

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ではなく、要素の実際の形状を意味していると思います。そのための 1 つの解決策は、形状を「パス」に変換してから、パスのすべての「ノード」を取得することです。最後に、これらすべてのノード (ポイント) を選択 rect と 1 つずつ比較します。

パス内のポイントを取得するには、次の関数を試してください:-

 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 に答える