From 00b26c5921486fedaedebcb86491d1bc1e6980ef Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Tue, 27 Sep 2016 09:28:56 +0200 Subject: [PATCH] FEM: python mesh API, add methods to retrieve group data --- src/Mod/Fem/App/FemMeshPy.xml | 15 +++++++++ src/Mod/Fem/App/FemMeshPyImp.cpp | 55 ++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/src/Mod/Fem/App/FemMeshPy.xml b/src/Mod/Fem/App/FemMeshPy.xml index 59bde68f25..7c07931612 100755 --- a/src/Mod/Fem/App/FemMeshPy.xml +++ b/src/Mod/Fem/App/FemMeshPy.xml @@ -129,6 +129,21 @@ Return a tuple of node IDs to a given element ID + + + Return a string of group name to a given group ID + + + + + Return a string of group element type to a given group ID + + + + + Return a tuple of ElementIDs to a given group ID + + Dictionary of Nodes by ID (int ID:Vector()) diff --git a/src/Mod/Fem/App/FemMeshPyImp.cpp b/src/Mod/Fem/App/FemMeshPyImp.cpp index 562359fe36..b37f4d9748 100644 --- a/src/Mod/Fem/App/FemMeshPyImp.cpp +++ b/src/Mod/Fem/App/FemMeshPyImp.cpp @@ -25,7 +25,11 @@ #include #include +#include #include +#include +#include +#include #include #include @@ -898,6 +902,57 @@ PyObject* FemMeshPy::getElementNodes(PyObject *args) } } +PyObject* FemMeshPy::getGroupName(PyObject *args) +{ + int id; + if (!PyArg_ParseTuple(args, "i", &id)) + return 0; + + return PyString_FromString(getFemMeshPtr()->getSMesh()->GetGroup(id)->GetName()); +} + +PyObject* FemMeshPy::getGroupElementType(PyObject *args) +{ + int id; + if (!PyArg_ParseTuple(args, "i", &id)) + return 0; + + SMDSAbs_ElementType aElementType = getFemMeshPtr()->getSMesh()->GetGroup(id)->GetGroupDS()->GetType(); + const char* typeString = ""; + switch(aElementType) { + case SMDSAbs_All : typeString = "All"; break; + case SMDSAbs_Node : typeString = "Node"; break; + case SMDSAbs_Edge : typeString = "Edge"; break; + case SMDSAbs_Face : typeString = "Face"; break; + case SMDSAbs_Volume : typeString = "Volume"; break; + case SMDSAbs_0DElement : typeString = "0DElement"; break; + case SMDSAbs_Ball : typeString = "Ball"; break; + case SMDSAbs_NbElementTypes : typeString = "NbElementTypes"; break; + } + return PyString_FromString(typeString); +} + +PyObject* FemMeshPy::getGroupElements(PyObject *args) +{ + int id; + if (!PyArg_ParseTuple(args, "i", &id)) + return 0; + + std::set ids; + SMDS_ElemIteratorPtr aElemIter = getFemMeshPtr()->getSMesh()->GetGroup(id)->GetGroupDS()->GetElements(); + while (aElemIter->more()) { + const SMDS_MeshElement* aElement = aElemIter->next(); + ids.insert(aElement->GetID()); + } + + Py::Tuple tuple(ids.size()); + int index = 0; + for (std::set::iterator it = ids.begin(); it != ids.end(); ++it) { + tuple.setItem(index++, Py::Int(*it)); + } + + return Py::new_reference_to(tuple); +} // ===== Atributes ============================================================