コード例 #1
0
        public EnumParameterValue(OperatorPart input)
        {
            ValueHolder = input;

            InitializeComponent();

            _metaInput = input.Parent.GetMetaInput(input);
            var enumValues = _metaInput.EnumValues;

            foreach (var enumEntry in enumValues)
            {
                XComboBox.Items.Add(enumEntry.Name);
            }

            XComboBox.SelectionChanged += (o, e) =>
            {
                if (!_changeEventsEnabled)
                {
                    return;
                }

                var idx              = XComboBox.SelectedIndex;
                var value            = new Float((float)enumValues[idx].Value);
                var _setValueCommand = new UpdateOperatorPartValueFunctionCommand(input, value);
                App.Current.UndoRedoStack.AddAndExecute(_setValueCommand);
                App.Current.UpdateRequiredAfterUserInteraction = true;
            };

            UpdateGUI();
            ValueHolder.ManipulatedEvent += ValueHolder_ManipulatedHandler;
            ValueHolder.ChangedEvent     += ValueHolder_ChangedHandler;
            Unloaded += UnloadHandler;
        }
コード例 #2
0
        public void ParameterRow_StartManipulationHandler(object sender, EventArgs e)
        {
            _keepValueBeforeManipulation = Value;
            var floatObject = ((ValueHolder.Func as Core.Utilities.ValueFunction).Value as Float);

            if (floatObject != null)
            {
                _setValueCommand = new UpdateOperatorPartValueFunctionCommand(ValueHolder, floatObject);
            }
        }
コード例 #3
0
        private void FloatEditButton_EditingStartedHandler()
        {
            if (IsAnimated)
            {
                _addKeyframeCommand = new AddOrUpdateKeyframeCommand(App.Current.Model.GlobalTime, Value, ValueHolder);
            }
            else
            {
                // Disable rebuilding of animation curves...
                App.Current.MainWindow.CompositionView.XTimeView.XAnimationCurveEditor.DisableCurveUpdatesOnModifiedEvent = true;

                _updateValueCommand = new UpdateOperatorPartValueFunctionCommand(ValueHolder, new Float(Value));
            }
        }
コード例 #4
0
        public static Tuple <bool, string> EvaluateTests(Operator testingOp, string filterPattern)
        {
            try
            {
                //connect it to a testsevaluator
                var compositionOp = testingOp.Parent;

                var evaluatorMetaOpID = Guid.Parse("0316356c-b1fe-490a-89ce-73c8f67ebccc");
                var evaluatorMetaOp   = MetaManager.Instance.GetMetaOperator(evaluatorMetaOpID);

                var addOpCmd = new AddOperatorCommand(compositionOp, evaluatorMetaOpID);
                addOpCmd.Do();
                var evaluatorOp = evaluatorMetaOp.GetOperatorInstance(addOpCmd.AddedInstanceID);

                var connection = new MetaConnection(testingOp.ID, testingOp.Outputs[0].ID,
                                                    evaluatorOp.ID, evaluatorOp.Inputs[0].ID);
                var addConnectionCmd = new InsertConnectionCommand(compositionOp.Definition, connection, 0);
                addConnectionCmd.Do();

                //configure the testsevaluator op and start testing
                var startTestsTriggerOpPart = evaluatorOp.Inputs[1];
                var filterOpPart            = evaluatorOp.Inputs[3];

                //we must create a down flank for the startTestsTrigger value to start the tests properly
                var updateStartTestsCmd = new UpdateOperatorPartValueFunctionCommand(startTestsTriggerOpPart, new Float(1.0f));
                updateStartTestsCmd.Do();
                var updateFilterCmd = new UpdateOperatorPartValueFunctionCommand(filterOpPart, new Text(filterPattern));
                updateFilterCmd.Do();
                evaluatorOp.Outputs[0].Eval(new OperatorPartContext());

                updateStartTestsCmd.Value = new Float(0.0f);
                updateStartTestsCmd.Do();
                var resultLog = evaluatorOp.Outputs[0].Eval(new OperatorPartContext()).Text;

                var result = new Tuple <bool, string>(resultLog.StartsWith(compositionOp.Definition.Name + " : passed"), resultLog);

                var deleteOperatorCmd = new DeleteOperatorsCommand(compositionOp, new List <Operator>()
                {
                    evaluatorOp
                });
                deleteOperatorCmd.Do();
                return(result);
            }
            catch (Exception ex)
            {
                Logger.Error("Failed to evaluate operator definition {0}: {1}", testingOp.Name, ex.ToString());
                return(new Tuple <bool, string>(false, ""));
            }
        }
