2 Qanava - Graph drawing library for QT
3 Copyright (C) 2006 Benoit AUTHEMAN
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 //-----------------------------------------------------------------------------
21 // This file is a part of the Qanava software.
24 // \author Benoit Autheman (authem_b@epita.fr)
25 // \date 2004 February 15
26 //-----------------------------------------------------------------------------
30 #include "./qanNode.h"
31 #include "./qanGraph.h"
39 namespace qan
{ // ::qan
42 /* Node Constructor/Destructor *///--------------------------------------------
43 Node::Node( const QString
& label
) : AttrFunc( )
48 VectorF
v( 2 ); v( 0 ) = 0.f
; v( 0 ) = 0.f
;
53 Node::Node( const QString
& label
, int type
) : AttrFunc( )
58 VectorF
v( 2 ); v( 0 ) = 0.f
; v( 0 ) = 0.f
;
62 //-----------------------------------------------------------------------------
66 /* Node Edges Management *///--------------------------------------------------
67 void Node::collectOutNodes( Node::List
& outNodes
)
69 foreach ( Edge
* outEdge
, _outEdges
)
70 outNodes
<< &outEdge
->getDst( );
71 //for ( Edge::List::iterator outEdgeIter = _outEdges.begin( ); outEdgeIter != _outEdges.end( ); outEdgeIter++ )
72 //outNodes << &( ( *outEdgeIter )->getDst( ) );
75 void Node::collectInNodes( Node::List
& inNodes
)
77 for ( Edge::List::iterator intEdgeIter
= _inEdges
.begin( ); intEdgeIter
!= _inEdges
.end( ); intEdgeIter
++ )
78 inNodes
<< &( ( *intEdgeIter
)->getSrc( ) );
81 void Node::collectOutNodesSet( Node::Set
& outNodes
) const
83 // Add all edge destination to the out nodes set
84 const Edge::List
& edges
= getOutEdges( );
85 Edge::List::const_iterator edgeIter
= edges
.begin( );
86 for ( ; edgeIter
!= edges
.end( ); edgeIter
++ )
87 outNodes
.insert( &( *edgeIter
)->getDst( ) );
90 void Node::collectInNodesSet( Node::Set
& inNodes
) const
92 // Add all edge destination to the out nodes set
93 const Edge::List
& edges
= getInEdges( );
94 Edge::List::const_iterator edgeIter
= edges
.begin( );
95 for ( ; edgeIter
!= edges
.end( ); edgeIter
++ )
96 inNodes
.insert( &( *edgeIter
)->getSrc( ) );
99 void Node::getAdjacentNodesSet( Node::Set
& adjacentNodes
) const
101 Node::Set outNodes
; collectOutNodesSet( outNodes
);
102 Node::Set inNodes
; collectInNodesSet( inNodes
);
104 adjacentNodes
.unite( outNodes
);
105 adjacentNodes
.unite( inNodes
);
108 void Node::getNonAdjacentNodesSet( Node::Set
& nonAdjacentNodes
, const Node::Set
& graphNodes
) const
110 Node::Set adjacentNodes
; getAdjacentNodesSet( adjacentNodes
);
111 nonAdjacentNodes
.unite( graphNodes
);
112 nonAdjacentNodes
.subtract( adjacentNodes
);
114 // Remove the node idself from to non adjacent nodes list
115 nonAdjacentNodes
.remove( const_cast< Node
* >( this ) );
117 //-----------------------------------------------------------------------------
121 /* Node Attributes Management *///---------------------------------------------
122 void Node::setDate( const QString
& date
)
124 QDateTime dt
= QDateTime::fromString( date
.toAscii( ), Qt::ISODate
);
126 setAttribute
< QDateTime
>( Node::DATE
, dt
);
128 //-----------------------------------------------------------------------------