X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_MeshEditor_i.hxx;h=d3295821d70e31dac6678c9652482a0ab9786364;hb=b5d9b2799bddb4bc47b05b777754a1cfc1051dd1;hp=4efded98b7d0f0c4efef042876d58bb06f17da18;hpb=493747e8ea338a2d88204a5f12ba924d72ecbb5b;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_MeshEditor_i.hxx b/src/SMESH_I/SMESH_MeshEditor_i.hxx index 4efded98b..d3295821d 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.hxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.hxx @@ -1,4 +1,4 @@ -// 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 @@ -38,23 +38,53 @@ #include "SMESH_MeshEditor.hxx" #include -class SMESH_MeshEditor; class SMESH_Mesh_i; +namespace MeshEditor_I { + struct TPreviewMesh; +} + class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor { public: 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 */ SMESH::SMESH_IDSource_ptr MakeIDSource(const SMESH::long_array& IDsOfElements, SMESH::ElementType type); + static bool IsTemporaryIDSource( SMESH::SMESH_IDSource_ptr& idSource ); CORBA::Boolean RemoveElements(const SMESH::long_array & IDsOfElements); CORBA::Boolean RemoveNodes(const SMESH::long_array & IDsOfNodes); CORBA::Long RemoveOrphanNodes(); @@ -65,6 +95,8 @@ public: */ 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); @@ -73,6 +105,19 @@ public: const SMESH::long_array & Quantities); CORBA::Long AddPolyhedralVolumeByFaces(const SMESH::long_array & IdsOfFaces); + /*! + * \brief Create 0D elements on all nodes of the given object except those + * nodes on which a 0D element already exists. + * \param theObject object on whose nodes 0D elements will be created. + * \param theGroupName optional name of a group to add 0D elements created + * and/or found on nodes of \a theObject. + * \return an object (a new group or a temporary SMESH_IDSource) holding + * ids of new and/or found 0D elements. + */ + SMESH::SMESH_IDSource_ptr Create0DElementsOnAllNodes(SMESH::SMESH_IDSource_ptr theObject, + const char* theGroupName) + throw (SALOME::SALOME_Exception); + /*! * \brief Bind a node to a vertex * \param NodeID - node ID @@ -122,6 +167,19 @@ public: 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, @@ -212,9 +270,17 @@ public: 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); @@ -315,6 +381,10 @@ public: 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, @@ -323,6 +393,9 @@ public: 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); @@ -538,31 +611,6 @@ public: */ 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 ); @@ -644,6 +692,12 @@ public: 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 @@ -687,6 +741,11 @@ public: 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 @@ -702,6 +761,22 @@ public: 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. @@ -726,6 +801,19 @@ public: */ 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 @@ -752,13 +840,17 @@ public: private: //!< private methods - SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); } + ::SMESH_MeshEditor& getEditor(); + + SMESHDS_Mesh * getMeshDS() { return myMesh->GetMeshDS(); } + + MeshEditor_I::TPreviewMesh * getPreviewMesh( SMDSAbs_ElementType previewType = SMDSAbs_All ); /*! * \brief Update myLastCreated* or myPreviewData * \param anEditor - it contains edition results */ - void storeResult(::SMESH_MeshEditor& anEditor); + //void storeResult(::SMESH_MeshEditor& anEditor); /*! * \brief Clear myLastCreated* or myPreviewData */ @@ -843,14 +935,19 @@ private: //!< private methods 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; + bool myIsPreviewMode; + MeshEditor_I::TPreviewMesh * myPreviewMesh; + ::SMESH_MeshEditor * myPreviewEditor; SMESH::MeshPreviewStruct_var myPreviewData; - bool myPreviewMode; + + // temporary IDSources + struct _IDSource; + std::list< _IDSource* > myAuxIDSources; + void deleteAuxIDSources(); }; #endif