public SelectCommand(EditCurve curve, EditCurveKeySelection newSelection, EditCurveKeySelection oldSelection) { this.curve = curve; this.oldSelection = oldSelection; this.newSelection = newSelection; }
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> /// Select keys and key tangents. /// </summary> /// <param name="selectRegion">Selection region in unit coordinate.</param> /// <param name="tangentScale">Tangent scale in unit coordinate.</param> /// <param name="keyView"></param> /// <param name="tangentView"></param> /// <param name="toggleSelection"></param> /// <param name="singleSelection"></param> public void Select(BoundingBox selectRegion, Vector2 tangentScale, EditCurveView keyView, EditCurveView tangentView, bool toggleSelection, bool singleSelect) { if (!Editable) return; EditCurveKeySelection newSelection = new EditCurveKeySelection(); // Check Intersection of Keys and Tangents. if (keyView != EditCurveView.Never) { ICollection<EditCurveKey> targetKeys = (keyView == EditCurveView.Always) ? (ICollection<EditCurveKey>)keys : (ICollection<EditCurveKey>)selectedKeys.Values; newSelection.SelectKeys(targetKeys, selectRegion, singleSelect); } // Check Tangents if any keys are not selected. if (newSelection.Count == 0 && tangentView != EditCurveView.Never) { ICollection<EditCurveKey> targetKeys = (tangentView == EditCurveView.Always) ? (ICollection<EditCurveKey>)keys : (ICollection<EditCurveKey>)selectedKeys.Values; newSelection.SelectTangents(targetKeys, selectRegion, tangentScale, singleSelect); } if (toggleSelection) newSelection = EditCurveKeySelection.ToggleSelection( selection, newSelection); ApplySelection(newSelection, true); }
/// <summary> /// Apply key selection. /// </summary> /// <param name="newSelection"></param> /// <param name="generateCommand"></param> public void ApplySelection(EditCurveKeySelection newSelection, bool generateCommand) { // Re-create selected keys and store selection information from // new selection. selectedKeys.Clear();; foreach (long id in newSelection.Keys) { EditCurveKey key = keys.GetValue(id); key.Selection = newSelection[id]; selectedKeys.Add(key.Id, key); } // Clear de-selected keys selection information. foreach (long id in selection.Keys) { if (!newSelection.ContainsKey(id)) { EditCurveKey key; if ( keys.TryGetValue(id, out key)) key.Selection = EditCurveSelections.None; } } // Invoke selection change event. if ( generateCommand == true && !newSelection.Equals(selection) && commandHistory != null) commandHistory.Add(new SelectCommand(this, newSelection, selection)); // Update selection. selection = newSelection; }