コード例 #1
0
        public void BeginDuplicateConnectionTest()
        {
            //Arrange
            string openPath = Path.Combine(TestDirectory, @"core\DetailedPreviewMargin_Test.dyn");

            RunModel(openPath);

            Guid id = Guid.NewGuid();
            //This guid belongs to a CoreNodeModels.CreateList node inside the .dyn file
            Guid existingNodeGuid = new Guid("81c94fd0-35a0-4680-8535-00aff41192d3");

            //Connection Command with one Input port using a new guid
            var connectionCommand = new DynamoModel.MakeConnectionCommand(id, 0, PortType.Input, DynamoModel.MakeConnectionCommand.Mode.BeginDuplicateConnection);

            //Connection Command with one Output port using a new guid
            var connectionCommand2 = new DynamoModel.MakeConnectionCommand(id, 0, PortType.Output, DynamoModel.MakeConnectionCommand.Mode.BeginDuplicateConnection);

            var addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+"));

            CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false);
            //Connection Command using a guid from a DSFunction added previosuly
            var connectionCommand3 = new DynamoModel.MakeConnectionCommand(addNode.GUID, 0, PortType.Input, DynamoModel.MakeConnectionCommand.Mode.BeginDuplicateConnection);

            //Act
            //The ExecuteCommand method internally will execute the BeginDuplicateConnectionTest method
            CurrentDynamoModel.ExecuteCommand(connectionCommand);
            CurrentDynamoModel.ExecuteCommand(connectionCommand2);
            CurrentDynamoModel.ExecuteCommand(connectionCommand3);

            //Assert
            //Validating that the commands were created successfully
            Assert.IsNotNull(connectionCommand);
            Assert.IsNotNull(connectionCommand2);
            Assert.IsNotNull(connectionCommand3);
        }
コード例 #2
0
        public void Watch3D_Disconnect_Reconnect_CorrectRenderings()
        {
            OpenVisualizationTest("ASM_points_line.dyn");

            var ws = ViewModel.Model.CurrentWorkspace as HomeWorkspaceModel;

            var watch3DNode       = ws.FirstNodeFromWorkspace <Watch3D>();
            var totalPointsInView = BackgroundPreviewGeometry.TotalPoints();

            Assert.Greater(totalPointsInView, 3);

            // Disconnect the port coming into the watch3d node.
            var connector = watch3DNode.InPorts[0].Connectors.First();

            watch3DNode.InPorts[0].Connectors.Remove(connector);

            // Three items, the grid, the axes, and the light will remain.
            var view = FindFirstWatch3DNodeView();

            Assert.AreEqual(view.View.Items.Count, 3);

            var linesNode = ws.Nodes.First(n => n.GUID.ToString() == "7c1cecee-43ed-43b5-a4bb-5f71c50341b2");

            var cmd1 = new DynamoModel.MakeConnectionCommand(linesNode.GUID.ToString(), 0, PortType.Output,
                                                             DynamoModel.MakeConnectionCommand.Mode.Begin);
            var cmd2 = new DynamoModel.MakeConnectionCommand(watch3DNode.GUID.ToString(), 0, PortType.Input,
                                                             DynamoModel.MakeConnectionCommand.Mode.End);

            ViewModel.Model.ExecuteCommand(cmd1);
            ViewModel.Model.ExecuteCommand(cmd2);

            // View contains 3 default items and a collection of lines from the node connected to the Watch3D node
            Assert.AreEqual(4, view.View.Items.Count);
        }
