From ec0effcb646923f48c6c46e3974136a9506dd116 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sat, 7 Jan 2006 18:42:39 +0000 Subject: [PATCH] slightly modified gui for transformations so that we can transform several entities at once --- Fltk/Callbacks.cpp | 164 ++++++++++++++++++++++---------------- Geo/CAD.cpp | 32 +++++--- Geo/Geo.cpp | 193 ++++++++++++++++++++++++++------------------- Geo/Geo.h | 14 ++-- 4 files changed, 236 insertions(+), 167 deletions(-) diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 8168a3d7e4..496e228686 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.390 2006-01-06 00:34:22 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.391 2006-01-07 18:42:39 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -2282,7 +2282,7 @@ static void _transform_point_line_surface(int transfo, int mode, char *what) Vertex *v[SELECTION_MAX_HITS]; Curve *c[SELECTION_MAX_HITS]; Surface *s[SELECTION_MAX_HITS]; - int type, num = 0, ne; + int type, ne; char *str; if(!strcmp(what, "Point")) { @@ -2302,7 +2302,9 @@ static void _transform_point_line_surface(int transfo, int mode, char *what) } Draw(); - Msg(ONSCREEN, "Select %s\n[Press 'q' to abort]", str); + Msg(ONSCREEN, "Select %s\n[Press 'e' to end or 'q' to abort]", str); + + List_T *List1 = List_Create(5, 5, sizeof(int)); while(1) { Msg(STATUS3N, "Transforming %s", str); @@ -2312,75 +2314,105 @@ static void _transform_point_line_surface(int transfo, int mode, char *what) Draw(); break; } + if(ib == 'r') { + for(int i = 0; i < ne; i++){ + switch (type) { + case ENT_POINT: + List_Suppress(List1, &v[i]->Num, fcmp_int); + ZeroHighlightEntity(v[i], NULL, NULL); + break; + case ENT_LINE: + List_Suppress(List1, &c[i]->Num, fcmp_int); + ZeroHighlightEntity(NULL, c[i], NULL); + break; + case ENT_SURFACE: + List_Suppress(List1, &s[i]->Num, fcmp_int); + ZeroHighlightEntity(NULL, NULL, s[i]); + break; + } + } + Draw(); + } if(ib == 'l') { - switch (type) { - case ENT_POINT: - num = v[0]->Num; - break; - case ENT_LINE: - num = c[0]->Num; - break; - case ENT_SURFACE: - num = s[0]->Num; - break; + for(int i = 0; i < ne; i++){ + switch (type) { + case ENT_POINT: List_Add(List1, &v[i]->Num); break; + case ENT_LINE: List_Add(List1, &c[i]->Num); break; + case ENT_SURFACE: List_Add(List1, &s[i]->Num); break; + } } - switch (transfo) { - case 0: - translate(mode, num, CTX.filename, what, - (char*)WID->context_geometry_input[6]->value(), - (char*)WID->context_geometry_input[7]->value(), - (char*)WID->context_geometry_input[8]->value()); - break; - case 1: - rotate(mode, num, CTX.filename, what, - (char*)WID->context_geometry_input[12]->value(), - (char*)WID->context_geometry_input[13]->value(), - (char*)WID->context_geometry_input[14]->value(), - (char*)WID->context_geometry_input[9]->value(), - (char*)WID->context_geometry_input[10]->value(), - (char*)WID->context_geometry_input[11]->value(), - (char*)WID->context_geometry_input[15]->value()); - break; - case 2: - dilate(mode, num, CTX.filename, what, - (char*)WID->context_geometry_input[16]->value(), - (char*)WID->context_geometry_input[17]->value(), - (char*)WID->context_geometry_input[18]->value(), - (char*)WID->context_geometry_input[19]->value()); - break; - case 3: - symmetry(mode, num, CTX.filename, what, - (char*)WID->context_geometry_input[20]->value(), - (char*)WID->context_geometry_input[21]->value(), - (char*)WID->context_geometry_input[22]->value(), - (char*)WID->context_geometry_input[23]->value()); - break; - case 4: - extrude(num, CTX.filename, what, - (char*)WID->context_geometry_input[6]->value(), - (char*)WID->context_geometry_input[7]->value(), - (char*)WID->context_geometry_input[8]->value()); - break; - case 5: - protude(num, CTX.filename, what, - (char*)WID->context_geometry_input[12]->value(), - (char*)WID->context_geometry_input[13]->value(), - (char*)WID->context_geometry_input[14]->value(), - (char*)WID->context_geometry_input[9]->value(), - (char*)WID->context_geometry_input[10]->value(), - (char*)WID->context_geometry_input[11]->value(), - (char*)WID->context_geometry_input[15]->value()); - break; - case 6: - delet(num, CTX.filename, what); - break; + } + if(ib == 'e') { + if(List_Nbr(List1)){ + switch (transfo) { + case 0: + translate(mode, List1, CTX.filename, what, + (char*)WID->context_geometry_input[6]->value(), + (char*)WID->context_geometry_input[7]->value(), + (char*)WID->context_geometry_input[8]->value()); + break; + case 1: + rotate(mode, List1, CTX.filename, what, + (char*)WID->context_geometry_input[12]->value(), + (char*)WID->context_geometry_input[13]->value(), + (char*)WID->context_geometry_input[14]->value(), + (char*)WID->context_geometry_input[9]->value(), + (char*)WID->context_geometry_input[10]->value(), + (char*)WID->context_geometry_input[11]->value(), + (char*)WID->context_geometry_input[15]->value()); + break; + case 2: + dilate(mode, List1, CTX.filename, what, + (char*)WID->context_geometry_input[16]->value(), + (char*)WID->context_geometry_input[17]->value(), + (char*)WID->context_geometry_input[18]->value(), + (char*)WID->context_geometry_input[19]->value()); + break; + case 3: + symmetry(mode, List1, CTX.filename, what, + (char*)WID->context_geometry_input[20]->value(), + (char*)WID->context_geometry_input[21]->value(), + (char*)WID->context_geometry_input[22]->value(), + (char*)WID->context_geometry_input[23]->value()); + break; + case 4: + for(int i = 0; i < List_Nbr(List1); i++){ + int num; + List_Read(List1, i, &num); + extrude(num, CTX.filename, what, + (char*)WID->context_geometry_input[6]->value(), + (char*)WID->context_geometry_input[7]->value(), + (char*)WID->context_geometry_input[8]->value()); + } + break; + case 5: + for(int i = 0; i < List_Nbr(List1); i++){ + int num; + List_Read(List1, i, &num); + protude(num, CTX.filename, what, + (char*)WID->context_geometry_input[12]->value(), + (char*)WID->context_geometry_input[13]->value(), + (char*)WID->context_geometry_input[14]->value(), + (char*)WID->context_geometry_input[9]->value(), + (char*)WID->context_geometry_input[10]->value(), + (char*)WID->context_geometry_input[11]->value(), + (char*)WID->context_geometry_input[15]->value()); + } + break; + case 6: + delet(List1, CTX.filename, what); + break; + } + List_Reset(List1); + ZeroHighlight(THEM); + CalculateMinMax(THEM->Points, NULL); + Draw(); } - ZeroHighlight(THEM); - CalculateMinMax(THEM->Points, NULL); - Draw(); } } + List_Delete(List1); + Msg(STATUS3N, "Ready"); Msg(ONSCREEN, ""); } diff --git a/Geo/CAD.cpp b/Geo/CAD.cpp index 8af61d0227..3fab8023cd 100644 --- a/Geo/CAD.cpp +++ b/Geo/CAD.cpp @@ -1,4 +1,4 @@ -// $Id: CAD.cpp,v 1.89 2006-01-07 18:19:34 geuzaine Exp $ +// $Id: CAD.cpp,v 1.90 2006-01-07 18:42:39 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -247,6 +247,15 @@ Vertex *DuplicateVertex(Vertex * v) return pv; } +int compareAbsCurve(const void *a, const void *b) +{ + Curve **q, **w; + + q = (Curve **) a; + w = (Curve **) b; + return (abs((*q)->Num) - abs((*w)->Num)); +} + void CopyCurve(Curve * c, Curve * cc) { int i, j; @@ -414,8 +423,10 @@ void DeletePoint(int ip) Curve *c; List_Read(Curves, i, &c); for(int j = 0; j < List_Nbr(c->Control_Points); j++) { - if(!compareVertex(List_Pointer(c->Control_Points, j), &v)) + if(!compareVertex(List_Pointer(c->Control_Points, j), &v)){ + List_Delete(Curves); return; + } } } List_Delete(Curves); @@ -435,8 +446,10 @@ void DeleteCurve(int ip) Surface *s; List_Read(Surfs, i, &s); for(int j = 0; j < List_Nbr(s->Generatrices); j++) { - if(!compareCurve(List_Pointer(s->Generatrices, j), &c)) + if(!compareAbsCurve(List_Pointer(s->Generatrices, j), &c)){ + List_Delete(Surfs); return; + } } } List_Delete(Surfs); @@ -456,8 +469,10 @@ void DeleteSurface(int is) Volume *v; List_Read(Vols, i, &v); for(int j = 0; j < List_Nbr(v->Surfaces); j++) { - if(!compareSurface(List_Pointer(v->Surfaces, j), &s)) + if(!compareSurface(List_Pointer(v->Surfaces, j), &s)){ + List_Delete(Vols); return; + } } } List_Delete(Vols); @@ -1670,15 +1685,6 @@ int compareTwoCurves(const void *a, const void *b) return 0; } -int compareAbsCurve(const void *a, const void *b) -{ - Curve **q, **w; - - q = (Curve **) a; - w = (Curve **) b; - return (abs((*q)->Num) - abs((*w)->Num)); -} - int compareTwoSurfaces(const void *a, const void *b) { Surface *s1, *s2; diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp index fb39520635..a744e4783c 100644 --- a/Geo/Geo.cpp +++ b/Geo/Geo.cpp @@ -1,4 +1,4 @@ -// $Id: Geo.cpp,v 1.45 2006-01-06 00:34:24 geuzaine Exp $ +// $Id: Geo.cpp,v 1.46 2006-01-07 18:42:39 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -104,22 +104,38 @@ void coherence(char *fich) add_infile("Coherence;", fich); } -void delet(int p1, char *fich, char *what) +void strncat_list(char *text, List_T *list) +{ + char text2[BUFFSIZE]; + for(int i = 0; i < List_Nbr(list); i++){ + int num; + List_Read(list, i, &num); + if(!i) + snprintf(text2, BUFFSIZE, "%d", num); + else + snprintf(text2, BUFFSIZE, ",%d", num); + strncat(text, text2, BUFFSIZE-strlen(text)); + } +} + +void delet(List_T *list, char *fich, char *what) { char text[BUFFSIZE]; - snprintf(text, BUFFSIZE, "Delete {\n %s{%d};\n}", what, p1); + snprintf(text, BUFFSIZE, "Delete {\n %s{", what); + strncat_list(text, list); + strncat(text, "};\n}", BUFFSIZE-strlen(text)); + add_infile(text, fich); } void add_trsfellisurf(int type, int N, int *l, char *fich, char *dir) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; + char text[BUFFSIZE], text2[BUFFSIZE]; + snprintf(text, BUFFSIZE, "%s Surface {%d} = {", type ? "Elliptic" : "Transfinite", l[0]); - for(i = 1; i < N; i++) { + for(int i = 1; i < N; i++) { if(i == 1) snprintf(text2, BUFFSIZE, "%d", l[i]); else @@ -137,11 +153,10 @@ void add_trsfellisurf(int type, int N, int *l, char *fich, char *dir) void add_charlength(int N, int *l, char *fich, char *lc) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; + char text[BUFFSIZE], text2[BUFFSIZE]; + snprintf(text, BUFFSIZE, "Characteristic Length {"); - for(i = 0; i < N; i++) { + for(int i = 0; i < N; i++) { if(i == 0) snprintf(text2, BUFFSIZE, "%d", l[i]); else @@ -155,11 +170,10 @@ void add_charlength(int N, int *l, char *fich, char *lc) void add_recosurf(int N, int *l, char *fich) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; + char text[BUFFSIZE], text2[BUFFSIZE]; + snprintf(text, BUFFSIZE, "Recombine Surface {"); - for(i = 0; i < N; i++) { + for(int i = 0; i < N; i++) { if(i == 0) snprintf(text2, BUFFSIZE, "%d", l[i]); else @@ -174,11 +188,10 @@ void add_recosurf(int N, int *l, char *fich) void add_trsfline(int N, int *l, char *fich, char *type, char *typearg, char *pts) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; + char text[BUFFSIZE], text2[BUFFSIZE]; + snprintf(text, BUFFSIZE, "Transfinite Line {"); - for(i = 0; i < N; i++) { + for(int i = 0; i < N; i++) { if(!i) snprintf(text2, BUFFSIZE, "%d", l[i]); else @@ -261,12 +274,10 @@ void add_ell(int p1, int p2, int p3, int p4, char *fich) void add_spline(int N, int *p, char *fich) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; + char text[BUFFSIZE], text2[BUFFSIZE]; snprintf(text, BUFFSIZE, "CatmullRom(%d) = {", NEWLINE()); - for(i = 0; i < N; i++) { + for(int i = 0; i < N; i++) { if(i != N - 1) snprintf(text2, BUFFSIZE, "%d,", p[i]); else @@ -278,12 +289,10 @@ void add_spline(int N, int *p, char *fich) void add_bezier(int N, int *p, char *fich) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; + char text[BUFFSIZE], text2[BUFFSIZE]; snprintf(text, BUFFSIZE, "Bezier(%d) = {", NEWLINE()); - for(i = 0; i < N; i++) { + for(int i = 0; i < N; i++) { if(i != N - 1) snprintf(text2, BUFFSIZE, "%d,", p[i]); else @@ -296,12 +305,10 @@ void add_bezier(int N, int *p, char *fich) void add_bspline(int N, int *p, char *fich) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; + char text[BUFFSIZE], text2[BUFFSIZE]; snprintf(text, BUFFSIZE, "BSpline(%d) = {", NEWLINE()); - for(i = 0; i < N; i++) { + for(int i = 0; i < N; i++) { if(i != N - 1) snprintf(text2, BUFFSIZE, "%d,", p[i]); else @@ -313,13 +320,11 @@ void add_bspline(int N, int *p, char *fich) void add_multline(int N, int *p, char *fich) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; - + char text[BUFFSIZE], text2[BUFFSIZE]; int iseg; + List_T *list = List_Create(N, 2, sizeof(int)); - for(i = 0; i < N; i++) + for(int i = 0; i < N; i++) List_Add(list, &p[i]); if((recognize_seg(MSH_SEGM_LINE, list, &iseg))) { List_Delete(list); @@ -328,7 +333,7 @@ void add_multline(int N, int *p, char *fich) List_Delete(list); snprintf(text, BUFFSIZE, "Line(%d) = {", NEWLINE()); - for(i = 0; i < N; i++) { + for(int i = 0; i < N; i++) { if(i != N - 1) snprintf(text2, BUFFSIZE, "%d,", p[i]); else @@ -340,16 +345,15 @@ void add_multline(int N, int *p, char *fich) void add_loop(List_T * list, char *fich, int *numloop) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i, seg; + char text[BUFFSIZE], text2[BUFFSIZE]; + int seg; if((recognize_loop(list, numloop))) return; *numloop = NEWLINELOOP(); snprintf(text, BUFFSIZE, "Line Loop(%d) = {", *numloop); - for(i = 0; i < List_Nbr(list); i++) { + for(int i = 0; i < List_Nbr(list); i++) { List_Read(list, i, &seg); if(i != List_Nbr(list) - 1) snprintf(text2, BUFFSIZE, "%d,", seg); @@ -363,9 +367,8 @@ void add_loop(List_T * list, char *fich, int *numloop) void add_surf(List_T * list, char *fich, int support, int typ) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i, seg; + char text[BUFFSIZE], text2[BUFFSIZE]; + int seg; if(typ == 1) { snprintf(text, BUFFSIZE, "Ruled Surface(%d) = {", NEWSURFACE()); @@ -377,7 +380,7 @@ void add_surf(List_T * list, char *fich, int support, int typ) snprintf(text, BUFFSIZE, "Trimmed Surface(%d) = %d {", NEWSURFACE(), support); } - for(i = 0; i < List_Nbr(list); i++) { + for(int i = 0; i < List_Nbr(list); i++) { List_Read(list, i, &seg); if(i != List_Nbr(list) - 1) snprintf(text2, BUFFSIZE, "%d,", seg); @@ -388,18 +391,17 @@ void add_surf(List_T * list, char *fich, int support, int typ) add_infile(text, fich); } -void add_vol(List_T * list, char *fich, int *numvol) +void add_vol(List_T *list, char *fich, int *numvol) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i, seg; + char text[BUFFSIZE], text2[BUFFSIZE]; + int seg; if((recognize_surfloop(list, numvol))) return; *numvol = NEWSURFACELOOP(); snprintf(text, BUFFSIZE, "Surface Loop(%d) = {", *numvol); - for(i = 0; i < List_Nbr(list); i++) { + for(int i = 0; i < List_Nbr(list); i++) { List_Read(list, i, &seg); if(i != List_Nbr(list) - 1) snprintf(text2, BUFFSIZE, "%d,", seg); @@ -410,14 +412,13 @@ void add_vol(List_T * list, char *fich, int *numvol) add_infile(text, fich); } -void add_multvol(List_T * list, char *fich) +void add_multvol(List_T *list, char *fich) { - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i, seg; + char text[BUFFSIZE], text2[BUFFSIZE]; + int seg; snprintf(text, BUFFSIZE, "Volume(%d) = {", NEWVOLUME()); - for(i = 0; i < List_Nbr(list); i++) { + for(int i = 0; i < List_Nbr(list); i++) { List_Read(list, i, &seg); if(i != List_Nbr(list) - 1) snprintf(text2, BUFFSIZE, "%d,", seg); @@ -431,10 +432,9 @@ void add_multvol(List_T * list, char *fich) void add_trsfvol(int N, int *l, char *fich, char *vol) { char text[BUFFSIZE], text2[BUFFSIZE]; - int i; snprintf(text, BUFFSIZE, "Transfinite Volume{%s} = {", vol); - for(i = 0; i < N; i++) { + for(int i = 0; i < N; i++) { if(i == 0) snprintf(text2, BUFFSIZE, "%d", l[i]); else @@ -450,7 +450,7 @@ void add_trsfvol(int N, int *l, char *fich, char *vol) void add_physical(List_T * list, char *fich, int type, int *num) { char text[BUFFSIZE], text2[BUFFSIZE]; - int i, elementary_entity; + int elementary_entity; *num = NEWPHYSICAL(); switch (type) { @@ -468,7 +468,7 @@ void add_physical(List_T * list, char *fich, int type, int *num) break; } - for(i = 0; i < List_Nbr(list); i++) { + for(int i = 0; i < List_Nbr(list); i++) { List_Read(list, i, &elementary_entity); if(i != List_Nbr(list) - 1) snprintf(text2, BUFFSIZE, "%d,", elementary_entity); @@ -479,59 +479,86 @@ void add_physical(List_T * list, char *fich, int type, int *num) add_infile(text, fich); } -void translate(int add, int s, char *fich, char *what, char *tx, char *ty, char *tz) +void translate(int add, List_T *list, char *fich, char *what, char *tx, char *ty, char *tz) { - char text[BUFFSIZE]; + char text[BUFFSIZE], text2[BUFFSIZE]; + + if(add) + snprintf(text, BUFFSIZE, "Translate {%s,%s,%s} {\n Duplicata { %s{", tx, ty, tz, what); + else + snprintf(text, BUFFSIZE, "Translate {%s,%s,%s} {\n %s{", tx, ty, tz, what); + strncat_list(text, list); + if(add) - snprintf(text, BUFFSIZE, - "Translate {%s,%s,%s} {\n Duplicata { %s{%d}; }\n}", tx, ty, tz, what, s); + strncat(text, "}; }\n}", BUFFSIZE-strlen(text)); else - snprintf(text, BUFFSIZE, "Translate {%s,%s,%s} {\n %s{%d};\n}", tx, ty, tz, what, s); + strncat(text, "};\n}", BUFFSIZE-strlen(text)); + add_infile(text, fich); } -void rotate(int add, int s, char *fich, char *what, char *ax, char *ay, char *az, +void rotate(int add, List_T *list, char *fich, char *what, char *ax, char *ay, char *az, char *px, char *py, char *pz, char *angle) { char text[BUFFSIZE]; if(add) - snprintf(text, BUFFSIZE, - "Rotate { {%s,%s,%s},{%s,%s,%s},%s } {\n Duplicata { %s{%d}; }\n}", - ax, ay, az, px, py, pz, angle, what, s); + snprintf(text, BUFFSIZE, "Rotate { {%s,%s,%s},{%s,%s,%s},%s } {\n Duplicata { %s{", + ax, ay, az, px, py, pz, angle, what); else - snprintf(text, BUFFSIZE, - "Rotate { {%s,%s,%s},{%s,%s,%s},%s } {\n %s{%d};\n}", - ax, ay, az, px, py, pz, angle, what, s); + snprintf(text, BUFFSIZE, "Rotate { {%s,%s,%s},{%s,%s,%s},%s } {\n %s{", + ax, ay, az, px, py, pz, angle, what); + + strncat_list(text, list); + + if(add) + strncat(text, "}; }\n}", BUFFSIZE-strlen(text)); + else + strncat(text, "};\n}", BUFFSIZE-strlen(text)); + add_infile(text, fich); } -void dilate(int add, int s, char *fich, char *what, char *dx, char *dy, char *dz, char *df) +void dilate(int add, List_T *list, char *fich, char *what, char *dx, char *dy, char *dz, char *df) { char text[BUFFSIZE]; if(add) - snprintf(text, BUFFSIZE, - "Dilate { {%s,%s,%s},%s } {\n Duplicata { %s{%d}; }\n}", - dx, dy, dz, df, what, s); + snprintf(text, BUFFSIZE, "Dilate { {%s,%s,%s},%s } {\n Duplicata { %s{", + dx, dy, dz, df, what); + else + snprintf(text, BUFFSIZE, "Dilate { {%s,%s,%s},%s } {\n %s{", + dx, dy, dz, df, what); + + strncat_list(text, list); + + if(add) + strncat(text, "}; }\n}", BUFFSIZE-strlen(text)); else - snprintf(text, BUFFSIZE, "Dilate { {%s,%s,%s},%s } {\n %s{%d};\n}", - dx, dy, dz, df, what, s); + strncat(text, "};\n}", BUFFSIZE-strlen(text)); + add_infile(text, fich); } -void symmetry(int add, int s, char *fich, char *what, char *sa, char *sb, char *sc, char *sd) +void symmetry(int add, List_T *list, char *fich, char *what, char *sa, char *sb, char *sc, char *sd) { char text[BUFFSIZE]; if(add) - snprintf(text, BUFFSIZE, - "Symmetry { %s,%s,%s,%s } {\n Duplicata { %s{%d}; }\n}", - sa, sb, sc, sd, what, s); + snprintf(text, BUFFSIZE, "Symmetry { %s,%s,%s,%s } {\n Duplicata { %s{", + sa, sb, sc, sd, what); else - snprintf(text, BUFFSIZE, "Symmetry { %s,%s,%s,%s } {\n %s{%d};\n}", - sa, sb, sc, sd, what, s); + snprintf(text, BUFFSIZE, "Symmetry { %s,%s,%s,%s } {\n %s{", + sa, sb, sc, sd, what); + + strncat_list(text, list); + + if(add) + strncat(text, "}; }\n}", BUFFSIZE-strlen(text)); + else + strncat(text, "};\n}", BUFFSIZE-strlen(text)); + add_infile(text, fich); } diff --git a/Geo/Geo.h b/Geo/Geo.h index a6140caab9..72ce92ac08 100644 --- a/Geo/Geo.h +++ b/Geo/Geo.h @@ -96,7 +96,7 @@ typedef struct { double evaluate_scalarfunction (char *var, double val, char *funct); void coherence(char *fich); -void delet(int p1, char *fich, char *what); +void delet(List_T *list, char *fich, char *what); void add_infile(char *text, char *fich); void add_trsfline(int N, int *l, char *fich, char *type, char *typearg, char *pts); void add_trsfellisurf(int type, int N, int *l, char *fich, char *dir); @@ -118,11 +118,15 @@ void add_surf(List_T *list, char *fich, int support, int typ); void add_vol(List_T *list, char *fich, int *numvol); void add_multvol(List_T *list, char *fich); void add_physical(List_T *list, char *fich, int type, int *num); -void translate(int add, int s, char *fich, char *what, char *tx, char *ty, char *tz); -void rotate(int add, int s, char *fich, char *what, char *ax, char *ay, char *az, +void translate(int add, List_T *list, char *fich, char *what, + char *tx, char *ty, char *tz); +void rotate(int add, List_T *list, char *fich, char *what, + char *ax, char *ay, char *az, char *px, char *py, char *pz, char *angle); -void dilate(int add, int s, char *fich, char *what, char *dx, char *dy, char *dz, char *df); -void symmetry(int add, int s, char *fich, char *what, char *sa, char *sb, char *sc, char *sd); +void dilate(int add, List_T *list, char *fich, char *what, + char *dx, char *dy, char *dz, char *df); +void symmetry(int add, List_T *list, char *fich, char *what, + char *sa, char *sb, char *sc, char *sd); void extrude(int s, char *fich, char *what, char *tx, char *ty, char *tz); void protude(int s, char *fich, char *what, char *ax, char *ay, char *az, char *px, char *py, char *pz, char *angle); -- GitLab