-// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#include "SMESH_MeshEditor.hxx"
#include <list>
-class SMESH_MeshEditor;
class SMESH_Mesh_i;
class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
SMESH_MeshEditor_i(SMESH_Mesh_i * theMesh, bool isPreview);
virtual ~ SMESH_MeshEditor_i();
+ /*!
+ * \brief Return edited mesh ID
+ * \retval int - mesh ID
+ */
+ int GetMeshId() const { return myMesh->GetId(); }
// --- CORBA
+ /*!
+ * Return data of mesh edition preview
+ */
+ SMESH::MeshPreviewStruct* GetPreviewData();
+ /*!
+ * If during last operation of MeshEditor some nodes were
+ * created this method returns list of their IDs, if new nodes
+ * not created - returns an empty list
+ */
+ SMESH::long_array* GetLastCreatedNodes();
+ /*!
+ * If during last operation of MeshEditor some elements were
+ * created this method returns list of their IDs, if new elements
+ * not created - returns an empty list
+ */
+ SMESH::long_array* GetLastCreatedElems();
+ /*!
+ * \brief Returns description of an error/warning occured during the last operation
+ */
+ SMESH::ComputeError* GetLastError();
+
/*!
* \brief Wrap a sequence of ids in a SMESH_IDSource
*/
*/
CORBA::Long AddNode(CORBA::Double x, CORBA::Double y, CORBA::Double z);
CORBA::Long Add0DElement(CORBA::Long IDOfNode);
+ CORBA::Long AddBall(CORBA::Long IDOfNodem, CORBA::Double diameter)
+ throw (SALOME::SALOME_Exception);
CORBA::Long AddEdge(const SMESH::long_array & IDsOfNodes);
CORBA::Long AddFace(const SMESH::long_array & IDsOfNodes);
CORBA::Long AddPolygonalFace(const SMESH::long_array & IDsOfNodes);
CORBA::Boolean DeleteDiag(CORBA::Long NodeID1, CORBA::Long NodeID2);
CORBA::Boolean Reorient(const SMESH::long_array & IDsOfElements);
CORBA::Boolean ReorientObject(SMESH::SMESH_IDSource_ptr theObject);
+ /*!
+ * \brief Reorient faces contained in \a the2Dgroup.
+ * \param the2Dgroup - the mesh or its part to reorient
+ * \param theDirection - desired direction of normal of \a theFace
+ * \param theFace - ID of face whose orientation is checked.
+ * It can be < 1 then \a thePoint is used to find a face.
+ * \param thePoint - is used to find a face if \a theFace < 1.
+ * \return number of reoriented elements.
+ */
+ CORBA::Long Reorient2D(SMESH::SMESH_IDSource_ptr the2Dgroup,
+ const SMESH::DirStruct& theDirection,
+ CORBA::Long theFace,
+ const SMESH::PointStruct& thePoint) throw (SALOME::SALOME_Exception);
// Split/Join faces
CORBA::Boolean TriToQuad (const SMESH::long_array & IDsOfElements,
void ExtrusionSweep(const SMESH::long_array & IDsOfElements,
const SMESH::DirStruct & StepVector,
CORBA::Long NbOfSteps);
+ void ExtrusionSweep0D(const SMESH::long_array & IDsOfElements,
+ const SMESH::DirStruct & StepVector,
+ CORBA::Long NbOfSteps);
+
void ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & StepVector,
CORBA::Long NbOfSteps);
+
+ void ExtrusionSweepObject0D(SMESH::SMESH_IDSource_ptr theObject,
+ const SMESH::DirStruct & StepVector,
+ CORBA::Long NbOfSteps);
void ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & StepVector,
CORBA::Long NbOfSteps);
SMESH::ListOfGroups* ExtrusionSweepMakeGroups(const SMESH::long_array& IDsOfElements,
const SMESH::DirStruct& StepVector,
CORBA::Long NbOfSteps);
+ SMESH::ListOfGroups* ExtrusionSweepMakeGroups0D(const SMESH::long_array& IDsOfElements,
+ const SMESH::DirStruct& StepVector,
+ CORBA::Long NbOfSteps);
+
SMESH::ListOfGroups* AdvancedExtrusionMakeGroups(const SMESH::long_array& IDsOfElements,
const SMESH::DirStruct& StepVector,
CORBA::Long NbOfSteps,
SMESH::ListOfGroups* ExtrusionSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::DirStruct& StepVector,
CORBA::Long NbOfSteps);
+ SMESH::ListOfGroups* ExtrusionSweepObject0DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
+ const SMESH::DirStruct& StepVector,
+ CORBA::Long NbOfSteps);
SMESH::ListOfGroups* ExtrusionSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::DirStruct& StepVector,
CORBA::Long NbOfSteps);
*/
CORBA::Boolean ChangeElemNodes(CORBA::Long ide, const SMESH::long_array& newIDs);
- /*!
- * Return data of mesh edition preview
- */
- SMESH::MeshPreviewStruct* GetPreviewData();
-
- /*!
- * If during last operation of MeshEditor some nodes were
- * created this method returns list of it's IDs, if new nodes
- * not creared - returns empty list
- */
- SMESH::long_array* GetLastCreatedNodes();
-
- /*!
- * If during last operation of MeshEditor some elements were
- * created this method returns list of it's IDs, if new elements
- * not creared - returns empty list
- */
- SMESH::long_array* GetLastCreatedElems();
-
- /*!
- * \brief Return edited mesh ID
- * \retval int - mesh ID
- */
- int GetMeshId() const { return myMesh->GetId(); }
-
CORBA::Boolean DoubleNodes( const SMESH::long_array& theNodes,
const SMESH::long_array& theModifiedElems );
SMESH::SMESH_Group_ptr DoubleNodeElemGroupNew( SMESH::SMESH_GroupBase_ptr theElems,
SMESH::SMESH_GroupBase_ptr theNodesNot,
SMESH::SMESH_GroupBase_ptr theAffectedElems );
+
+ SMESH::ListOfGroups* DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
+ SMESH::SMESH_GroupBase_ptr theNodesNot,
+ SMESH::SMESH_GroupBase_ptr theAffectedElems,
+ CORBA::Boolean theElemGroupNeeded,
+ CORBA::Boolean theNodeGroupNeeded);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
const SMESH::ListOfGroups& theNodesNot,
const SMESH::ListOfGroups& theAffectedElems );
+ SMESH::ListOfGroups* DoubleNodeElemGroups2New(const SMESH::ListOfGroups& theElems,
+ const SMESH::ListOfGroups& theNodesNot,
+ const SMESH::ListOfGroups& theAffectedElems,
+ CORBA::Boolean theElemGroupNeeded,
+ CORBA::Boolean theNodeGroupNeeded);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
CORBA::Boolean DoubleNodeElemGroupsInRegion( const SMESH::ListOfGroups& theElems,
const SMESH::ListOfGroups& theNodesNot,
GEOM::GEOM_Object_ptr theShape );
+
+ /*!
+ * \brief Identify the elements that will be affected by node duplication (actual duplication is not performed.
+ * This method is the first step of DoubleNodeElemGroupsInRegion.
+ * \param theElems - list of groups of elements (edges or faces) to be replicated
+ * \param theNodesNot - list of groups of nodes not to replicated
+ * \param theShape - shape to detect affected elements (element which geometric center
+ * located on or inside shape).
+ * The replicated nodes should be associated to affected elements.
+ * \return groups of affected elements
+ * \sa DoubleNodeElemGroupsInRegion()
+ */
+ SMESH::ListOfGroups* AffectedElemGroupsInRegion( const SMESH::ListOfGroups& theElems,
+ const SMESH::ListOfGroups& theNodesNot,
+ GEOM::GEOM_Object_ptr theShape );
+
/*!
* \brief Double nodes on shared faces between groups of volumes and create flat elements on demand.
* The list of groups must describe a partition of the mesh volumes.
* @return TRUE if operation has been completed successfully, FALSE otherwise
*/
CORBA::Boolean DoubleNodesOnGroupBoundaries( const SMESH::ListOfGroups& theDomains,
- CORBA::Boolean createJointElems );
+ CORBA::Boolean createJointElems )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Double nodes on some external faces and create flat elements.
* Flat elements are mainly used by some types of mechanic calculations.
*/
CORBA::Boolean CreateFlatElementsOnFacesGroups( const SMESH::ListOfGroups& theGroupsOfFaces );
+ /*!
+ * \brief identify all the elements around a geom shape, get the faces delimiting the hole
+ * Build groups of volume to remove, groups of faces to replace on the skin of the object,
+ * groups of faces to remove insidethe object, (idem edges).
+ * Build ordered list of nodes at the border of each group of faces to replace (to be used to build a geom subshape)
+ */
+ void CreateHoleSkin(CORBA::Double radius,
+ GEOM::GEOM_Object_ptr theShape,
+ const char* groupName,
+ const SMESH::double_array& theNodesCoords,
+ SMESH::array_of_long_array_out GroupsOfNodes)
+ throw (SALOME::SALOME_Exception);
+
/*!
* \brief Generated skin mesh (containing 2D cells) from 3D mesh
* The created 2D mesh elements based on nodes of free faces of boundary volumes
private: //!< fields
- SMESH_Mesh_i* myMesh_i;
- SMESH_Mesh * myMesh;
-
- SMESH::long_array_var myLastCreatedElems;
- SMESH::long_array_var myLastCreatedNodes;
+ SMESH_Mesh_i* myMesh_i;
+ SMESH_Mesh * myMesh;
+ ::SMESH_MeshEditor myEditor;
SMESH::MeshPreviewStruct_var myPreviewData;
bool myPreviewMode;