struct table_text *getTt(char *str) { struct table_text *p,*p1; /* Search text table for attributes to be copied. */ for (p1=&Tt_tab;p1 != NULL;p1=p1->next) if (strcmp(str,p1->name) == 0) break; if (p1 == NULL) { err_warn(0,fperr, "Warning - Text attributes (%s) can't be found for get.\n",str); return NULL; } /* Create a new table structure and copy to it. */ if((p=(struct table_text *)malloc(sizeof(struct table_text)))==NULL) { err_warn(1,fperr, "Error - memory for getting Text table (%s) not found.\n",str); return 0; } strcpy(p->name,p1->name); strcpy(p->proj,p1->proj); p->txfont=p1->txfont; p->txpr=p1->txpr; p->txexp=p1->txexp; p->txsp=p1->txsp; p->txci=p1->txci; p->txfci=p1->txfci; p->priority=p1->priority; p->tvp[0]=p1->tvp[0]; p->tvp[1]=p1->tvp[1]; p->tvp[2]=p1->tvp[2]; p->tvp[3]=p1->tvp[3]; p->twc[0]=p1->twc[0]; p->twc[1]=p1->twc[1]; p->twc[2]=p1->twc[2]; p->twc[3]=p1->twc[3]; if (copy_points( &p->tx, p1->tx) == 0) return 0; if (copy_points( &p->ty, p1->ty) == 0) return 0; if (copy_strings( &p->ts, p1->ts) == 0) return 0; p->next=NULL; return p; }
struct table_line *getTl(char *str) { float deflt=1.0; struct table_line *p,*p1; extern int copy_points(); /* Search line table for attributes to be copied. */ for (p1=&Tl_tab;p1 != NULL;p1=p1->next) if (strcmp(str,p1->name) == 0) break; if (p1 == NULL) { err_warn(0,fperr, "Warning - Line attributes (%s) can't be found for get.\n",str); return NULL; } /* Create a new line table structure and copy to it. */ if((p=(struct table_line *)malloc(sizeof(struct table_line)))==NULL) { err_warn(1,fperr, "Error - memory for getting Line table (%s) not found.\n",str); return 0; } strcpy(p->name,p1->name); strcpy(p->proj,p1->proj); copy_int_array( &p->ltyp, &p1->ltyp, &p->ltyp_size, p1->ltyp_size, 1 ); copy_float_array( &p->lwsf, &p1->lwsf, &p->lwsf_size, p1->lwsf_size, &deflt ); copy_int_array( &p->lci, &p1->lci, &p->lci_size, p1->lci_size, 241 ); p->priority=p1->priority; p->lvp[0]=p1->lvp[0]; p->lvp[1]=p1->lvp[1]; p->lvp[2]=p1->lvp[2]; p->lvp[3]=p1->lvp[3]; p->lwc[0]=p1->lwc[0]; p->lwc[1]=p1->lwc[1]; p->lwc[2]=p1->lwc[2]; p->lwc[3]=p1->lwc[3]; if (copy_points( &p->lx, p1->lx) == 0) return 0; if (copy_points( &p->ly, p1->ly) == 0) return 0; p->next=NULL; return p; }
/** copy from one to another. \param other the other to copy from */ void copy(const PointHolder & other) { copy_points(other); }
void spline_line(F_spline *s) { F_line *l; F_point *tmppoint; /* Now we turn s into a line */ if ((l = create_line()) == NULL) return; if (open_spline(s)) { l->type = T_POLYLINE; l->points = s->points; } else { l->type = T_POLYGON; if ((l->points = create_point())==NULL) return; tmppoint = last_point(s->points); l->points->x = tmppoint->x; l->points->y = tmppoint->y; l->points->next = copy_points(s->points); } l->style = s->style; l->thickness = s->thickness; l->pen_color = s->pen_color; l->fill_color = s->fill_color; l->depth = s->depth; l->style_val = s->style_val; l->cap_style = s->cap_style; l->join_style = cur_joinstyle; l->pen_style = s->pen_style; l->radius = DEFAULT; l->fill_style = s->fill_style; if (s->for_arrow) { l->for_arrow = create_arrow(); l->for_arrow->type = s->for_arrow->type; l->for_arrow->style = s->for_arrow->style; l->for_arrow->thickness = s->for_arrow->thickness; l->for_arrow->wd = s->for_arrow->wd; l->for_arrow->ht = s->for_arrow->ht; } else { l->for_arrow = NULL; } if (s->back_arrow) { l->back_arrow = create_arrow(); l->back_arrow->type = s->back_arrow->type; l->back_arrow->style = s->back_arrow->style; l->back_arrow->thickness = s->back_arrow->thickness; l->back_arrow->wd = s->back_arrow->wd; l->back_arrow->ht = s->back_arrow->ht; } else { l->back_arrow = NULL; } /* now we have finished creating the line, we can get rid of the spline */ delete_spline(s); /* and put in the new line */ mask_toggle_linemarker(l); list_add_line(&objects.lines, l); redisplay_line(l); set_action_object(F_CONVERT, O_SPLINE); set_latestline(l); set_modifiedflag(); return; }
void line_spline(F_line *l, int type_value) { F_spline *s; if (num_points(l->points) < CLOSED_SPLINE_MIN_NUM_POINTS) { put_msg("Not enough points for a spline"); beep(); return; } if ((s = create_spline()) == NULL) return; s->type = type_value; if (l->type == T_POLYGON) s->points = copy_points(l->points->next); else s->points = copy_points(l->points); s->style = l->style; s->thickness = l->thickness; s->pen_color = l->pen_color; s->fill_color = l->fill_color; s->depth = l->depth; s->style_val = l->style_val; s->cap_style = l->cap_style; s->pen_style = l->pen_style; s->fill_style = l->fill_style; s->sfactors = NULL; s->next = NULL; if (l->for_arrow) { s->for_arrow = create_arrow(); s->for_arrow->type = l->for_arrow->type; s->for_arrow->style = l->for_arrow->style; s->for_arrow->thickness = l->for_arrow->thickness; s->for_arrow->wd = l->for_arrow->wd; s->for_arrow->ht = l->for_arrow->ht; } else { s->for_arrow = NULL; } if (l->back_arrow) { s->back_arrow = create_arrow(); s->back_arrow->type = l->back_arrow->type; s->back_arrow->style = l->back_arrow->style; s->back_arrow->thickness = l->back_arrow->thickness; s->back_arrow->wd = l->back_arrow->wd; s->back_arrow->ht = l->back_arrow->ht; } else { s->back_arrow = NULL; } /* A spline must have an s parameter for each point */ if (!make_sfactors(s)) { free_spline(&s); return; } /* Get rid of the line and draw the new spline */ delete_line(l); /* now put back the new spline */ mask_toggle_splinemarker(s); list_add_spline(&objects.splines, s); redisplay_spline(s); set_action_object(F_CONVERT, O_POLYLINE); set_latestspline(s); set_modifiedflag(); }
static Bool self_similar_normalized (struct state *st, int iterations, double x1, double y1, double x2, double y2, double maximum_x, double maximum_y, double minimum_x, double minimum_y, int segment_count, Position* points) { if (iterations == 0) { double delta_x = maximum_x - minimum_x; double delta_y = maximum_y - minimum_y; st->color_index = (int)(((double)(st->line_count * st->color_count)) / ((double)st->total_lines)); ++st->line_count; XSetForeground (st->dpy, st->context, st->colors [st->color_index].pixel); if (st->plot_maximum_x < x1) st->plot_maximum_x = x1; if (st->plot_maximum_x < x2) st->plot_maximum_x = x2; if (st->plot_maximum_y < y1) st->plot_maximum_y = y1; if (st->plot_maximum_y < y2) st->plot_maximum_y = y2; if (st->plot_minimum_x > x1) st->plot_minimum_x = x1; if (st->plot_minimum_x > x2) st->plot_minimum_x = x2; if (st->plot_minimum_y > y1) st->plot_minimum_y = y1; if (st->plot_minimum_y > y2) st->plot_minimum_y = y2; XDrawLine (st->dpy, st->pixmap, st->context, (int)(((x1 - minimum_x) / delta_x) * st->width), (int)(((maximum_y - y1) / delta_y) * st->height), (int)(((x2 - minimum_x) / delta_x) * st->width), (int)(((maximum_y - y2) / delta_y) * st->height)); } else { int index = 0; double next_x = 0.0; double next_y = 0.0; Position* replacement = (Position*)NULL; double x = 0.0; double y = 0.0; replacement = (Position*)(malloc (segment_count * sizeof (Segment))); copy_points (segment_count, points, replacement); assert (fabs ((replacement [segment_count - 1].x) - 1.0) < EPSILON); assert (fabs (replacement [segment_count - 1].y) < EPSILON); realign (x1, y1, x2, y2, segment_count, replacement); /* jwz: I don't understand what these assertions are supposed to be detecting, but let's just bail on the fractal instead of crashing. */ /* assert (fabs (x2 - (replacement [segment_count - 1].x)) < EPSILON); assert (fabs (y2 - (replacement [segment_count - 1].y)) < EPSILON);*/ if (fabs (x2 - (replacement [segment_count - 1].x)) >= EPSILON || fabs (y2 - (replacement [segment_count - 1].y)) >= EPSILON) { free (replacement); return False; } x = x1; y = y1; for (index = 0; index < segment_count; ++index) { next_x = replacement [index].x; next_y = replacement [index].y; if (!self_similar_normalized (st, iterations - 1, x, y, next_x, next_y, maximum_x, maximum_y, minimum_x, minimum_y, segment_count, points)) { free(replacement); return False; } x = next_x; y = next_y; } free(replacement); } return True; }
int chk_mov_Tt (struct table_text *pt) { struct table_text *ptb,*ptab; if (pt == NULL) return 0; for (ptb=ptab=&Tt_tab; ptab!=NULL && cmpnbl(pt->name,ptab->name)!=0; ptb=ptab,ptab=ptab->next); /* Check if it's trying to overwrite the default. */ if (ptab == &Tt_tab) { err_warn(1,fperr,"Error - can't replace the default (Tt_%s).\n", pt->name); free((char *)pt); return 0; } if (ptab == NULL) { ptb->next=ptab=pt; } else { /* if (pt->txfont != ptab->txfont ) printf("txfont diff %d,%d\n",pt->txfont, ptab->txfont); */ /* if (pt->txpr != ptab->txpr) printf("txpr diff %d,%d\n",pt->txpr, ptab->txpr); */ /* if (pt->txexp != ptab->txexp ) printf("txexp diff\n"); */ /* if (pt->txsp != ptab->txsp) printf("txsp diff\n"); */ /* if ( pt->txci != ptab->txci ) printf("txci diff %d,%d\n",pt->txci, ptab->txci); */ /* if ( pt->priority != ptab->priority ) printf("priority diff\n"); */ /* if (ptab->tvp[0] != pt->tvp[0] || ptab->tvp[1] != pt->tvp[1] || */ /* ptab->tvp[2] != pt->tvp[2] || ptab->tvp[3] != pt->tvp[3] ) printf("tvp diff\n"); */ /* if ( ptab->twc[0] != pt->twc[0] || ptab->twc[1] != pt->twc[1] || */ /* ptab->twc[2] != pt->twc[2] || ptab->twc[3] != pt->twc[3] ) printf("twc diff\n"); */ /* if (compare_points(ptab->tx, pt->tx )!=1) printf("tx difff\n"); */ /* if (compare_points(ptab->ty, pt->ty )!=1) printf("ty difff\n"); */ /* if (compare_strings(ptab->ts, pt->ts )!=1) printf("ts diff %s %s\n",ptab->ts,pt->ts); */ /* if (strcmp(ptab->proj,pt->proj) != 0) printf("proj diff\n"); */ if (pt->txfont != ptab->txfont || pt->txpr != ptab->txpr || pt->txexp != ptab->txexp || pt->txsp != ptab->txsp || pt->txci != ptab->txci || pt->txfci != ptab->txfci || pt->priority != ptab->priority || ptab->tvp[0] != pt->tvp[0] || ptab->tvp[1] != pt->tvp[1] || ptab->tvp[2] != pt->tvp[2] || ptab->tvp[3] != pt->tvp[3] || ptab->twc[0] != pt->twc[0] || ptab->twc[1] != pt->twc[1] || ptab->twc[2] != pt->twc[2] || ptab->twc[3] != pt->twc[3] || compare_points(ptab->tx, pt->tx )!=1 || compare_points(ptab->ty, pt->ty )!=1 || compare_strings(ptab->ts, pt->ts )!=1 || (strcmp(ptab->proj,pt->proj) != 0) ) { strcpy(ptab->proj,pt->proj); ptab->txfont=pt->txfont; ptab->txpr=pt->txpr; ptab->txexp=pt->txexp; ptab->txsp=pt->txsp; ptab->txci=pt->txci; ptab->txfci=pt->txfci; ptab->priority=pt->priority; ptab->tvp[0]=pt->tvp[0]; ptab->tvp[1]=pt->tvp[1]; ptab->tvp[2]=pt->tvp[2]; ptab->tvp[3]=pt->tvp[3]; ptab->twc[0]=pt->twc[0]; ptab->twc[1]=pt->twc[1]; ptab->twc[2]=pt->twc[2]; ptab->twc[3]=pt->twc[3]; free_points( &ptab->tx ); free_points( &ptab->ty ); free_strings( &ptab->ts ); if (copy_points( &ptab->tx, pt->tx) == 0) return 0; if (copy_points( &ptab->ty, pt->ty) == 0) return 0; if (copy_strings( &ptab->ts, pt->ts) == 0) return 0; free_points( &pt->tx ); free_points( &pt->ty ); free_strings( &pt->ts ); check_d_text(ptab->name); } free((char *)pt); pt=NULL; } if (!Inactive && fpout != NULL) prtTt(fpout,ptab); return 1; }
int chk_mov_Tl (struct table_line *pt) { float deflt=1.0; struct table_line *ptb,*ptab; extern int copy_points(); extern void free_points(); if (pt == NULL) return 0; for (ptb=ptab=&Tl_tab; ptab!=NULL && cmpnbl(pt->name,ptab->name)!=0; ptb=ptab,ptab=ptab->next); /* Check if it's trying to overwrite the default. */ if (ptab == &Tl_tab) { err_warn(1,fperr,"Error - can't replace the default (Tl_%s).\n", pt->name); free((char *)pt); return 0; } if (ptab == NULL) { ptb->next=ptab=pt; } else { if (pt->ltyp != ptab->ltyp || pt->lwsf != ptab->lwsf || pt->lci != ptab->lci || pt->priority != ptab->priority || ptab->lvp[0] != pt->lvp[0] || ptab->lvp[1] != pt->lvp[1] || ptab->lvp[2] != pt->lvp[2] || ptab->lvp[3] != pt->lvp[3] || ptab->lwc[0] != pt->lwc[0] || ptab->lwc[1] != pt->lwc[1] || ptab->lwc[2] != pt->lwc[2] || ptab->lwc[3] != pt->lwc[3] || ptab->lx != pt->lx || ptab->ly != pt->ly || (strcmp(ptab->proj,pt->proj) != 0) ) { strcpy(ptab->proj,pt->proj); copy_int_array( &ptab->ltyp,&pt->ltyp,&ptab->ltyp_size,pt->ltyp_size, 1 ); copy_float_array(&ptab->lwsf,&pt->lwsf,&ptab->lwsf_size,pt->lwsf_size,&deflt); copy_int_array( &ptab->lci, &pt->lci, &ptab->lci_size, pt->lci_size, 241 ); ptab->priority=pt->priority; ptab->lvp[0]=pt->lvp[0]; ptab->lvp[1]=pt->lvp[1]; ptab->lvp[2]=pt->lvp[2]; ptab->lvp[3]=pt->lvp[3]; ptab->lwc[0]=pt->lwc[0]; ptab->lwc[1]=pt->lwc[1]; ptab->lwc[2]=pt->lwc[2]; ptab->lwc[3]=pt->lwc[3]; free_points( &ptab->lx ); free_points( &ptab->ly ); if (copy_points( &ptab->lx, pt->lx) == 0) return 0; if (copy_points( &ptab->ly, pt->ly) == 0) return 0; free_points( &pt->lx ); free_points( &pt->ly ); if (pt->ltyp != NULL) free((char *) pt->ltyp); pt->ltyp = NULL; if (pt->lwsf != NULL) free((char *) pt->lwsf); pt->lwsf = NULL; if (pt->lci != NULL) free((char *) pt->lci); pt->lci = NULL; free((char *)pt); pt=NULL; check_d_line(ptab->name); } } if (!Inactive && fpout != NULL) prtTl(fpout,ptab); return 1; }