コード例 #3
0
ファイル: DynamoCommands.cs プロジェクト: jxndwl/Dynamo
        private void MakeConnectionImpl(DynamoModel.MakeConnectionCommand command)
        {
            Guid nodeId = command.ModelGuid;

            switch (command.ConnectionMode)
            {
            case DynamoModel.MakeConnectionCommand.Mode.Begin:
                CurrentSpaceViewModel.BeginConnection(
                    nodeId, command.PortIndex, command.Type);
                break;

            case DynamoModel.MakeConnectionCommand.Mode.End:
                CurrentSpaceViewModel.EndConnection(
                    nodeId, command.PortIndex, command.Type);
                break;

            case DynamoModel.MakeConnectionCommand.Mode.BeginShiftReconnections:
                CurrentSpaceViewModel.BeginShiftReconnections(
                    nodeId, command.PortIndex, command.Type);
                break;

            case DynamoModel.MakeConnectionCommand.Mode.EndShiftReconnections:
                CurrentSpaceViewModel.EndConnection(
                    nodeId, command.PortIndex, command.Type);
                break;

            case DynamoModel.MakeConnectionCommand.Mode.Cancel:
                CurrentSpaceViewModel.CancelConnection();
                break;
            }
        }
コード例 #4
0
        protected void MakeConnector(NodeModel start, NodeModel end, int portStart, int portEnd)
        {
            var cmdStart = new DynamoModel.MakeConnectionCommand(start.GUID, portStart, PortType.Output,
                                                                 DynamoModel.MakeConnectionCommand.Mode.Begin);

            this.Model.ExecuteCommand(cmdStart);

            var cmdend = new DynamoModel.MakeConnectionCommand(end.GUID, portEnd, PortType.Input,
                                                               DynamoModel.MakeConnectionCommand.Mode.End);

            this.Model.ExecuteCommand(cmdend);
        }
コード例 #5
0
ファイル: StateMachine.cs プロジェクト: whztt07/Dynamo
            internal bool HandlePortClicked(PortViewModel portViewModel)
            {
                // We only entertain port clicking when the current state is idle,
                // or when it is already having a connector being established.
                if (currentState != State.None && (currentState != State.Connection))
                {
                    return(false);
                }

                var portModel = portViewModel.PortModel;

                var workspaceViewModel = owningWorkspace.DynamoViewModel.CurrentSpaceViewModel;

                if (this.currentState != State.Connection) // Not in a connection attempt...
                {
                    PortType portType  = PortType.INPUT;
                    Guid     nodeId    = portModel.Owner.GUID;
                    int      portIndex = portModel.Owner.GetPortIndexAndType(portModel, out portType);

                    var mode    = DynamoModel.MakeConnectionCommand.Mode.Begin;
                    var command = new DynamoModel.MakeConnectionCommand(nodeId, portIndex, portType, mode);
                    owningWorkspace.DynamoViewModel.ExecuteCommand(command);

                    if (null != owningWorkspace.activeConnector)
                    {
                        this.currentState              = State.Connection;
                        owningWorkspace.CurrentCursor  = CursorLibrary.GetCursor(CursorSet.ArcSelect);
                        owningWorkspace.IsCursorForced = false;
                    }
                }
                else  // Attempt to complete the connection
                {
                    // Check if connection is valid
                    if (owningWorkspace.CheckActiveConnectorCompatibility(portViewModel))
                    {
                        PortType portType  = PortType.INPUT;
                        Guid     nodeId    = portModel.Owner.GUID;
                        int      portIndex = portModel.Owner.GetPortIndexAndType(portModel, out portType);

                        var mode    = DynamoModel.MakeConnectionCommand.Mode.End;
                        var command = new DynamoModel.MakeConnectionCommand(nodeId,
                                                                            portIndex, portType, mode);
                        owningWorkspace.DynamoViewModel.ExecuteCommand(command);

                        owningWorkspace.CurrentCursor  = null;
                        owningWorkspace.IsCursorForced = false;
                        this.currentState = State.None;
                    }
                }

                return(true);
            }
