示例#1
0
        /// <summary>
        /// CONVERSION: Creates a NodeGraphLink, given an XML Serialized copy of the link and a view
        /// </summary>
        /// <param name="p_TreeNode"></param>
        /// <param name="p_View"></param>
        public NodeGraphLink(ConnectionDescriptor connection, NodeGraphView p_View)
        {
            int v_InputNodeId            = connection.sourceModule;
            int v_OutputNodeId           = connection.destinationModule;
            int v_InputNodeConnectorIdx  = connection.sourcePort;
            int v_OutputNodeConnectorIdx = connection.destinationPort;

            if (v_InputNodeId != 0x0FFFFFFF)
            {
                //this.m_InputConnector = p_View.NodeCollection[v_InputNodeId].Connectors[v_InputNodeConnectorIdx];
                this.m_InputConnector = p_View.NodeCollection[v_InputNodeId].GetConnector(v_InputNodeConnectorIdx, ConnectorType.OutputConnector);
            }
            else
            {
                this.m_InputConnector = p_View.NodeConnectorCollection[v_InputNodeConnectorIdx];
            }

            if (v_OutputNodeId != 0x0FFFFFFF)
            {
                //this.m_OutputConnector = p_View.NodeCollection[v_OutputNodeId].Connectors[v_OutputNodeConnectorIdx];
                this.m_OutputConnector = p_View.NodeCollection[v_OutputNodeId].GetConnector(v_OutputNodeConnectorIdx, ConnectorType.InputConnector);
            }
            else
            {
                this.m_OutputConnector = p_View.NodeConnectorCollection[v_OutputNodeConnectorIdx];
            }
        }
示例#2
0
        /// <summary>
        /// CONVERSION: Creates a NodeGraphLink, given an XML Serialized copy of the link and a view
        /// </summary>
        /// <param name="p_TreeNode"></param>
        /// <param name="p_View"></param>
        public NodeGraphLink(ConnectionDescriptor connection, NodeGraphView p_View)
        {
            int v_InputNodeId = connection.sourceModule;
            int v_OutputNodeId = connection.destinationModule;
            int v_InputNodeConnectorIdx = connection.sourceModule;
            int v_OutputNodeConnectorIdx = connection.sourcePort;

            this.m_InputConnector = p_View.NodeCollection[v_InputNodeId].Connectors[v_InputNodeConnectorIdx];
            this.m_OutputConnector = p_View.NodeCollection[v_OutputNodeId].Connectors[v_OutputNodeConnectorIdx];
        }
示例#3
0
        /// <summary>
        /// SERIALIZATION: Creates a NodeGraphLink, given an XML Serialized copy of the link and a view
        /// </summary>
        /// <param name="p_TreeNode"></param>
        /// <param name="p_View"></param>
        public NodeGraphLink(XmlTreeNode p_TreeNode, NodeGraphView p_View)
        {
            int v_InputNodeId            = int.Parse(p_TreeNode.m_attributes["InputNodeId"]);
            int v_OutputNodeId           = int.Parse(p_TreeNode.m_attributes["OutputNodeId"]);
            int v_InputNodeConnectorIdx  = int.Parse(p_TreeNode.m_attributes["InputNodeConnectorIdx"]);
            int v_OutputNodeConnectorIdx = int.Parse(p_TreeNode.m_attributes["OutputNodeConnectorIdx"]);

            this.m_InputConnector  = p_View.NodeCollection[v_InputNodeId].Connectors[v_InputNodeConnectorIdx];
            this.m_OutputConnector = p_View.NodeCollection[v_OutputNodeId].Connectors[v_OutputNodeConnectorIdx];
        }
