📄 graph.hxx
字号:
/************************************************************************** TEST FILE FOR graph (Dynamic Layout Alg)**** HEADER - GRAPH DATA STRUCTURE MANIPULATION**** Author: dr. Szirmay-Kalos Laszlo (szirmay@fsz.bme.hu)** Technical University of Budapest, Hungary*************************************************************************/#ifdef MSWINDOWS#include "mswindow.hxx"#include "vector.hxx"#include "defines.h"#else#include "window.hxx"#include "vector.hxx"#include "defines.h"#endiftypedef char TYPE;/************************************************************************/class Node {/************************************************************************/ char name[MAXNAME + 1]; // node name TYPE type; // fixed or movable vector pos; // actual position vector speed; // speed vector force; // driving force to this nodepublic: Node( pchar, TYPE ); // constructor vector& Position( void ) { return pos; } vector& Speed( void ) { return speed; } vector& Force( void ) { return force; } void AddForce( vector& f ) { force += f; } pchar GetName( void ) { return name; } TYPE GetType( void ) { return type; }};/************************************************************************/class Relation {/************************************************************************/ char name[MAXNAME + 1]; // relation name double intensity; // relation intensity Node * relation_to; // related nodepublic: Relation( pchar , Node *, double ); void SetRelation( pchar, double ); pchar GetName( void ) { return name; } double GetRelation( void ) { return intensity; } Node * GetOtherNode( void ) { return relation_to; }};/************************************************************************/class RelationElem : public Relation {/************************************************************************/ RelationElem * next_relation; // next on the listpublic: RelationElem( pchar name, Node * p, double r ); void SetNext( RelationElem * rn ) { next_relation = rn; } RelationElem * GetNext( void ) { return next_relation; }};/************************************************************************/class NodeElem : public Node {/************************************************************************/ int ser_num; // serial number in list NodeElem * next_node; // pointer to next node RelationElem * relation; // first relation of this nodepublic: NodeElem(pchar, TYPE); void SetNext( NodeElem *p ) { next_node = p; } void SetRelation( RelationElem *p ) { relation = p; } void SetSerNum( int sernum ) { ser_num = sernum; } NodeElem * GetNext( void ) { return next_node; } RelationElem * GetRelation( void ) { return relation; } int GetSerNum( void ) { return ser_num; }};/************************************************************************/class Graph {/************************************************************************/ int nfixnode; // number of fix nodes int nmovnode; // number of movable nodes NodeElem * currnode; // current node NodeElem * relatenode; // actual relation of curr NodeElem * start_node; // start of list NodeElem * last_node; // end of list RelationElem * currelation; // relation of nodes list RelationElem * prevrelation; // previous to currelation void SwapRelation( void ); // swap currnode and relatenode // if currnode is further in the // listpublic: Graph( void ); void SetNodePos( vector ); // sets position of currnode void SetRelation( double ); // sets intensity of currelation NodeElem * GetNode( void ) { return currnode; } NodeElem * GetRelateNode( void ) { return relatenode; } double GetRelation( void ); // get intensity of currelation pchar GetRelationName( void ); // get name of currelation BOOL AddNode( pchar, TYPE ); // add new node to the list void AddRelation( pchar, double ); // add new relation BOOL SearchNode( pchar ); // search node by name BOOL RelSearchNode( pchar ); int SearchRelation( void ); // search relation of currnode and relatenode BOOL SaveNodes( pchar ); // save to a file void RestoreNodes( pchar ); // restore from file int Placement( void ); // place nodes step-by-step void RandomArrange( void ); // arrange nodes randomly int DynamicLayout( int ); // dynamic layout algorithm BOOL FirstNode( void ); // select first node on the list BOOL FirstMoveNode( void ); // select first moveable node BOOL NextNode( int max = ALL_NODES ); // select next to currnode BOOL FirstRelation( void ); // select first relation of currnode BOOL NextRelation( void ); // select next relation};/************************************************************************/class ObjectSpace : public Graph {/************************************************************************/ double scale_x; // scale of window->viewport transform double scale_y; RectAngle vwindow; // object space window RectAngle viewport; // viewport void SetScale( void ); // calculate scale from vwindow and viewportpublic: ObjectSpace( void ); void SetViewPort( RectAngle ); void SetWindow( RectAngle ); Point ScreenPos( NodeElem * ); // get screen coordinates of node Point ScreenPos( vector ); // window -> viewport transform Point ScreenPos( void ) { return ScreenPos( GetNode( ) ); } Point RelScreenPos( void ) { return ScreenPos( GetRelateNode() );}};/************************************************************************/class GraphWindow : public AppWindow {/************************************************************************/ ObjectSpace graph; void ExposeAll( ExposeEvent * ); void KeyPressed( KeyEvent * ); void ShowNode( void ); void ShowRelation( void );public: GraphWindow(int argc, char * argv[] );};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -