Skip to content
Snippets Groups Projects
Select Git revision
  • bd6f8782f089f59bfed8277c218db0374d4a945e
  • master default
  • cgnsUnstructured
  • partitioning
  • poppler
  • HighOrderBLCurving
  • gmsh_3_0_4
  • gmsh_3_0_3
  • gmsh_3_0_2
  • gmsh_3_0_1
  • gmsh_3_0_0
  • gmsh_2_16_0
  • gmsh_2_15_0
  • gmsh_2_14_1
  • gmsh_2_14_0
  • gmsh_2_13_2
  • gmsh_2_13_1
  • gmsh_2_12_0
  • gmsh_2_11_0
  • gmsh_2_10_1
  • gmsh_2_10_0
  • gmsh_2_9_3
  • gmsh_2_9_2
  • gmsh_2_9_1
  • gmsh_2_9_0
  • gmsh_2_8_6
26 results

AboutViewController.mm

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    Geo.cpp 13.01 KiB
    /* $Id: Geo.cpp,v 1.7 2000-12-01 13:38:53 geuzaine Exp $ */
    
    #include "Gmsh.h"
    #include "Const.h"
    #include "Geo.h"
    #include "CAD.h"
    #include "DataBase.h"
    #include "Parser.h"
    
    #define BUFFSIZE 32000
    
    char x_text[100]  = "0.0", y_text[100]  = "0.0", z_text[100]  = "0.0";
    char l_text[100] = "1.0" ;
    char tx_text[100] = "0.0", ty_text[100] = "0.0", tz_text[100] = "0.0";
    char attrx_text[100] = "1.0", attry_text[100] = "1.0", attrz_text[100] = "1.0" ;
    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 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";
    char char_length_text[100] = "1.0";
    
    int Mode_Transfinite = 0;
    
    double evaluate_scalarfunction (char *var, double val, char *funct){
      FILE *tempf;
      tempf = yyin;
      yyin = fopen("gmsh.tmp","w");
    
      /* On pose la variable = la fonction et on evalue la fonction */
    
      fprintf(yyin,"%s = %g ;\n",var,val);
      fprintf(yyin,"ValeurTemporaire__ = %s ;\n",funct);
      fclose(yyin);
      yyin = fopen("gmsh.tmp","r");
      while(!feof(yyin)){
        yyparse();
      }
      fclose(yyin);
      Symbol TheSymbol;
      TheSymbol.Name = (char*)malloc(100);
      strcpy(TheSymbol.Name,"ValeurTemporaire__");
      yyin = tempf;
      if (!List_Query(Symbol_L, &TheSymbol, CompareSymbols)) {
        free(TheSymbol.Name);
        return 0.0;
      }
      free(TheSymbol.Name);
      return TheSymbol.val;
    }
    
    void add_infile(char *text, char *fich){
      FILE *file;
    
      yyin = fopen("gmsh.tmp","w");
      file = fopen(fich,"a");
      fprintf(yyin,"%s\n",text);
      Msg(SELECT,"%s",text);
      fclose(yyin);
      yyin = fopen("gmsh.tmp","r");
      while(!feof(yyin)){
        yyparse();
      }
      fclose(yyin);
      fprintf(file,"%s\n",text);
      fclose(file);
      AddALineInTheEditGeometryForm (text);
    }
    
    void del_pnt(int p1, char *fich){
      char text[BUFFSIZE];
    
      sprintf(text,"Delete {\n Point{%d};\n}",p1);
      add_infile(text,fich);
    }
    
    void del_seg(int p1, char *fich){
      char text[BUFFSIZE];
    
      sprintf(text,"Delete {\n Line{%d};\n}",p1);
      add_infile(text,fich);
    }
    
    void del_srf(int p1, char *fich){
      char text[BUFFSIZE];
    
      sprintf(text,"Delete {\n Surface{%d};\n}",p1);
      add_infile(text,fich);
    }
    
    void add_trsfsurf (int N, int *l, char *fich){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i;
      sprintf(text,"Transfinite Surface {%d} = {",l[0]);
      for(i=1;i<N;i++){
        if(i==1)sprintf(text2,"%d ",l[i]);
        else sprintf(text2,",%d ",l[i]);
        strcat(text,text2);
      }
      sprintf(text2,"};");
      strcat(text,text2);
      add_infile(text,fich);
    }
    
    void add_ellipticsurf (int N, int *l, char *fich){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i;
      sprintf(text,"Elliptic Surface {%d} = {",l[0]);
      for(i=1;i<N;i++){
        if(i==1)sprintf(text2,"%d ",l[i]);
        else sprintf(text2,",%d ",l[i]);
        strcat(text,text2);
      }
      sprintf(text2,"};");
      strcat(text,text2);
      add_infile(text,fich);
    }
    
    void add_charlength (int N, int *l, char *fich){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i;
      sprintf(text,"Characteristic Length {");
      for(i=0;i<N;i++){
        if(i==0)sprintf(text2,"%d ",l[i]);
        else sprintf(text2,",%d ",l[i]);
        strcat(text,text2);
      }
      sprintf(text2,"} = %s;", char_length_text);
      strcat(text,text2);
      add_infile(text,fich);
    }
    
    void add_recosurf (int N, int *l, char *fich){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i;
      sprintf(text,"Recombine Surface {");
      for(i=0;i<N;i++){
        if(i==0)sprintf(text2,"%d ",l[i]);
        else sprintf(text2,",%d ",l[i]);
        strcat(text,text2);
      }
      sprintf(text2,"};");
      strcat(text,text2);
      add_infile(text,fich);
    }
    
    
    void add_trsfline (int N, int *l, char *fich){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i;
      sprintf(text,"Transfinite Line {");
      for(i=0;i<N;i++){
        if(!i)sprintf(text2,"%d ",l[i]);
        else sprintf(text2,",%d ",l[i]);
        strcat(text,text2);
      }
      if(Mode_Transfinite == 0)
        sprintf(text2,"} = %s;",nb_pts);
      else if(Mode_Transfinite == 1)
       sprintf(text2,"} = %s Using Progression %s;",nb_pts,mode_value);
      else if(Mode_Transfinite == 2)
        sprintf(text2,"} = %s Using Bump %s;",nb_pts,mode_value);
      strcat(text,text2);
      add_infile(text,fich);
    }
    
    
    void add_param (char *par, char *value, char *fich){
      char text[BUFFSIZE];
      sprintf(text,"%s = %s;",par,value);
      add_infile(text,fich);
    }
    
    void add_point(char *fich){
      char text[BUFFSIZE];
      int ip;
    
      ip = NEWPOINT();
      sprintf(text,"Point(%d) = {%s,%s,%s,%s};",ip,x_text,y_text,z_text,l_text);
      add_infile(text,fich);
    }
    
    void add_attractor(char *fich, int ip, int typ){
      char text[BUFFSIZE];
      if(typ == 0) {
        sprintf(text,"Attractor Point {%d} = {%s,%s,%s} = ;",
                ip,attrx_text,attry_text,attrdec_text);
      }
      else if(typ == 1){
        sprintf(text,"Attractor Line {%d} = {%s,%s,%s};",
                ip, attrx_text,attry_text,attrdec_text);
      }
      else if(typ == 2) {
        sprintf(text,"Attractor Surface {%d} = {%s,%s,%s};",
                ip,attrx_text,attry_text,attrdec_text);
      }
      add_infile(text,fich);
    }
    
    
    void add_line(int p1, int p2, char *fich){
      char text[BUFFSIZE];
      int iseg;
      List_T *list = List_Create(2,2,sizeof(int));
      List_Add(list,&p1);
      List_Add(list,&p2);
      if((recognize_seg(MSH_SEGM_LINE,list,&iseg))){
        List_Delete(list);
        return;
      }
      List_Delete(list);
      
      sprintf(text,"Line(%d) = {%d,%d};",NEWREG(),p1,p2);
      add_infile(text,fich);
    }
    
    void add_circ(int p1, int p2, int p3, char *fich){
      char text[BUFFSIZE];
    
      sprintf(text,"Circle(%d) = {%d,%d,%d};",NEWREG(),p1,p2,p3);
      add_infile(text,fich);
    }
    
    void add_ell(int p1, int p2, int p3, int p4, char *fich){
      char text[BUFFSIZE];
    
      sprintf(text,"Ellipsis(%d) = {%d,%d,%d,%d};",NEWREG(),p1,p2,p3,p4);
      add_infile(text,fich);
    }
    
    void add_spline(int N, int *p, char *fich){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i;
    
      sprintf(text,"CatmullRom(%d) = {",NEWREG());
      for(i=0;i<N;i++){
        if(i != N-1)
          sprintf(text2,"%d,",p[i]);
        else
          sprintf(text2,"%d};",p[i]);
        strcat(text,text2);
      }
      add_infile(text,fich);
    }
    
    void add_bezier(int N, int *p, char *fich){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i;
    
      sprintf(text,"Bezier(%d) = {",NEWREG());
      for(i=0;i<N;i++){
        if(i != N-1)
          sprintf(text2,"%d,",p[i]);
        else
          sprintf(text2,"%d};",p[i]);
        strcat(text,text2);
      }
      add_infile(text,fich);
    }
    
    
    void add_bspline(int N, int *p, char *fich){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i;
    
      sprintf(text,"BSpline(%d) = {",NEWREG());
      for(i=0;i<N;i++){
        if(i != N-1)
          sprintf(text2,"%d,",p[i]);
        else
          sprintf(text2,"%d};",p[i]);
        strcat(text,text2);
      }
      add_infile(text,fich);
    }
    
    void add_multline(int N, int *p, char *fich){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i;
    
      int iseg;
      List_T *list = List_Create(N,2,sizeof(int));
      for(i=0;i<N;i++)
        List_Add(list,&p[i]);
      if((recognize_seg(MSH_SEGM_LINE,list,&iseg))){
        List_Delete(list);
        return;
      }
      List_Delete(list);
    
      sprintf(text,"Line(%d) = {",NEWREG());
      for(i=0;i<N;i++){
        if(i != N-1)
          sprintf(text2,"%d,",p[i]);
        else
          sprintf(text2,"%d};",p[i]);
        strcat(text,text2);
      }
      add_infile(text,fich);
    }
    
    
    int recognize_zone(int ityp,List_T *list){
      return 0 ;
    }
    
    void add_loop(List_T *list, char *fich, int *numloop){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i,seg;
    
      if((recognize_loop(list,numloop))) return;
    
      *numloop = NEWREG();
      sprintf(text,"Line Loop(%d) = {",NEWREG());
      for(i=0;i<List_Nbr(list);i++){
          List_Read(list,i,&seg);
        if(i != List_Nbr(list)-1)
          sprintf(text2,"%d,",seg);
        else
          sprintf(text2,"%d};",seg);
        strcat(text,text2);
      }
      add_infile(text,fich);
    }
    
    
    void add_surf(List_T *list, char *fich, int support, int typ){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i,seg;
    
      if((i = recognize_zone(MSH_SURF_PLAN,list)) != 0)return;
      if((i = recognize_zone(MSH_SURF_REGL,list)) != 0)return;
      if((i = recognize_zone(MSH_SURF_TRIMMED,list)) != 0)return;
    
      if(typ ==1){
        sprintf(text,"Ruled Surface(%d) = {",NEWREG());
      }
      else if (typ == 2){
        sprintf(text,"Plane Surface(%d) = {",NEWREG());
      }
      else
      {
        sprintf(text,"Trimmed Surface(%d) = %d {",NEWREG(),support);
      }
      for(i=0;i<List_Nbr(list);i++){
          List_Read(list,i,&seg);
        if(i != List_Nbr(list)-1)
          sprintf(text2,"%d,",seg);
        else
          sprintf(text2,"%d};",seg);
        strcat(text,text2);
      }
      add_infile(text,fich);
    }
    
    void add_vol(List_T *list, char *fich, int *numvol){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i,seg;
    
      if((recognize_surfloop(list,numvol))) return;
    
      *numvol = NEWREG();
      sprintf(text,"Surface Loop(%d) = {",*numvol);
      for(i=0;i<List_Nbr(list);i++){
        List_Read(list,i,&seg);
        if(i != List_Nbr(list)-1)
          sprintf(text2,"%d,",seg);
        else
          sprintf(text2,"%d};",seg);
        strcat(text,text2);
      }
      add_infile(text,fich);
    }
    
    void add_multvol(List_T *list, char *fich){
      char text[BUFFSIZE];
      char text2[BUFFSIZE];
      int i,seg;
    
      if((i= recognize_zone(MSH_VOLUME,list)))return;
      
      sprintf(text,"Volume(%d) = {",NEWREG());
      for(i=0;i<List_Nbr(list);i++){
        List_Read(list,i,&seg);
        if(i != List_Nbr(list)-1)
          sprintf(text2,"%d,",seg);
        else
          sprintf(text2,"%d};",seg);
        strcat(text,text2);
      }
      add_infile(text,fich);
    }
    
    void add_trsfvol(int N, int *l, char *fich){
      char text[TEXT_BUFFER_SIZE], text2[TEXT_BUFFER_SIZE];
      int i;
    
      sprintf(text,"Transfinite Volume{%s} = {", trsf_vol_text);
      for(i=0;i<N;i++){
        if(i==0)sprintf(text2,"%d ",l[i]);
        else sprintf(text2,",%d ",l[i]);
        strcat(text,text2);
      }
      sprintf(text2,"};");
      strcat(text,text2);
      add_infile(text,fich);
    }
    
    
    void add_physical_entity(List_T *list, char *fich, int type, int *num){
      char text[BUFFSIZE], text2[BUFFSIZE];
      int  i, elementary_entity;
    
      if(((*num) = recognize_zone(MSH_PHYSICAL_LINE,list))) return;
      if(((*num) = recognize_zone(MSH_PHYSICAL_SURFACE,list))) return;
      if(((*num) = recognize_zone(MSH_PHYSICAL_VOLUME,list))) return;
    
      *num = NEWREG();
      switch(type){
      case ENT_POINT : sprintf(text, "Physical Point(%d) = {", *num); break;
      case ENT_LINE : sprintf(text, "Physical Line(%d) = {", *num); break;
      case ENT_SURFACE : sprintf(text, "Physical Surface(%d) = {", *num); break;
      case ENT_VOLUME : sprintf(text, "Physical Volume(%d) = {", *num); break;
      }
    
      for(i=0; i<List_Nbr(list); i++){
        List_Read(list, i, &elementary_entity);
        if(i != List_Nbr(list)-1)
          sprintf(text2, "%d,", elementary_entity);
        else
          sprintf(text2, "%d};", elementary_entity);
        strcat(text, text2);
      }
      add_infile(text, fich);
    }
    
    void extrude(int s, char *fich, char *what){
      char text[BUFFSIZE];
    
      sprintf(text,"Extrude %s {%d, {%s,%s,%s}};",what,s,tx_text,ty_text,tz_text);
      add_infile(text,fich);
      add_infile("Coherence;",fich);
    }
    void translate_seg(int add, int s, char *fich){
      char text[BUFFSIZE];
    
      if(add)
        sprintf(text,"Translate {%s,%s,%s} {\n  Duplicata { Line{%d}; }\n}",
                tx_text,ty_text,tz_text,s);
      else
        sprintf(text,"Translate {%s,%s,%s} {\n  Line{%d};\n}",
                tx_text,ty_text,tz_text,s);
      add_infile(text,fich);
      add_infile("Coherence;",fich);
    }
    
    
    void translate_surf(int add, int s, char *fich){
      char text[BUFFSIZE];
    
      if(add)
        sprintf(text,"Translate {%s,%s,%s} {\n  Duplicata { Surface{%d}; }\n}",
                tx_text,ty_text,tz_text,s);
      else
        sprintf(text,"Translate {%s,%s,%s} {\n  Surface{%d};\n}",
                tx_text,ty_text,tz_text,s);
      add_infile(text,fich);
      add_infile("Coherence;",fich);
    }
    
    void translate_pt(int add, int s, char *fich){
      char text[BUFFSIZE];
    
      if(add)
        sprintf(text,"Translate {%s,%s,%s} {\n  Duplicata { Point{%d}; }\n}",
                tx_text,ty_text,tz_text,s);
      else
        sprintf(text,"Translate {%s,%s,%s} {\n  Point{%d};\n}",
                tx_text,ty_text,tz_text,s);
      add_infile(text,fich);
      add_infile("Coherence;",fich);
    }
    
    void rotate(int add, int s, char *fich, char *quoi){
      char text[BUFFSIZE];
    
      if(add)
        sprintf(text,"Rotate { {%s,%s,%s},{%s,%s,%s},%s } {\n  Duplicata { %s{%d}; }\n}",
                ax_text,ay_text,az_text,px_text,py_text,pz_text,angle_text, quoi,s);
      else
        sprintf(text,"Rotate { {%s,%s,%s},{%s,%s,%s},%s } {\n   %s{%d};\n  }",
                ax_text,ay_text,az_text,px_text,py_text,pz_text,angle_text, quoi,s);
      add_infile(text,fich);
      add_infile("Coherence;",fich);
    }
    
    void dilate(int add, int s, char *fich, char *quoi){
      char text[BUFFSIZE];
    
      if(add)
        sprintf(text,"Dilate { {%s,%s,%s},%s } {\n  Duplicata { %s{%d}; }\n}",
                dx_text,dy_text,dz_text,df_text, quoi,s);
      else
        sprintf(text,"Dilate { {%s,%s,%s},%s } {\n   %s{%d};\n  }",
                dx_text,dy_text,dz_text,df_text, quoi,s);
      add_infile(text,fich);
      add_infile("Coherence;",fich);
    }
    
    
    void protude(int s, char *fich, char *what){
      char text[BUFFSIZE];
    
      sprintf(text,"Extrude %s {%d, {%s,%s,%s}, {%s,%s,%s}, %s};",what,s,ax_text,ay_text,
              az_text,px_text,py_text,pz_text,angle_text);
      add_infile(text,fich);
      add_infile("Coherence;",fich);
    }