X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FBLSURFPlugin%2FBLSURFPlugin_Hypothesis.hxx;h=693def64b2be4f74426741f8a1b1abedfe715bc1;hb=0a057ad10d10cbec461c916216f468dbe94390c7;hp=08ac943ba4c24b779af861a7c4d9dd47ff394bcc;hpb=fc78b3f17fac63ea659cd9768b2c0b15c8f4fe73;p=plugins%2Fblsurfplugin.git diff --git a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx index 08ac943..693def6 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx +++ b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2019 CEA/DEN, EDF R&D +// Copyright (C) 2007-2021 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -27,19 +27,23 @@ #ifndef _BLSURFPlugin_Hypothesis_HXX_ #define _BLSURFPlugin_Hypothesis_HXX_ -#include "SMESH_Hypothesis.hxx" +#include "BLSURFPlugin_Attractor.hxx" + +#include +#include +#include + #include #include #include -#include #include -#include -#include -#include -#include "BLSURFPlugin_Attractor.hxx" + +class SMESH_Mesh; // Parameters for work of MG-CADSurf +enum EnforcedMeshType { ENFORCED_MESH, ENFORCED_GROUP, ENFORCED_SUBMESH }; + class BLSURFPlugin_Hypothesis: public SMESH_Hypothesis { public: @@ -75,6 +79,8 @@ public: TopoDS_Shape entryToShape(std::string entry); + static std::string GetMeshGemsVersion(); + void SetPhysicalMesh(PhysicalMesh thePhysicalMesh); PhysicalMesh GetPhysicalMesh() const { return _physicalMesh; } @@ -151,9 +157,27 @@ public: void SetTopology(Topology theTopology); Topology GetTopology() const { return _topology; } + bool GetUseSurfaceProximity() const { return _useSurfaceProximity; } + void SetUseSurfaceProximity( bool toUse ); + + int GetNbSurfaceProximityLayers() const { return _nbSurfaceProximityLayers; } + void SetNbSurfaceProximityLayers( int nbLayers ); + + double GetSurfaceProximityRatio() const { return _surfaceProximityRatio; } + void SetSurfaceProximityRatio( double ratio ); + + bool GetUseVolumeProximity() const { return _useVolumeProximity; } + void SetUseVolumeProximity( bool toUse ); + + int GetNbVolumeProximityLayers() const { return _nbVolumeProximityLayers; } + void SetNbVolumeProximityLayers( int nbLayers ); + + double GetVolumeProximityRatio() const { return _volumeProximityRatio; } + void SetVolumeProximityRatio( double ratio ); + void SetVerbosity(int theVal); int GetVerbosity() const { return _verb; } - + void ClearEntry(const std::string& entry, const char * attEntry = 0); void ClearSizeMaps(); @@ -162,17 +186,17 @@ public: void SetJacobianRectificationRespectGeometry( bool allowRectification ); bool GetJacobianRectificationRespectGeometry(); - + void SetUseDeprecatedPatchMesher( bool useDeprecatedPatchMesher ); bool GetUseDeprecatedPatchMesher(); void SetJacobianRectification( bool allowRectification ); bool GetJacobianRectification(); - void SetMaxNumberOfPointsPerPatch( int nb ) throw (std::invalid_argument); + void SetMaxNumberOfPointsPerPatch( int nb ); int GetMaxNumberOfPointsPerPatch(); - void SetMaxNumberOfThreads( int nb ) throw (std::invalid_argument); + void SetMaxNumberOfThreads( int nb ); int GetMaxNumberOfThreads(); void SetRespectGeometry( bool toRespect ); @@ -187,26 +211,56 @@ public: void SetDebug( bool isDebug ); bool GetDebug(); - void SetPeriodicTolerance( double tol ) throw (std::invalid_argument); + void SetPeriodicTolerance( double tol ); double GetPeriodicTolerance(); - void SetRequiredEntities( const std::string& howToTreat ) throw (std::invalid_argument); + void SetRequiredEntities( const std::string& howToTreat ); std::string GetRequiredEntities(); - void SetSewingTolerance( double tol ) throw (std::invalid_argument); + void SetSewingTolerance( double tol ); double GetSewingTolerance(); - void SetTags( const std::string& howToTreat ) throw (std::invalid_argument); + void SetTags( const std::string& howToTreat ); std::string GetTags(); // Hyper-patches - typedef std::set< int > THyperPatchTags; - typedef std::vector< THyperPatchTags > THyperPatchList; - - void SetHyperPatches(const THyperPatchList& hpl); - const THyperPatchList& GetHyperPatches() const { return _hyperPatchList; } + typedef std::set< int > THyperPatchTags; + typedef std::vector< THyperPatchTags > THyperPatchList; + typedef std::set< std::string > THyperPatchEntries; + typedef std::vector< THyperPatchEntries > THyperPatchEntriesList; + + void SetHyperPatches(const THyperPatchList& hpl, bool notifyMesh=true); + void SetHyperPatches(const THyperPatchEntriesList& hpl); + void SetHyperPatchIDsByEntry( const TopoDS_Shape& mainShape, + const std::map< std::string, TopoDS_Shape >& entryToShape); + const THyperPatchList& GetHyperPatches() const { return _hyperPatchList; } + const THyperPatchEntriesList& GetHyperPatchEntries() const { return _hyperPatchEntriesList; } static int GetHyperPatchTag( int faceTag, const BLSURFPlugin_Hypothesis* hyp, int* iPatch=0 ); + // Enforced mesh + struct EnforcedMesh + { + int _meshID; // persistent mesh ID + int _subID; // either persistent group ID or sub-shape ID for sub-mesh + EnforcedMeshType _type; /* specify what _subID means: + - nothing for ENFORCED_MESH + - group ID for ENFORCED_GROUP + - sub-shape ID for ENFORCED_SUBMESH */ + std::string _groupName; // name of a group to add mesh edges to + + bool operator==(const EnforcedMesh& em ) const + { + return ( _meshID == em._meshID && _subID == em._subID && + _type == em._type && _groupName == em._groupName ); + } + }; + + void SetEnforcedMeshes( std::vector< EnforcedMesh > & enforcedMeshes ); + const std::vector< EnforcedMesh > & GetEnforcedMeshes() const { return _enforcedMeshes; } + SMDS_ElemIteratorPtr GetEnforcedSegments( const EnforcedMesh& enfMesh, + SMESH_Mesh* & mesh ) const; + + void SetPreCADMergeEdges(bool theVal); bool GetPreCADMergeEdges() const { return _preCADMergeEdges; } @@ -345,7 +399,7 @@ public: // Map Vertex entry / Enforced vertex typedef std::map< TEntry, TEnfVertex* > TEnfVertexEntryEnfVertexMap; - typedef std::map< TEnfGroupName, std::set > TGroupNameNodeIDMap; + typedef std::map< TEnfGroupName, std::set > TGroupNameNodeIDMap; /* TODO GROUPS // Map Group Name / List of enforced vertices typedef std::map< TEnfGroupName , TEnfVertexList > TGroupNameEnfVertexListMap; @@ -360,17 +414,17 @@ public: bool SetEnforcedVertex(TEntry theFaceEntry, TEnfName theVertexName, TEntry theVertexEntry, TEnfGroupName theGroupName, double x = 0.0, double y = 0.0, double z = 0.0); - TEnfVertexList GetEnfVertexList(const TEntry& theFaceEntry) throw (std::invalid_argument); - TEnfVertexCoordsList GetEnfVertexCoordsList(const TEntry& theFaceEntry) throw (std::invalid_argument); - TEntryList GetEnfVertexEntryList (const TEntry& theFaceEntry) throw (std::invalid_argument); - TEnfVertex* GetEnfVertex(TEnfVertexCoords coords) throw (std::invalid_argument); - TEnfVertex* GetEnfVertex(const TEntry& theEnfVertexEntry) throw (std::invalid_argument); - void AddEnfVertexNodeID(TEnfGroupName theGroupName,int theNodeID); - std::set GetEnfVertexNodeIDs(TEnfGroupName theGroupName) throw (std::invalid_argument); - void RemoveEnfVertexNodeID(TEnfGroupName theGroupName,int theNodeID) throw (std::invalid_argument); + TEnfVertexList GetEnfVertexList(const TEntry& theFaceEntry); + TEnfVertexCoordsList GetEnfVertexCoordsList(const TEntry& theFaceEntry); + TEntryList GetEnfVertexEntryList (const TEntry& theFaceEntry); + TEnfVertex* GetEnfVertex(TEnfVertexCoords coords); + TEnfVertex* GetEnfVertex(const TEntry& theEnfVertexEntry); + void AddEnfVertexNodeID(TEnfGroupName theGroupName,smIdType theNodeID); + std::set GetEnfVertexNodeIDs(TEnfGroupName theGroupName); + void RemoveEnfVertexNodeID(TEnfGroupName theGroupName,smIdType theNodeID); - bool ClearEnforcedVertex(const TEntry& theFaceEntry, double x = 0.0, double y = 0.0, double z = 0.0, const TEntry& theVertexEntry="") throw (std::invalid_argument); - bool ClearEnforcedVertices(const TEntry& theFaceEntry) throw (std::invalid_argument); + bool ClearEnforcedVertex(const TEntry& theFaceEntry, double x = 0.0, double y = 0.0, double z = 0.0, const TEntry& theVertexEntry=""); + bool ClearEnforcedVertices(const TEntry& theFaceEntry); void ClearAllEnforcedVertices(); void AddEnforcedVertex( const TEntry& theFaceEntry, TEnfVertex * theEnfVertex ); @@ -404,7 +458,7 @@ public: * \brief Internal enforced vertices */ void SetInternalEnforcedVertexAllFaces(bool toEnforceInternalVertices); - const bool _GetInternalEnforcedVertexAllFaces() const { return _enforcedInternalVerticesAllFaces; } + bool _GetInternalEnforcedVertexAllFaces() const { return _enforcedInternalVerticesAllFaces; } static bool GetInternalEnforcedVertexAllFaces( const BLSURFPlugin_Hypothesis* hyp ); void SetInternalEnforcedVertexAllFacesGroup(TEnfGroupName theGroupName); const TEnfGroupName _GetInternalEnforcedVertexAllFacesGroup() const { return _enforcedInternalVerticesAllFacesGroup; } @@ -434,7 +488,13 @@ public: static double GetDefaultVolumeGradation() { return 2; } static ElementType GetDefaultElementType() { return Triangles; } static double GetDefaultAngleMesh() { return 8.0; } - + static bool GetDefaultUseSurfaceProximity() { return false; } + static int GetDefaultNbSurfaceProximityLayers() { return 1; } + static double GetDefaultSurfaceProximityRatio() { return 1.; } + static bool GetDefaultUseVolumeProximity() { return false; } + static int GetDefaultNbVolumeProximityLayers() { return 1; } + static double GetDefaultVolumeProximityRatio() { return 1.; } + static double GetDefaultChordalError(double diagonal); static double GetDefaultChordalError() { return undefinedDouble(); } static bool GetDefaultAnisotropic() { return false; } @@ -448,10 +508,10 @@ public: static bool GetDefaultCorrectSurfaceIntersection() { return true; } static double GetDefaultCorrectSurfaceIntersectionMaxCost() { return 15.; } static bool GetDefaultBadElementRemoval() { return false; } - static double GetDefaultBadElementAspectRatio() {return 1000.0; } + static double GetDefaultBadElementAspectRatio() {return 1000.0; } static bool GetDefaultOptimizeMesh() { return true; } static bool GetDefaultQuadraticMesh() { return false; } - + static int GetDefaultVerbosity() { return 3; } static Topology GetDefaultTopology() { return FromCAD; } // PreCAD @@ -459,7 +519,7 @@ public: static bool GetDefaultPreCADRemoveDuplicateCADFaces() { return false; } static bool GetDefaultPreCADProcess3DTopology() { return false; } static bool GetDefaultPreCADDiscardInput() { return false; } - + static TSizeMap GetDefaultSizeMap() { return TSizeMap();} static TAttractorMap GetDefaultAttractorMap() { return TAttractorMap(); } @@ -513,11 +573,11 @@ public: typedef std::set< std::string > TOptionNames; void SetOptionValue(const std::string& optionName, - const std::string& optionValue) throw (std::invalid_argument); + const std::string& optionValue); void SetPreCADOptionValue(const std::string& optionName, - const std::string& optionValue) throw (std::invalid_argument); - std::string GetOptionValue(const std::string& optionName, bool* isDefault=0) const throw (std::invalid_argument); - std::string GetPreCADOptionValue(const std::string& optionName, bool* isDefault=0) const throw (std::invalid_argument); + const std::string& optionValue); + std::string GetOptionValue(const std::string& optionName, bool* isDefault=0) const; + std::string GetPreCADOptionValue(const std::string& optionName, bool* isDefault=0) const; void ClearOption(const std::string& optionName); void ClearPreCADOption(const std::string& optionName); TOptionValues GetOptionValues() const; @@ -529,9 +589,9 @@ public: std::string GetOption(const std::string& optionName) const; std::string GetPreCADOption(const std::string& optionName) const; - static bool ToBool(const std::string& str, bool* isOk=0) throw (std::invalid_argument); - static double ToDbl(const std::string& str, bool* isOk=0) throw (std::invalid_argument); - static int ToInt(const std::string& str, bool* isOk=0) throw (std::invalid_argument); + static bool ToBool(const std::string& str, bool* isOk=0); + static double ToDbl(const std::string& str, bool* isOk=0); + static int ToInt(const std::string& str, bool* isOk=0); /*! * Sets the file for export resulting mesh in GMF format @@ -591,13 +651,19 @@ private: bool _quadraticMesh; int _verb; Topology _topology; - + bool _useSurfaceProximity; + int _nbSurfaceProximityLayers; + double _surfaceProximityRatio; + bool _useVolumeProximity; + int _nbVolumeProximityLayers; + double _volumeProximityRatio; + bool _preCADMergeEdges; bool _preCADRemoveDuplicateCADFaces; bool _preCADProcess3DTopology; bool _preCADDiscardInput; double _preCADEpsNano; - + TOptionValues _option2value, _preCADoption2value, _customOption2value; // user defined values TOptionValues _defaultOptionValues; // default values TOptionNames _doubleOptions, _charOptions, _boolOptions; // to find a type of option @@ -607,29 +673,32 @@ private: TSizeMap _attractors; TAttractorMap _classAttractors; - TFaceEntryEnfVertexListMap _faceEntryEnfVertexListMap; - TEnfVertexList _enfVertexList; + TFaceEntryEnfVertexListMap _faceEntryEnfVertexListMap; + TEnfVertexList _enfVertexList; // maps to get "manual" enf vertex (through their coordinates) - TFaceEntryCoordsListMap _faceEntryCoordsListMap; - TCoordsEnfVertexMap _coordsEnfVertexMap; + TFaceEntryCoordsListMap _faceEntryCoordsListMap; + TCoordsEnfVertexMap _coordsEnfVertexMap; // maps to get "geom" enf vertex (through their geom entries) - TFaceEntryEnfVertexEntryListMap _faceEntryEnfVertexEntryListMap; - TEnfVertexEntryEnfVertexMap _enfVertexEntryEnfVertexMap; - TGroupNameNodeIDMap _groupNameNodeIDMap; + TFaceEntryEnfVertexEntryListMap _faceEntryEnfVertexEntryListMap; + TEnfVertexEntryEnfVertexMap _enfVertexEntryEnfVertexMap; + TGroupNameNodeIDMap _groupNameNodeIDMap; // Enable internal enforced vertices on specific face if requested by user // TFaceEntryInternalVerticesList _faceEntryInternalVerticesList; - bool _enforcedInternalVerticesAllFaces; - TEnfGroupName _enforcedInternalVerticesAllFacesGroup; + bool _enforcedInternalVerticesAllFaces; + TEnfGroupName _enforcedInternalVerticesAllFacesGroup; - TPreCadPeriodicityVector _preCadFacesPeriodicityVector; - TPreCadPeriodicityVector _preCadEdgesPeriodicityVector; + TPreCadPeriodicityVector _preCadFacesPeriodicityVector; + TPreCadPeriodicityVector _preCadEdgesPeriodicityVector; + + TFacesPeriodicityVector _facesPeriodicityVector; + TEdgesPeriodicityVector _edgesPeriodicityVector; + TVerticesPeriodicityVector _verticesPeriodicityVector; - TFacesPeriodicityVector _facesPeriodicityVector; - TEdgesPeriodicityVector _edgesPeriodicityVector; - TVerticesPeriodicityVector _verticesPeriodicityVector; + THyperPatchList _hyperPatchList; + THyperPatchEntriesList _hyperPatchEntriesList; - THyperPatchList _hyperPatchList; + std::vector< EnforcedMesh > _enforcedMeshes; // enforced 1D meshes // Called by SaveTo to store content of _preCadFacesPeriodicityVector and _preCadEdgesPeriodicityVector void SavePreCADPeriodicity(std::ostream & save, const char* shapeType);