示例#4
0
        /// <summary>
        /// SERIALIZATION: Creates a NodeGraphLink, given an XML Serialized copy of the link and a view
        /// </summary>
        /// <param name="p_TreeNode"></param>
        /// <param name="p_View"></param>
        public NodeGraphLink(XmlTreeNode p_TreeNode, NodeGraphView p_View)
        {
            int v_InputNodeId = int.Parse(p_TreeNode.m_attributes["InputNodeId"]);
            int v_OutputNodeId = int.Parse(p_TreeNode.m_attributes["OutputNodeId"]);
            int v_InputNodeConnectorIdx = int.Parse(p_TreeNode.m_attributes["InputNodeConnectorIdx"]);
            int v_OutputNodeConnectorIdx = int.Parse(p_TreeNode.m_attributes["OutputNodeConnectorIdx"]);

            this.m_InputConnector = p_View.NodeCollection[v_InputNodeId].Connectors[v_InputNodeConnectorIdx];
            this.m_OutputConnector = p_View.NodeCollection[v_OutputNodeId].Connectors[v_OutputNodeConnectorIdx];
            this.m_NodeGraphDataType = p_View.NodeCollection[v_InputNodeId].Connectors[v_InputNodeConnectorIdx].DataType;
        }
示例#5
0
 /// <summary>
 /// Gets the connector index, given the connector object reference
 /// </summary>
 /// <param name="p_Connector">the connector reference</param>
 /// <returns>the connector index</returns>
 public int GetConnectorIndex(NodeGraphConnector p_Connector)
 {
     for (int i = 0; i < this.m_Connectors.Count; i++)
     {
         if (this.m_Connectors[i] == p_Connector)
         {
             return(i);
         }
     }
     return(-1);
 }
示例#6
0
 /// <summary>
 /// Returns whether the node can be processed or not
 /// </summary>
 /// <returns></returns>
 public bool CanProcess()
 {
     if (this.m_oConnectorType == ConnectorType.OutputConnector)
     {
         return(true);
     }
     else
     {
         NodeGraphConnector v_Connector = m_oView.ParentPanel.GetLink(this);
         if (v_Connector == null)
         {
             return(false);
         }
         else
         {
             return(true);
         }
     }
 }
示例#7
0
 /// <summary>
 /// Virtual: Sample Process for a node, must be overriden in child class, processes only unlinked inputs.
 /// </summary>
 /// <returns>NodeGraphData depending of the validity</returns>
 public virtual NodeGraphData Process()
 {
     if (this.m_oConnectorType == ConnectorType.OutputConnector)
     {
         return(m_oParentNode.Process());
     }
     else
     {
         NodeGraphConnector v_Connector = m_oView.ParentPanel.GetLink(this);
         if (v_Connector == null)
         {
             return(new NodeGraphInvalidData(this.m_oParentNode, "Connector:" + this.Name + " NOT LINKED"));
         }
         else
         {
             return(v_Connector.Process());
         }
     }
 }
示例#8
0
        /// <summary>
        /// CONVERSION: Creates a NodeGraphLink, given an XML Serialized copy of the link and a view
        /// </summary>
        /// <param name="p_TreeNode"></param>
        /// <param name="p_View"></param>
        public NodeGraphLink(ConnectionDescriptor connection, NodeGraphView p_View)
        {
            int v_InputNodeId = connection.sourceModule;
            int v_OutputNodeId = connection.destinationModule;
            int v_InputNodeConnectorIdx = connection.sourcePort;
            int v_OutputNodeConnectorIdx = connection.destinationPort;

            if (v_InputNodeId != 0x0FFFFFFF)
            {
                //this.m_InputConnector = p_View.NodeCollection[v_InputNodeId].Connectors[v_InputNodeConnectorIdx];
                this.m_InputConnector = p_View.NodeCollection[v_InputNodeId].GetConnector(v_InputNodeConnectorIdx, ConnectorType.OutputConnector);
            }
            else
                this.m_InputConnector = p_View.NodeConnectorCollection[v_InputNodeConnectorIdx];

            if (v_OutputNodeId != 0x0FFFFFFF)
            {
                //this.m_OutputConnector = p_View.NodeCollection[v_OutputNodeId].Connectors[v_OutputNodeConnectorIdx];
                this.m_OutputConnector = p_View.NodeCollection[v_OutputNodeId].GetConnector(v_OutputNodeConnectorIdx, ConnectorType.InputConnector);
            }
            else
                this.m_OutputConnector = p_View.NodeConnectorCollection[v_OutputNodeConnectorIdx];
        }
