Skip to content
Snippets Groups Projects
Gmsh.tab.cpp 270 KiB
Newer Older
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	else
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  List_Read(yyvsp[-1].l, i, &pars[i]);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      // treshold attractor: first parameter is the treshold, next two
      // are the in and out size fields, last is transition factor
      AttractorField *attractor = new AttractorField();
      Field *threshold = new ThresholdField(attractor, pars[0], pars[0] * pars[4], 
					    pars[1], pars[2]);
      fields.insert(threshold);
      BGMAddField(threshold);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-3].l, i, &d);
	Vertex *v = FindPoint((int)d); 
	if(v)
	  attractor->addPoint(v->Pos.X, v->Pos.Y, v->Pos.Z);
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	  GVertex *gv = GModel::current()->vertexByTag((int)d);
	    attractor->addPoint(gv->x(), gv->y(), gv->z());
      attractor->buildFastSearchStructures();
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      // dummy values
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      yyval.s.Type = 0;
      yyval.s.Num = 0;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 96:
#line 1217 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      double pars[] = { CTX.lc/10, CTX.lc/100., CTX.lc/20, 10, 3 };
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
	if(i > 4) 
	  yymsg(GERROR, "Too many paramaters for attractor line (max = 5)");	  
	else
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  List_Read(yyvsp[-1].l, i, &pars[i]);
      }
      // treshold attractor: first parameter is the treshold, next two
      // are the in and out size fields, last is transition factor
      AttractorField *att = new AttractorField();
      fields.insert(att);
      Field *threshold = new ThresholdField(att, pars[0], pars[0] * pars[4],
					    pars[1], pars[2]);
      fields.insert(threshold);
      BGMAddField(threshold);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-3].l, i, &d);
	Curve *c = FindCurve((int)d); 
	if(c){
	  att->addCurve(c, (int)pars[3]);
	}
	else{
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	  GEdge *ge = GModel::current()->edgeByTag((int)d);
	  if(ge){
	    att->addGEdge(ge, (int)pars[3]);
	  }
	}
      }
      att->buildFastSearchStructures();
      // dummy values
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      yyval.s.Type = 0;
      yyval.s.Num = 0;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 97:
