Newer
Older
case 100:
#line 1122 "Gmsh.y"
yymsg(0, "Curve %d already exists", num);
List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (8)].l));
Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL,
-1, -1, 0., 1.);
if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
c->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
c->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
c->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
End_Curve(c);
}
if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
rc->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
rc->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
rc->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
End_Curve(rc);
}
(yyval.s).Type = MSH_SEGM_ELLI;
(yyval.s).Num = num;
;}
break;
case 101:
#line 1152 "Gmsh.y"
yymsg(0, "Curve %d already exists", num);
Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL,
-1, -1, 0., 1.);
List_Delete((yyvsp[(6) - (7)].l));
(yyval.s).Type = MSH_SEGM_BSPLN;
(yyval.s).Num = num;
;}
break;
case 102:
#line 1170 "Gmsh.y"
yymsg(0, "Curve %d already exists", num);
Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL,
-1, -1, 0., 1.);
List_Delete((yyvsp[(6) - (7)].l));
(yyval.s).Type = MSH_SEGM_BEZIER;
(yyval.s).Num = num;
;}
break;
case 103:
#line 1188 "Gmsh.y"
{
int num = (int)(yyvsp[(3) - (11)].d);
if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
yymsg(0, "Wrong definition of Nurbs Curve %d: "
(int)(yyvsp[(3) - (11)].d), List_Nbr((yyvsp[(8) - (11)].l)), List_Nbr((yyvsp[(6) - (11)].l)), (int)(yyvsp[(10) - (11)].d), List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1);
yymsg(0, "Curve %d already exists", num);
List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (11)].l));
Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)(yyvsp[(10) - (11)].d), temp, (yyvsp[(8) - (11)].l),
List_Delete((yyvsp[(6) - (11)].l));
List_Delete((yyvsp[(8) - (11)].l));
(yyval.s).Type = MSH_SEGM_NURBS;
(yyval.s).Num = num;
;}
break;
case 104:
#line 1214 "Gmsh.y"
yymsg(0, "Line loop %d already exists", num);
sortEdgesInLoop(num, temp);
EdgeLoop *l = Create_EdgeLoop(num, temp);
List_Delete((yyvsp[(7) - (8)].l));
(yyval.s).Type = MSH_SEGM_LOOP;
(yyval.s).Num = num;
;}
break;
case 105:
#line 1231 "Gmsh.y"

Christophe Geuzaine
committed
curPhysDim = 1;
;}
break;
case 106:
#line 1235 "Gmsh.y"

Christophe Geuzaine
committed
{
int num = (int)(yyvsp[(5) - (9)].i);
yymsg(0, "Physical line %d already exists", num);
else{

Christophe Geuzaine
committed
List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
List_Delete(temp);
List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);

Christophe Geuzaine
committed
List_Delete((yyvsp[(8) - (9)].l));
(yyval.s).Type = MSH_PHYSICAL_LINE;
(yyval.s).Num = num;
;}
break;
case 107:
#line 1254 "Gmsh.y"
yymsg(0, "Surface %d already exists", num);
}
else{
Surface *s = Create_Surface(num, MSH_SURF_PLAN);
setSurfaceGeneratrices(s, temp);
List_Delete(temp);
End_Surface(s);
List_Delete((yyvsp[(7) - (8)].l));
(yyval.s).Type = MSH_SURF_PLAN;
(yyval.s).Num = num;
;}
break;
case 108:
#line 1272 "Gmsh.y"

Christophe Geuzaine
committed
int num = (int)(yyvsp[(4) - (9)].d), type = 0;
yymsg(0, "Surface %d already exists", num);