示例#9
0
        /// <summary>
        /// Deletes a link, given a connector
        /// </summary>
        /// <param name="p_Connector"></param>
        private void DeleteLinkConnectors(NodeGraphConnector p_Connector)
        {
            List<NodeGraphLink> v_LinksToDelete = new List<NodeGraphLink>();

            foreach (NodeGraphLink i_Link in this.View.Links)
            {
                if (i_Link.Input == p_Connector || i_Link.Output == p_Connector)
                {
                    v_LinksToDelete.Add(i_Link);
                }
            }

            foreach (NodeGraphLink i_LinkToDelete in v_LinksToDelete)
            {
                this.View.Links.Remove(i_LinkToDelete);
            }

             Refresh();
        }
示例#10
0
 /// <summary>
 /// Returns whether a connector is already linked
 /// </summary>
 /// <param name="p_Node"></param>
 /// <returns></returns>
 public bool IsLinked(NodeGraphConnector p_Node)
 {
     foreach (NodeGraphLink i_Link in this.View.Links)
     {
         if (i_Link.Input == p_Node || i_Link.Output == p_Node) return true;
     }
     return false;
 }
示例#11
0
 /// <summary>
 /// Returns the other end of a connector
 /// </summary>
 /// <param name="p_LinkOutConnector"></param>
 /// <returns></returns>
 public NodeGraphConnector GetLink(NodeGraphConnector p_LinkOutConnector)
 {
     foreach (NodeGraphLink i_Link in this.View.Links)
     {
         if (i_Link.Output == p_LinkOutConnector) return i_Link.Input;
     }
     return null;
 }
示例#12
0
        /// <summary>
        /// Creates a UserControl component that displays NodeGraphViews and let interact with NodeGraphNodes & NodeGraphLinks
        /// </summary>
        public NodeGraphPanel()
        {
            InitializeComponent();

            this.m_oView = new NodeGraphView(this);
            this.m_oDebugFont = new Font("Tahoma", 8.0f);
            this.m_ScrollMargins = 32;
            this.m_ScrollMarginsValue = 10;
            this.m_eEditMode = NodeGraphEditMode.Idle;
            this.m_ViewSpaceCursorLocation = new Point();
            this.m_bAltPressed = false;
            this.m_bCtrlPressed = false;
            this.m_NodeText = new SolidBrush(Color.White);
            this.m_NodeTextShadow = new SolidBrush(Color.Black);
            this.NodeTitleZoomThreshold = 0.5f;
            this.NodeConnectorTextZoomTreshold = 0.8f;
            this.NodeHeaderSize = 24;
            this.NodeTextColor = Color.FromArgb(255, 255, 255, 255);
            this.NodeTextShadowColor = Color.FromArgb(128, 0, 0, 0);
            this.NodeFillColor = Color.FromArgb(255, 128, 128, 128);
            this.NodeFillSelectedColor = Color.FromArgb(255, 160, 128, 100);
            this.NodeOutlineColor = Color.FromArgb(255, 180, 180, 180);
            this.NodeOutlineSelectedColor = Color.FromArgb(255, 192, 160, 128);
            this.ConnectorTextColor = Color.FromArgb(255, 64, 64, 64);
            this.ConnectorFillColor = Color.FromArgb(255, 0, 0, 0);
            this.ConnectorFillSelectedColor = Color.FromArgb(255, 32, 32, 32);
            this.ConnectorOutlineColor = Color.FromArgb(255, 32, 32, 32);
            this.ConnectorOutlineSelectedColor = Color.FromArgb(255, 64, 64, 64);
            this.SelectionFillColor = Color.FromArgb(64, 128, 90, 30);
            this.SelectionOutlineColor = Color.FromArgb(192, 255, 180, 60);
            this.NodeHeaderColor = Color.FromArgb(128, 0, 0, 0);
            this.LinkColor = Color.FromArgb(255, 180, 180, 180);
            this.LinkEditableColor = Color.FromArgb(255, 64, 255, 0);
            this.NodeSignalValidColor = Color.FromArgb(255, 0, 255, 0);
            this.NodeSignalInvalidColor = Color.FromArgb(255, 255, 0, 0);
            this.m_NodeTitleFont = new Font("Tahoma", 8.0f);
            this.m_NodeConnectorFont = new Font("Tahoma", 7.0f);
            this.m_NodeScaledTitleFont = new Font(m_NodeTitleFont.Name, m_NodeTitleFont.Size);
            this.m_NodeScaledConnectorFont = new Font(m_NodeConnectorFont.Name, m_NodeConnectorFont.Size);
            this.m_LinkVisualStyle = LinkVisualStyle.Curve;
            this.ConnectorHitZoneBleed = 2;
            this.m_SelectBoxOrigin = new Point();
            this.m_SelectBoxCurrent = new Point();
            this.LinkHardness = 2.0f;
            this.m_iScrollLastX = 0;
            this.m_iScrollLastY = 0;
            this.EnableDrawDebug = true;
            this.Dock = DockStyle.Fill;
            this.DoubleBuffered = true;
            this.m_InputLink = null;
            this.m_OutputLink = null;
            this.m_bShowGrid = false;
            this.m_iGridPadding = 256;
            this.m_iGridAlpha = 32;
            this.m_bDrawShadow = true;
            this.m_bSmoothBehavior = false;
        }
