X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fpiechart.c;h=523809f37b596d025721883b90797f9f38e0f8a0;hb=1339492699ce7e12c9bf9fa17f9d60a66024cbd1;hp=4e0725e6d64acd93677228c42a3975d3eb33a0cf;hpb=b321086267ad1014dc5d09886396cde30f094437;p=pspp diff --git a/src/piechart.c b/src/piechart.c index 4e0725e6d6..523809f37b 100644 --- a/src/piechart.c +++ b/src/piechart.c @@ -15,11 +15,11 @@ General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. */ -#include +#include "config.h" #include "chart.h" #include #include @@ -27,6 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include #include "str.h" #include "value-labels.h" +#include "misc.h" /* Pie charts of course need to know Pi :) */ @@ -35,11 +36,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #endif -#define min(A,B) ((A>B)?B:A) - /* Draw a single slice of the pie */ -void +static void draw_segment(struct chart *ch, double centre_x, double centre_y, double radius, @@ -47,14 +46,18 @@ draw_segment(struct chart *ch, const char *colour) ; -/* Draw a pie chart */ + +/* Draw a piechart */ void -draw_piechart(struct chart *ch, const struct variable *var, - const struct freq_tab *frq_tab) +piechart_plot(const char *title, const struct slice *slices, int n_slices) { int i; + double total_magnetude=0; + + struct chart *ch; + + ch = chart_create(); - const int n_data = frq_tab->n_valid; const double left_label = ch->data_left + (ch->data_right - ch->data_left)/10.0; @@ -70,24 +73,17 @@ draw_piechart(struct chart *ch, const struct variable *var, ); - chart_write_title(ch, var->label ? var->label: var->name); + chart_write_title(ch, title); + + for (i = 0 ; i < n_slices ; ++i ) + total_magnetude += slices[i].magnetude; - - for (i = 0 ; i < n_data ; ++i ) + for (i = 0 ; i < n_slices ; ++i ) { static double angle=0.0; - const struct freq frq = frq_tab->valid[i]; const double segment_angle = - frq.c / frq_tab->valid_cases * 2 * M_PI ; - - char *label = val_labs_find (var->val_labs, frq.v ); - if ( !label ) - { - static char l[20]; - snprintf(l,20,"%g",frq.v.f); - label = l; - } + slices[i].magnetude / total_magnetude * 2 * M_PI ; const double label_x = centre_x - radius * sin(angle + segment_angle/2.0); @@ -107,7 +103,7 @@ draw_piechart(struct chart *ch, const struct variable *var, pl_line_r(ch->lp, label_x, label_y, left_label, label_y ); pl_moverel_r(ch->lp,0,5); - pl_alabel_r(ch->lp,0,0,label); + pl_alabel_r(ch->lp,0,0,slices[i].label); } else { @@ -116,7 +112,7 @@ draw_piechart(struct chart *ch, const struct variable *var, right_label, label_y ); pl_moverel_r(ch->lp,0,5); - pl_alabel_r(ch->lp,'r',0,label); + pl_alabel_r(ch->lp,'r',0,slices[i].label); } angle += segment_angle; @@ -127,11 +123,10 @@ draw_piechart(struct chart *ch, const struct variable *var, pl_filltype_r(ch->lp,0); pl_fcircle_r (ch->lp, centre_x, centre_y, radius); + chart_submit(ch); } - - -void +static void fill_segment(struct chart *ch, double x0, double y0, double radius, @@ -139,7 +134,7 @@ fill_segment(struct chart *ch, /* Fill a segment with the current fill colour */ -void +static void fill_segment(struct chart *ch, double x0, double y0, double radius, @@ -185,7 +180,7 @@ fill_segment(struct chart *ch, /* Draw a single slice of the pie */ -void +static void draw_segment(struct chart *ch, double x0, double y0, double radius, @@ -213,3 +208,4 @@ draw_segment(struct chart *ch, pl_restorestate_r(ch->lp); } +