public void AddBitmap(StickFigure.Joint joint, string name, Bitmap image) { joint.Bitmaps.Add( new Tuple <int, Tuple <string, Bitmap> >( Drawing.GenerateTexID(image), new Tuple <string, Bitmap>(name, image) )); joint.BitmapOffsets.Add(image, new Tuple <float, PointF>(0, new PointF(0, 0))); }
private void num_bitmapYOffset_ValueChanged(object sender, EventArgs e) { if (SelectedPair == null) { return; } StickFigure.Joint joint = SelectedPair.Item1; Bitmap bitmap = joint.Bitmaps[SelectedPair.Item2.BitmapIndex].Item2.Item2; joint.BitmapOffsets[bitmap] = new Tuple <float, PointF>(joint.BitmapOffsets[bitmap].Item1, new PointF(joint.BitmapOffsets[bitmap].Item2.X, (float)num_bitmapYOffset.Value)); GLContext.Invalidate(); }
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 num_bitmapRotation_ValueChanged(object sender, EventArgs e) { if (SelectedPair == null) { return; } StickFigure.Joint joint = SelectedPair.Item1; Bitmap bitmap = joint.Bitmaps[SelectedPair.Item2.BitmapIndex].Item2.Item2; tkb_bitmapRotation.Value = (int)num_bitmapRotation.Value; joint.BitmapOffsets[bitmap] = new Tuple <float, PointF>((float)num_bitmapRotation.Value, joint.BitmapOffsets[bitmap].Item2); GLContext.Invalidate(); }
private void cmb_bitmaps_SelectedIndexChanged(object sender, EventArgs e) { if (SelectedPair == null) { return; } StickFigure.Joint joint = SelectedPair.Item1; SelectedPair.Item2.BitmapIndex = cmb_bitmaps.SelectedIndex - 1; joint.InitialBitmapIndex = cmb_bitmaps.SelectedIndex - 1; btn_bitmapRemove.Enabled = cmb_bitmaps.SelectedIndex > 0; GLContext.Invalidate(); }
private void btn_bitmapRemove_Click(object sender, EventArgs e) { StickFigure.Joint joint = SelectedPair.Item1; int ind = cmb_bitmaps.SelectedIndex - 1; Bitmap tmp = joint.Bitmaps[SelectedPair.Item2.BitmapIndex].Item2.Item2; joint.Bitmaps.RemoveAt(ind); joint.BitmapOffsets.Remove(tmp); joint.InitialBitmapIndex = -1; SelectedPair.Item2.BitmapIndex = -1; cmb_bitmaps.Items.RemoveAt(cmb_bitmaps.SelectedIndex); UpdateSelection(); GLContext.Invalidate(); }
private void UpdateSelection() { if (SelectedPair == null) { grp_handleProperties.Enabled = false; grp_jointProperties.Enabled = false; grp_jointBitmaps.Enabled = false; ckb_handleVisible.Visible = false; pnl_handleColorImg.BackColor = Color.Black; pnl_jointColorImg.BackColor = Color.Black; lbl_handleColorNumbers.Text = "0, 0, 0"; lbl_jointColorNumbers.Text = "0, 0, 0"; cmb_drawMode.SelectedText = ""; num_jointThickness.Value = 0; cmb_bitmaps.Items.Clear(); num_bitmapXOffset.Value = 0; num_bitmapYOffset.Value = 0; num_bitmapRotation.Value = 0; tkb_bitmapRotation.Value = 0; } else { grp_handleProperties.Enabled = true; grp_jointProperties.Enabled = SelectedPair.Item2.Parent != null; grp_jointBitmaps.Enabled = SelectedPair.Item2.Parent != null; bool hasBitmap = SelectedPair.Item2.BitmapIndex != -1; btn_bitmapRemove.Enabled = hasBitmap; num_bitmapRotation.Enabled = hasBitmap; num_bitmapXOffset.Enabled = hasBitmap; num_bitmapYOffset.Enabled = hasBitmap; tkb_bitmapRotation.Enabled = hasBitmap; Color c1 = SelectedPair.Item1.HandleColor; Color c2 = SelectedPair.Item2.JointColor; ckb_handleVisible.Checked = SelectedPair.Item1.Visible; pnl_handleColorImg.BackColor = c1; pnl_jointColorImg.BackColor = c2; lbl_handleColorNumbers.Text = string.Format("{0}, {1}, {2}", c1.R, c1.G, c1.B); lbl_jointColorNumbers.Text = string.Format("{0}, {1}, {2}", c2.R, c2.G, c2.B); cmb_drawMode.SelectedIndex = (int)SelectedPair.Item1.DrawType; num_jointThickness.Value = (decimal)SelectedPair.Item2.Thickness; StickFigure.Joint Joint = SelectedPair.Item1; cmb_bitmaps.Items.Clear(); cmb_bitmaps.Items.Add("(none)"); for (int i = 0; i < Joint.Bitmaps.Count; i++) { cmb_bitmaps.Items.Add(Joint.Bitmaps[i].Item2.Item1); } cmb_bitmaps.SelectedIndex = SelectedPair.Item2.BitmapIndex + 1; if (SelectedPair.Item2.BitmapIndex != -1) { Bitmap bitmap = Joint.Bitmaps[SelectedPair.Item2.BitmapIndex].Item2.Item2; num_bitmapXOffset.Value = (decimal)Joint.BitmapOffsets[bitmap].Item2.X; num_bitmapYOffset.Value = (decimal)Joint.BitmapOffsets[bitmap].Item2.Y; num_bitmapRotation.Value = (decimal)Joint.BitmapOffsets[bitmap].Item1; } } }
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(); } }