示例#13
0
        /// <summary>
        /// Validates a link being edited
        /// </summary>
        private void ValidateLink()
        {
            if (this.m_InputLink != null &&
                this.m_OutputLink != null &&
                this.m_InputLink != this.m_OutputLink &&
                this.m_InputLink.Type != this.m_OutputLink.Type)
            {
                if (m_InputLink.Type == ConnectorType.OutputConnector)
                {
                    if (IsLinked(m_OutputLink)) DeleteLinkConnectors(m_OutputLink);
                    this.View.Links.Add(new NodeGraphLink(m_InputLink, m_OutputLink));
                }
                else
                {
                    if (IsLinked(m_InputLink)) DeleteLinkConnectors(m_InputLink);
                    this.View.Links.Add(new NodeGraphLink( m_OutputLink, m_InputLink));
                }

            }
            m_InputLink = null;
            m_OutputLink = null;
        }
示例#14
0
        /// <summary>
        /// Behavior when Mouse Click is released
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void NodeGraphPanel_MouseUp(object sender, MouseEventArgs e)
        {
            switch (this.m_eEditMode)
            {
                case NodeGraphEditMode.Scrolling:

                    if (e.Button == MouseButtons.Middle) this.m_eEditMode = NodeGraphEditMode.Idle;
                    break;
                case NodeGraphEditMode.Selecting:
                case NodeGraphEditMode.SelectingBox:

                    if (e.Button == MouseButtons.Left)
                    {
                        this.CreateSelection();
                        this.m_eEditMode = NodeGraphEditMode.Idle;
                    }
                    break;
                case NodeGraphEditMode.MovingSelection:

                    if (e.Button == MouseButtons.Left)
                    {
                        this.m_eEditMode = NodeGraphEditMode.Idle;
                    }
                    break;
                case NodeGraphEditMode.Linking:

                    this.m_OutputLink = GetHitConnector(e.Location);
                    ValidateLink();
                    this.m_eEditMode = NodeGraphEditMode.Idle;
                    break;
                default:

                    break;
            }
        }
