Objectごとの読み込み
まず、MetasequoiaのObjectチャンク1つごとに、新しくMetasequoiaインスタンスを作成するようにする。
Metasequoia#parseObjectChunkの先頭、
- var vertices:Array = geometry.vertices;
- var faces:Array = geometry.faces;
となっている部分を改造し、
- var obj:Metasequoia = new Metasequoia();
- obj._scale = this._scale;
- var vertices:Array = obj.geometry.vertices ;
- var faces:Array = obj.geometry.faces;
とする。
また、階層構造実現のために、親を探す必要がある。
で、Object名を取得して、このobjに与えてやる
- // オブジェクト名を取得
- var objectName:String = line.substring(8, line.indexOf("\"", 8));
上のようになっている部分を、下のように変更
- // オブジェクト名を取得
- var objectName:String = line.substring (8, line.indexOf("\"", 8));
- obj.name = objectName;
で、親を見つけるためにはObjectの一覧が必要なので、一覧をMetasequoiaクラスのメンバ変数として定義しておく。
- /**
- * Metasequoiaファイル内のオブジェクト一覧
- */
- private var _objectlist:Array;
この_objectlistは、適当なタイミングで初期化し、自分自身を追加しておく。コンストラクタ内かMetasequoia#load内がオススメかな。
- this._objectlist = new Array();
- this._objectlist.push(this);
この_objectlistに、パースして作ったObjectチャンクを入れていく。
- //オブジェクト一覧に追加する
- this._objectlist.push(obj);
このコードは、Metasequoia#parseObjectChunkの最後に挿入する。