public override void Run(CommandArgs e) { var found = false; switch (this.Scene.Mode) { case EditMode.AccessoryMode: found = this.Scene.ActiveAccessory != null && this.Scene.ActiveAccessory.Layers.SelectMany(_ => _.SelectedFrames).Any(); break; case EditMode.CameraMode: found = true; break; case EditMode.EffectMode: found = this.Scene.ActiveEffect != null && this.Scene.ActiveEffect.SelectedFrames.Any(); break; case EditMode.ModelMode: found = this.Scene.ActiveModel != null && this.Scene.ActiveModel.Bones.SelectMany(_ => _.Layers).SelectMany(_ => _.SelectedFrames).Any(); break; } if (!found) { MessageBox.Show(this.ApplicationForm, "対象のキーフレームがありません。\r\n対象のボーン、アクセサリ、カメラ、またはエフェクトのキーフレームを選択してから実行してください。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); e.Cancel = true; return; } using (var f = new BeatBasedCopyForm { BeginFrame = beginFrame, BeatsPerMinute = beatsPerMinute, StartupBeats = startupBeats, IntervalBeats = intervalBeats, Times = times, }) { if (f.ShowDialog(this.ApplicationForm) != DialogResult.OK) { e.Cancel = true; return; } beginFrame = f.BeginFrame; beatsPerMinute = f.BeatsPerMinute; startupBeats = f.StartupBeats; intervalBeats = f.IntervalBeats; times = f.Times; } using (new UndoBlock(this.Scene)) switch (this.Scene.Mode) { case EditMode.AccessoryMode: var acc = this.Scene.ActiveAccessory; if (acc != null) { var frames = acc.Layers.SelectMany(_ => _.SelectedFrames.Select(f => new { Layer = _, Frame = f, })).ToArray(); var frameStart = frames.Min(_ => _.Frame.FrameNumber); foreach (var i in CopyByBeat().SelectMany(f => frames.Select(_ => new { _.Layer, Frame = new MotionFrameData(_.Frame.FrameNumber - frameStart + f, _.Frame.Position, _.Frame.Quaternion) { InterpolRA = _.Frame.InterpolRA, InterpolRB = _.Frame.InterpolRB, InterpolXA = _.Frame.InterpolXA, InterpolXB = _.Frame.InterpolXB, InterpolYA = _.Frame.InterpolYA, InterpolYB = _.Frame.InterpolYB, InterpolZA = _.Frame.InterpolZA, InterpolZB = _.Frame.InterpolZB, Selected = true, }, })).GroupBy(_ => _.Layer)) i.Key.Frames.AddKeyFrame(i.Select(_ => _.Frame).ToList()); } break; case EditMode.CameraMode: var camera = this.Scene.ActiveCamera; if (camera != null) { var frames = camera.Layers.SelectMany(_ => _.Frames.Select(f => new { Layer = _, Frame = f, })).ToArray(); var frameStart = frames.Min(_ => _.Frame.FrameNumber); foreach (var i in CopyByBeat().SelectMany(f => frames.Select(_ => new { _.Layer, Frame = new CameraFrameData(_.Frame.FrameNumber - frameStart + f, _.Frame.Position, _.Frame.Angle, _.Frame.Radius, _.Frame.Fov) { InterpolDistA = _.Frame.InterpolDistA, InterpolDistB = _.Frame.InterpolDistB, InterpolFovA = _.Frame.InterpolFovA, InterpolFovB = _.Frame.InterpolFovB, InterpolMoveA = _.Frame.InterpolMoveA, InterpolMoveB = _.Frame.InterpolMoveB, InterpolRoteA = _.Frame.InterpolRoteA, InterpolRoteB = _.Frame.InterpolRoteB, Selected = true, }, })).GroupBy(_ => _.Layer)) i.Key.Frames.AddKeyFrame(i.Select(_ => _.Frame).ToList()); } foreach (var light in this.Scene.Lights) if (light.SelectedFrames.Any()) { var frames = light.Frames.ToArray(); var frameStart = frames.Min(_ => _.FrameNumber); light.Frames.AddKeyFrame(CopyByBeat().SelectMany(f => frames.Select(_ => new LightFrameData(_.FrameNumber - frameStart + f, _.Position, _.Color) { InterpolColorA = _.InterpolColorA, InterpolColorB = _.InterpolColorB, InterpolPosA = _.InterpolPosA, InterpolPosB = _.InterpolPosB, Selected = true, })).ToList()); } break; case EditMode.EffectMode: var eff = this.Scene.ActiveEffect; if (eff != null) { var frames = eff.SelectedFrames.ToArray(); var frameStart = frames.Min(_ => _.FrameNumber); eff.Frames.AddKeyFrame(CopyByBeat().SelectMany(f => frames.Select(_ => new MotionFrameData(_.FrameNumber - frameStart + f, _.Position, _.Quaternion) { InterpolRA = _.InterpolRA, InterpolRB = _.InterpolRB, InterpolXA = _.InterpolXA, InterpolXB = _.InterpolXB, InterpolYA = _.InterpolYA, InterpolYB = _.InterpolYB, InterpolZA = _.InterpolZA, InterpolZB = _.InterpolZB, Selected = true, })).ToList()); } break; case EditMode.ModelMode: var model = this.Scene.ActiveModel; if (model != null) { var frames = model.Bones.SelectMany(b => b.Layers).SelectMany(_ => _.SelectedFrames.Select(f => new { Layer = _, Frame = f, })).ToArray(); var frameStart = frames.Min(_ => _.Frame.FrameNumber); foreach (var i in CopyByBeat().SelectMany(f => frames.Select(_ => new { _.Layer, Frame = new MotionFrameData(_.Frame.FrameNumber - frameStart + f, _.Frame.Position, _.Frame.Quaternion) { InterpolRA = _.Frame.InterpolRA, InterpolRB = _.Frame.InterpolRB, InterpolXA = _.Frame.InterpolXA, InterpolXB = _.Frame.InterpolXB, InterpolYA = _.Frame.InterpolYA, InterpolYB = _.Frame.InterpolYB, InterpolZA = _.Frame.InterpolZA, InterpolZB = _.Frame.InterpolZB, Selected = true, }, })).GroupBy(_ => _.Layer)) i.Key.Frames.AddKeyFrame(i.Select(_ => _.Frame).ToList()); } break; } }
public override void Run(CommandArgs e) { var found = false; switch (this.Scene.Mode) { case EditMode.AccessoryMode: found = this.Scene.ActiveAccessory != null && this.Scene.ActiveAccessory.Layers.SelectMany(_ => _.SelectedFrames).Any(); break; case EditMode.CameraMode: found = true; break; case EditMode.EffectMode: found = this.Scene.ActiveEffect != null && this.Scene.ActiveEffect.SelectedFrames.Any(); break; case EditMode.ModelMode: found = this.Scene.ActiveModel != null && this.Scene.ActiveModel.Bones.SelectMany(_ => _.Layers).SelectMany(_ => _.SelectedFrames).Any(); break; } if (!found) { MessageBox.Show(this.ApplicationForm, "対象のキーフレームがありません。\r\n対象のボーン、アクセサリ、カメラ、またはエフェクトのキーフレームを選択してから実行してください。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); e.Cancel = true; return; } using (var f = new BeatBasedCopyForm { BeginFrame = beginFrame, BeatsPerMinute = beatsPerMinute, StartupBeats = startupBeats, IntervalBeats = intervalBeats, Times = times, }) { if (f.ShowDialog(this.ApplicationForm) != DialogResult.OK) { e.Cancel = true; return; } beginFrame = f.BeginFrame; beatsPerMinute = f.BeatsPerMinute; startupBeats = f.StartupBeats; intervalBeats = f.IntervalBeats; times = f.Times; } using (new UndoBlock(this.Scene)) switch (this.Scene.Mode) { case EditMode.AccessoryMode: var acc = this.Scene.ActiveAccessory; if (acc != null) { var frames = acc.Layers.SelectMany(_ => _.SelectedFrames.Select(f => new { Layer = _, Frame = f, })).ToArray(); var frameStart = frames.Min(_ => _.Frame.FrameNumber); foreach (var i in CopyByBeat().SelectMany(f => frames.Select(_ => new { _.Layer, Frame = new MotionFrameData(_.Frame.FrameNumber - frameStart + f, _.Frame.Position, _.Frame.Quaternion) { InterpolRA = _.Frame.InterpolRA, InterpolRB = _.Frame.InterpolRB, InterpolXA = _.Frame.InterpolXA, InterpolXB = _.Frame.InterpolXB, InterpolYA = _.Frame.InterpolYA, InterpolYB = _.Frame.InterpolYB, InterpolZA = _.Frame.InterpolZA, InterpolZB = _.Frame.InterpolZB, Selected = true, }, })).GroupBy(_ => _.Layer)) { i.Key.Frames.AddKeyFrame(i.Select(_ => _.Frame).ToList()); } } break; case EditMode.CameraMode: var camera = this.Scene.ActiveCamera; if (camera != null) { var frames = camera.Layers.SelectMany(_ => _.Frames.Select(f => new { Layer = _, Frame = f, })).ToArray(); var frameStart = frames.Min(_ => _.Frame.FrameNumber); foreach (var i in CopyByBeat().SelectMany(f => frames.Select(_ => new { _.Layer, Frame = new CameraFrameData(_.Frame.FrameNumber - frameStart + f, _.Frame.Position, _.Frame.Angle, _.Frame.Radius, _.Frame.Fov) { InterpolDistA = _.Frame.InterpolDistA, InterpolDistB = _.Frame.InterpolDistB, InterpolFovA = _.Frame.InterpolFovA, InterpolFovB = _.Frame.InterpolFovB, InterpolMoveA = _.Frame.InterpolMoveA, InterpolMoveB = _.Frame.InterpolMoveB, InterpolRoteA = _.Frame.InterpolRoteA, InterpolRoteB = _.Frame.InterpolRoteB, Selected = true, }, })).GroupBy(_ => _.Layer)) { i.Key.Frames.AddKeyFrame(i.Select(_ => _.Frame).ToList()); } } foreach (var light in this.Scene.Lights) { if (light.SelectedFrames.Any()) { var frames = light.Frames.ToArray(); var frameStart = frames.Min(_ => _.FrameNumber); light.Frames.AddKeyFrame(CopyByBeat().SelectMany(f => frames.Select(_ => new LightFrameData(_.FrameNumber - frameStart + f, _.Position, _.Color) { InterpolColorA = _.InterpolColorA, InterpolColorB = _.InterpolColorB, InterpolPosA = _.InterpolPosA, InterpolPosB = _.InterpolPosB, Selected = true, })).ToList()); } } break; case EditMode.EffectMode: var eff = this.Scene.ActiveEffect; if (eff != null) { var frames = eff.SelectedFrames.ToArray(); var frameStart = frames.Min(_ => _.FrameNumber); eff.Frames.AddKeyFrame(CopyByBeat().SelectMany(f => frames.Select(_ => new MotionFrameData(_.FrameNumber - frameStart + f, _.Position, _.Quaternion) { InterpolRA = _.InterpolRA, InterpolRB = _.InterpolRB, InterpolXA = _.InterpolXA, InterpolXB = _.InterpolXB, InterpolYA = _.InterpolYA, InterpolYB = _.InterpolYB, InterpolZA = _.InterpolZA, InterpolZB = _.InterpolZB, Selected = true, })).ToList()); } break; case EditMode.ModelMode: var model = this.Scene.ActiveModel; if (model != null) { var frames = model.Bones.SelectMany(b => b.Layers).SelectMany(_ => _.SelectedFrames.Select(f => new { Layer = _, Frame = f, })).ToArray(); var frameStart = frames.Min(_ => _.Frame.FrameNumber); foreach (var i in CopyByBeat().SelectMany(f => frames.Select(_ => new { _.Layer, Frame = new MotionFrameData(_.Frame.FrameNumber - frameStart + f, _.Frame.Position, _.Frame.Quaternion) { InterpolRA = _.Frame.InterpolRA, InterpolRB = _.Frame.InterpolRB, InterpolXA = _.Frame.InterpolXA, InterpolXB = _.Frame.InterpolXB, InterpolYA = _.Frame.InterpolYA, InterpolYB = _.Frame.InterpolYB, InterpolZA = _.Frame.InterpolZA, InterpolZB = _.Frame.InterpolZB, Selected = true, }, })).GroupBy(_ => _.Layer)) { i.Key.Frames.AddKeyFrame(i.Select(_ => _.Frame).ToList()); } } break; } }