#line 1253 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{      
      for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-3].l, i, &d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Vertex *v = FindPoint((int)d); 	 
	if(v)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  v->lc = yyvsp[-1].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	else{
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	  GVertex *gv = GModel::current()->vertexByTag((int)d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  if(gv) 
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	    gv->setPrescribedMeshSizeAtVertex(yyvsp[-1].d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-3].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      // dummy values
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      yyval.s.Type = 0;
      yyval.s.Num = 0;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 98:
#line 1275 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindCurve(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Curve %d already exists", num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
				-1, -1, 0., 1.);
	Tree_Add(THEM->Curves, &c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CreateReversedCurve(c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Delete(temp);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_SEGM_LINE;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 99:
#line 1293 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindCurve(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Curve %d already exists", num);
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL,
				-1, -1, 0., 1.);
	Tree_Add(THEM->Curves, &c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CreateReversedCurve(c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Delete(temp);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_SEGM_SPLN;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 100:
#line 1311 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindCurve(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Curve %d already exists", num);
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL,
				-1, -1, 0., 1.);
	Tree_Add(THEM->Curves, &c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CreateReversedCurve(c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Delete(temp);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_SEGM_CIRC;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 101:
#line 1329 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-6].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindCurve(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Curve %d already exists", num);
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-3].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL,
				-1, -1, 0., 1.);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	c->Circle.n[0] = yyvsp[-1].v[0];
	c->Circle.n[1] = yyvsp[-1].v[1];
	c->Circle.n[2] = yyvsp[-1].v[2];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	End_Curve(c);
	Tree_Add(THEM->Curves, &c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Curve *rc = CreateReversedCurve(c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	rc->Circle.n[0] = yyvsp[-1].v[0];
	rc->Circle.n[1] = yyvsp[-1].v[1];
	rc->Circle.n[2] = yyvsp[-1].v[2];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	End_Curve(rc);
	List_Delete(temp);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-3].l);
      yyval.s.Type = MSH_SEGM_CIRC;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 102:
#line 1355 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindCurve(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Curve %d already exists", num);
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL,
				-1, -1, 0., 1.);
	Tree_Add(THEM->Curves, &c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CreateReversedCurve(c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Delete(temp);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_SEGM_ELLI;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 103:
#line 1373 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-6].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindCurve(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Curve %d already exists", num);
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-3].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL,
				-1, -1, 0., 1.);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	c->Circle.n[0] = yyvsp[-1].v[0];
	c->Circle.n[1] = yyvsp[-1].v[1];
	c->Circle.n[2] = yyvsp[-1].v[2];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	End_Curve(c);
	Tree_Add(THEM->Curves, &c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Curve *rc = CreateReversedCurve(c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	rc->Circle.n[0] = yyvsp[-1].v[0];
	rc->Circle.n[1] = yyvsp[-1].v[1];
	rc->Circle.n[2] = yyvsp[-1].v[2];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	End_Curve(c);
	List_Delete(temp);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-3].l);
      yyval.s.Type = MSH_SEGM_ELLI;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 104:
#line 1400 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-14].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindCurve(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Curve %d already exists", num);
      }
      else{
	Curve *c = Create_Curve(num, MSH_SEGM_PARAMETRIC, 2, NULL, NULL,
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
				-1, -1, yyvsp[-10].d, yyvsp[-8].d);
	strcpy(c->functu, yyvsp[-6].c);
	strcpy(c->functv, yyvsp[-4].c);
	strcpy(c->functw, yyvsp[-2].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Tree_Add(THEM->Curves, &c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CreateReversedCurve(c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free(yyvsp[-6].c); Free(yyvsp[-4].c); Free(yyvsp[-2].c);
      yyval.s.Type = MSH_SEGM_PARAMETRIC;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 105:
#line 1419 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindCurve(num)){
	yymsg(GERROR, "Curve %d already exists", num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
	Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL,
				-1, -1, 0., 1.);
	Tree_Add(THEM->Curves, &c);
	CreateReversedCurve(c);
	List_Delete(temp);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_SEGM_BSPLN;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 106:
#line 1437 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindCurve(num)){
	yymsg(GERROR, "Curve %d already exists", num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
	Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL,
				-1, -1, 0., 1.);
	Tree_Add(THEM->Curves, &c);
	CreateReversedCurve(c);
	List_Delete(temp);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_SEGM_BEZIER;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 107:
#line 1455 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-8].d;
      if(List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1 != List_Nbr(yyvsp[-3].l)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Wrong definition of Nurbs Curve %d: "
	      "got %d knots, need N + D + 1 = %d + %d + 1 = %d",
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	      (int)yyvsp[-8].d, List_Nbr(yyvsp[-3].l), List_Nbr(yyvsp[-5].l), (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1);
Christophe Geuzaine's avatar
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	if(FindCurve(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  yymsg(GERROR, "Curve %d already exists", num);
	}
	else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  List_T *temp = ListOfDouble2ListOfInt(yyvsp[-5].l);
	  Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)yyvsp[-1].d, temp, yyvsp[-3].l,
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
				  -1, -1, 0., 1.);
	  Tree_Add(THEM->Curves, &c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  CreateReversedCurve(c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  List_Delete(temp);
	}
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-5].l);
      List_Delete(yyvsp[-3].l);
      yyval.s.Type = MSH_SEGM_NURBS;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 108:
#line 1481 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindEdgeLoop(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Line loop %d already exists", num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	sortEdgesInLoop(num, temp);
	EdgeLoop *l = Create_EdgeLoop(num, temp);
	Tree_Add(THEM->EdgeLoops, &l);
	List_Delete(temp);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_SEGM_LOOP;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 109:
#line 1498 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].i;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Physical line %d already exists", num);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
	List_Delete(temp);
	List_Add(THEM->PhysicalGroups, &p);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_PHYSICAL_LINE;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 110:
#line 1517 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindSurface(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Surface %d already exists", num);
      }
      else{
	Surface *s = Create_Surface(num, MSH_SURF_PLAN);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	setSurfaceGeneratrices(s, temp);
	List_Delete(temp);
	End_Surface(s);
	Tree_Add(THEM->Surfaces, &s);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_SURF_PLAN;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 111:
#line 1535 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d, type = 0;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindSurface(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Surface %d already exists", num);
      }
      else{
	double d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-1].l, 0, &d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	EdgeLoop *el = FindEdgeLoop((int)fabs(d));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	if(!el){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  yymsg(GERROR, "Unknown line loop %d", (int)d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	}
	else{
	  int j = List_Nbr(el->Curves);
	  if(j == 4){
	    type = MSH_SURF_REGL;
	  }
	  else if(j == 3){
	    type = MSH_SURF_TRIC;
	  }
	  else{
	    yymsg(GERROR, "Wrong definition of Ruled Surface %d: "
		  "%d borders instead of 3 or 4", num, j);
	    type = MSH_SURF_PLAN;
	  }
	  Surface *s = Create_Surface(num, type);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  setSurfaceGeneratrices(s, temp);
	  List_Delete(temp);
	  End_Surface(s);
	  Tree_Add(THEM->Surfaces, &s);
	}
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = type;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 112:
#line 1573 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      myGmshSurface = 0;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 113:
#line 1577 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      myGmshSurface = gmshSurface :: surfaceByTag ( (int) yyvsp[-1].d);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 114:
#line 1581 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-6].d, type = 0;
      myGmshSurface = gmshParametricSurface::NewParametricSurface ((int)yyvsp[-6].d,yyvsp[-3].c,yyvsp[-2].c,yyvsp[-1].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 115:
#line 1586 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d, type = 0;
      if (List_Nbr(yyvsp[-1].l) != 2){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Sphere %d has to be defined using 2 points (center + "
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	      "any point) and not %d", num, List_Nbr(yyvsp[-1].l));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-1].l, 0, &p1);
	List_Read(yyvsp[-1].l, 1, &p2);
	Vertex *v1 = FindPoint((int)p1);
	Vertex *v2 = FindPoint((int)p2);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	if(!v1) yymsg(GERROR, "Sphere %d : unknown point %d", num, (int)p1);
	if(!v2) yymsg(GERROR, "Sphere %d : unknown point %d", num, (int)p2);
	myGmshSurface = gmshSphere::NewSphere
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z,
	   sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) +
		(v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) +
		(v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z)));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 116:
#line 1608 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d, type = 0;
      if (List_Nbr(yyvsp[-1].l) != 2){
	yymsg(GERROR, "PolarSphere %d has to be defined using 2 points (center + "
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	      "any point) and not %d", num, List_Nbr(yyvsp[-1].l));
      }
      else{
	double p1,p2;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-1].l, 0, &p1);
	List_Read(yyvsp[-1].l, 1, &p2);
	Vertex *v1 = FindPoint((int)p1);
	Vertex *v2 = FindPoint((int)p2);
	if(!v1) yymsg(GERROR, "PolarSphere %d : unknown point %d", num, (int)p1);
	if(!v2) yymsg(GERROR, "PolarSphere %d : unknown point %d", num, (int)p2);
	myGmshSurface = gmshPolarSphere::NewPolarSphere
	  (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z,
	   sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) +
		(v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) +
		(v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z)));
      }      
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 117:
#line 1630 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindSurfaceLoop(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Surface loop %d already exists", num);
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	SurfaceLoop *l = Create_SurfaceLoop(num, temp);
	Tree_Add(THEM->SurfaceLoops, &l);
	List_Delete(temp);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_SURF_LOOP;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 118:
