SMDS_MeshNode* SMESH_MesherHelper::AddNode(double x, double y, double z, int ID) { SMESHDS_Mesh * meshDS = GetMeshDS(); SMDS_MeshNode* node = 0; if ( ID ) node = meshDS->AddNodeWithID( x, y, z, ID ); else node = meshDS->AddNode( x, y, z ); if ( mySetElemOnShape && myShapeID > 0 ) { switch ( myShape.ShapeType() ) { case TopAbs_SOLID: meshDS->SetNodeInVolume( node, myShapeID); break; case TopAbs_SHELL: meshDS->SetNodeInVolume( node, myShapeID); break; case TopAbs_FACE: meshDS->SetNodeOnFace( node, myShapeID); break; case TopAbs_EDGE: meshDS->SetNodeOnEdge( node, myShapeID); break; case TopAbs_VERTEX: meshDS->SetNodeOnVertex( node, myShapeID); break; default: ; } } return node; }
PyObject* FemMeshPy::addNode(PyObject *args) { double x,y,z; int i = -1; if (PyArg_ParseTuple(args, "ddd",&x,&y,&z)){ try { SMESH_Mesh* mesh = getFemMeshPtr()->getSMesh(); SMESHDS_Mesh* meshDS = mesh->GetMeshDS(); SMDS_MeshNode* node = meshDS->AddNode(x,y,z); if (!node) throw std::runtime_error("Failed to add node"); return Py::new_reference_to(Py::Int(node->GetID())); } catch (const std::exception& e) { PyErr_SetString(Base::BaseExceptionFreeCADError, e.what()); return 0; } } PyErr_Clear(); if (PyArg_ParseTuple(args, "dddi",&x,&y,&z,&i)){ try { SMESH_Mesh* mesh = getFemMeshPtr()->getSMesh(); SMESHDS_Mesh* meshDS = mesh->GetMeshDS(); SMDS_MeshNode* node = meshDS->AddNodeWithID(x,y,z,i); if (!node) throw std::runtime_error("Failed to add node"); return Py::new_reference_to(Py::Int(node->GetID())); } catch (const std::exception& e) { PyErr_SetString(Base::BaseExceptionFreeCADError, e.what()); return 0; } } PyErr_SetString(PyExc_TypeError, "addNode() accepts:\n" "-- addNode(x,y,z)\n" "-- addNode(x,y,z,ElemId)\n"); return 0; }