コード例 #5
0
        private ICommand BuildManipulationCommand(FloatParameterControl control, float newValue)
        {
            ICommand cmd;

            if (control.IsAnimated)
            {
                cmd = new AddOrUpdateKeyframeCommand(App.Current.Model.GlobalTime, newValue, control.ValueHolder);
            }
            else
            {
                cmd = new UpdateOperatorPartValueFunctionCommand(control.ValueHolder, new Float(newValue));
            }
            _commandsForControls[control] = cmd;
            return(cmd);
        }
コード例 #6
0
        private ICommand BuildManipulationCommand(OperatorPart input, float newValue)
        {
            ICommand cmd;

            OperatorPart animationOpPart = Animation.GetRegardingAnimationOpPart(input);

            if (animationOpPart != null && animationOpPart.Func is ICurve)
            {
                cmd = new AddOrUpdateKeyframeCommand(App.Current.Model.GlobalTime, newValue, input);
            }
            else
            {
                cmd = new UpdateOperatorPartValueFunctionCommand(input, new Float(newValue));
            }
            _commandsForInputs[input] = cmd;
            return(cmd);
        }
コード例 #7
0
        private ICommand BuildManipulationCommand(OperatorPart input, float newValue = Single.NaN)
        {
            ICommand cmd;

            var isAnimated = Animation.GetRegardingAnimationOpPart(input) != null;

            if (isAnimated)
            {
                cmd = new AddOrUpdateKeyframeCommand(App.Current.Model.GlobalTime, newValue, input);
            }

            else
            {
                cmd = new UpdateOperatorPartValueFunctionCommand(input, new Float(newValue));
            }

            _commandsForInputs[input] = cmd;
            return(cmd);
        }
コード例 #8
0
        private void FloatEditButton_EditingEndedHandler()
        {
            if (IsAnimated)
            {
                App.Current.UndoRedoStack.AddAndExecute(_addKeyframeCommand);
                _addKeyframeCommand = null;
            }
            else
            {
                // Re-enable rebuilding of animation curves...
                App.Current.MainWindow.CompositionView.XTimeView.XAnimationCurveEditor.DisableCurveUpdatesOnModifiedEvent = false;

                if (_updateValueCommand != null && ((_updateValueCommand.Value as Float).Val) != ((_updateValueCommand.PreviousValue as Float).Val))
                {
                    App.Current.UndoRedoStack.Add(_updateValueCommand);
                }

                _updateValueCommand = null;
            }
        }
コード例 #9
0
        public void ParameterRow_EndManipulationHandler(object sender, EventArgs e)
        {
            App.Current.UndoRedoStack.Add(_setValueCommand);

            _setValueCommand = null;
        }
コード例 #10
0
 private void FloatEditButton_CancelledHandler()
 {
     _addKeyframeCommand = null;
     _updateValueCommand = null;
 }
コード例 #11
0
 private void XTextEdit_EditingStarted()
 {
     _updateValueCommand = new UpdateOperatorPartValueFunctionCommand(ValueHolder, new Text(XTextEdit.XTextEdit.Text));
 }