#line 1646 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].i;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Physical surface %d already exists", num);
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
	List_Delete(temp);
	List_Add(THEM->PhysicalGroups, &p);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_PHYSICAL_SURFACE;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 119:
#line 1666 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindVolume(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Volume %d already exists", num);
      }
      else{
	Volume *v = Create_Volume(num, MSH_VOLUME);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	setVolumeSurfaces(v, temp);
	List_Delete(temp);
	Tree_Add(THEM->Volumes, &v);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_VOLUME;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 120:
#line 1683 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindVolume(num)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Volume %d already exists", num);
      }
      else{
	Volume *v = Create_Volume(num, MSH_VOLUME);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	setVolumeSurfaces(v, temp);
	List_Delete(temp);
	Tree_Add(THEM->Volumes, &v);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_VOLUME;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 121:
#line 1700 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      int num = (int)yyvsp[-4].i;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Physical volume %d already exists", num);
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
	List_Delete(temp);
	List_Add(THEM->PhysicalGroups, &p);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
      yyval.s.Type = MSH_PHYSICAL_VOLUME;
      yyval.s.Num = num;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 122:
#line 1721 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      TranslateShapes(yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-1].l);
      yyval.l = yyvsp[-1].l;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 123:
#line 1726 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      RotateShapes(yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].d, yyvsp[-1].l);
      yyval.l = yyvsp[-1].l;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 124:
#line 1731 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      SymmetryShapes(yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-3].v[3], yyvsp[-1].l);
      yyval.l = yyvsp[-1].l;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 125:
#line 1736 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      DilatShapes(yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].d, yyvsp[-1].l);
      yyval.l = yyvsp[-1].l;
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 126:
#line 1741 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      yyval.l = List_Create(3, 3, sizeof(Shape));
      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
	Shape TheShape;
	List_Read(yyvsp[-1].l, i, &TheShape);
	CopyShape(TheShape.Type, TheShape.Num, &TheShape.Num);
	List_Add(yyval.l, &TheShape);
      }
      List_Delete(yyvsp[-1].l);
    ;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 127:
