mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-14 02:30:33 +05:00
PAL13473 (Build repetitive mesh):
1) add virtual SetEventListener(SMESH_subMesh*) 2) define virtual SaveTo() and LoadFrom() to do nothing
This commit is contained in:
parent
9388a801df
commit
90945f5ac5
@ -82,6 +82,15 @@ SMESH_Algo::~SMESH_Algo()
|
||||
{
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* Usually an algoritm has nothing to save
|
||||
*/
|
||||
//=============================================================================
|
||||
|
||||
ostream & SMESH_Algo::SaveTo(ostream & save) { return save; }
|
||||
istream & SMESH_Algo::LoadFrom(istream & load) { return load; }
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
*
|
||||
@ -367,3 +376,17 @@ bool SMESH_Algo::InitCompatibleHypoFilter( SMESH_HypoFilter & theFilter,
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief Sets event listener to submeshes if necessary
|
||||
* \param subMesh - submesh where algo is set
|
||||
*
|
||||
* After being set, event listener is notified on each event of a submesh.
|
||||
* By default non listener is set
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
void SMESH_Algo::SetEventListener(SMESH_subMesh* /*subMesh*/)
|
||||
{
|
||||
}
|
||||
|
@ -47,55 +47,162 @@ class TopoDS_Face;
|
||||
class TopoDS_Shape;
|
||||
class SMESHDS_Mesh;
|
||||
class SMDS_MeshNode;
|
||||
class SMESH_subMesh;
|
||||
|
||||
class SMESH_Algo:public SMESH_Hypothesis
|
||||
{
|
||||
public:
|
||||
SMESH_Algo(int hypId, int studyId, SMESH_Gen * gen);
|
||||
virtual ~ SMESH_Algo();
|
||||
|
||||
const std::vector < std::string > &GetCompatibleHypothesis();
|
||||
virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
|
||||
const TopoDS_Shape& aShape,
|
||||
SMESH_Hypothesis::Hypothesis_Status& aStatus) = 0;
|
||||
|
||||
virtual bool Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) = 0;
|
||||
|
||||
virtual const std::list <const SMESHDS_Hypothesis *> &
|
||||
GetUsedHypothesis(SMESH_Mesh & aMesh,
|
||||
const TopoDS_Shape & aShape,
|
||||
const bool ignoreAuxiliary=true);
|
||||
|
||||
const list <const SMESHDS_Hypothesis *> &
|
||||
GetAppliedHypothesis(SMESH_Mesh & aMesh,
|
||||
const TopoDS_Shape & aShape,
|
||||
const bool ignoreAuxiliary=true);
|
||||
|
||||
static double EdgeLength(const TopoDS_Edge & E);
|
||||
|
||||
public:
|
||||
/*!
|
||||
* \brief Creates algorithm
|
||||
* \param hypId - algorithm ID
|
||||
* \param studyId - study ID
|
||||
* \param gen - SMESH_Gen
|
||||
*/
|
||||
SMESH_Algo(int hypId, int studyId, SMESH_Gen * gen);
|
||||
|
||||
/*!
|
||||
* \brief Make filter recognize only compatible hypotheses
|
||||
* \param theFilter - the filter to initialize
|
||||
* \param ignoreAuxiliary - make filter ignore compatible auxiliary hypotheses
|
||||
* \retval bool - true if the algo has compatible hypotheses
|
||||
* \brief Destructor
|
||||
*/
|
||||
virtual ~ SMESH_Algo();
|
||||
|
||||
/*!
|
||||
* \brief Saves nothing in a stream
|
||||
* \param save - the stream
|
||||
* \retval virtual std::ostream & - the stream
|
||||
*/
|
||||
virtual std::ostream & SaveTo(std::ostream & save);
|
||||
|
||||
/*!
|
||||
* \brief Loads nothing from a stream
|
||||
* \param load - the stream
|
||||
* \retval virtual std::ostream & - the stream
|
||||
*/
|
||||
virtual std::istream & LoadFrom(std::istream & load);
|
||||
|
||||
/*!
|
||||
* \brief Returns all types of compatible hypotheses
|
||||
*/
|
||||
const std::vector < std::string > & GetCompatibleHypothesis();
|
||||
|
||||
/*!
|
||||
* \brief Check hypothesis definition to mesh a shape
|
||||
* \param aMesh - the mesh
|
||||
* \param aShape - the shape
|
||||
* \param aStatus - check result
|
||||
* \retval bool - true if hypothesis is well defined
|
||||
*/
|
||||
virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
|
||||
const TopoDS_Shape& aShape,
|
||||
SMESH_Hypothesis::Hypothesis_Status& aStatus) = 0;
|
||||
/*!
|
||||
* \brief Computes mesh on a shape
|
||||
* \param aMesh - the mesh
|
||||
* \param aShape - the shape
|
||||
* \retval bool - is a success
|
||||
*/
|
||||
virtual bool Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) = 0;
|
||||
|
||||
/*!
|
||||
* \brief Returns a list of compatible hypotheses used to mesh a shape
|
||||
* \param aMesh - the mesh
|
||||
* \param aShape - the shape
|
||||
* \param ignoreAuxiliary - do not include auxiliary hypotheses in the list
|
||||
* \retval const std::list <const SMESHDS_Hypothesis*> - hypotheses list
|
||||
*
|
||||
* List the hypothesis used by the algorithm associated to the shape.
|
||||
* Hypothesis associated to father shape -are- taken into account (see
|
||||
* GetAppliedHypothesis). Relevant hypothesis have a name (type) listed in
|
||||
* the algorithm. This method could be surcharged by specific algorithms, in
|
||||
* case of several hypothesis simultaneously applicable.
|
||||
*/
|
||||
virtual const std::list <const SMESHDS_Hypothesis *> &
|
||||
GetUsedHypothesis(SMESH_Mesh & aMesh,
|
||||
const TopoDS_Shape & aShape,
|
||||
const bool ignoreAuxiliary=true);
|
||||
/*!
|
||||
* \brief Returns a list of compatible hypotheses assigned to a shape in a mesh
|
||||
* \param aMesh - the mesh
|
||||
* \param aShape - the shape
|
||||
* \param ignoreAuxiliary - do not include auxiliary hypotheses in the list
|
||||
* \retval const std::list <const SMESHDS_Hypothesis*> - hypotheses list
|
||||
*
|
||||
* List the relevant hypothesis associated to the shape. Relevant hypothesis
|
||||
* have a name (type) listed in the algorithm. Hypothesis associated to
|
||||
* father shape -are not- taken into account (see GetUsedHypothesis)
|
||||
*/
|
||||
const list <const SMESHDS_Hypothesis *> &
|
||||
GetAppliedHypothesis(SMESH_Mesh & aMesh,
|
||||
const TopoDS_Shape & aShape,
|
||||
const bool ignoreAuxiliary=true);
|
||||
/*!
|
||||
* \brief Make the filter recognize only compatible hypotheses
|
||||
* \param theFilter - the filter to initialize
|
||||
* \param ignoreAuxiliary - make filter ignore compatible auxiliary hypotheses
|
||||
* \retval bool - true if the algo has compatible hypotheses
|
||||
*/
|
||||
bool InitCompatibleHypoFilter( SMESH_HypoFilter & theFilter,
|
||||
const bool ignoreAuxiliary) const;
|
||||
/*!
|
||||
* \brief Initialize my parameter values by the mesh built on the geometry
|
||||
* \param theMesh - the built mesh
|
||||
* \param theShape - the geometry of interest
|
||||
* \retval bool - true if parameter values have been successfully defined
|
||||
*
|
||||
* Just return false as the algorithm does not hold parameters values
|
||||
*/
|
||||
virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh,
|
||||
const TopoDS_Shape& theShape);
|
||||
|
||||
|
||||
public:
|
||||
// ==================================================================
|
||||
// Algo features influencing how Compute() is called:
|
||||
// in what turn and with what input shape
|
||||
// ==================================================================
|
||||
|
||||
// SMESH_Hypothesis::GetDim();
|
||||
// 1 - dimention of target mesh
|
||||
|
||||
bool OnlyUnaryInput() const { return _onlyUnaryInput; }
|
||||
// 2 - is collection of tesselatable shapes inacceptable as input;
|
||||
// "collection" means a shape containing shapes of dim equal
|
||||
// to GetDim().
|
||||
// Algo which can process a collection shape should expect
|
||||
// an input temporary shape that is neither MainShape nor
|
||||
// its child.
|
||||
|
||||
bool NeedDescretBoundary() const { return _requireDescretBoundary; }
|
||||
// 3 - is a Dim-1 mesh prerequisite
|
||||
|
||||
public:
|
||||
// ==================================================================
|
||||
// Methods to track non hierarchical dependencies between submeshes
|
||||
// ==================================================================
|
||||
|
||||
/*!
|
||||
* \brief Sets event listener to submeshes if necessary
|
||||
* \param subMesh - submesh where algo is set
|
||||
*
|
||||
* This method is called when a submesh gets HYP_OK algo_state.
|
||||
* After being set, event listener is notified on each event of a submesh.
|
||||
* By default non listener is set
|
||||
*/
|
||||
virtual void SetEventListener(SMESH_subMesh* subMesh);
|
||||
|
||||
public:
|
||||
// ==================================================================
|
||||
// Common algo utilities
|
||||
// ==================================================================
|
||||
/*!
|
||||
* \brief Fill vector of node parameters on geometrical edge, including vertex nodes
|
||||
* \param theMesh - The mesh containing nodes
|
||||
* \param theEdge - The geometrical edge of interest
|
||||
* \param theParams - The resulting vector of sorted node parameters
|
||||
* \retval bool - false if not all parameters are OK
|
||||
* \param theMesh - The mesh containing nodes
|
||||
* \param theEdge - The geometrical edge of interest
|
||||
* \param theParams - The resulting vector of sorted node parameters
|
||||
* \retval bool - false if not all parameters are OK
|
||||
*/
|
||||
static bool GetNodeParamOnEdge(const SMESHDS_Mesh* theMesh,
|
||||
const TopoDS_Edge& theEdge,
|
||||
std::vector< double > & theParams);
|
||||
|
||||
//static bool GetSegmentLengths();
|
||||
|
||||
/*!
|
||||
* \brief Find out elements orientation on a geometrical face
|
||||
* \param theFace - The face correctly oriented in the shape being meshed
|
||||
@ -105,40 +212,20 @@ class SMESH_Algo:public SMESH_Hypothesis
|
||||
*/
|
||||
static bool IsReversedSubMesh (const TopoDS_Face& theFace,
|
||||
SMESHDS_Mesh* theMeshDS);
|
||||
|
||||
/*!
|
||||
* \brief Initialize my parameter values by the mesh built on the geometry
|
||||
* \param theMesh - the built mesh
|
||||
* \param theShape - the geometry of interest
|
||||
* \retval bool - true if parameter values have been successfully defined
|
||||
*
|
||||
* Just return false as the algorithm does not hold parameters values
|
||||
* \brief Compute length of an edge
|
||||
* \param E - the edge
|
||||
* \retval double - the length
|
||||
*/
|
||||
virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
|
||||
static double EdgeLength(const TopoDS_Edge & E);
|
||||
|
||||
public:
|
||||
// algo features
|
||||
|
||||
// SMESH_Hypothesis::GetDim();
|
||||
// 1 - dimention of target mesh
|
||||
|
||||
bool OnlyUnaryInput() const { return _onlyUnaryInput; }
|
||||
// 2 - is collection of tesselatable shapes inacceptable as input;
|
||||
// "collection" means a shape containing shapes of dim equal
|
||||
// to GetDim().
|
||||
// Algo which can process a collection shape should expect
|
||||
// an input temporary shape that is neither MainShape nor
|
||||
// its child.
|
||||
|
||||
bool NeedDescretBoundary() const { return _requireDescretBoundary; }
|
||||
// 3 - is a Dim-1 mesh prerequisite
|
||||
|
||||
protected:
|
||||
bool _onlyUnaryInput;
|
||||
bool _requireDescretBoundary;
|
||||
std::vector<std::string> _compatibleHypothesis;
|
||||
std::list<const SMESHDS_Hypothesis *> _appliedHypList;
|
||||
std::list<const SMESHDS_Hypothesis *> _usedHypList;
|
||||
protected:
|
||||
bool _onlyUnaryInput;
|
||||
bool _requireDescretBoundary;
|
||||
std::vector<std::string> _compatibleHypothesis;
|
||||
std::list<const SMESHDS_Hypothesis *> _appliedHypList;
|
||||
std::list<const SMESHDS_Hypothesis *> _usedHypList;
|
||||
|
||||
// quadratic mesh creation required
|
||||
bool _quadraticMesh;
|
||||
|
Loading…
Reference in New Issue
Block a user