コード例 #6
0
        public override int Mutate(NodeModel node)
        {
            Random rand = new Random(1);

            DynamoViewModel.UIDispatcher.Invoke(new Action(() =>
            {
                Guid guidNumber = Guid.NewGuid();

                double coordinatesX = node.X * rand.NextDouble();
                double coordinatesY = node.Y * rand.NextDouble();

                DynamoModel.CreateNodeCommand createNodeNumber1 = null;
                    //new DynamoModel.AddNodeCommand(guidNumber, "Number", coordinatesX,
                    //    coordinatesY, false, true);

                DynamoViewModel.ExecuteCommand(createNodeNumber1);

                DynamoModel.MakeConnectionCommand connToStart1 =
                    new DynamoModel.MakeConnectionCommand(guidNumber, 0, PortType.Output,
                        DynamoModel.MakeConnectionCommand.Mode.Begin);
                DynamoModel.MakeConnectionCommand connToStart2 =
                    new DynamoModel.MakeConnectionCommand(node.GUID, 0, PortType.Input,
                        DynamoModel.MakeConnectionCommand.Mode.End);

                DynamoModel.MakeConnectionCommand connToAmount1 =
                    new DynamoModel.MakeConnectionCommand(guidNumber, 0, PortType.Output,
                        DynamoModel.MakeConnectionCommand.Mode.Begin);
                DynamoModel.MakeConnectionCommand connToAmount2 =
                    new DynamoModel.MakeConnectionCommand(node.GUID, 1, PortType.Input,
                        DynamoModel.MakeConnectionCommand.Mode.End);

                DynamoModel.MakeConnectionCommand connToStep1 =
                    new DynamoModel.MakeConnectionCommand(guidNumber, 0, PortType.Output,
                        DynamoModel.MakeConnectionCommand.Mode.Begin);
                DynamoModel.MakeConnectionCommand connToStep2 =
                    new DynamoModel.MakeConnectionCommand(node.GUID, 2, PortType.Input,
                        DynamoModel.MakeConnectionCommand.Mode.End);

                DynamoViewModel.ExecuteCommand(connToStart1); //"Number" with "Number Sequence" on Start
                DynamoViewModel.ExecuteCommand(connToStart2); //"Number" with "Number Sequence" on Start
                DynamoViewModel.ExecuteCommand(connToAmount1); //"Number" with "Number Sequence" on Amount
                DynamoViewModel.ExecuteCommand(connToAmount2); //"Number" with "Number Sequence" on Amount
                DynamoViewModel.ExecuteCommand(connToStep1); //"Number" with "Number Sequence" on Step
                DynamoViewModel.ExecuteCommand(connToStep2); //"Number" with "Number Sequence" on Step
            }));

            return 4;
        }
コード例 #7
0
        public override int Mutate(NodeModel node)
        {
            Random rand = new Random(1);

            int countOfInPorts = 0;

            var nodeConnectors = node.AllConnectors.ToList();

            foreach (ConnectorModel connector in nodeConnectors)
            {
                if (connector.Start.Owner.GUID != node.GUID)
                {
                    Guid   guidNumber          = Guid.NewGuid();
                    double coordinatesX        = node.X * rand.NextDouble();
                    double coordinatesYNumber1 = node.Y * rand.NextDouble();

                    countOfInPorts++;

                    DynamoViewModel.UIDispatcher.Invoke(new Action(() =>
                    {
                        //make node
                        DynamoModel.CreateNodeCommand createNodeNumber1 = null;
                        //new DynamoModel.AddNodeCommand(guidNumber, "Number",
                        //    coordinatesX, coordinatesYNumber1, false, true);

                        //create node
                        DynamoViewModel.ExecuteCommand(createNodeNumber1);

                        int outPortIndex = connector.Start.Index;
                        int inPortIndex  = connector.End.Index;

                        //make connection
                        DynamoModel.MakeConnectionCommand connToStart1 =
                            new DynamoModel.MakeConnectionCommand(guidNumber, outPortIndex,
                                                                  PortType.Output, DynamoModel.MakeConnectionCommand.Mode.Begin);
                        DynamoModel.MakeConnectionCommand connToStart2 =
                            new DynamoModel.MakeConnectionCommand(node.GUID, inPortIndex,
                                                                  PortType.Input, DynamoModel.MakeConnectionCommand.Mode.End);

                        //create connections
                        DynamoViewModel.ExecuteCommand(connToStart1);
                        DynamoViewModel.ExecuteCommand(connToStart2);
                    }));
                }
            }
            return(countOfInPorts * 2);
        }
