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());
        }
예제 #2
0
        /// <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;
                }
            }
        }
예제 #3
0
 /// <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;
     }
 }
예제 #4
0
        /// <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;
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        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;
        }