public AKN_Graph_Base(Guid _guid, string _label)
     : base(_guid, _label)
 {
     _m_NodeDict   = new Dictionary <Guid, AKN_Node_Base>();
     _m_DicoEdge   = new Dictionary <Guid, AKN_GraphEdge>();
     _m_linkinNode = null;
 }
 /// \fn public void MAddNode(AKN_Node_Base _node)
 ///
 /// \brief  Adds a node.
 ///
 /// \attention modified as virtual by paulhiac.cyrille
 /// \author Cedric Plessiet Inrev Paris Viii
 /// \author [email protected]
 /// \date   24/12/2009
 ///
 /// \param  _node   The node.
 virtual public AKN_Status MAddNode(AKN_Node_Base _node) //GON_MOD:  public void MAddNode(AKN_Node_Base _node)
 {
     if (_m_NodeDict.ContainsKey(_node.m_id))
     {
         return(AKN_Status.m_Failure);
     }
     _m_NodeDict.Add(_node.m_id, _node);
     return(AKN_Status.m_Success);
 }
示例#3
0
 public AKN_Status MDisconnectNode(AKN_Node_Base _nodeToConnect1)
 {
     if (MNodeIsConnectedTo(_nodeToConnect1))
     {
         _nodeToConnect1.m_ConnectedNodeDict.Remove(m_id);
         m_ConnectedNodeDict.Remove(_nodeToConnect1.m_id);
         return(AKN_Status.m_Success);
     }
     return(AKN_Status.m_Failure);
 }
            /// \fn public void MAddNodeToCurrent(AKN_Node_Base _node)
            ///
            /// \brief  Adds a node to the current observed node .
            ///
            /// \author cedric plessiet
            /// \date   24/05/2010
            ///
            /// \param  _node   The node.
            ///
            /// FIXME: A MCreateNodeObserver needs to be created to have this function working!(selon Cédric)


            public AKN_Status MAddNodeToCurrent(AKN_Node_Base _node)
            {
                if (_m_NodeDict.ContainsKey(_node.m_id))
                {
                    return(AKN_Status.m_Failure);
                }
                _m_NodeDict[_node.m_id] = _node;

                return(AKN_Status.m_Success);
            }
 /// \fn public AKN_GraphEdge(AKN_Node_Base _node1, AKN_Node_Base _node2, float _cost)
 ///
 /// \brief  Constructor.
 ///
 /// \author Alexandre Sambo
 /// \date   01/06/2010
 ///
 /// \param  _node1  The first node.
 /// \param  _node2  The second node.
 /// \param  _cost   The cost.
 public AKN_GraphEdge(AKN_Node_Base _node1, AKN_Node_Base _node2, float _cost)
     : this(_node1, _node2, _cost, "")
 {
     //AKN_Debug.MSetLogMode(AKN_Debug.eLogMode.kVerboseLogMode);
     //AKN_Debug.MSetOutputMode(AKN_Debug.eOutputMode.kConsoleOutputMode);
     if (_node1.MNodeIsConnectedTo(_node2))
     {
         m_cost = _cost;
     }
 }
            /// \fn public AKN_GraphEdge(AKN_Node_Base _node1, AKN_Node_Base _node2, float _cost,
            ///     String _label)
            ///
            /// \brief  Constructor.
            ///
            /// \author Alexandre Sambo
            /// \date   01/06/2010
            ///
            /// \param  _node1  The first node.
            /// \param  _node2  The second node.
            /// \param  _cost   The cost.
            /// \param  _label  The label.
            public AKN_GraphEdge(AKN_Node_Base _node1, AKN_Node_Base _node2, float _cost, String _label)
                : base(_label)

            {
                //AKN_Debug.MSetLogMode(AKN_Debug.eLogMode.kVerboseLogMode);
                //AKN_Debug.MSetOutputMode(AKN_Debug.eOutputMode.kConsoleOutputMode);
                if (_node1.MNodeIsConnectedTo(_node2))
                {
                    m_cost = _cost;
                }
            }
示例#7
0
 /// \fn public AKN_Status MAddNode(AKN_Node_Base _node)
 ///
 /// \brief  Adds a node.
 ///
 /// \author Ze Taupe
 /// \date   25/08/2012
 ///
 /// \param  _node   The node.
 ///
 /// \return The calculated node.
 public AKN_Status MAddNode(AKN_Node_Base _node)
 {
     if (!_m_ConnectedNodeDict.ContainsKey(_node.m_id))
     {
         _m_ConnectedNodeDict.Add(_node.m_id, _node);
         return(AKN_Status.m_Success);
     }
     else
     {
         return(AKN_Status.m_Failure);
     }
 }
示例#8
0
            /// \fn MBiConnectNode(AKN_Node_Base _nodeToConnect)
            ///
            /// \brief  connect a node to another and vice versa
            ///
            /// \author Cedric Plessiet Inrev Paris Viii
            /// \date   21/11/2009
            ///
            ///  \param _NodeToConnect  the node to connect

            public AKN_Status MBiConnectNode(AKN_Node_Base _nodeToConnect1)
            {
                if (!MConnectNode(_nodeToConnect1))
                {
                    return(AKN_Status.m_Failure);
                }
                if (!_nodeToConnect1.MConnectNode(this))
                {
                    return(AKN_Status.m_Failure);
                }
                return(AKN_Status.m_Success);
            }
