+ FEM: add a couple of methods to Python interface
This commit is contained in:
parent
9e89f2ff9a
commit
814c144ecb
|
@ -625,6 +625,17 @@ std::set<int> FemMesh::getNodesByVertex(const TopoDS_Vertex &vertex) const
|
|||
return result;
|
||||
}
|
||||
|
||||
std::set<int> FemMesh::getElementNodes(int id) const
|
||||
{
|
||||
std::set<int> result;
|
||||
const SMDS_MeshElement* elem = myMesh->GetMeshDS()->FindElement(id);
|
||||
if (elem) {
|
||||
for (int i = 0; i < elem->NbNodes(); i++)
|
||||
result.insert(elem->GetNode(i)->GetID());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void FemMesh::readNastran(const std::string &Filename)
|
||||
{
|
||||
Base::TimeInfo Start;
|
||||
|
|
|
@ -93,6 +93,8 @@ public:
|
|||
std::set<int> getNodesByEdge(const TopoDS_Edge &edge) const;
|
||||
/// retrieving by vertex
|
||||
std::set<int> getNodesByVertex(const TopoDS_Vertex &vertex) const;
|
||||
/// retrieving node IDs by element ID
|
||||
std::set<int> getElementNodes(int id) const;
|
||||
/// retrieving volume IDs and face IDs number by face
|
||||
std::map<int, int> getVolumesByFace(const TopoDS_Face &face) const;
|
||||
/// retrieving volume IDs and CalculiX face number by face
|
||||
|
|
|
@ -114,6 +114,11 @@
|
|||
<UserDocu>Return a list of node IDs which belong to a TopoVertex</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="getElementNodes" Const="true">
|
||||
<Documentation>
|
||||
<UserDocu>Return a tuple of node IDs to a given element ID</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Attribute Name="Nodes" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>Dictionary of Nodes by ID (int ID:Vector())</UserDocu>
|
||||
|
@ -126,13 +131,25 @@
|
|||
</Documentation>
|
||||
<Parameter Name="NodeCount" Type="Int"/>
|
||||
</Attribute>
|
||||
<Attribute Name="Edges" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>Tuple of edge IDs</UserDocu>
|
||||
</Documentation>
|
||||
<Parameter Name="Edges" Type="Tuple"/>
|
||||
</Attribute>
|
||||
<Attribute Name="EdgeCount" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>Number of edges in the Mesh.</UserDocu>
|
||||
</Documentation>
|
||||
<Parameter Name="EdgeCount" Type="Int"/>
|
||||
</Attribute>
|
||||
<Attribute Name="FacesCount" ReadOnly="true">
|
||||
<Attribute Name="Faces" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>Tuple of face IDs</UserDocu>
|
||||
</Documentation>
|
||||
<Parameter Name="Faces" Type="Tuple"/>
|
||||
</Attribute>
|
||||
<Attribute Name="FaceCount" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>Number of Faces in the Mesh.</UserDocu>
|
||||
</Documentation>
|
||||
|
@ -156,8 +173,13 @@
|
|||
</Documentation>
|
||||
<Parameter Name="PolygonCount" Type="Int"/>
|
||||
</Attribute>
|
||||
|
||||
<Attribute Name="VolumeCount" ReadOnly="true">
|
||||
<Attribute Name="Volumes" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>Tuple of volume IDs</UserDocu>
|
||||
</Documentation>
|
||||
<Parameter Name="Volumes" Type="Tuple"/>
|
||||
</Attribute>
|
||||
<Attribute Name="VolumeCount" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>Number of Volumes in the Mesh.</UserDocu>
|
||||
</Documentation>
|
||||
|
|
|
@ -683,6 +683,28 @@ PyObject* FemMeshPy::getNodesByVertex(PyObject *args)
|
|||
}
|
||||
}
|
||||
|
||||
PyObject* FemMeshPy::getElementNodes(PyObject *args)
|
||||
{
|
||||
int id;
|
||||
if (!PyArg_ParseTuple(args, "i", &id))
|
||||
return 0;
|
||||
|
||||
try {
|
||||
std::set<int> resultSet = getFemMeshPtr()->getElementNodes(id);
|
||||
Py::Tuple ret(resultSet.size());
|
||||
int index = 0;
|
||||
for (std::set<int>::const_iterator it = resultSet.begin();it!=resultSet.end();++it)
|
||||
ret.setItem(index++, Py::Int(*it));
|
||||
|
||||
return Py::new_reference_to(ret);
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
PyErr_SetString(Base::BaseExceptionFreeCADError, e->GetMessageString());
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ===== Atributes ============================================================
|
||||
|
||||
|
@ -714,12 +736,48 @@ Py::Int FemMeshPy::getNodeCount(void) const
|
|||
return Py::Int(getFemMeshPtr()->getSMesh()->NbNodes());
|
||||
}
|
||||
|
||||
Py::Tuple FemMeshPy::getEdges(void) const
|
||||
{
|
||||
std::set<int> ids;
|
||||
SMDS_EdgeIteratorPtr aEdgeIter = getFemMeshPtr()->getSMesh()->GetMeshDS()->edgesIterator();
|
||||
while (aEdgeIter->more()) {
|
||||
const SMDS_MeshEdge* aEdge = aEdgeIter->next();
|
||||
ids.insert(aEdge->GetID());
|
||||
}
|
||||
|
||||
Py::Tuple tuple(ids.size());
|
||||
int index = 0;
|
||||
for (std::set<int>::iterator it = ids.begin(); it != ids.end(); ++it) {
|
||||
tuple.setItem(index++, Py::Int(*it));
|
||||
}
|
||||
|
||||
return tuple;
|
||||
}
|
||||
|
||||
Py::Int FemMeshPy::getEdgeCount(void) const
|
||||
{
|
||||
return Py::Int(getFemMeshPtr()->getSMesh()->NbEdges());
|
||||
}
|
||||
|
||||
Py::Int FemMeshPy::getFacesCount(void) const
|
||||
Py::Tuple FemMeshPy::getFaces(void) const
|
||||
{
|
||||
std::set<int> ids;
|
||||
SMDS_FaceIteratorPtr aFaceIter = getFemMeshPtr()->getSMesh()->GetMeshDS()->facesIterator();
|
||||
while (aFaceIter->more()) {
|
||||
const SMDS_MeshFace* aFace = aFaceIter->next();
|
||||
ids.insert(aFace->GetID());
|
||||
}
|
||||
|
||||
Py::Tuple tuple(ids.size());
|
||||
int index = 0;
|
||||
for (std::set<int>::iterator it = ids.begin(); it != ids.end(); ++it) {
|
||||
tuple.setItem(index++, Py::Int(*it));
|
||||
}
|
||||
|
||||
return tuple;
|
||||
}
|
||||
|
||||
Py::Int FemMeshPy::getFaceCount(void) const
|
||||
{
|
||||
return Py::Int(getFemMeshPtr()->getSMesh()->NbFaces());
|
||||
}
|
||||
|
@ -739,6 +797,24 @@ Py::Int FemMeshPy::getPolygonCount(void) const
|
|||
return Py::Int(getFemMeshPtr()->getSMesh()->NbPolygons());
|
||||
}
|
||||
|
||||
Py::Tuple FemMeshPy::getVolumes(void) const
|
||||
{
|
||||
std::set<int> ids;
|
||||
SMDS_VolumeIteratorPtr aVolIter = getFemMeshPtr()->getSMesh()->GetMeshDS()->volumesIterator();
|
||||
while (aVolIter->more()) {
|
||||
const SMDS_MeshVolume* aVol = aVolIter->next();
|
||||
ids.insert(aVol->GetID());
|
||||
}
|
||||
|
||||
Py::Tuple tuple(ids.size());
|
||||
int index = 0;
|
||||
for (std::set<int>::iterator it = ids.begin(); it != ids.end(); ++it) {
|
||||
tuple.setItem(index++, Py::Int(*it));
|
||||
}
|
||||
|
||||
return tuple;
|
||||
}
|
||||
|
||||
Py::Int FemMeshPy::getVolumeCount(void) const
|
||||
{
|
||||
return Py::Int(getFemMeshPtr()->getSMesh()->NbVolumes());
|
||||
|
|
Loading…
Reference in New Issue
Block a user