Christophe Geuzaine
committed
List_Read((yyvsp[(7) - (9)].l), 0, &d);
yymsg(0, "Unknown line loop %d", (int)d);
}
else{
int j = List_Nbr(el->Curves);
if(j == 4){
type = MSH_SURF_REGL;
}
else if(j == 3){
type = MSH_SURF_TRIC;
}
else{
yymsg(0, "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
committed
List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
setSurfaceGeneratrices(s, temp);
List_Delete(temp);
End_Surface(s);

Christophe Geuzaine
committed
List_Delete((yyvsp[(7) - (9)].l));
(yyval.s).Type = type;
(yyval.s).Num = num;
;}
break;
case 109:
#line 1311 "Gmsh.y"
case 110:
#line 1317 "Gmsh.y"
myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
case 111:
#line 1323 "Gmsh.y"
int num = (int)(yyvsp[(4) - (10)].d);
myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
(yyval.s).Type = 0;
(yyval.s).Num = num;
case 112:
#line 1330 "Gmsh.y"
yymsg(0, "Sphere %d has to be defined using 2 points (center + "
List_Read((yyvsp[(6) - (7)].l), 0, &p1);
List_Read((yyvsp[(6) - (7)].l), 1, &p2);
Vertex *v1 = FindPoint((int)p1);
Vertex *v2 = FindPoint((int)p2);
if(!v1) yymsg(0, "Sphere %d : unknown point %d", num, (int)p1);
if(!v2) yymsg(0, "Sphere %d : unknown point %d", num, (int)p2);
if(v1 && v2)
myGmshSurface = gmshSphere::NewSphere
(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)));
}
case 113:
#line 1355 "Gmsh.y"
yymsg(0, "PolarSphere %d has to be defined using 2 points (center + "
List_Read((yyvsp[(6) - (7)].l), 0, &p1);
List_Read((yyvsp[(6) - (7)].l), 1, &p2);
Vertex *v1 = FindPoint((int)p1);
Vertex *v2 = FindPoint((int)p2);
if(!v1) yymsg(0, "PolarSphere %d : unknown point %d", num, (int)p1);
if(!v2) yymsg(0, "PolarSphere %d : unknown point %d", num, (int)p2);
if(v1 && v2)
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)));
}
case 114:
#line 1380 "Gmsh.y"
yymsg(0, "Surface loop %d already exists", num);
Tree_Add(GModel::current()->getGEOInternals()->SurfaceLoops, &l);
List_Delete((yyvsp[(7) - (8)].l));
(yyval.s).Type = MSH_SURF_LOOP;
(yyval.s).Num = num;
;}
break;
case 115:
#line 1396 "Gmsh.y"

Christophe Geuzaine
committed
{
curPhysDim = 2;
;}
break;
case 116:
#line 1400 "Gmsh.y"

Christophe Geuzaine
committed
int num = (int)(yyvsp[(5) - (9)].i);
yymsg(0, "Physical surface %d already exists", num);

Christophe Geuzaine
committed
List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
List_Delete(temp);
List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);

