From 63eaf4f39688cc3646ca786493a6fc460c9bf7b0 Mon Sep 17 00:00:00 2001 From: eap Date: Mon, 17 Sep 2018 22:10:15 +0300 Subject: [PATCH] 23586: [EDF] HYDRO: Copy mesh to new geometry --- src/NETGENPlugin/NETGENPluginBuilder.py | 8 ++++ src/NETGENPlugin/NETGENPlugin_Hypothesis.cxx | 1 - src/NETGENPlugin/NETGENPlugin_Hypothesis.hxx | 3 +- .../NETGENPlugin_Hypothesis_i.cxx | 48 +++++++++++++++++++ .../NETGENPlugin_Hypothesis_i.hxx | 13 ++++- .../NETGENPlugin_SimpleHypothesis_2D_i.hxx | 11 +++++ .../NETGENPlugin_SimpleHypothesis_3D_i.hxx | 11 +++++ 7 files changed, 91 insertions(+), 4 deletions(-) diff --git a/src/NETGENPlugin/NETGENPluginBuilder.py b/src/NETGENPlugin/NETGENPluginBuilder.py index edf7df7..3c851e6 100644 --- a/src/NETGENPlugin/NETGENPluginBuilder.py +++ b/src/NETGENPlugin/NETGENPluginBuilder.py @@ -182,6 +182,14 @@ class NETGEN_Algorithm(Mesh_Algorithm): self.Parameters().SetMeshSizeFile(file) pass + ## Set size of elements on a shape + # @param shape - geometry + # @param size - element size + def SetLocalSizeOnShape(self, shape, size ): + self.Parameters().SetLocalSizeOnShape(shape, size) + pass + + pass # end of NETGEN_Algorithm class diff --git a/src/NETGENPlugin/NETGENPlugin_Hypothesis.cxx b/src/NETGENPlugin/NETGENPlugin_Hypothesis.cxx index abb5b6a..afce99b 100644 --- a/src/NETGENPlugin/NETGENPlugin_Hypothesis.cxx +++ b/src/NETGENPlugin/NETGENPlugin_Hypothesis.cxx @@ -54,7 +54,6 @@ NETGENPlugin_Hypothesis::NETGENPlugin_Hypothesis (int hypId, _chordalError (GetDefaultChordalError() ), _secondOrder (GetDefaultSecondOrder()), _optimize (GetDefaultOptimize()), - _localSize (GetDefaultLocalSize()), _quadAllowed (GetDefaultQuadAllowed()), _surfaceCurvature (GetDefaultSurfaceCurvature()), _fuseEdges (GetDefaultFuseEdges()) diff --git a/src/NETGENPlugin/NETGENPlugin_Hypothesis.hxx b/src/NETGENPlugin/NETGENPlugin_Hypothesis.hxx index 8f1800e..e68d305 100644 --- a/src/NETGENPlugin/NETGENPlugin_Hypothesis.hxx +++ b/src/NETGENPlugin/NETGENPlugin_Hypothesis.hxx @@ -89,8 +89,7 @@ public: double GetChordalError() const { return _chordalError; } typedef std::map TLocalSize; - static TLocalSize GetDefaultLocalSize() { return TLocalSize(); } - void SetLocalSizeOnEntry(const std::string& entry, double localSize); + void SetLocalSizeOnEntry(const std::string& entry, double localSize); double GetLocalSizeOnEntry(const std::string& entry); const TLocalSize& GetLocalSizesAndEntries() const { return _localSize; } void UnsetLocalSizeOnEntry(const std::string& entry); diff --git a/src/NETGENPlugin/NETGENPlugin_Hypothesis_i.cxx b/src/NETGENPlugin/NETGENPlugin_Hypothesis_i.cxx index 63eb164..4da301e 100644 --- a/src/NETGENPlugin/NETGENPlugin_Hypothesis_i.cxx +++ b/src/NETGENPlugin/NETGENPlugin_Hypothesis_i.cxx @@ -534,3 +534,51 @@ std::string NETGENPlugin_Hypothesis_i::getMethodOfParameter(const int paramIndex } return ""; } + +//================================================================================ +/*! + * \brief Return geometry this hypothesis depends on. Return false if there is no geometry parameter + */ +//================================================================================ + +bool +NETGENPlugin_Hypothesis_i::getObjectsDependOn( std::vector< std::string > & entryArray, + std::vector< int > & subIDArray ) const +{ + typedef ::NETGENPlugin_Hypothesis THyp; + + const THyp* h = static_cast< ::NETGENPlugin_Hypothesis* >( myBaseImpl ); + const THyp::TLocalSize& ls = h->GetLocalSizesAndEntries(); + + THyp::TLocalSize::const_iterator entry2size = ls.cbegin(); + for ( ; entry2size != ls.cend(); ++entry2size ) + entryArray.push_back( entry2size->first ); + + return true; +} + +//================================================================================ +/*! + * \brief Set new geometry instead of that returned by getObjectsDependOn() + */ +//================================================================================ + +bool +NETGENPlugin_Hypothesis_i::setObjectsDependOn( std::vector< std::string > & entryArray, + std::vector< int > & subIDArray ) +{ + typedef ::NETGENPlugin_Hypothesis THyp; + + const THyp* h = static_cast< ::NETGENPlugin_Hypothesis* >( myBaseImpl ); + + THyp::TLocalSize& lsNew = const_cast< THyp::TLocalSize& >( h->GetLocalSizesAndEntries() ); + THyp::TLocalSize ls; + lsNew.swap( ls ); + + THyp::TLocalSize::const_iterator entry2size = ls.cbegin(); + for ( int i = 0; entry2size != ls.cend(); ++entry2size, ++i ) + if ( !entryArray[ i ].empty() ) + lsNew[ entryArray[ i ]] = entry2size->second; + + return true; +} diff --git a/src/NETGENPlugin/NETGENPlugin_Hypothesis_i.hxx b/src/NETGENPlugin/NETGENPlugin_Hypothesis_i.hxx index 84ad0be..59963e6 100644 --- a/src/NETGENPlugin/NETGENPlugin_Hypothesis_i.hxx +++ b/src/NETGENPlugin/NETGENPlugin_Hypothesis_i.hxx @@ -108,6 +108,17 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_Hypothesis_i: // Verify whether hypothesis supports given entity type CORBA::Boolean IsDimSupported( SMESH::Dimension type ); + + // Methods for copying mesh definition to other geometry + + // Return geometry this hypothesis depends on. Return false if there is no geometry parameter + virtual bool getObjectsDependOn( std::vector< std::string > & entryArray, + std::vector< int > & subIDArray ) const; + + // Set new geometry instead of that returned by getObjectsDependOn() + virtual bool setObjectsDependOn( std::vector< std::string > & entryArray, + std::vector< int > & subIDArray ); + protected: // to remember whether a parameter is already set (issue 0021364) @@ -127,7 +138,7 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_Hypothesis_i: METH_SetFuseEdges = METH_SetSurfaceCurvature * 2, METH_SetChordalErrorEnabled = METH_SetFuseEdges * 2, METH_SetChordalError = METH_SetChordalErrorEnabled * 2, - METH_LAST = METH_SetFuseEdges + METH_LAST = METH_SetChordalError }; int mySetMethodFlags; diff --git a/src/NETGENPlugin/NETGENPlugin_SimpleHypothesis_2D_i.hxx b/src/NETGENPlugin/NETGENPlugin_SimpleHypothesis_2D_i.hxx index 50bbc5f..dfe5e43 100644 --- a/src/NETGENPlugin/NETGENPlugin_SimpleHypothesis_2D_i.hxx +++ b/src/NETGENPlugin/NETGENPlugin_SimpleHypothesis_2D_i.hxx @@ -80,6 +80,17 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_SimpleHypothesis_2D_i: // into myMethod2VarParams. It should return a method name for an index of // variable parameters. Index is countered from zero virtual std::string getMethodOfParameter(const int paramIndex, int nbVars) const; + + + // Methods for copying mesh definition to other geometry + + // Return geometry this hypothesis depends on. Return false if there is no geometry parameter + virtual bool getObjectsDependOn( std::vector< std::string > & entryArray, + std::vector< int > & subIDArray ) const { return 0; } + + // Set new geometry instead of that returned by getObjectsDependOn() + virtual bool setObjectsDependOn( std::vector< std::string > & entryArray, + std::vector< int > & subIDArray ) { return true; } }; #endif diff --git a/src/NETGENPlugin/NETGENPlugin_SimpleHypothesis_3D_i.hxx b/src/NETGENPlugin/NETGENPlugin_SimpleHypothesis_3D_i.hxx index 4cf259b..fe4b263 100644 --- a/src/NETGENPlugin/NETGENPlugin_SimpleHypothesis_3D_i.hxx +++ b/src/NETGENPlugin/NETGENPlugin_SimpleHypothesis_3D_i.hxx @@ -58,6 +58,17 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_SimpleHypothesis_3D_i: // Verify whether hypothesis supports given entity type CORBA::Boolean IsDimSupported( SMESH::Dimension type ); + + + // Methods for copying mesh definition to other geometry + + // Return geometry this hypothesis depends on. Return false if there is no geometry parameter + virtual bool getObjectsDependOn( std::vector< std::string > & entryArray, + std::vector< int > & subIDArray ) const { return 0; } + + // Set new geometry instead of that returned by getObjectsDependOn() + virtual bool setObjectsDependOn( std::vector< std::string > & entryArray, + std::vector< int > & subIDArray ) { return true; } }; #endif -- 2.39.2