public EditCurveKeyAddRemoveCommand(EditCurve curve, EditCurveKey addKey, EditCurveKeySelection selection) { this.curve = curve; this.addKey = true; this.selection = selection.Clone(); keys = new List<EditCurveKey>(); keys.Add(addKey.Clone()); }
/// <summary> /// /// </summary> /// <param name="key"></param> /// <param name="continuity"></param> private void SetKeyContinuity(EditCurveKey key, CurveContinuity continuity) { if (key.Continuity != continuity) { MarkModify(key); key.Continuity = continuity; if (continuity == CurveContinuity.Step) { key.TangentIn = key.TangentOut = 0; key.TangentInType = key.TangentInType = EditCurveTangent.Flat; } } }
/// <summary> /// Mark modified key. /// </summary> private void MarkModify(EditCurveKey key) { // Clone and save current EditCurveKey to modified keys. if (modifiedKeys != null && !modifiedKeys.ContainsKey(key.Id)) { modifiedKeys.Add(key.Id, key.Clone()); dirty = true; } }
/// <summary> /// Returns selected key list. /// </summary> /// <returns></returns> public EditCurveKey[] GetSelectedKeys() { EditCurveKey[] keys = new EditCurveKey[selectedKeys.Count]; int idx = 0; foreach (EditCurveKey key in selectedKeys.Values) keys[idx++] = key; return keys; }
/// <summary> /// Add new key at given position. /// </summary> /// <param name="pos"></param> public void AddKey(Vector2 pos) { EnsureUpdating("AddKey"); // Create new key. EditCurveKey key = new EditCurveKey(EditCurveKey.GenerateUniqueId(), new CurveKey(pos.X, pos.Y)); key.Selection = EditCurveSelections.Key; // Generate add key command and execute it. EditCurveKeyAddRemoveCommand command = new EditCurveKeyAddRemoveCommand(this, key, selection); command.Execute(); if (commandHistory != null) commandHistory.Add(command); }
private void CheckSelection() { // Make sure it selected single key. CommonState<CurveLoopType> preLoop = new CommonState<CurveLoopType>(); CommonState<CurveLoopType> postLoop = new CommonState<CurveLoopType>(); CommonState<EditCurveTangent> tangentInType = new CommonState<EditCurveTangent>(); CommonState<EditCurveTangent> tangentOutType = new CommonState<EditCurveTangent>(); int totalSelectCount = 0; EditCurve lastSelectedCurve = null; foreach (EditCurve curve in curves) { if (!curve.Editable || !curve.Visible || curve.Selection.Count == 0 ) continue; EditCurveKeySelection selection = curve.Selection; totalSelectCount += selection.Count; lastSelectedCurve = curve; preLoop.Add(curve.PreLoop); postLoop.Add(curve.PostLoop); foreach (long id in selection.Keys) { EditCurveKey key; if (curve.Keys.TryGetValue(id, out key)) { if (key.Continuity == CurveContinuity.Smooth) { tangentInType.Add(key.TangentInType); tangentOutType.Add(key.TangentOutType); } else { tangentInType.Add(EditCurveTangent.Stepped); tangentOutType.Add(EditCurveTangent.Stepped); } } } } // Update Menus. CheckMenuItem(preInfinityToolStripMenuItem, preLoop.ValueString); CheckMenuItem(postInfinityToolStripMenuItem, postLoop.ValueString); bool sameValueString = String.Compare(tangentInType.ValueString, tangentOutType.ValueString) == 0; string tangentsString = sameValueString? tangentInType.ValueString : String.Empty; CheckMenuItem(tangentsToolStripMenuItem, tangentsString); CheckMenuItem(inTangentToolStripMenuItem, tangentInType.ValueString); CheckMenuItem(outTangentToolStripMenuItem, tangentOutType.ValueString); // Are we just select one key? singleEditUpdating = true; if (totalSelectCount == 1) { singleEditCurve = lastSelectedCurve; EditCurveKey[] keys = lastSelectedCurve.GetSelectedKeys(); singleEditKey = keys[0]; keyPositionTextBox.Text = String.Format( "{0:F3}", singleEditKey.Position ); keyValueTextBox.Text = String.Format("{0:F3}", singleEditKey.Value); keyPositionLabel.Enabled = keyValueLabel.Enabled = keyPositionTextBox.Enabled = keyValueTextBox.Enabled = true; } else { singleEditKey = null; singleEditCurve = null; keyPositionTextBox.Text = keyValueTextBox.Text = String.Empty; keyPositionLabel.Enabled = keyValueLabel.Enabled = keyPositionTextBox.Enabled = keyValueTextBox.Enabled = false; } singleEditUpdating = false; }