示例#15
0
        /// <summary>
        /// Behavior when Mouse is Clicked
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void NodeGraphPanel_MouseDown(object sender, MouseEventArgs e)
        {
            switch(this.m_eEditMode) {

                case NodeGraphEditMode.Idle:
                        switch (e.Button)
                        {
                            case MouseButtons.Middle:

                                this.m_eEditMode = NodeGraphEditMode.Scrolling;
                                this.m_iScrollLastX = e.Location.X;
                                this.m_iScrollLastY = e.Location.Y;

                                break;
                            case MouseButtons.Left:

                                if (this.HitAll(e.Location) == HitType.Connector)
                                {
                                    if (!m_bAltPressed)
                                    {
                                        this.m_eEditMode = NodeGraphEditMode.Linking;
                                        this.m_InputLink = GetHitConnector(e.Location);
                                        this.m_OutputLink = null;
                                    }
                                    else
                                    {
                                       NodeGraphConnector v_Connector = GetHitConnector(e.Location);
                                       this.DeleteLinkConnectors(v_Connector);
                                    }

                                } else if (this.View.SelectedItems.Count > 0 && this.HitSelected(e.Location)== HitType.Node)
                                {
                                    this.m_eEditMode = NodeGraphEditMode.MovingSelection;
                                    this.m_MoveLastPosition = this.ControlToView(e.Location);
                                }
                                else
                                {
                                    this.m_eEditMode = NodeGraphEditMode.Selecting;

                                    this.m_SelectBoxCurrent = this.ControlToView(new Point(e.X, e.Y));
                                    this.m_SelectBoxOrigin = this.ControlToView(new Point(e.X, e.Y));
                                    this.UpdateHighlights();
                                    this.CreateSelection();

                                    if (this.View.SelectedItems.Count > 0)
                                    {
                                        this.m_eEditMode = NodeGraphEditMode.MovingSelection;
                                        this.m_MoveLastPosition = this.ControlToView(e.Location);
                                    }

                                }
                                break;
                            default:

                                break;
                        }
                        break;

                default: break;

            }
            this.Refresh();
        }
示例#16
0
 /// <summary>
 /// Gets the connector index, given the connector object reference
 /// </summary>
 /// <param name="p_Connector">the connector reference</param>
 /// <returns>the connector index</returns>
 public int GetConnectorIndex(NodeGraphConnector p_Connector)
 {
     for (int i = 0; i < this.m_Connectors.Count; i++)
     {
         if (this.m_Connectors[i] == p_Connector) return i;
     }
     return -1;
 }
示例#17
0
 /// <summary>
 /// Creates a new NodeGraphLink, given input and output Connectors
 /// </summary>
 /// <param name="p_Input"></param>
 /// <param name="p_Output"></param>
 public NodeGraphLink(NodeGraphConnector p_Input, NodeGraphConnector p_Output)
 {
     this.m_InputConnector = p_Input;
     this.m_OutputConnector = p_Output;
 }
示例#18
0
 /// <summary>
 /// Creates a new NodeGraphLink, given input and output Connectors
 /// </summary>
 /// <param name="p_Input"></param>
 /// <param name="p_Output"></param>
 public NodeGraphLink(NodeGraphConnector p_Input, NodeGraphConnector p_Output)
 {
     this.m_InputConnector  = p_Input;
     this.m_OutputConnector = p_Output;
 }
示例#19
0
 /// <summary>
 /// Creates a new NodeGraphLink, given input and output Connectors
 /// </summary>
 /// <param name="p_Input"></param>
 /// <param name="p_Output"></param>
 public NodeGraphLink(NodeGraphConnector p_Input, NodeGraphConnector p_Output, NodeGraphDataType p_DataType)
 {
     this.m_InputConnector    = p_Input;
     this.m_OutputConnector   = p_Output;
     this.m_NodeGraphDataType = p_DataType;
 }
示例#20
0
 /// <summary>
 /// Creates a new NodeGraphLink, given input and output Connectors
 /// </summary>
 /// <param name="p_Input"></param>
 /// <param name="p_Output"></param>
 public NodeGraphLink(NodeGraphConnector p_Input, NodeGraphConnector p_Output, NodeGraphDataType p_DataType)
 {
     this.m_InputConnector = p_Input;
     this.m_OutputConnector = p_Output;
     this.m_NodeGraphDataType = p_DataType;
 }