protected override void OnLoad(EventArgs e) { base.OnLoad(e); // モデルファイルを開く。(必須) var ofd = new OpenFileDialog(); ofd.Filter = "pmxモデルファイル(*.pmx)|*.pmx"; if (ofd.ShowDialog() == DialogResult.OK) { this._Model = PMXModel物理変形付き.ファイルから読み込む(ofd.FileName); // モーションファイルを開く。(任意) var ofd2 = new OpenFileDialog(); ofd2.Filter = "vmdモーションファイル(*.vmd)|*.vmd"; if (ofd2.ShowDialog() == DialogResult.OK) { モーション motion = this._Model.モーション管理.ファイルからモーションを生成し追加する(ofd2.FileName, true); this._Model.モーション管理.モーションを適用する(motion, 0, モーション再生終了後の挙動.Replay); } this.ScreenContext.ワールド空間.Drawableを追加する(this._Model); //②コントローラーフォームに対して読み込んだモデルを渡して表示します。 this._Controller = new Controller(this._Model); this._Controller.Show(); this._Controller.Activate(); } Activate(); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); var sampleFolder = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + @"\サンプルデータ"; // ニコニ立体ちゃんのモデルを読み込んで、画面内のワールド空間に追加。 this._Model = PMXModel物理変形付き.ファイルから読み込む($@"{sampleFolder}\Alicia\MMD\Alicia_solid.pmx"); this.ScreenContext.ワールド空間.Drawableを追加する(this._Model); // ニコニ立体ステージのモデルを読み込んで、画面内のワールド空間に追加。 this._Stage = PMXModel物理変形付き.ファイルから読み込む($@"{sampleFolder}\nicosolid_stage\nicosolid_stage.pmx"); this.ScreenContext.ワールド空間.Drawableを追加する(this._Stage); // モーションを読み込んで、ニコニ立体ちゃんモデルに適用。 モーション motion = this._Model.モーション管理.ファイルからモーションを生成し追加する($@"{sampleFolder}\Alicia\MMD Motion\2分ループステップ1.vmd", true); this._Model.モーション管理.モーションを適用する(motion, 0, モーション再生終了後の挙動.Replay); // マウスで操作できるカメラモーションを読み込んで、画面(のカメラ)に適用。 this.ScreenContext.カメラモーション = new マウスカメラモーション(this, this); // ウィンドウが後ろに隠れることがあるので、念のため。 Activate(); }
/// <summary> /// 指定したモーションを再生する /// </summary> /// <param name="id">モーションのid</param> /// <param name="startFrame">最初のフレーム</param> /// <param name="setting">終了後の挙動</param> public void モーションを適用する(モーション motionProvider, int startFrame = 0, モーション再生終了後の挙動 setting = モーション再生終了後の挙動.Nothing) { // TODO: モーションが同時には1つしか使えない if (現在再生中のモーション != null) { 現在再生中のモーション.モーションを停止する(); } motionProvider.モーションを再生する(startFrame, setting); 現在再生中のモーション = motionProvider; }
private void loadMotion_Click(object sender, EventArgs e) { if (model == null) { return; } var ofd = new OpenFileDialog(); ofd.Filter = "vmdモデルファイル(*.vmd)|*.vmd"; if (ofd.ShowDialog(this) == DialogResult.OK) { モーション motion = model.モーション管理.ファイルからモーションを生成し追加する(ofd.FileName, false); model.モーション管理.モーションを適用する(motion); } }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); // モデルファイルの読み込み用ダイアログの設置 var ofd = new OpenFileDialog(); ofd.Filter = "pmxモデルファイル(*.pmx)|*.pmx"; if (ofd.ShowDialog() == DialogResult.OK) { this._Model = PMXModel物理変形付き.ファイルから読み込む(ofd.FileName); // モーションファイルの読み込み用ダイアログの設置 var ofd2 = new OpenFileDialog(); ofd2.Filter = "vmdモーションファイル(*.vmd)|*.vmd"; if (ofd2.ShowDialog() == DialogResult.OK) { // ダイアログの返値がいずれもOKの場合、モデルの読み込み処理をする //①モーションファイルを読み込む モーション motion = this._Model.モーション管理.ファイルからモーションを生成し追加する(ofd2.FileName, true); //適用したい対象のモデルのモーションマネージャに対して追加します。 //IMotionProvider AddMotionFromFile(string ファイル名,bool すべての親ボーンを無視するかどうか); //第二引数は歩きモーションなどで、移動自体はプログラムで指定したいとき、すべての親ボーンのモーションを無視することで、 //モーションでモデル全体が動いてしまうのを防ぎます。 //②モーションファイルをモデルに対して適用する。 this._Model.モーション管理.モーションを適用する(motion, 0, モーション再生終了後の挙動.Replay); //第二引数は、再生を始めるフレーム番号、第三引数は再生後にリプレイするかどうか。 //リプレイせず放置する場合はActionAfterMotion.Nothingを指定する //オマケ //(1) モーションをとめるときは? //model.MotionManager.StopMotion();と記述すれば止まります //(2) 現在何フレーム目なの? //model.MotionManager.CurrentFrameによって取得できます。 } this.ScreenContext.ワールド空間.Drawableを追加する(this._Model); } Activate(); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); // 必須 var ofd = new OpenFileDialog(); ofd.Filter = "pmxモデルファイル(*.pmx)|*.pmx"; if (ofd.ShowDialog() == DialogResult.OK) { this._Model = PMXModel物理変形付き.ファイルから読み込む(ofd.FileName); // 任意 var ofd2 = new OpenFileDialog(); ofd2.Filter = "vmdモーションファイル(*.vmd)|*.vmd"; if (ofd2.ShowDialog() == DialogResult.OK) { モーション motion = this._Model.モーション管理.ファイルからモーションを生成し追加する(ofd2.FileName, true); this._Model.モーション管理.モーションを適用する(motion, 0, モーション再生終了後の挙動.Replay); } this.ScreenContext.ワールド空間.Drawableを追加する(this._Model); //③ カメラモーションの選択ダイアログを表示し、選ばれたものをScreenContext.CameraMotionProviderに代入する。 var selector = new CameraControlSelector(this._Model); selector.ShowDialog(this); this.ScreenContext.カメラモーション = selector.ResultCameraMotionProvider; /* * ScreenContext.カメラモーション に代入されたインターフェースの モーションを更新する() が毎回呼ばれることによりカメラを更新している。 * この変数の型は カメラモーション インターフェースのため、これを実装すればカメラの動きは容易に定義可能である。 */ } Activate(); }