示例#9
0
            /// \fn MConnectNode(AKN_Node_Base _nodeToConnect)
            ///
            /// \brief  connect a node to another
            ///
            /// \author Cedric Plessiet Inrev Paris Viii
            /// \date   21/11/2009
            ///
            ///  \param _NodeToConnect  the node to connect

            public AKN_Status MConnectNode(AKN_Node_Base _nodeToConnect)
            {
                if (!MNodeIsConnectedTo(_nodeToConnect))
                {
                    _m_ConnectedNodeDict.Add(_nodeToConnect.m_id, _nodeToConnect);
                    _nodeToConnect._m_InputConnectedNodeDict[m_id] = this;
                    _nodeToConnect._m_hasInputConnection           = true;
                    _m_isConnected = true;
                    return(AKN_Status.m_Success);
                }
                else
                {
                    return(AKN_Status.m_Failure);
                }
            }
示例#10
0
            /// \fn     public AKN_Status MBiConnectNode(AKN_Node_Base _nodeToConnect1, float _cost, out AKN_GraphEdge _graphEdge)
            ///
            /// \brief
            ///
            /// \author Alexandre Sambo
            /// \date   27/05/2010
            ///
            /// \param  _nodeToConnect1 The node to connect.
            /// \param  _cost cost of connection (can be time, distance, ...)
            /// \param  _graphEdge return created graphEdge
            ///
            /// \return return  if the connection success or note
            public AKN_Status MBiConnectNode(AKN_Node_Base _nodeToConnect1, float _cost, out AKN_GraphEdge _graphEdge)
            {
                AKN_Status newStatus = AKN_Status.m_Success;

                if (!MConnectNode(_nodeToConnect1))
                {
                    newStatus = AKN_Status.m_Failure;
                }
                if (!_nodeToConnect1.MConnectNode(this))
                {
                    newStatus = AKN_Status.m_Failure;
                }
                if (_cost < 0f)
                {
                    newStatus = AKN_Status.m_Failure;
                }
                _graphEdge = new AKN_GraphEdge(this, _nodeToConnect1, _cost, "edge_" + this.m_label + "_" + _nodeToConnect1.m_label);
                m_linkedEdge[_graphEdge.m_id] = _graphEdge;
                _nodeToConnect1.m_linkedEdge[_graphEdge.m_id] = _graphEdge;

                return(newStatus);
            }
示例#11
0
            /// \fn MConnectNode(AKN_Node_Base _nodeToConnect)
            ///
            /// \brief  connect a node to another
            ///
            /// \author Cedric Plessiet Inrev Paris Viii
            /// \date   21/11/2009
            ///
            ///  \param _NodeToConnect  the node to connect

            public AKN_Status MAddChildNode(AKN_Node_Base _nodeToConnect)
            {
                MConnectNode(_nodeToConnect);
                _nodeToConnect._m_parent = this;
                return(AKN_Status.m_Success);
            }
示例#12
0
 public bool MNodeIsConnectedTo(AKN_Node_Base _NodeToConnect)
 {
     return(_m_ConnectedNodeDict.ContainsKey(_NodeToConnect.m_id));
 }
 /// \fn public AKN_Status MAddAsLinkinNode(AKN_Node_Base _node)
 ///
 /// \brief  Adds as linkin node.
 ///
 /// \author Alexandre Sambo
 /// \date   04/06/2010
 ///
 /// \param  _node   The node.
 ///
 /// \return The calculated as linkin node.
 //FIXME: WTF??????
 public AKN_Status MAddAsLinkinNode(AKN_Node_Base _node)
 {
     _m_linkinNode = _node;
     return(MAddNode(_node));
 }
 /// \fn public bool MIsInsideGraph(AKN_Node_Base _toCheck)
 ///
 /// \brief  Is inside graph.
 ///
 /// \author Cedric Plessiet Inrev Paris Viii
 /// \date   24/12/2009
 ///
 /// \param  _toCheck    to check.
 ///
 /// \return true if inside graph, false if not.
 public bool MIsInsideGraph(AKN_Node_Base _toCheck)
 {
     return(_m_NodeDict.ContainsKey(_toCheck.m_id));
 }
 /// \class  AKN_GraphEdge
 ///
 /// \brief  Itk graph edge.
 ///,
 /// \author Samy
 /// \date   23/04/2010
 /// \Constructor
 public AKN_GraphEdge(AKN_Node_Base _NodeToConnect1, AKN_Node_Base _NodeToConnect2)
     : this(_NodeToConnect1, _NodeToConnect2, 0f)
 {
     //AKN_Debug.MSetLogMode(AKN_Debug.eLogMode.kVerboseLogMode);
     //AKN_Debug.MSetOutputMode(AKN_Debug.eOutputMode.kConsoleOutputMode);
 }
 public void MEdgeConnect(AKN_Node_Base _nodeToConnect1, AKN_Node_Base _nodeToConnect2)
 {
     _nodeToConnect1.MConnectNode(_nodeToConnect2);
     _m_NodeTo = _nodeToConnect2;;
 }