2

セットと変換の適用方法に問題があります。私はグラフィックスのバックグラウンドを持っているので、通常の SVG グループ構文だけでなくシーン グラフにも精通していますが、Raphael は私を混乱させています。変換を適用したい円とセットがあるとします。

circle = paper.circle(0,0.5)
set = paper.set()

最初に円を追加してから変換すると、機能します。

set.push circle
set.transform("s100,100")

半径 50 の円を作成します。ただ、順序を逆にすると、

set.transform("s100,100")
set.push circle

変換は適用されません。

これは、グループ/トランスフォームがアーティキュレーション状態を保持し、毎回トランスフォーム全体を再作成するのではなく、それらにオブジェクトを追加または削除する、非常に多くのレンダリングおよびアニメーション タイプのアルゴリズムを壊すようです。ドキュメントのどこかに、これに対処するオプションが表示されていませんか、それともシンプルさを優先してこの機能が破棄されましたか? SVG自体のグループ階層で直接かつ簡単にサポートされていることを考えると、欠落しているのは非常に奇妙に思えます...セットが変換された後に追加された子にセットから変換を手動で適用する必要がありますか?

4

2 に答える 2

6

Raphaelのセットは単純な配列です。

for(...){}セットでいくつかのアクションを実行すると、Raphaelはループを介してすべてのメンバーを通過します。

RaphaelはSVGグループをサポートしていません<g></g>

Raphaelのコードを更新します:

// Set
var Set = function (items) {
    this.items = [];
    this.length = 0;
    this.type = "set";
    if (items) {
        for (var i = 0, ii = items.length; i < ii; i++) {
            if (items[i] && (items[i].constructor == elproto.constructor || items[i].constructor == Set)) {
                this[this.items.length] = this.items[this.items.length] = items[i];
                this.length++;
            }
        }
    }
},

ご覧のとおり、すべてのアイテムthis.itemsは配列に格納されています。

于 2012-12-23T12:31:37.483 に答える
3

Raphaël のメソッドは、関連するアクションを集約し、それらを (セット レベルで対応するメソッドをプロキシすることによって) 各形状に順次委任することsetによって、形状のグループをオブジェクトの統一されたセットとして管理する便利な方法を提供することを目的としています。element

SVG自体のグループ階層で直接かつ簡単にサポートされていることを考えると、欠落しているのは非常に奇妙に思えます...

Raphaël は、SVG 仕様を JavaScript ベースの API に昇格させようとする試みではなく、基本的な実装 (最新のブラウザーの SVG であれ、IE<9 での VML であれ) に関係なく、ベクター グラフィックス操作の抽象化を提供することを目的としています。したがって、sets は決して SVG グループの表現ではありません。

セットの変換後に追加されたすべての子に、セットからの変換を手動で適用する必要がありますか?

変換を適用する前に、必ずシェイプをセットに追加する必要があるだけです。

于 2012-12-22T13:49:14.877 に答える