// And so begins the most repetitive code in this entire project. // TODO: Fix this later // TODO: Undo / Redo for this stuff #region StickFigure Panel public void UpdateStickFigurePanel() { cmb_stickBitmaps.Items.Clear(); cmb_stickBitmaps.Visible = false; lbl_stickBitmap.Visible = false; if (Program.Form_Canvas.StickFigurePair == null) { return; } StickFigure.Joint.State state = Program.Form_Canvas.StickFigurePair.Item2; var Bitmaps = Program.Form_Canvas.StickFigurePair.Item1.Bitmaps; if (Bitmaps.Count < 1) { return; } lbl_stickBitmap.Visible = true; cmb_stickBitmaps.Visible = true; cmb_stickBitmaps.Items.Add("(none)"); for (int i = 0; i < Bitmaps.Count; i++) { cmb_stickBitmaps.Items.Add(Bitmaps[i].Item2.Item1); } cmb_stickBitmaps.SelectedIndex = state.BitmapIndex + 1; }
private void GLContext_MouseDown(object sender, MouseEventArgs e) { if (ActiveManipMode == EditorManipMode.Pointer || ActiveManipMode == EditorManipMode.Move) { var pair = StickFigure.FindJointStatePair(ActiveFigure.Root, ActiveFigureState.Root, e.Location); var result = ActiveFigure.TryManipulate(ActiveFigureState, e.Location, e.Button, ModifierKeys, !IKEnabled); if (result != null && pair != null) { if (e.Button != MouseButtons.Right) { SelectedPair = pair; } if (ActiveManipMode == EditorManipMode.Move) { ActiveDragPair = pair; ActiveDragParams = result.Params; } } } else if (ActiveManipMode == EditorManipMode.Add && SelectedPair != null) { StickFigure.Joint joint = StickFigure.Joint.RelativeTo(SelectedPair.Item1, new PointF(-(SelectedPair.Item2.Location.X - e.X), -(SelectedPair.Item2.Location.Y - e.Y))); StickFigure.Joint.State state = StickFigure.Joint.State.RelativeTo(SelectedPair.Item2, new PointF(-(SelectedPair.Item2.Location.X - e.X), -(SelectedPair.Item2.Location.Y - e.Y))); SelectedPair = new Tuple <StickFigure.Joint, StickFigure.Joint.State>(joint, state); } else if (ActiveManipMode == EditorManipMode.Delete) { var pair = StickFigure.FindJointStatePair(ActiveFigure.Root, ActiveFigureState.Root, e.Location); var result = ActiveFigure.TryManipulate(ActiveFigureState, e.Location, e.Button, ModifierKeys, !IKEnabled); if (result != null) { StickFigure.Joint.State state = ((StickFigure.Joint.State)result.Target); if (state.Parent == null) // No deleting everything allowed { return; } pair.Item1.Delete(); pair.Item2.Delete(); SelectedPair = null; } } GLContext.Invalidate(); }
private void cmb_stickBitmaps_SelectionChangeCommitted(object sender, EventArgs e) { if (Program.MainTimeline.SelectedFrameset == null) { return; } if (Program.MainTimeline.SelectedLayer.Data.GetType() != typeof(CustomFigure)) { return; } StickFigure.State state = Program.MainTimeline.SelectedKeyframe.State as StickFigure.State; StickFigure.Joint.State jointState = state.Root.FindState((StickFigure.Joint.State)Program.Form_Canvas.LastDragObject); jointState.BitmapIndex = cmb_stickBitmaps.SelectedIndex - 1; Program.MainTimeline.GLContext.Invalidate(); }
private void GLContext_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.D1) { ActiveManipMode = EditorManipMode.Pointer; } else if (e.KeyCode == Keys.D2) { ActiveManipMode = EditorManipMode.Move; } else if (e.KeyCode == Keys.D3) { ActiveManipMode = EditorManipMode.Add; } else if (e.KeyCode == Keys.D4) { ActiveManipMode = EditorManipMode.Delete; } else if (e.KeyCode == Keys.M && SelectedPair != null && SelectedPair.Item2.Parent != null) { StickFigure.Joint current = SelectedPair.Item1; foreach (StickFigure.Joint.State state in SelectedPair.Item2.Children) { state.Parent = SelectedPair.Item2.Parent; SelectedPair.Item2.Parent.Children.Add(state); } foreach (StickFigure.Joint joint in current.Children) { joint.Parent = current.Parent; current.Parent.Children.Add(joint); } SelectedPair.Item2.Parent.Children.Remove(SelectedPair.Item2); current.Parent.Children.Remove(current); SelectedPair = new Tuple <StickFigure.Joint, StickFigure.Joint.State>(current, SelectedPair.Item2); GLContext.Invalidate(); } else if (e.KeyCode == Keys.S && SelectedPair != null && SelectedPair.Item2.Parent != null) { StickFigure.Joint SelectedJoint = SelectedPair.Item1; float x = (SelectedPair.Item2.Location.X + SelectedPair.Item2.Parent.Location.X) / 2; float y = (SelectedPair.Item2.Location.Y + SelectedPair.Item2.Parent.Location.Y) / 2; int ID = ActiveFigure.GetJointCount(); /* * StickFigure.Joint.RelativeTo(ActiveFigureState.Root.GetEquivalentJoint(ActiveFigure.Root, SelectedObject.ID), new PointF(-(SelectedObject.Location.X - e.X), -(SelectedObject.Location.Y - e.Y)), ref ID); * SelectedObject = StickFigure.Joint.State.RelativeTo(SelectedObject, new PointF(-(SelectedObject.Location.X - e.X), -(SelectedObject.Location.Y - e.Y)), ref ID2); */ StickFigure.Joint newJoint = new StickFigure.Joint(SelectedJoint.Parent); newJoint.Location = new PointF(x, y); newJoint.HandleColor = SelectedJoint.Parent.HandleColor; newJoint.JointColor = SelectedJoint.Parent.JointColor; newJoint.Thickness = SelectedJoint.Parent.Thickness; newJoint.Children.Add(SelectedJoint); SelectedJoint.Parent.Children.Add(newJoint); StickFigure.Joint.State newState = new StickFigure.Joint.State(SelectedPair.Item2.Parent); newState.JointColor = SelectedPair.Item2.Parent.JointColor; newState.Thickness = SelectedPair.Item2.Parent.Thickness; newState.Location = new PointF(x, y); newState.Children.Add(SelectedPair.Item2); SelectedPair.Item2.Parent.Children.Add(newState); SelectedPair.Item2.Parent.Children.Remove(SelectedPair.Item2); SelectedPair.Item2.Parent = newState; SelectedJoint.Parent.Children.Remove(SelectedJoint); SelectedJoint.Parent = newJoint; GLContext.Invalidate(); } }