[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:00154] Re: Nodeの削除について



木曾海老屋通販逸品カタログ ====================
 『えっ!木のワインクーラー!おっ!うるし塗りのワイングラス??』
         ☆ 食を楽しくする器のお店です☆
 ヒノキの箸 お椀 弁当箱 コーヒーカップ おひつ等逸品の数々!!
========== http://www.cnet-kiso.ne.jp/h/hajime/ippin.html
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Mitsuru Tsukiyamaさん : [Java3Djp:00150]
>ところで,引き続き質問になってしまうのですが,
>TransformGroupにAddしたNodeのRemoveを行いたいのです.
>removeChild(int index)を使用するしかないのでしょうか?
>この場合そのNodeのIndexを知る方法がわからないのですが,
>直接引数にNodeを指定できる or NodeのIndexの取得方法を
>がありましたら教えてください.

結論から言えば、removeChildしかありませんので ....

この場合には、以下のような感じでremoveするように簡単なメソッドを
Groupから継承するクラスなどで定義して利用してみてください。

    public boolean remove(Node node) {
        for (int n=0; n<numChildren(); n++) {
            if (getChild(n) == node) {
                removeChild(n);
                return true;
            }
        }
        return false;
    }

Java3DはシーングラフAPIとしてはかなり貧弱なので、ユーザーが使いや
すくするには、このようにちょっとした工夫が必要です。

#Java3Dは仕様を決める時点から、おそらく配列ベースで実装することが
#開発者の頭にあって、それがそのままAPIにも反映された感じです。
#おせじにも洗練されたシーングラフAPIとは言えませんよね (^ ^;)


>またIndexを使うのならば,自分でIndexを指定して対応
>付けを行っておこうと思うのですが,
>複数の物体を一つのTransformGroupに複数付けて,それを
>removeChild(0) を繰り返すと全て削除できます.
>これはIndexが前に詰められているということなのでしょうか?

確認はしていないのですが、削除時のIndexに関しては"前に詰められる"
認識で良いと思います。

それとJava3Dオブジェクトに、今回のようなIndexなどの情報を付加したい
場合には、SceneGraphObject.setUserData()でデータオブジェクトを
設定してやるのが簡便だと思います。

以上簡単ですが、ご参考まで (^ ^)

----------------------------------------
Satoshi Konno
skonno@xxxxxxxxxx
http://www.cyber.koganei.tokyo.jp