Christophe Geuzaine
committed
List_Delete((yyvsp[(8) - (9)].l));
(yyval.s).Type = MSH_PHYSICAL_SURFACE;
(yyval.s).Num = num;
;}
break;
case 117:
#line 1416 "Gmsh.y"
{
int num = (int)(yyvsp[(4) - (8)].d);
if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
yymsg(0, "Physical volume %d already exists", num);
}
else{
List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
List_T *S[4] = {temp, 0, 0, 0};
PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp, S);
List_Delete(temp);
List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
}
List_Delete((yyvsp[(7) - (8)].l));
(yyval.s).Type = MSH_PHYSICAL_VOLUME;
(yyval.s).Num = num;
;}
break;
case 118:
#line 1434 "Gmsh.y"
{
int num = (int)(yyvsp[(4) - (12)].d);
if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
yymsg(0, "Physical surface %d already exists", num);
}
else{
List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (12)].l));
List_T *S[4] = {0, 0, 0, 0};
for (int i = 0; i < List_Nbr((yyvsp[(10) - (12)].l)); i++){
List_Read((yyvsp[(10) - (12)].l), i, &ll);
List_Delete(ll);
}
PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp, S);
List_Delete(temp);
for (int i = 0; i < List_Nbr((yyvsp[(10) - (12)].l)); i++)
List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
}
List_Delete((yyvsp[(7) - (12)].l));
List_Delete((yyvsp[(10) - (12)].l));
(yyval.s).Type = MSH_PHYSICAL_SURFACE;
(yyval.s).Num = num;
;}
break;
case 119:
#line 1461 "Gmsh.y"
{
int num = (int)(yyvsp[(4) - (8)].d);
if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
yymsg(0, "Physical surface %d already exists", num);
}
else{
List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
List_T *S[4] = {0, 0, 0, 0};
PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp, S);
List_Delete(temp);
List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
}
List_Delete((yyvsp[(7) - (8)].l));
(yyval.s).Type = MSH_PHYSICAL_SURFACE;
(yyval.s).Num = num;
;}
break;
case 120:
#line 1478 "Gmsh.y"
{
int num = (int)(yyvsp[(4) - (8)].d);
if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
yymsg(0, "Physical line %d already exists", num);
}
else{
List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
List_T *S[4] = {temp, 0, 0, 0};
PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp, S);
List_Delete(temp);
List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
}
List_Delete((yyvsp[(7) - (8)].l));
(yyval.s).Type = MSH_PHYSICAL_LINE;
(yyval.s).Num = num;
;}
break;
case 121:
#line 1498 "Gmsh.y"
yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
yymsg(0, "Volume %d already exists", num);
List_Delete((yyvsp[(7) - (8)].l));
(yyval.s).Type = MSH_VOLUME;
(yyval.s).Num = num;
;}
break;
case 122:
#line 1516 "Gmsh.y"
yymsg(0, "Volume %d already exists", num);
List_Delete((yyvsp[(6) - (7)].l));
(yyval.s).Type = MSH_VOLUME;
(yyval.s).Num = num;
;}
break;
case 123:
#line 1533 "Gmsh.y"

Christophe Geuzaine
committed
{
curPhysDim = 3;
;}
break;
case 124:
#line 1537 "Gmsh.y"

Christophe Geuzaine
committed
int num = (int)(yyvsp[(5) - (9)].i);
yymsg(0, "Physical volume %d already exists", num);

Christophe Geuzaine
committed
List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
List_Delete(temp);
List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);