#line 1752 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{ 
      yyval.l = List_Create(2, 1, sizeof(Shape));
      IntersectCurvesWithSurface(yyvsp[-5].l, (int)yyvsp[-1].d, yyval.l);
      List_Delete(yyvsp[-5].l);
    ;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 128:
#line 1758 "Gmsh.y"
{ 
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      yyval.l = List_Create(2, 1, sizeof(Shape));
      BoundaryShapes(yyvsp[-1].l, yyval.l);
      List_Delete(yyvsp[-1].l);
    ;
    break;}
case 129:
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
#line 1766 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{ yyval.l = yyvsp[0].l; ;
    break;}
case 130:
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
#line 1767 "Gmsh.y"
{ yyval.l = yyvsp[0].l; ;
    break;}
case 131:
#line 1772 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      yyval.l = List_Create(3, 3, sizeof(Shape));
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 132:
#line 1776 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      List_Add(yyval.l, &yyvsp[0].s);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 133:
#line 1780 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-2].l, i, &d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Shape TheShape;
	TheShape.Num = (int)d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Vertex *v = FindPoint(TheShape.Num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	if(v){
	  TheShape.Type = MSH_POINT;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  List_Add(yyval.l, &TheShape);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	else{
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	  GVertex *gv = GModel::current()->vertexByTag(TheShape.Num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  if(gv){
	    TheShape.Type = MSH_POINT_FROM_GMODEL;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	    List_Add(yyval.l, &TheShape);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  }
	  else
	    yymsg(WARNING, "Unknown point %d", TheShape.Num);
	}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 134:
#line 1803 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-2].l, i, &d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Shape TheShape;
	TheShape.Num = (int)d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Curve *c = FindCurve(TheShape.Num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	if(c){
	  TheShape.Type = c->Typ;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  List_Add(yyval.l, &TheShape);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	else{
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	  GEdge *ge = GModel::current()->edgeByTag(TheShape.Num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  if(ge){
	    TheShape.Type = MSH_SEGM_FROM_GMODEL;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	    List_Add(yyval.l, &TheShape);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  }
	  else
	    yymsg(WARNING, "Unknown curve %d", TheShape.Num);
	}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 135:
#line 1826 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-2].l, i, &d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Shape TheShape;
	TheShape.Num = (int)d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Surface *s = FindSurface(TheShape.Num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	if(s){
	  TheShape.Type = s->Typ;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  List_Add(yyval.l, &TheShape);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	else{
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	  GFace *gf = GModel::current()->faceByTag(TheShape.Num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  if(gf){
	    TheShape.Type = MSH_SURF_FROM_GMODEL;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	    List_Add(yyval.l, &TheShape);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  }
	  else
	    yymsg(WARNING, "Unknown surface %d", TheShape.Num);
	}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 136:
#line 1849 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-2].l, i, &d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Shape TheShape;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	TheShape.Num = (int)d;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Volume *v = FindVolume(TheShape.Num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	if(v){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  TheShape.Type = v->Typ;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  List_Add(yyval.l, &TheShape);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	else{
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	  GRegion *gr = GModel::current()->regionByTag(TheShape.Num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  if(gr){
	    TheShape.Type = MSH_VOLUME_FROM_GMODEL;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	    List_Add(yyval.l, &TheShape);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  }
	  else
	    yymsg(WARNING, "Unknown volume %d", TheShape.Num);
	}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 137:
#line 1877 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Shape TheShape;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-1].l, i, &TheShape);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	DeleteShape(TheShape.Type, TheShape.Num);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 138:
#line 1886 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      if(!strcmp(yyvsp[-4].c, "View")){
	RemoveViewByIndex((int)yyvsp[-2].d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Unknown command 'Delete %s'", yyvsp[-4].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free(yyvsp[-4].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 139:
#line 1896 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      if(!strcmp(yyvsp[-1].c, "Meshes") || !strcmp(yyvsp[-1].c, "All")){
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	GModel::current()->destroy();
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	THEM->destroy();
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-1].c, "Physicals")){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Action(THEM->PhysicalGroups, Free_PhysicalGroup);
	List_Reset(THEM->PhysicalGroups);
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	GModel::current()->deletePhysicalGroups();
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Unknown command 'Delete %s'", yyvsp[-1].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free(yyvsp[-1].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 140:
#line 1912 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      if(!strcmp(yyvsp[-2].c, "Empty") && !strcmp(yyvsp[-1].c, "Views")){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	for(int i = List_Nbr(CTX.post.list) - 1; i >= 0; i--){
	  Post_View *v = *(Post_View **) List_Pointer(CTX.post.list, i);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  if(v->empty())
	    RemoveViewByIndex(i);
	}
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Unknown command 'Delete %s %s'", yyvsp[-2].c, yyvsp[-1].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free(yyvsp[-2].c); Free(yyvsp[-1].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 141:
#line 1931 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Shape TheShape;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-1].l, i, &TheShape);
	ColorShape(TheShape.Type, TheShape.Num, yyvsp[-3].u);
      }
      List_Delete(yyvsp[-1].l);      
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 142:
#line 1945 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      for(int i = 0; i < 4; i++)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	VisibilityShape(yyvsp[-1].c, i, 1);
      Free(yyvsp[-1].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 143:
#line 1951 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      for(int i = 0; i < 4; i++)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	VisibilityShape(yyvsp[-1].c, i, 0);
      Free(yyvsp[-1].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 144:
#line 1957 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Shape TheShape;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-1].l, i, &TheShape);
	VisibilityShape(TheShape.Type, TheShape.Num, 1);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 145:
#line 1966 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	Shape TheShape;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	List_Read(yyvsp[-1].l, i, &TheShape);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	VisibilityShape(TheShape.Type, TheShape.Num, 0);
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete(yyvsp[-1].l);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 146:
#line 1980 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      if(!strcmp(yyvsp[-2].c, "Include")){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	char tmpstring[1024];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	FixRelativePath(yyvsp[-1].c, tmpstring);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	// Warning: we *don't* close included files (to allow user
	// functions in these files). If you need to include many many
	// files and don't have functions in the files, use "Merge"
	// instead: some OSes limit the number of files a process can
	// open simultaneously. The right solution would be of course
	// to modify FunctionManager to reopen the files instead of
	// using the FILE pointer, but hey, I'm lazy...
	Msg(STATUS2, "Reading '%s'", tmpstring);
	ParseFile(tmpstring, 0, 1);
	SetBoundingBox();
	Msg(STATUS2, "Read '%s'", tmpstring);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-2].c, "Print")){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
#if defined(HAVE_FLTK)
	// make sure we have the latest data from THEM in GModel
	// (fixes bug where we would have no geometry in the picture if
	// the print command is in the same file as the geometry)
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	GModel::current()->importTHEM();
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	char tmpstring[1024];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	FixRelativePath(yyvsp[-1].c, tmpstring);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CreateOutputFile(tmpstring, CTX.print.format);
Christophe Geuzaine's avatar
Christophe Geuzaine committed
#endif
Christophe Geuzaine's avatar
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-2].c, "Save")){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
#if defined(HAVE_FLTK)
Christophe Geuzaine's avatar
Christophe Geuzaine committed
	GModel::current()->importTHEM();
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	char tmpstring[1024];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	FixRelativePath(yyvsp[-1].c, tmpstring);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CreateOutputFile(tmpstring, CTX.mesh.format);
Christophe Geuzaine's avatar
Christophe Geuzaine committed
#endif
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-2].c, "Merge") || !strcmp(yyvsp[-2].c, "MergeWithBoundingBox")){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	// MergeWithBoundingBox is deprecated
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	char tmpstring[1024];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	FixRelativePath(yyvsp[-1].c, tmpstring);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	MergeFile(tmpstring, 1);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-2].c, "System")){
	SystemCall(yyvsp[-1].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Unknown command '%s'", yyvsp[-2].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free(yyvsp[-2].c); Free(yyvsp[-1].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 147:
#line 2030 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      if(!strcmp(yyvsp[-6].c, "Save") && !strcmp(yyvsp[-5].c, "View")){
	Post_View **vv = (Post_View **)List_Pointer_Test(CTX.post.list, (int)yyvsp[-3].d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	if(vv){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  char tmpstring[1024];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  FixRelativePath(yyvsp[-1].c, tmpstring);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  WriteView(*vv, tmpstring, CTX.post.file_format, 0);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	}
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Unknown command '%s'", yyvsp[-6].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free(yyvsp[-6].c); Free(yyvsp[-5].c); Free(yyvsp[-1].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 148:
#line 2045 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      if(!strcmp(yyvsp[-6].c, "Background") && !strcmp(yyvsp[-5].c, "Mesh")  && !strcmp(yyvsp[-4].c, "View")){
	Post_View **vv = (Post_View **)List_Pointer_Test(CTX.post.list, (int)yyvsp[-2].d);
	if(vv){
	  Field *field = new PostViewField(*vv);
	  fields.insert(field);
	  BGMAddField(field);
	}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Unknown command '%s'", yyvsp[-6].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free(yyvsp[-6].c); Free(yyvsp[-5].c); Free(yyvsp[-4].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 149:
#line 2060 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      if(!strcmp(yyvsp[-2].c, "Sleep")){
	SleepInSeconds(yyvsp[-1].d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-2].c, "Remesh")){
	Msg(GERROR, "Surface ReMeshing must be reinterfaced");
	//	ReMesh();
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-2].c, "Mesh")){
	yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-2].c, "Status")){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Unknown command '%s'", yyvsp[-2].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free(yyvsp[-2].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 150:
#line 2080 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
       try {
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	 GMSH_PluginManager::instance()->action(yyvsp[-4].c, yyvsp[-1].c, 0);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
       }
       catch(...) {
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	 yymsg(GERROR, "Unknown action '%s' or plugin '%s'", yyvsp[-1].c, yyvsp[-4].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
       }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
       Free(yyvsp[-4].c); Free(yyvsp[-1].c);
     ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 151:
#line 2090 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
      if(!strcmp(yyvsp[-1].c, "ElementsFromAllViews"))
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CombineViews(0, 1, CTX.post.combine_remove_orig);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-1].c, "ElementsFromVisibleViews"))
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CombineViews(0, 0, CTX.post.combine_remove_orig);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-1].c, "ElementsByViewName"))
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CombineViews(0, 2, CTX.post.combine_remove_orig);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-1].c, "TimeStepsFromAllViews"))
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CombineViews(1, 1, CTX.post.combine_remove_orig);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-1].c, "TimeStepsFromVisibleViews"))
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CombineViews(1, 0, CTX.post.combine_remove_orig);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-1].c, "TimeStepsByViewName"))
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CombineViews(1, 2, CTX.post.combine_remove_orig);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-1].c, "Views"))
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CombineViews(0, 1, CTX.post.combine_remove_orig);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(!strcmp(yyvsp[-1].c, "TimeSteps"))
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	CombineViews(1, 2, CTX.post.combine_remove_orig);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(GERROR, "Unknown 'Combine' command");
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free(yyvsp[-1].c);
    ;
    break;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
case 152:
#line 2112 "Gmsh.y"
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      exit(0);