Skip to content
Snippets Groups Projects
Commit 4bc5b59a authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

Added interactive symmetry

parent 3379ef3d
No related branches found
No related tags found
No related merge requests found
/* $Id: Geo.cpp,v 1.10 2000-12-11 16:23:11 geuzaine Exp $ */
/* $Id: Geo.cpp,v 1.11 2000-12-13 13:56:58 geuzaine Exp $ */
#include "Gmsh.h"
#include "Const.h"
......@@ -17,8 +17,8 @@ char attrdec_text[100] = "2.0";
char px_text[100] = "0.0", py_text[100] = "0.0", pz_text[100] = "0.0" ;
char angle_text[100] = "3.14159/2" ;
char ax_text[100] = "0.0", ay_text[100] = "0.0", az_text[100] = "1.0";
char dx_text[100] = "0.0", dy_text[100] = "0.0", dz_text[100] = "0.0";
char df_text[100] = "1.0";
char dx_text[100] = "0.0", dy_text[100] = "0.0", dz_text[100] = "0.0", df_text[100] = "1.0";
char sa_text[100] = "0.0", sb_text[100] = "0.0", sc_text[100] = "0.0", sd_text[100] = "0.0";
char nb_pts[100] ="10", mode_value[100] = "1";
char trsf_pts_text[100] = "2", trsf_type_text[100] = "Power 1.0";
char trsf_vol_text[100] = "1";
......@@ -527,6 +527,18 @@ void dilate(int add, int s, char *fich, char *quoi){
add_infile(text,fich);
}
void symmetry(int add, int s, char *fich, char *quoi){
char text[BUFFSIZE];
if(add)
sprintf(text,"Symmetry { %s,%s,%s,%s } {\n Duplicata { %s{%d}; }\n}",
sa_text,sb_text,sc_text,sd_text, quoi,s);
else
sprintf(text,"Symmetry { %s,%s,%s,%s } {\n %s{%d};\n }",
sa_text,sb_text,sc_text,sd_text, quoi,s);
add_infile(text,fich);
}
void protude(int s, char *fich, char *what){
char text[BUFFSIZE];
......
/* $Id: Geo.h,v 1.4 2000-11-26 15:43:45 geuzaine Exp $ */
/* $Id: Geo.h,v 1.5 2000-12-13 13:56:58 geuzaine Exp $ */
#ifndef _GEO_H_
#define _GEO_H_
......@@ -108,6 +108,7 @@ void translate_surf(int add, int s, char *fich);
void translate_pt(int add, int s, char *fich);
void rotate(int add, int s, char *fich, char *quoi);
void dilate(int add, int s, char *fich, char *quoi);
void symmetry(int add, int s, char *fich, char *quoi);
void protude(int s, char *fich, char *what);
#endif
/* $Id: CbContext.cpp,v 1.7 2000-12-09 15:21:17 geuzaine Exp $ */
/* $Id: CbContext.cpp,v 1.8 2000-12-13 13:57:00 geuzaine Exp $ */
#include "Gmsh.h"
#include "GmshUI.h"
......@@ -376,6 +376,7 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_ADD_DILATE,call_data);
break;
case 5:
XtManageChild(WID.GD.symmDialog);
ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_ADD_SYMMETRY,call_data);
break;
}
......@@ -419,12 +420,15 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
case 1: geom_event_handler(GEOM_ELEM_ADD_DILATE_POINT); break ;
case 2: geom_event_handler(GEOM_ELEM_ADD_DILATE_LINE); break ;
case 3: geom_event_handler(GEOM_ELEM_ADD_DILATE_SURF); break ;
case 4: break ;
}
break;
case CONTEXT_GEOM_ELEM_ADD_SYMMETRY :
Msg(WARNING, "Add Symmetry not done yet");
switch((long int)client_data){
case 1: geom_event_handler(GEOM_ELEM_ADD_SYMMETRY_POINT); break ;
case 2: geom_event_handler(GEOM_ELEM_ADD_SYMMETRY_LINE); break ;
case 3: geom_event_handler(GEOM_ELEM_ADD_SYMMETRY_SURF); break ;
}
break;
case CONTEXT_GEOM_ELEM_MOVE :
......@@ -442,6 +446,7 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_MOVE_DILATE,call_data);
break;
case 4:
XtManageChild(WID.GD.symmDialog);
ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_MOVE_SYMMETRY,call_data);
break;
}
......@@ -468,12 +473,15 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
case 1: geom_event_handler(GEOM_ELEM_MOVE_DILATE_POINT); break ;
case 2: geom_event_handler(GEOM_ELEM_MOVE_DILATE_LINE); break ;
case 3: geom_event_handler(GEOM_ELEM_MOVE_DILATE_SURF); break ;
case 4: break ;
}
break;
case CONTEXT_GEOM_ELEM_MOVE_SYMMETRY :
Msg(WARNING, "Move Symmetry not done yet");
switch((long int)client_data){
case 1: geom_event_handler(GEOM_ELEM_MOVE_SYMMETRY_POINT); break ;
case 2: geom_event_handler(GEOM_ELEM_MOVE_SYMMETRY_LINE); break ;
case 3: geom_event_handler(GEOM_ELEM_MOVE_SYMMETRY_SURF); break ;
}
break;
case CONTEXT_GEOM_ELEM_EXTRUDE :
......@@ -491,6 +499,7 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_EXTRUDE_DILATE,call_data);
break;
case 4:
XtManageChild(WID.GD.symmDialog);
ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_EXTRUDE_SYMMETRY,call_data);
break;
}
......@@ -513,11 +522,11 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
break;
case CONTEXT_GEOM_ELEM_EXTRUDE_DILATE :
Msg(WARNING, "Extrude Dilate not done yet!");
Msg(WARNING, "Extrude Dilate is not implemented");
break;
case CONTEXT_GEOM_ELEM_EXTRUDE_SYMMETRY :
Msg(WARNING, "Extrude Symmetry not done yet!");
Msg(WARNING, "Extrude Symmetry is not implemented");
break;
case CONTEXT_GEOM_ELEM_DELETE :
......
/* $Id: CbGeom.cpp,v 1.8 2000-12-13 13:18:49 geuzaine Exp $ */
/* $Id: CbGeom.cpp,v 1.9 2000-12-13 13:57:00 geuzaine Exp $ */
#include "Gmsh.h"
#include "GmshUI.h"
......@@ -23,6 +23,7 @@ extern char tx_text[100], ty_text[100], tz_text[100];
extern char px_text[100], py_text[100], pz_text[100], angle_text[100];
extern char ax_text[100], ay_text[100], az_text[100], angle_text[100];
extern char dx_text[100], dy_text[100], dz_text[100], df_text[100];
extern char sa_text[100], sb_text[100], sc_text[100], sd_text[100];
static char name_text[100], value_text[100];
......@@ -382,6 +383,8 @@ void geom_event_handler (int event) {
case GEOM_ELEM_ADD_DILATE_POINT :
case GEOM_ELEM_MOVE_DILATE_POINT :
case GEOM_ELEM_ADD_SYMMETRY_POINT :
case GEOM_ELEM_MOVE_SYMMETRY_POINT :
while(1){
Msg(STATUS,"Select Point ('q'=quit)");
if(!SelectEntity(ENT_POINT, &v,&c,&s)){
......@@ -389,13 +392,28 @@ void geom_event_handler (int event) {
Replot();
break;
}
dilate(event==GEOM_ELEM_ADD_DILATE_POINT?1:0,v->Num,TheFileName,"Point");
switch(event){
case GEOM_ELEM_ADD_DILATE_POINT :
dilate(1,v->Num,TheFileName,"Point");
break;
case GEOM_ELEM_MOVE_DILATE_POINT :
dilate(0,v->Num,TheFileName,"Point");
break;
case GEOM_ELEM_ADD_SYMMETRY_POINT :
symmetry(1,v->Num,TheFileName,"Point");
break;
case GEOM_ELEM_MOVE_SYMMETRY_POINT :
symmetry(0,v->Num,TheFileName,"Point");
break;
}
ZeroHighlight(&M);
Replot();
}
break;
case GEOM_ELEM_ADD_DILATE_LINE :
case GEOM_ELEM_MOVE_DILATE_LINE :
case GEOM_ELEM_ADD_SYMMETRY_LINE :
case GEOM_ELEM_MOVE_SYMMETRY_LINE :
while(1){
Msg(STATUS,"Select Line ('q'=quit)");
if(!SelectEntity(ENT_LINE, &v,&c,&s)){
......@@ -403,13 +421,28 @@ void geom_event_handler (int event) {
Replot();
break;
}
dilate(event==GEOM_ELEM_ADD_DILATE_LINE?1:0,c->Num,TheFileName,"Line");
switch(event){
case GEOM_ELEM_ADD_DILATE_LINE :
dilate(1,c->Num,TheFileName,"Line");
break;
case GEOM_ELEM_MOVE_DILATE_LINE :
dilate(0,c->Num,TheFileName,"Line");
break;
case GEOM_ELEM_ADD_SYMMETRY_LINE :
symmetry(1,c->Num,TheFileName,"Line");
break;
case GEOM_ELEM_MOVE_SYMMETRY_LINE :
symmetry(0,c->Num,TheFileName,"Line");
break;
}
ZeroHighlight(&M);
Replot();
}
break;
case GEOM_ELEM_ADD_DILATE_SURF :
case GEOM_ELEM_MOVE_DILATE_SURF :
case GEOM_ELEM_ADD_SYMMETRY_SURF :
case GEOM_ELEM_MOVE_SYMMETRY_SURF :
while(1){
Msg(STATUS,"Select Surface ('q'=quit)");
if(!SelectEntity(ENT_SURFACE, &v,&c,&s)){
......@@ -417,7 +450,20 @@ void geom_event_handler (int event) {
Replot();
break;
}
dilate(event==GEOM_ELEM_ADD_DILATE_SURF?1:0,s->Num,TheFileName,"Surface");
switch(event){
case GEOM_ELEM_ADD_DILATE_SURF :
dilate(1,s->Num,TheFileName,"Surface");
break;
case GEOM_ELEM_MOVE_DILATE_SURF :
dilate(0,s->Num,TheFileName,"Surface");
break;
case GEOM_ELEM_ADD_SYMMETRY_SURF :
symmetry(1,s->Num,TheFileName,"Surface");
break;
case GEOM_ELEM_MOVE_SYMMETRY_SURF :
symmetry(0,s->Num,TheFileName,"Surface");
break;
}
ZeroHighlight(&M);
Replot();
}
......@@ -566,7 +612,10 @@ void GeomCb (Widget w, XtPointer client_data, XtPointer call_data){
case GEOM_DILAT_Y : strcpy(dy_text,XmTextGetString(w)); break;
case GEOM_DILAT_Z : strcpy(dz_text,XmTextGetString(w)); break;
case GEOM_DILAT_F : strcpy(df_text,XmTextGetString(w)); break;
case GEOM_SYMMETRY_A : strcpy(sa_text,XmTextGetString(w)); break;
case GEOM_SYMMETRY_B : strcpy(sb_text,XmTextGetString(w)); break;
case GEOM_SYMMETRY_C : strcpy(sc_text,XmTextGetString(w)); break;
case GEOM_SYMMETRY_D : strcpy(sd_text,XmTextGetString(w)); break;
default :
Msg(WARNING, "Unknown Value in GeomCb (%d)", (long int)client_data);
break;
......
/* $Id: CbGeom.h,v 1.2 2000-11-23 14:11:41 geuzaine Exp $ */
/* $Id: CbGeom.h,v 1.3 2000-12-13 13:57:00 geuzaine Exp $ */
#ifndef _CB_GEOM_H_
#define _CB_GEOM_H_
......@@ -25,34 +25,40 @@
#define GEOM_ELEM_ADD_DILATE_POINT 19
#define GEOM_ELEM_ADD_DILATE_LINE 20
#define GEOM_ELEM_ADD_DILATE_SURF 21
#define GEOM_ELEM_MOVE_TRANSLATE_POINT 22
#define GEOM_ELEM_MOVE_TRANSLATE_LINE 23
#define GEOM_ELEM_MOVE_TRANSLATE_SURF 24
#define GEOM_ELEM_MOVE_ROTATE_POINT 25
#define GEOM_ELEM_MOVE_ROTATE_LINE 26
#define GEOM_ELEM_MOVE_ROTATE_SURF 27
#define GEOM_ELEM_MOVE_DILATE_POINT 28
#define GEOM_ELEM_MOVE_DILATE_LINE 29
#define GEOM_ELEM_MOVE_DILATE_SURF 30
#define GEOM_ELEM_EXTRUDE_TRANSLATE_POINT 31
#define GEOM_ELEM_EXTRUDE_TRANSLATE_LINE 32
#define GEOM_ELEM_EXTRUDE_TRANSLATE_SURF 33
#define GEOM_ELEM_EXTRUDE_ROTATE_POINT 34
#define GEOM_ELEM_EXTRUDE_ROTATE_LINE 35
#define GEOM_ELEM_EXTRUDE_ROTATE_SURF 36
#define GEOM_ELEM_DELETE_POINT 37
#define GEOM_ELEM_DELETE_LINE 38
#define GEOM_ELEM_DELETE_SURF 39
#define GEOM_ELEM_SKETCH 40
#define GEOM_PHYS_ADD_POINT 41
#define GEOM_PHYS_ADD_LINE 42
#define GEOM_PHYS_ADD_SURF 43
#define GEOM_PHYS_ADD_VOLUME 44
#define GEOM_PHYS_DELETE_POINT 45
#define GEOM_PHYS_DELETE_LINE 46
#define GEOM_PHYS_DELETE_SURF 47
#define GEOM_PHYS_DELETE_VOLUME 48
#define GEOM_PARSE 49
#define GEOM_ELEM_ADD_SYMMETRY_POINT 22
#define GEOM_ELEM_ADD_SYMMETRY_LINE 23
#define GEOM_ELEM_ADD_SYMMETRY_SURF 24
#define GEOM_ELEM_MOVE_TRANSLATE_POINT 25
#define GEOM_ELEM_MOVE_TRANSLATE_LINE 26
#define GEOM_ELEM_MOVE_TRANSLATE_SURF 27
#define GEOM_ELEM_MOVE_ROTATE_POINT 28
#define GEOM_ELEM_MOVE_ROTATE_LINE 29
#define GEOM_ELEM_MOVE_ROTATE_SURF 30
#define GEOM_ELEM_MOVE_DILATE_POINT 31
#define GEOM_ELEM_MOVE_DILATE_LINE 32
#define GEOM_ELEM_MOVE_DILATE_SURF 33
#define GEOM_ELEM_MOVE_SYMMETRY_POINT 34
#define GEOM_ELEM_MOVE_SYMMETRY_LINE 35
#define GEOM_ELEM_MOVE_SYMMETRY_SURF 36
#define GEOM_ELEM_EXTRUDE_TRANSLATE_POINT 37
#define GEOM_ELEM_EXTRUDE_TRANSLATE_LINE 38
#define GEOM_ELEM_EXTRUDE_TRANSLATE_SURF 39
#define GEOM_ELEM_EXTRUDE_ROTATE_POINT 40
#define GEOM_ELEM_EXTRUDE_ROTATE_LINE 41
#define GEOM_ELEM_EXTRUDE_ROTATE_SURF 42
#define GEOM_ELEM_DELETE_POINT 43
#define GEOM_ELEM_DELETE_LINE 44
#define GEOM_ELEM_DELETE_SURF 45
#define GEOM_ELEM_SKETCH 46
#define GEOM_PHYS_ADD_POINT 47
#define GEOM_PHYS_ADD_LINE 48
#define GEOM_PHYS_ADD_SURF 49
#define GEOM_PHYS_ADD_VOLUME 50
#define GEOM_PHYS_DELETE_POINT 51
#define GEOM_PHYS_DELETE_LINE 52
#define GEOM_PHYS_DELETE_SURF 53
#define GEOM_PHYS_DELETE_VOLUME 54
#define GEOM_PARSE 55
/* GeomCb */
......@@ -78,6 +84,10 @@
#define GEOM_DILAT_Y 20
#define GEOM_DILAT_Z 21
#define GEOM_DILAT_F 22
#define GEOM_SYMMETRY_A 23
#define GEOM_SYMMETRY_B 24
#define GEOM_SYMMETRY_C 25
#define GEOM_SYMMETRY_D 26
void geom_event_handler (int event);
......
/* $Id: Geometry.cpp,v 1.5 2000-12-08 11:16:55 geuzaine Exp $ */
/* $Id: Geometry.cpp,v 1.6 2000-12-13 13:57:00 geuzaine Exp $ */
#include "Gmsh.h"
#include "GmshUI.h"
......@@ -646,6 +646,21 @@ void ForceGeometry_GD (Widgets_T *w){
NULL);
}
XtVaSetValues(w->GD.symmDialog,
XmNmarginHeight, DIALOG_H,
XmNmarginWidth, DIALOG_W,
NULL);
XtVaSetValues(w->GD.symmFrame[0],
XmNshadowType, IN_FRAME_TYPE,
XmNshadowThickness, IN_FRAME_SHADOW,
NULL);
XtVaSetValues(w->GD.symmFrame[1],
XmNchildHorizontalSpacing, TITLE_SPACE,
XmNchildVerticalAlignment, TITLE_ALIGN,
NULL);
}
void ForceGeometry_MD (Widgets_T *w){
......
/* $Id: Register.cpp,v 1.12 2000-12-08 11:16:55 geuzaine Exp $ */
/* $Id: Register.cpp,v 1.13 2000-12-13 13:57:00 geuzaine Exp $ */
#include "Gmsh.h"
#include "GmshUI.h"
......@@ -292,6 +292,11 @@ void RegisterCallbacks_GD(Widgets_T *w){
register_valchg_cb (w->GD.dilatText[2], GeomCb, GEOM_DILAT_Z);
register_valchg_cb (w->GD.dilatText[3], GeomCb, GEOM_DILAT_F);
register_cancel_cb (w->GD.symmDialog, ManageCb, w->GD.symmDialog);
register_valchg_cb (w->GD.symmText[0], GeomCb, GEOM_SYMMETRY_A);
register_valchg_cb (w->GD.symmText[1], GeomCb, GEOM_SYMMETRY_B);
register_valchg_cb (w->GD.symmText[2], GeomCb, GEOM_SYMMETRY_C);
register_valchg_cb (w->GD.symmText[3], GeomCb, GEOM_SYMMETRY_D);
}
void RegisterCallbacks_MD(Widgets_T *w){
......
/* $Id: Widgets.cpp,v 1.17 2000-12-08 11:16:55 geuzaine Exp $ */
/* $Id: Widgets.cpp,v 1.18 2000-12-13 13:57:00 geuzaine Exp $ */
#include "Gmsh.h"
#include "GmshUI.h"
......@@ -2082,7 +2082,7 @@ void CreateWidgets_GD(Widgets_T *w){
w->GD.dilatText[2] = XmCreateTextField(w->GD.dilatFrameRowCol[0], "GDdilatText2", arg, i);
XtManageChild(w->GD.dilatText[2]);
/* dilat - char length */
/* dilat - factor */
i=0;
w->GD.dilatFrame[0][1] = XmCreateFrame(w->GD.dilatRowCol, "GDdilatFrame01", arg, i);
......@@ -2104,6 +2104,51 @@ void CreateWidgets_GD(Widgets_T *w){
w->GD.dilatText[3] = XmCreateTextField(w->GD.dilatFrameRowCol[1], "GDdilatText3", arg, i);
XtManageChild(w->GD.dilatText[3]);
/* Symmetry */
i=0;
XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Current Symmetry")); i++;
XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Ok")); i++;
XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++;
XtSetArg(arg[i], XmNautoUnmanage, False); i++;
w->GD.symmDialog = XmCreateTemplateDialog(w->M.shell, "GDsymmDialog", arg, i);
XtUnmanageChild(w->GD.symmDialog);
i=0;
w->GD.symmFrame[0] = XmCreateFrame(w->GD.symmDialog, "GDsymmFrame0", arg, i);
XtManageChild(w->GD.symmFrame[0]);
i=0;
XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Plane")); i++;
XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++;
w->GD.symmFrame[1] = XmCreateLabel(w->GD.symmFrame[0], "GDsymmFrame1", arg, i);
XtManageChild(w->GD.symmFrame[1]);
i=0;
XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++;
w->GD.symmFrameRowCol = XmCreateRowColumn(w->GD.symmFrame[0], "ODsymmFrameRowCol", arg, i);
XtManageChild(w->GD.symmFrameRowCol);
i=0;
XtSetArg(arg[i], XmNvalue, ""); i++;
XtSetArg(arg[i], XmNcolumns, 10); i++;
w->GD.symmText[0] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText0", arg, i);
XtManageChild(w->GD.symmText[0]);
i=0;
XtSetArg(arg[i], XmNvalue, ""); i++;
XtSetArg(arg[i], XmNcolumns, 10); i++;
w->GD.symmText[1] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText1", arg, i);
XtManageChild(w->GD.symmText[1]);
i=0;
XtSetArg(arg[i], XmNvalue, ""); i++;
XtSetArg(arg[i], XmNcolumns, 10); i++;
w->GD.symmText[2] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText2", arg, i);
XtManageChild(w->GD.symmText[2]);
i=0;
XtSetArg(arg[i], XmNvalue, ""); i++;
XtSetArg(arg[i], XmNcolumns, 10); i++;
w->GD.symmText[3] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText3", arg, i);
XtManageChild(w->GD.symmText[3]);
}
/* ------------------------------------------------------------------------
......
/* $Id: Widgets.h,v 1.8 2000-12-08 11:16:55 geuzaine Exp $ */
/* $Id: Widgets.h,v 1.9 2000-12-13 13:57:00 geuzaine Exp $ */
#ifndef _WIDGETS_H_
#define _WIDGETS_H_
......@@ -169,6 +169,9 @@ typedef struct {
Widget dilatDialog, dilatRowCol ;
Widget dilatFrame[2][2], dilatFrameRowCol[2], dilatText[4] ;
Widget symmDialog, symmRowCol ;
Widget symmFrame[2], symmFrameRowCol, symmText[4] ;
} GD;
/* mesh dialogs */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment