Metasequoiaクラス改造論(1) 階層構造の再現

Objectごとの読み込み

まず、MetasequoiaのObjectチャンク1つごとに、新しくMetasequoiaインスタンスを作成するようにする。
Metasequoia#parseObjectChunkの先頭、

ActionScript

  1. var vertices:Array = geometry.vertices;
  2. var faces:Array = geometry.faces;

となっている部分を改造し、

ActionScript

  1. var obj:Metasequoia = new Metasequoia();
  2. obj._scale = this._scale;
  3. var vertices:Array = obj.geometry.vertices ;
  4. var faces:Array = obj.geometry.faces;

とする。
また、階層構造実現のために、親を探す必要がある。
で、Object名を取得して、このobjに与えてやる

ActionScript

  1. // オブジェクト名を取得
  2. var objectName:String = line.substring(8, line.indexOf("\"", 8));

上のようになっている部分を、下のように変更

ActionScript

  1. // オブジェクト名を取得
  2. var objectName:String = line.substring (8, line.indexOf("\"", 8));
  3. obj.name = objectName;

で、親を見つけるためにはObjectの一覧が必要なので、一覧をMetasequoiaクラスのメンバ変数として定義しておく。

ActionScript

  1. /**
  2. * Metasequoiaファイル内のオブジェクト一覧
  3. */
  4. private var _objectlist:Array;

この_objectlistは、適当なタイミングで初期化し、自分自身を追加しておく。コンストラクタ内かMetasequoia#load内がオススメかな。

ActionScript

  1. this._objectlist = new Array();
  2. this._objectlist.push(this);

この_objectlistに、パースして作ったObjectチャンクを入れていく。

ActionScript

  1. //オブジェクト一覧に追加する
  2. this._objectlist.push(obj);

このコードは、Metasequoia#parseObjectChunkの最後に挿入する。

タイトルとURLをコピーしました