Christophe Geuzaine
committed
List_Delete((yyvsp[(8) - (9)].l));
(yyval.s).Type = MSH_PHYSICAL_VOLUME;
(yyval.s).Num = num;
;}
break;
case 125:
#line 1558 "Gmsh.y"
{
TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
(yyval.l) = (yyvsp[(4) - (5)].l);
;}
break;
case 126:
#line 1563 "Gmsh.y"
{
RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
(yyval.l) = (yyvsp[(10) - (11)].l);
;}
break;
case 127:
#line 1568 "Gmsh.y"
{
SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
(yyval.l) = (yyvsp[(4) - (5)].l);
;}
break;
case 128:
#line 1573 "Gmsh.y"
{
DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
(yyval.l) = (yyvsp[(8) - (9)].l);
;}
break;
case 129:
#line 1578 "Gmsh.y"
if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
Shape TheShape;
List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
CopyShape(TheShape.Type, TheShape.Num, &TheShape.Num);
List_Add((yyval.l), &TheShape);
}
}
else if(!strcmp((yyvsp[(1) - (4)].c), "Boundary")){
BoundaryShapes((yyvsp[(3) - (4)].l), (yyval.l));
else{
yymsg(0, "Unknown command on multiple shapes: '%s'", (yyvsp[(1) - (4)].c));
}
Free((yyvsp[(1) - (4)].c));
case 130:
#line 1598 "Gmsh.y"
{
(yyval.l) = List_Create(2, 1, sizeof(Shape));
IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
List_Delete((yyvsp[(4) - (9)].l));
;}
break;
case 131:
#line 1604 "Gmsh.y"
{
(yyval.l) = List_Create(2, 1, sizeof(Shape*));
List_T *tmp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
SplitCurve((int)(yyvsp[(4) - (9)].d), tmp, (yyval.l));
List_Delete(tmp);
;}
break;
case 132:
#line 1614 "Gmsh.y"
{ (yyval.l) = (yyvsp[(1) - (1)].l); ;}
case 133:
#line 1615 "Gmsh.y"
case 134:
#line 1620 "Gmsh.y"
{
(yyval.l) = List_Create(3, 3, sizeof(Shape));
;}
break;
case 135:
#line 1624 "Gmsh.y"
{
List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
;}
break;
case 136:
#line 1628 "Gmsh.y"

Christophe Geuzaine
committed
Vertex *v = FindPoint(std::abs(TheShape.Num));

Christophe Geuzaine
committed
GVertex *gv = GModel::current()->getVertexByTag(std::abs(TheShape.Num));
yymsg(1, "Unknown point %d", TheShape.Num);
case 137:
#line 1651 "Gmsh.y"

Christophe Geuzaine
committed
Curve *c = FindCurve(std::abs(TheShape.Num));

Christophe Geuzaine
committed
GEdge *ge = GModel::current()->getEdgeByTag(std::abs(TheShape.Num));
yymsg(1, "Unknown curve %d", TheShape.Num);
case 138:
#line 1674 "Gmsh.y"

Christophe Geuzaine
committed
Surface *s = FindSurface(std::abs(TheShape.Num));

Christophe Geuzaine
committed
GFace *gf = GModel::current()->getFaceByTag(std::abs(TheShape.Num));
yymsg(1, "Unknown surface %d", TheShape.Num);
case 139:
#line 1697 "Gmsh.y"

Christophe Geuzaine
committed
Volume *v = FindVolume(std::abs(TheShape.Num));

Christophe Geuzaine
committed
GRegion *gr = GModel::current()->getRegionByTag(std::abs(TheShape.Num));
yymsg(1, "Unknown volume %d", TheShape.Num);
case 140:
#line 1725 "Gmsh.y"
{
if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
int t = (int)(yyvsp[(4) - (8)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
double d[4];
for(int i = 0; i < 4; i++)
List_Read((yyvsp[(7) - (8)].l), i, &d[i]);
gLevelset *ls = new gLevelsetPlane(d[0], d[1], d[2], d[3], t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
else
yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (8)].d));
;}
break;
case 141:
#line 1744 "Gmsh.y"
{
if(List_Nbr((yyvsp[(12) - (14)].l)) == 0){
int t = (int)(yyvsp[(4) - (14)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
double n[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
gLevelset *ls = new gLevelsetPlane(pt, n, t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else
yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (14)].d));
;}
break;
case 142:
#line 1762 "Gmsh.y"
{
if(List_Nbr((yyvsp[(14) - (16)].l)) == 0){
int t = (int)(yyvsp[(4) - (16)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
double pt1[3] = {(yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2]};
double pt2[3] = {(yyvsp[(10) - (16)].v)[0], (yyvsp[(10) - (16)].v)[1], (yyvsp[(10) - (16)].v)[2]};
double pt3[3] = {(yyvsp[(12) - (16)].v)[0], (yyvsp[(12) - (16)].v)[1], (yyvsp[(12) - (16)].v)[2]};
gLevelset *ls = new gLevelsetPlane(pt1, pt2, pt3, t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else
yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (16)].d));
;}
break;
case 143:
#line 1781 "Gmsh.y"
{
if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
int t = (int)(yyvsp[(4) - (12)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
double d;
List_Read((yyvsp[(10) - (12)].l), 0, &d);
gLevelset *ls = new gLevelsetSphere((yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], d, t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else
yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (12)].d));
;}
break;
case 144:
#line 1799 "Gmsh.y"
{
if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
int t = (int)(yyvsp[(4) - (8)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
std::vector<const gLevelset *> vl;
for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
LevelSet *pl = FindLevelSet((int)d);
if(!pl) yymsg(0, "Levelset Union %d : unknown levelset %d", t, (int)d);
else vl.push_back(pl->ls);
}
gLevelset *ls = new gLevelsetUnion(vl);
LevelSet *l = Create_LevelSet(t, ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else if(!strcmp((yyvsp[(2) - (8)].c), "Intersection")){
int t = (int)(yyvsp[(4) - (8)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
std::vector<const gLevelset *> vl;
for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
LevelSet *pl = FindLevelSet((int)d);
if(!pl) yymsg(0, "Levelset Intersection %d : unknown levelset %d", t, (int)d);
else vl.push_back(pl->ls);
}
gLevelset *ls = new gLevelsetIntersection(vl);
LevelSet *l = Create_LevelSet(t, ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else if(!strcmp((yyvsp[(2) - (8)].c), "Cut")){
int t = (int)(yyvsp[(4) - (8)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
std::vector<const gLevelset *> vl;
for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
LevelSet *pl = FindLevelSet((int)d);
if(!pl) yymsg(0, "Levelset Cut %d : unknown levelset %d", t, (int)d);
else vl.push_back(pl->ls);
}
gLevelset *ls = new gLevelsetCut(vl);
LevelSet *l = Create_LevelSet(t, ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else if(!strcmp((yyvsp[(2) - (8)].c), "Crack")){
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
int t = (int)(yyvsp[(4) - (8)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
std::vector<const gLevelset *> vl;
for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
LevelSet *pl = FindLevelSet((int)d);
if(!pl) yymsg(0, "Levelset Crack %d : unknown levelset %d", t, (int)d);
else vl.push_back(pl->ls);
}
gLevelset *ls = new gLevelsetCrack(vl);
LevelSet *l = Create_LevelSet(t, ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else
yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (8)].d));
Free((yyvsp[(2) - (8)].c));
;}
break;
if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
int t = (int)(yyvsp[(4) - (6)].d);
GModel *GM = GModel::current();
GM->buildCutGModel(FindLevelSet(t)->ls);
GM->destroy();
}
else
yymsg(0, "Wrong levelset definition");
Free((yyvsp[(2) - (6)].c));
;}
break;
if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
int t = (int)(yyvsp[(4) - (14)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
double d;
List_Read((yyvsp[(12) - (14)].l), 0, &d);
double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
gLevelset *ls = new gLevelsetGenCylinder(pt, dir, d, t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else if(!strcmp((yyvsp[(2) - (14)].c), "Cone") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
int t = (int)(yyvsp[(4) - (14)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
double d;
List_Read((yyvsp[(12) - (14)].l), 0, &d);
double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
gLevelset *ls = new gLevelsetCone(pt, dir, d, t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 2){
int t = (int)(yyvsp[(4) - (14)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
double d[2];
for(int i = 0; i < 2; i++)
List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
gLevelset *ls = new gLevelsetCylinder(pt, dir, d[0], d[1], t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 3){
int t = (int)(yyvsp[(4) - (14)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
double d[3];
for(int i = 0; i < 3; i++)
List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
gLevelset *ls = new gLevelsetCylinder(pt, dir, d[0], d[1], d[2], t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else if(!strcmp((yyvsp[(2) - (14)].c), "Ellipsoid") && List_Nbr((yyvsp[(12) - (14)].l)) == 3){
int t = (int)(yyvsp[(4) - (14)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
double d[3];
for(int i = 0; i < 3; i++)
List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
gLevelset *ls = new gLevelsetEllipsoid(pt, dir, d[0], d[1], d[2], t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else if(!strcmp((yyvsp[(2) - (14)].c), "Quadric") && List_Nbr((yyvsp[(12) - (14)].l)) == 5){
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
int t = (int)(yyvsp[(4) - (14)].d);
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
double d[5];
for(int i = 0; i < 5; i++)
List_Read((yyvsp[(12) - (14)].l), i, &d[i]);
double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
double dir[3] = {(yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2]};
gLevelset *ls = new gLevelsetGeneralQuadric(pt, dir, d[0], d[1], d[2], d[3], d[4], t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else
yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (14)].d));
Free((yyvsp[(2) - (14)].c));
;}
break;