コード例 #8
0
ファイル: DynamoCommands.cs プロジェクト: zjloscar/Dynamo
        private void MakeConnectionImpl(DynamoModel.MakeConnectionCommand command)
        {
            Guid nodeId = command.ModelGuid;

            switch (command.ConnectionMode)
            {
            case DynamoModel.MakeConnectionCommand.Mode.Begin:
                CurrentSpaceViewModel.BeginConnection(
                    nodeId, command.PortIndex, command.Type);
                break;

            case DynamoModel.MakeConnectionCommand.Mode.End:
                CurrentSpaceViewModel.EndConnection(
                    nodeId, command.PortIndex, command.Type);
                break;

            case DynamoModel.MakeConnectionCommand.Mode.BeginShiftReconnections:
                CurrentSpaceViewModel.BeginShiftReconnections(
                    nodeId, command.PortIndex, command.Type);
                break;

            case DynamoModel.MakeConnectionCommand.Mode.EndShiftReconnections:
                CurrentSpaceViewModel.EndConnection(
                    nodeId, command.PortIndex, command.Type);
                break;

            // TODO - can be removed in Dynamo 3.0 - DYN-1729
            case DynamoModel.MakeConnectionCommand.Mode.EndAndStartCtrlConnection:
                CurrentSpaceViewModel.BeginCreateConnections(
                    nodeId, command.PortIndex, command.Type);
                break;

            case DynamoModel.MakeConnectionCommand.Mode.BeginDuplicateConnection:
                CurrentSpaceViewModel.BeginConnection(
                    nodeId, command.PortIndex, command.Type);
                break;

            case DynamoModel.MakeConnectionCommand.Mode.BeginCreateConnections:
                CurrentSpaceViewModel.BeginCreateConnections(
                    nodeId, command.PortIndex, command.Type);
                break;

            case DynamoModel.MakeConnectionCommand.Mode.Cancel:
                CurrentSpaceViewModel.CancelConnection();
                break;
            }
        }
コード例 #9
0
ファイル: NumberRangeMutator.cs プロジェクト: whztt07/Dynamo
        public override int Mutate(NodeModel node)
        {
            DynamoViewModel.UIDispatcher.Invoke(new Action(() =>
            {
                Guid guidNumber = Guid.NewGuid();

                double coordinatesX = 120;
                double coordinatesY = 180;

                DynamoModel.CreateNodeCommand createNodeCmd1 =
                    new DynamoModel.CreateNodeCommand(guidNumber, "Number", coordinatesX,
                                                      coordinatesY, false, true);

                DynamoViewModel.ExecuteCommand(createNodeCmd1);

                DynamoModel.MakeConnectionCommand connToStart1 =
                    new DynamoModel.MakeConnectionCommand(guidNumber, 0, PortType.OUTPUT,
                                                          DynamoModel.MakeConnectionCommand.Mode.Begin);
                DynamoModel.MakeConnectionCommand connToStart2 =
                    new DynamoModel.MakeConnectionCommand(node.GUID, 0, PortType.INPUT,
                                                          DynamoModel.MakeConnectionCommand.Mode.End);

                DynamoModel.MakeConnectionCommand connToAmount1 =
                    new DynamoModel.MakeConnectionCommand(guidNumber, 0, PortType.OUTPUT,
                                                          DynamoModel.MakeConnectionCommand.Mode.Begin);
                DynamoModel.MakeConnectionCommand connToAmount2 =
                    new DynamoModel.MakeConnectionCommand(node.GUID, 1, PortType.INPUT,
                                                          DynamoModel.MakeConnectionCommand.Mode.End);

                DynamoModel.MakeConnectionCommand connToStep1 =
                    new DynamoModel.MakeConnectionCommand(guidNumber, 0, PortType.OUTPUT,
                                                          DynamoModel.MakeConnectionCommand.Mode.Begin);
                DynamoModel.MakeConnectionCommand connToStep2 =
                    new DynamoModel.MakeConnectionCommand(node.GUID, 2, PortType.INPUT,
                                                          DynamoModel.MakeConnectionCommand.Mode.End);

                DynamoViewModel.ExecuteCommand(connToStart1);  //"Number" with "Number Range" on Start
                DynamoViewModel.ExecuteCommand(connToStart2);  //"Number" with "Number Range" on Start
                DynamoViewModel.ExecuteCommand(connToAmount1); //"Number" with "Number Range" on End
                DynamoViewModel.ExecuteCommand(connToAmount2); //"Number" with "Number Range" on End
                DynamoViewModel.ExecuteCommand(connToStep1);   //"Number" with "Number Range" on Step
                DynamoViewModel.ExecuteCommand(connToStep2);   //"Number" with "Number Range" on Step
            }));

            return(4);
        }