コード例 #12
0
        /**
         * This is an extremely rough stub for testing the TimeClip splitting functionality.
         * Need fixes for...
         * - duplicate connections of original op
         * - get rid of magic numbers of parameters
         * - fix potential problems when parameters are animated of connected
         * - move this to an Memento-Operation
         * - resolve direct dependencies to CompositionGraphView an it's members
         */
        public static void SplitSelectedTimeClips()
        {
            var nextSelection = new List <ISelectable>();
            var currentTime   = (float)App.Current.Model.GlobalTime;

            var selectedOpWidgets = new List <OperatorWidget>();

            foreach (var element in App.Current.MainWindow.CompositionView.CompositionGraphView.SelectionHandler.SelectedElements)
            {
                var opWidget = element as OperatorWidget;

                if (opWidget == null || !(opWidget.Operator.InternalParts[0].Func is ITimeClip))
                {
                    continue;
                }

                selectedOpWidgets.Add(opWidget);
            }

            var commandList = new List <ICommand>();

            foreach (var opWidget in selectedOpWidgets)
            {
                var op = opWidget.Operator;
                if (op == null)
                {
                    continue;
                }

                var startTime     = op.Inputs[HACK_TIMECLIP_STARTTIME_PARAM_INDEX].Eval(new OperatorPartContext()).Value;
                var endTime       = op.Inputs[HACK_TIMECLIP_ENDTIME_PARAM_INDEX].Eval(new OperatorPartContext()).Value;
                var sourceIn      = op.Inputs[HACK_TIMECLIP_SOURCEIN_PARAM_INDEX].Eval(new OperatorPartContext()).Value;
                var sourceOut     = op.Inputs[HACK_TIMECLIP_SOURCEOUT_PARAM_INDEX].Eval(new OperatorPartContext()).Value;
                var layerIndex    = op.Inputs[HACK_TIMECLIP_SOURCEOUT_LAYER_ID].Eval(new OperatorPartContext()).Value;
                var sourceCutTime = (currentTime - startTime) / (endTime - startTime) * (sourceOut - sourceIn) + sourceIn;

                if (!(startTime + MIN_SEGMENT_DURATION < currentTime) || !(currentTime < endTime - MIN_SEGMENT_DURATION))
                {
                    continue;
                }

                nextSelection.Add(opWidget);

                // Cut current op
                var currentOpSetEndtimeCommand = new UpdateOperatorPartValueFunctionCommand(op.Inputs[HACK_TIMECLIP_ENDTIME_PARAM_INDEX], new Core.Float(currentTime));
                currentOpSetEndtimeCommand.Do();

                var currentOpSetSourceOutCommand = new UpdateOperatorPartValueFunctionCommand(op.Inputs[HACK_TIMECLIP_SOURCEOUT_PARAM_INDEX], new Core.Float(sourceCutTime));
                currentOpSetSourceOutCommand.Do();

                // Intitial new op
                var compositionOp = App.Current.MainWindow.CompositionView.CompositionGraphView.CompositionOperator;

                var addNewOpCommand = new AddOperatorCommand(compositionOp, op.Definition.ID, op.Position.X + 10, op.Position.Y + 10);
                addNewOpCommand.Do();

                var newOpWidget = App.Current.MainWindow.CompositionView.CompositionGraphView.FindOperatorWidgetById(addNewOpCommand.AddedInstanceID);

                nextSelection.Add(newOpWidget);
                var newOp = newOpWidget.Operator;

                if (!String.IsNullOrEmpty(op.Name))
                {
                    newOp.Name = Utilities.GetDuplicatedTitle(op.Name);
                }

                var newOpSetStartTimeCommand = new UpdateOperatorPartValueFunctionCommand(newOp.Inputs[HACK_TIMECLIP_STARTTIME_PARAM_INDEX], new Core.Float(currentTime));
                newOpSetStartTimeCommand.Do();

                var newOpSetEndTimeCommand = new UpdateOperatorPartValueFunctionCommand(newOp.Inputs[HACK_TIMECLIP_ENDTIME_PARAM_INDEX], new Core.Float(endTime));
                newOpSetEndTimeCommand.Do();

                var newOpSetSourceInCommand = new UpdateOperatorPartValueFunctionCommand(newOp.Inputs[HACK_TIMECLIP_SOURCEIN_PARAM_INDEX], new Core.Float(sourceCutTime));
                newOpSetSourceInCommand.Do();

                var newOpSetSourceOutCommand = new UpdateOperatorPartValueFunctionCommand(newOp.Inputs[HACK_TIMECLIP_SOURCEOUT_PARAM_INDEX], new Core.Float(sourceOut));
                newOpSetSourceOutCommand.Do();

                var newOpSetLayerCommand = new UpdateOperatorPartValueFunctionCommand(newOp.Inputs[HACK_TIMECLIP_SOURCEOUT_LAYER_ID], new Float(layerIndex));
                newOpSetLayerCommand.Do();

                commandList.AddRange(new ICommand[]
                                     { currentOpSetEndtimeCommand,
                                       currentOpSetSourceOutCommand,
                                       addNewOpCommand,
                                       newOpSetStartTimeCommand,
                                       newOpSetEndTimeCommand,
                                       newOpSetSourceInCommand,
                                       newOpSetSourceOutCommand,
                                       newOpSetLayerCommand });
            }
            App.Current.UndoRedoStack.Add(new MacroCommand("Split time clip", commandList));

            if (nextSelection.Any())
            {
                App.Current.MainWindow.CompositionView.CompositionGraphView.SelectionHandler.SetElements(nextSelection);
            }
        }