/**********************************************************************/ /* */ /* (c) Copyright, 1997 by Professor Gabriel Robins */ /* */ /* Department of Computer Science, University of Virginia */ /* Charlottesville, VA 22903-2442 (804) 982-2207 */ /* robins@cs.virginia.edu http://www.cs.virginia.edu/~robins/ */ /* */ /* This code may be freely used for all non-commercial purposes. */ /* All copies/portions of this code must contain this header. */ /* */ /**********************************************************************/ /**********************************************************************/ /* Geometry.h */ /**********************************************************************/ /**********************************************************************/ /* two of the following three definitions must be commented out, */ /* depending on what hardware is being used. The rest of the code */ /* will compile accordingly. */ /**********************************************************************/ /* * #define MAC 1 */ #define SUN 1 #ifdef MAC #include #include #endif #ifdef SUN #include #include #endif #include #include #include #ifdef MAC #define window_height 300 #define max_number_of_points 500 #endif #ifdef SUN #define window_height 500 /* 1000 */ #define max_number_of_points 500 #define wait 0 #endif #define window_width window_height #define window_depth window_height #define window_left 100 /* 310 */ #define window_top 10 /* 40 */ #define max_neighbor_count 8 #define string_length 200 #ifdef MAC #define infinity 9999 #else #define infinity 99999999 #endif #ifdef MAC #define stats_how_often 10 #else #define stats_how_often 100 #endif #define HEURISTICS 6 #define NONE -1 #define MAXINT 32767 struct point { int X, Y, id, flag; }; struct edge { int P1, P2, flag, weight; }; typedef struct edge EDGE; typedef struct NODE { int parent, id, weight; } NODE; enum errors { ECALLOC, EOPEN }; enum flags { ADD, NOT_ADD, ADD_IF_SAVE }; enum mark { NOT_MARKED, MARKED }; enum metric { Euclidean = 1, Manhattan, Linfinity }; enum L_heuristics { high_L = 1, low_L, left_L, right_L, random_L }; enum boolean { NO, YES }; /**********************************************************************/ extern unsigned long int initial_seed, next; extern int *hit_list, *degree_count, *num_N_pts[], *Steiner_savings; extern struct point *pointset, *SP_candidates; extern struct edge *edges; extern NODE *Tree, *old_Tree; extern EDGE *Neighbour; #ifdef MAC extern WindowPtr CGWindow; extern Rect windowBounds, dragRect; extern MenuHandle appleMenu, fileMenu, editMenu, sizeMenu, iterationsMenu, pointMenu, metricMenu, CGMenu, gridMenu; #endif extern int metric_type, pointset_cardinality, iterations_cardinality, grid_size_cardinality, uncross_edges, flip_hs, unique_identifier, metric_type, L_edge_orientation, number_of_points, size, number_of_edges, mst_cost, choice, GRAPHICS, number_of_points, number_of_iterations, uncross_edges, set_sizes[], iterations[], grid_sizes[], total_mst_cost, total_steiner_cost[], sum[], max_improvement[], min_improvement[], steiner_cost[], improvement_percent[], ave_num_steiner_pts[], num_steiner_pts[], min_num_steiner_pts[], max_num_steiner_pts[], sum[], total_mst_cost, min_improvement[], min_num_steiner_pts[], min_round, total_round, max_round, grid_size; extern int OUT_TREE; #ifdef SUN extern Window window, rootwindow; extern int the_screen; extern XSizeHints *the_sizehints; extern GC gc; extern Display *the_display; #endif /**********************************************************************/ void read_in_pointset(void); void qsort_candidates(int, int); void loop_stats(void); void qsort_edges(int, int); void interactive(void); #ifdef MAC void enable(MenuHandle, int, Boolean); #endif /**********************************************************************/