chiark / gitweb /
segment labelling work-in-progress - yet to do are labels and graph colouring
[trains.git] / layout / graph-data.h
index 37b860ec707a778fab3dc6a5ff2901cb724fe8dc..bd44975b02c41bd5061cb41eccaefded6620852d 100644 (file)
@@ -18,6 +18,7 @@ struct Segment {
   int n_movfeats;
   MovFeat *movfeats; /* [0] is fixed */
   MovFeat *starfeature; /* set by movfeatmultedges */
+  int u;
 };
 
 struct MovFeat {
@@ -50,6 +51,8 @@ struct NodeSide {
 struct Node {
   const char *pname;
   Node *back, *next;
+  double x,y,a;
+  int layermin,layermax;
   NodeSide sides[2];
 };
 
@@ -60,10 +63,19 @@ struct NodeList {
 extern NodeList all_nodes;
 extern int next_nodenum, next_edgenum;
 
+extern Segment *all_segments[];
+
 
 #define FOR_ALL_NODES(node) for (node=all_nodes.head; node; node=node->next)
 #define FOR_BOTH(sideend) for (sideend=0; sideend<2; sideend++)
 
+#define FOR_NODE_EDGEENDS(side,edgeend, node)  \
+  FOR_BOTH(side)                               \
+    FOR_SIDE_EDGEENDS(edgeend, (node),side)
+
+#define FOR_SIDE_EDGEENDS(edgeend, node,side) \
+  for (edgeend=(node)->sides[(side)].head; edgeend; edgeend=edgeend->next)
+
 #define FOR_SEGMENT_MOVFEATS(i,f, segment) \
   for (i=0, f=segment->movfeats; i < segment->n_movfeats; i++, f++)
 
@@ -76,12 +88,15 @@ extern int next_nodenum, next_edgenum;
  * appropriately.  edgeend must be of type EdgeEnd*, and side of type
  * int; these are used as working variables by FOR_EDGES.
  */
-#define FOR_EDGES(edge, node,side,edgeend)                              \
-  FOR_BOTH(side)                                                        \
-    for (edgeend=node->sides[side].head; edgeend; edgeend=edgeend->next) \
-      if ((edge= edgeend->edge), edgeend->end) {                        \
-        /* do each edge once, from end 0, only */                       \
+#define FOR_EDGES(edge, node,side,edgeend)             \
+    FOR_NODE_EDGEENDS(side,edgeend, node)                      \
+      if ((edge= edgeend->edge), edgeend->end) {       \
+        /* do each edge once, from end 0, only */      \
       } else
-     
+
+#define FOR_ALL_SEGMENTS(segmentp,segment)     \
+  for (segmentp=all_segments;                  \
+       (segment= *segmentp);                   \
+       segmentp++)
 
 #endif /*GRAPH_DATA_H*/