コード例 #10
0
        public override int Mutate(NodeModel node)
        {
            NodeModel lastNode = DynamoModel.CurrentWorkspace.Nodes.Last();

            if (lastNode.OutPorts.Count > 0)
            {
                DynamoViewModel.UIDispatcher.Invoke(new Action(() =>
                {
                    DynamoModel.MakeConnectionCommand connectCmd1 =
                        new DynamoModel.MakeConnectionCommand(lastNode.GUID, 0, PortType.Output,
                                                              DynamoModel.MakeConnectionCommand.Mode.Begin);
                    DynamoModel.MakeConnectionCommand connectCmd2 =
                        new DynamoModel.MakeConnectionCommand(node.GUID, 0, PortType.Input,
                                                              DynamoModel.MakeConnectionCommand.Mode.End);

                    DynamoViewModel.ExecuteCommand(connectCmd1);
                    DynamoViewModel.ExecuteCommand(connectCmd2);
                }));
            }
            else
            {
                DynamoViewModel.UIDispatcher.Invoke(new Action(() =>
                {
                    DynamoModel.MakeConnectionCommand connectCmd1 =
                        new DynamoModel.MakeConnectionCommand(node.GUID, 0, PortType.Output,
                                                              DynamoModel.MakeConnectionCommand.Mode.Begin);
                    DynamoModel.MakeConnectionCommand connectCmd2 =
                        new DynamoModel.MakeConnectionCommand(lastNode.GUID, 0, PortType.Input,
                                                              DynamoModel.MakeConnectionCommand.Mode.End);

                    DynamoViewModel.ExecuteCommand(connectCmd1);
                    DynamoViewModel.ExecuteCommand(connectCmd2);
                }));
            }

            return(5);
        }
コード例 #11
0
ファイル: StateMachine.cs プロジェクト: jxndwl/Dynamo
            internal bool HandlePortClicked(PortViewModel portViewModel)
            {
                // We only entertain port clicking when the current state is idle,
                // or when it is already having a connector being established.
                if (currentState != State.None && (currentState != State.Connection))
                {
                    return(false);
                }

                var portModel = portViewModel.PortModel;

                var workspaceViewModel = owningWorkspace.DynamoViewModel.CurrentSpaceViewModel;

                if (this.currentState != State.Connection) // Not in a connection attempt...
                {
                    Guid nodeId    = portModel.Owner.GUID;
                    int  portIndex = portModel.Index;

                    var mode = DynamoModel.MakeConnectionCommand.Mode.Begin;
                    if (Keyboard.Modifiers == ModifierKeys.Shift) //if shift key is down, handle multiple wire reconnections
                    {
                        multipleConnections = true;
                        mode = DynamoModel.MakeConnectionCommand.Mode.BeginShiftReconnections;
                    }

                    var command = new DynamoModel.MakeConnectionCommand(nodeId, portIndex, portModel.PortType, mode);
                    owningWorkspace.DynamoViewModel.ExecuteCommand(command);

                    if (null != owningWorkspace.FirstActiveConnector)
                    {
                        this.currentState              = State.Connection;
                        owningWorkspace.CurrentCursor  = CursorLibrary.GetCursor(CursorSet.ArcSelect);
                        owningWorkspace.IsCursorForced = false;
                    }
                }
                else  // Attempt to complete the connection
                {
                    // Check if connection is valid
                    if (owningWorkspace.CheckActiveConnectorCompatibility(portViewModel))
                    {
                        Guid nodeId    = portModel.Owner.GUID;
                        int  portIndex = portModel.Index;

                        var mode = DynamoModel.MakeConnectionCommand.Mode.End;
                        if (multipleConnections)
                        {
                            mode = DynamoModel.MakeConnectionCommand.Mode.EndShiftReconnections;
                        }
                        var command = new DynamoModel.MakeConnectionCommand(nodeId,
                                                                            portIndex, portModel.PortType, mode);
                        owningWorkspace.DynamoViewModel.ExecuteCommand(command);

                        multipleConnections            = false;
                        owningWorkspace.CurrentCursor  = null;
                        owningWorkspace.IsCursorForced = false;
                        this.currentState = State.None;
                    }
                }

                return(true);
            }
コード例 #12
0
        public override int Mutate(NodeModel node)
        {
            int    workspaceIndex = DynamoViewModel.CurrentWorkspaceIndex;
            Random rand           = new Random(1);

            DynamoViewModel.UIDispatcher.Invoke(new Action(() =>
            {
                DynamoModel.SwitchTabCommand switchCmd =
                    new DynamoModel.SwitchTabCommand(workspaceIndex);

                DynamoViewModel.ExecuteCommand(switchCmd);
                Thread.Sleep(100);
            }));

            DynamoViewModel.UIDispatcher.Invoke(new Action(() =>
            {
                DynamoModel.SwitchTabCommand switchCmd =
                    new DynamoModel.SwitchTabCommand(workspaceIndex);

                DynamoViewModel.ExecuteCommand(switchCmd);
                Thread.Sleep(100);
            }));

            var workspaces = DynamoModel.Workspaces;

            CustomNodeInfo info;
            var            id = ((Function)node).Definition.FunctionId;

            DynamoViewModel.Model.CustomNodeManager.TryGetNodeInfo(id, out info);

            var outputsInCustomNode =
                workspaces.FirstOrDefault((t) => (t.Name == info.Name))
                .Nodes.Where(t => t.GetType() == typeof(Output))
                .ToList();

            Guid   numberGuid   = Guid.NewGuid();
            double coordinatesX = rand.NextDouble() * node.X;
            double coordinatesY = rand.NextDouble() * node.Y;

            //DynamoViewModel.UIDispatcher.Invoke(new Action(() =>
            //{
            //    DynamoModel.AddNodeCommand addCommand =
            //        new DynamoModel.AddNodeCommand(numberGuid, "Number",
            //            coordinatesX, coordinatesY, false, false);
            //    DynamoViewModel.ExecuteCommand(addCommand);
            //}));

            foreach (NodeModel output in outputsInCustomNode)
            {
                DynamoViewModel.UIDispatcher.Invoke(new Action(() =>
                {
                    DynamoModel.MakeConnectionCommand connToAnother1 =
                        new DynamoModel.MakeConnectionCommand(numberGuid, 0, PortType.Output,
                                                              DynamoModel.MakeConnectionCommand.Mode.Begin);
                    DynamoModel.MakeConnectionCommand connToAnother2 =
                        new DynamoModel.MakeConnectionCommand(output.GUID, 0, PortType.Input,
                                                              DynamoModel.MakeConnectionCommand.Mode.End);

                    DynamoViewModel.ExecuteCommand(connToAnother1);
                    DynamoViewModel.ExecuteCommand(connToAnother2);
                }));
            }

            int numberOfUndosNeeded = outputsInCustomNode.Count * 2 + 1;

            return(numberOfUndosNeeded);
        }