public void Do() { var metaInput = InputParent.GetMetaInput(InputToPublish); var newMetaInput = metaInput.Clone(); newMetaInput.Name = _newName; var addInputCommand = new AddInputCommand(CompositionOperator, newMetaInput); addInputCommand.Do(); var opPartToUpdate = CompositionOperator.Inputs[CompositionOperator.Inputs.Count - 1]; var func = InputToPublish.Func.Clone() as Utilities.ValueFunction; var updateFuncCommand = new UpdateOperatorPartValueFunctionCommand(opPartToUpdate, func.Value); updateFuncCommand.Do(); var connection = new MetaConnection(Guid.Empty, newMetaInput.ID, InputToPublish.Parent.ID, metaInput.ID); var insertConnectionCommand = new InsertConnectionCommand(CompositionOperator.Definition, connection, 0); insertConnectionCommand.Do(); _commands.Clear(); _commands.AddRange(new ICommand[] { addInputCommand, updateFuncCommand, insertConnectionCommand }); }
private List <ICommand> SetupSingleAnimation(OperatorPart opPart, double keyframeTime) { var context = new OperatorPartContext() { Time = (float)keyframeTime }; float currentValue = opPart.Eval(context).Value; // this command is needed to restore the original value correctly when undoing this, for doing it it's redundant var setValueCommand = new SetFloatValueCommand(opPart, currentValue); var compOp = opPart.Parent.Parent; var addCurveOpCommand = new AddOperatorCommand(compOp, CurveID, 100, 100, 100, false); var curveOpInstanceId = addCurveOpCommand.AddedInstanceID; var addTimeOpCommand = new AddOperatorCommand(compOp, CurrentTimeID, 100, 100, 100, false); var curveMetaOp = MetaManager.Instance.GetMetaOperator(CurveID); var timeMetaOp = MetaManager.Instance.GetMetaOperator(CurrentTimeID); var timeToCurve = new MetaConnection(addTimeOpCommand.AddedInstanceID, timeMetaOp.Outputs[0].ID, addCurveOpCommand.AddedInstanceID, curveMetaOp.Inputs[0].ID); var connectionTimeToCurveCommand = new InsertConnectionCommand(compOp.Definition, timeToCurve, 0); var curveToCurrent = new MetaConnection(addCurveOpCommand.AddedInstanceID, curveMetaOp.Outputs[0].ID, opPart.Parent.ID, opPart.ID); var connectionCurveToCurrentCommand = new InsertConnectionCommand(compOp.Definition, curveToCurrent, 0); var addKeyframeCommand = new AddOrUpdateKeyframeCommand(keyframeTime, currentValue, compOp, curveOpInstanceId, curveMetaOp.Inputs[0].ID); return(new List <ICommand>() { setValueCommand, addCurveOpCommand, addTimeOpCommand, connectionTimeToCurveCommand, connectionCurveToCurrentCommand, addKeyframeCommand }); }