Skip to content

Commit

Permalink
FEM: add SMESH supported volumes to Python API of FemMesh
Browse files Browse the repository at this point in the history
  • Loading branch information
berndhahnebach authored and wwmayer committed Nov 19, 2015
1 parent c8e241c commit 2f57062
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 7 deletions.
58 changes: 53 additions & 5 deletions src/Mod/Fem/App/FemMeshPyImp.cpp
Expand Up @@ -399,18 +399,41 @@ PyObject* FemMeshPy::addVolume(PyObject *args)
if (!vol)
throw std::runtime_error("Failed to add Tet4 volume");
break;
case 5:
vol = meshDS->AddVolumeWithID(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],ElementId);
if (!vol)
throw std::runtime_error("Failed to add Pyra5 volume");
break;
case 6:
vol = meshDS->AddVolumeWithID(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],ElementId);
if (!vol)
throw std::runtime_error("Failed to add Penta6 volume");
break;
case 8:
vol = meshDS->AddVolumeWithID(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],Nodes[6],Nodes[7],ElementId);
if (!vol)
throw std::runtime_error("Failed to add Tet10 volume");
throw std::runtime_error("Failed to add Hexa8 volume");
break;
case 10:
vol = meshDS->AddVolumeWithID(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],Nodes[6],Nodes[7],Nodes[8],Nodes[9],ElementId);
if (!vol)
throw std::runtime_error("Failed to add Tet10 volume");
break;
case 13:
vol = meshDS->AddVolumeWithID(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],Nodes[6],Nodes[7],Nodes[8],Nodes[9],Nodes[10],Nodes[11],Nodes[12],ElementId);
if (!vol)
throw std::runtime_error("Failed to add Pyra13 volume");
case 15:
vol = meshDS->AddVolumeWithID(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],Nodes[6],Nodes[7],Nodes[8],Nodes[9],Nodes[10],Nodes[11],Nodes[12],Nodes[13],Nodes[14],ElementId);
if (!vol)
throw std::runtime_error("Failed to add Penta15 volume");
case 20:
vol = meshDS->AddVolumeWithID(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],Nodes[6],Nodes[7],Nodes[8],Nodes[9],Nodes[10],Nodes[11],Nodes[12],Nodes[13],Nodes[14],Nodes[15],Nodes[16],Nodes[17],Nodes[18],Nodes[19],ElementId);
if (!vol)
throw std::runtime_error("Failed to add Hexa20 volume");
break;

default: throw std::runtime_error("Unknown node count, [4|5|6|8|10|13|18] are allowed"); //unknown face type
default: throw std::runtime_error("Unknown node count, [4|5|6|8|10|13|15|20] are allowed"); //unknown volume type
}
}else{
switch(Nodes.size()){
Expand All @@ -419,18 +442,43 @@ PyObject* FemMeshPy::addVolume(PyObject *args)
if (!vol)
throw std::runtime_error("Failed to add Tet4 volume");
break;
case 5:
vol = meshDS->AddVolume(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4]);
if (!vol)
throw std::runtime_error("Failed to add Pyra5 volume");
break;
case 6:
vol = meshDS->AddVolume(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5]);
if (!vol)
throw std::runtime_error("Failed to add Penta6 volume");
break;
case 8:
vol = meshDS->AddVolume(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],Nodes[6],Nodes[7]);
if (!vol)
throw std::runtime_error("Failed to add Tet10 volume");
throw std::runtime_error("Failed to add Hexa8 volume");
break;
case 10:
vol = meshDS->AddVolume(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],Nodes[6],Nodes[7],Nodes[8],Nodes[9]);
if (!vol)
throw std::runtime_error("Failed to add Tet10 volume");
break;
case 13:
vol = meshDS->AddVolume(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],Nodes[6],Nodes[7],Nodes[8],Nodes[9],Nodes[10],Nodes[11],Nodes[12]);
if (!vol)
throw std::runtime_error("Failed to add Pyra13 volume");
break;
case 15:
vol = meshDS->AddVolume(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],Nodes[6],Nodes[7],Nodes[8],Nodes[9],Nodes[10],Nodes[11],Nodes[12],Nodes[13],Nodes[14]);
if (!vol)
throw std::runtime_error("Failed to add Penta15 volume");
break;
case 20:
vol = meshDS->AddVolume(Nodes[0],Nodes[1],Nodes[2],Nodes[3],Nodes[4],Nodes[5],Nodes[6],Nodes[7],Nodes[8],Nodes[9],Nodes[10],Nodes[11],Nodes[12],Nodes[13],Nodes[14],Nodes[15],Nodes[16],Nodes[17],Nodes[18],Nodes[19]);
if (!vol)
throw std::runtime_error("Failed to add Hexa20 volume");
break;

default: throw std::runtime_error("Unknown node count, [4|5|6|8|10|13|18] are allowed"); //unknown face type
default: throw std::runtime_error("Unknown node count, [4|5|6|8|10|13|15|20] are allowed"); //unknown volume type
}

}
Expand All @@ -441,7 +489,7 @@ PyObject* FemMeshPy::addVolume(PyObject *args)

PyErr_SetString(PyExc_TypeError, "addVolume accepts:\n"
"-- int,int,int,int\n"
"-- [4|8|10 int],[int]\n");
"-- [4|5|6|8|10|13|15|20 int],[int]\n");
return 0;

}
Expand Down
4 changes: 2 additions & 2 deletions src/Mod/Fem/Gui/ViewProviderFemMesh.cpp
Expand Up @@ -831,8 +831,8 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop,
// face 4
BndBox.Add(facesHelper[i++].set(6, aVol, aVol->GetID(), 4, aVol->GetNode(2), aVol->GetNode(3), aVol->GetNode(0), aVol->GetNode(9), aVol->GetNode(7), aVol->GetNode(6)));
break;
//unknown case
default: assert(0);
default://unknown volume type
throw std::runtime_error("Node count not supported by ViewProviderFemMesh, [4|8|10] are allowed"); // [4|5|6|8|10|13|15|20]
}
}
}
Expand Down

0 comments on commit 2f57062

Please sign in to comment.