コード例 #1
0
ファイル: LipAndCap.cs プロジェクト: ruche7/ruche.mmm
        public void Run(CommandArgs e)
        {
            e.Cancel = true;

            try
            {
                // 選択中モデル取得
                // 非選択で null の場合もある
                var model = this.ActiveModel;

                // 設定ダイアログ表示
                using (var dialog = new LipAndCapDialog(this.EnglishMode, model))
                {
                    dialog.Text = this.PluginName;

                    var result = dialog.ShowDialog(this.ApplicationForm);
                    if (result == DialogResult.OK)
                    {
                        // 口パク&字幕設定
                        if (model != null)
                        {
                            ApplyLip(model, dialog);
                        }
                        ApplyCaption(dialog);

                        e.Cancel = false;
                    }
                }
            }
            catch (ApplicationException ex)
            {
                ShowErrorDialog(ex.Message, false);
            }
            catch (Exception ex)
            {
                ShowErrorDialog(ex.Message, true);
            }
        }
コード例 #2
0
ファイル: LipAndCap.cs プロジェクト: ruche7/ruche.mmm
        /// <summary>
        /// ダイアログの結果を基に口パクを設定する。
        /// </summary>
        /// <param name="model">設定対象のモデル。</param>
        /// <param name="dialog">呼び出し済みのダイアログ。</param>
        private void ApplyLip(Model model, LipAndCapDialog dialog)
        {
            if (!dialog.LipEnabled)
            {
                return;
            }

            // 実フレームデータテーブル作成
            var table = dialog.MakeMorphFrameTable(this.Scene.MarkerPosition);
            if (table == null)
            {
                return;
            }

            // 範囲外のキーフレームを削除
            if (dialog.LipSpanType == FrameSpanType.All)
            {
                var maxPos = this.Scene.MarkerPosition + dialog.LipSpanFrame;
                foreach (var frms in table.Values)
                {
                    frms.RemoveAll(f => (f.FrameNumber > maxPos));
                }
            }

            // キーフレームを設定
            foreach (var mf in table)
            {
                var morph = model.Morphs[mf.Key];
                if (morph != null)
                {
                    morph.Frames.AddKeyFrame(mf.Value);
                }
            }
        }
コード例 #3
0
ファイル: LipAndCap.cs プロジェクト: ruche7/ruche.mmm
        /// <summary>
        /// ダイアログの結果を基に字幕を設定する。
        /// </summary>
        /// <param name="dialog">呼び出し済みのダイアログ。</param>
        private void ApplyCaption(LipAndCapDialog dialog)
        {
            if (!dialog.CaptionEnabled || dialog.CaptionFrameLength <= 0)
            {
                return;
            }

            // 字幕データ作成
            var caption =
                dialog.MakeCaption(this.Scene, this.Scene.MarkerPosition, 0);
            if (caption == null)
            {
                return;
            }

            // 字幕を設定
            this.Scene.Captions.AddCaption(caption);
        }