X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshOp.h;h=e9b79ffb29a9c4c09af6313f326cefe7a869469e;hb=de10aefca9edd9619fb9c1e6b69d5b0aed8203b5;hp=1046b699c75d82d24ab612e203799e5ed0a5b116;hpb=0635c9fc80f67d1e5dc0e94ec85f487286a92070;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.h b/src/SMESHGUI/SMESHGUI_MeshOp.h index 1046b699c..e9b79ffb2 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.h +++ b/src/SMESHGUI/SMESHGUI_MeshOp.h @@ -1,24 +1,25 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2020 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 +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // SMESH SMESHGUI : GUI for SMESH component // File : SMESHGUI_MeshOp.h // Author : Sergey LITONIN, Open CASCADE S.A.S. @@ -31,9 +32,16 @@ #include "SMESHGUI_SelectionOp.h" +// IDL includes +#include +#include CORBA_CLIENT_HEADER(SMESH_Gen) +#include CORBA_CLIENT_HEADER(GEOM_Gen) + +class HypothesesSet; class SMESHGUI_MeshDlg; class SMESHGUI_ShapeByMeshOp; class HypothesisData; +class SMESHGUI_GenericHypothesisCreator; /*! * \brief Operation for mech creation or editing @@ -46,6 +54,7 @@ class SMESHGUI_EXPORT SMESHGUI_MeshOp : public SMESHGUI_SelectionOp public: enum HypType{ Algo = 0, MainHyp, AddHyp, NbHypTypes }; + enum MeshType{ MT_ANY = 0, MT_TRIANGULAR, MT_QUADRILATERAL, MT_TETRAHEDRAL, MT_HEXAHEDRAL }; typedef std::pair THypItem; typedef QList< THypItem > THypList; @@ -64,6 +73,7 @@ public: protected: virtual void startOperation(); + virtual void commitOperation(); virtual void selectionDone(); virtual SUIT_SelectionFilter* createFilter( const int ) const; virtual bool isValid( SUIT_Operation* ) const; @@ -77,64 +87,100 @@ protected slots: void onPublishShapeByMeshDlg( SUIT_Operation* ); void onCloseShapeByMeshDlg( SUIT_Operation* ); void onAlgoSelected( const int, const int = -1 ); + void onHypoCreated( int ); + void onHypoEdited( int ); + void onAlgoSetByMeshType( const int, const int ); private: typedef QList THypDataList; // typedef: list of hypothesis data + typedef QMap THypLabelIsAppMap; // typedef: map of hypothesis is applicable bool isValid( QString& ) const; + bool isCompatibleToGeometry( HypothesisData* , const int); + bool isCompatibleToMeshType( HypothesisData* , const int); void availableHyps( const int, const int, QStringList&, THypDataList&, - HypothesisData* = 0 ) const; - static void existingHyps( const int, + HypothesisData* = 0, + HypothesisData* = 0, + const QString& = ""); + void existingHyps( const int, const int, _PTR(SObject), QStringList&, THypList&, - HypothesisData* = 0 ); + HypothesisData* = 0 ) const; HypothesisData* hypData( const int, const int, const int ); // access to myAvailableHypData void createHypothesis( const int, const int, - const QString& ); + const QString& ); - bool createMesh( QString& ); - bool createSubMesh( QString& ); + bool createMesh( QString&, QStringList& ); + bool createSubMesh( QString&, QStringList& ); bool editMeshOrSubMesh( QString& ); + void createSubMeshOnInternalEdges( SMESH::SMESH_Mesh_ptr mesh, + GEOM::GEOM_Object_ptr mainShape ); + bool checkSubMeshConcurrency( SMESH::SMESH_Mesh_ptr mesh, + SMESH::SMESH_subMesh_ptr submesh, + bool askUser=false); int currentHyp( const int, const int ) const; + bool isSelectedHyp( int, int, int ) const; + int nbDlgHypTypes( const int ) const; bool isAccessibleDim( const int ) const; - void setCurrentHyp( const int, const int, const int ); - void setDefaultName() const; + void setCurrentHyp( const int, const int, const int, const bool=false); + void setDefaultName( const QString& prefix="" ) const; SMESH::SMESH_Hypothesis_var getAlgo( const int ); void readMesh(); QString name( _PTR(SObject) ) const; int find( const SMESH::SMESH_Hypothesis_var&, const THypList& ) const; SMESH::SMESH_Hypothesis_var getInitParamsHypothesis( const QString&, - const QString& ) const; + const QString&, + const SMESH::HypInitParams* prm=0) const; + void initHypCreator( SMESHGUI_GenericHypothesisCreator* aCreator ); + bool getAverageSize( double & averageSize ); bool isSubshapeOk() const; char* isSubmeshIgnored() const; _PTR(SObject) getSubmeshByGeom() const; void selectObject( _PTR(SObject) ) const; + void updateMeshTypeList(); + void updateHypoSets(); + void setFilteredAlgoData(); + QStringList getHypoNames(); private: + SMESHGUI_MeshDlg* myDlg; SMESHGUI_ShapeByMeshOp* myShapeByMeshOp; bool myToCreate; bool myIsMesh; - bool myIsOnGeometry; //!< TRUE if edited mesh accotiated with geometrical object + bool myIsOnGeometry; //!< TRUE if edited mesh is based on geometry + bool myHasConcurrentSubBefore; + bool myIsInvalidSubMesh; //!< "invalid sub-mesh" is edited + // The geometry of "invalid sub-mesh" is not a sub-shape of the main shape; + // it is created for the case where a valid sub-shape not found by CopyMeshWithGeom() + + QString myGeomEntry; + GEOM::GEOM_Object_var myGeom; TDim2Type2HypList myExistingHyps; //!< all hypothesis of SMESH module - TDim2Type2HypList myObjHyps; //!< hypothesis assigned to the current + TDim2Type2HypList myObjHyps; //!< hypothesis assigned to the current // edited mesh/sub-mesh - // hypdata corresponding to hypotheses present in myDlg THypDataList myAvailableHypData[4][NbHypTypes]; - + QString myLastGeomEntry; + THypLabelIsAppMap myHypMapIsApplicable; bool myIgnoreAlgoSelection; + int myDim, myType, myMaxShapeDim; + + HypothesesSet* myHypoSet; // applied hypo-set + double myAverageSize; // entered at hypo-set processing + + QString myObjectToSelect; }; #endif // SMESHGUI_MESHOP_H