Return to Scripting interface

SceneとViewに関連する操作

新規Sceneの作成

 var SceMgr = cuemol.getService("SceneManager");
 var scene = SceMgr.createScene();
 scene.setName(scene_name);

新規Viewの作成

以下で新しいViewが作成できる. ただし,実際に画面上に表示するためには, 現在のGUI実装のMolView objectに対してbindしなければならない(これはGUI実装に依存してやり方が異なってくる).

 var view = scene.createView();
 view.name = view_name;

Scene fileを開く

既存のScene,sceneに,pathで指定されるfileからqscファイルを読み込む. 通常,sceneは何も含まれていないemptyの状態が望ましい.(すでに何か読み込まれていても動作することはすると思うが.)

 var StrMgr = cuemol.getService("StreamManager");
 var reader = StrMgr.createHandler("qsc_xml", 3);
 reader.attach(scene);
 reader.setPath(path);
 reader.read();
 reader.detach();

StrMgr.createHandler("qsc_xml", 3)という文の3という数字はI/O handlerのcategoryを示しており, 3はSceneに対する読み込みを行うカテゴリーのハンドラー(すなわちSceneのreader)を意味している.

Default cameraをloadする

変数viewに格納されたビュー(あるいはview_idで指定されるビュー)に対して, sceneのdefault camera (__current)をロードする. Default cameraには,qsc fileを保存したときのviewの状態が格納されている. Qsc fileを読み込んだときにこれを行うことで,保存時のviewの状態を復元できる.

 var view_id = view.uid;
 scene.loadViewFromCam(view_id, "__current");

現在のviewの状態をdefault cameraにsaveする

現在のmain viewの状態は,自動的にSceneのdefault camera (__current)へ保存されるわけではない. スクリプト側で,シーンの保存時などに適宜default cameraへ保存を行ってやる必要がある. 通常,シーンの保存前に以下のコードが実行されるべき.

 if (!scene.saveViewToCam(view_id, "__current")) {
   // error handling
 }

Sceneをfileに保存する

 var StrMgr = cuemol.getService("StreamManager");
 var writer = StrMgr.createHandler("qsc_xml", 4);
 
 writer.setDefaultOpts(scene);
 
 writer.attach(scene);
 writer.setPath(path);
 writer.write();
 writer.detach();

writer.setDefaultOpts() methodは, もしsceneがqsc fileから読み込んで作成されたものであった場合に, 元となるqsc fileで使用されているファイル形式options (file version, 圧縮の有り無しなど)を引き継いで, 上記で作成されたwriterでも使用するようにする.

StrMgr.createHandler("qsc_xml", 4)という文の4という数字はI/O handlerのcategoryを示しており, 4はSceneに対する書き込みを行うカテゴリーのハンドラー(すなわちSceneのwriter)を意味している.

Sceneの取得

scene_nameで指定されるSceneを取得する.

 var SceMgr = cuemol.getService("SceneManager");
 var scene = getSceneByName(scene_name);

Scene name (sc_name)を指定してSceneを得る. ただし,同名のSceneが複数存在する場合は, IDが最も小さいものが返される.(それ以外のSceneを直接取得する方法は無い)

 var scene = scene.getSceneByName(sc_name);

Sceneの状態一覧の取得

変数sceneに格納されたSceneの現在の状態 (含んでいるObjectの一覧と,各ObjectにattachされているRendererの一覧) を取得する.

 let json_str = scene.getSceneDataJSON();
 let data = JSON.parse(json_str);
 let i, nlen = data.length;
 for (i=1; i<nlen; ++i) {
   let obj = data[i];
   
   // operations for obj
   
   if (obj.rends && obj.rends.length>0) {
     var j, njlen = obj.rends.length;
     for (j=0; j<njlen; ++j) {
       let rend = obj.rends[j];
       
       // operations for rend
       
     }
   }
 }

以上のように,query系の複合データを返すmethodの返却値は(現実装では)基本的にJSON文字列になっているので,script側にJSONをparseしてobjectを組み立てる仕組みが必要.(javascriptの場合のJSON.parse()に相当するもの)


Last-modified: Sun, 27 Dec 2015 13:39:24 JST (3216d)