コード例 #1
0
        // 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;
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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();
            }
        }