mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-28 14:50:32 +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;
|
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 TopoDS_Shape;
|
||||||
class SMESHDS_Mesh;
|
class SMESHDS_Mesh;
|
||||||
class SMDS_MeshNode;
|
class SMDS_MeshNode;
|
||||||
|
class SMESH_subMesh;
|
||||||
|
|
||||||
class SMESH_Algo:public SMESH_Hypothesis
|
class SMESH_Algo:public SMESH_Hypothesis
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SMESH_Algo(int hypId, int studyId, SMESH_Gen * gen);
|
/*!
|
||||||
virtual ~ SMESH_Algo();
|
* \brief Creates algorithm
|
||||||
|
* \param hypId - algorithm ID
|
||||||
const std::vector < std::string > &GetCompatibleHypothesis();
|
* \param studyId - study ID
|
||||||
virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
|
* \param gen - SMESH_Gen
|
||||||
const TopoDS_Shape& aShape,
|
*/
|
||||||
SMESH_Hypothesis::Hypothesis_Status& aStatus) = 0;
|
SMESH_Algo(int hypId, int studyId, SMESH_Gen * gen);
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Make filter recognize only compatible hypotheses
|
* \brief Destructor
|
||||||
* \param theFilter - the filter to initialize
|
*/
|
||||||
* \param ignoreAuxiliary - make filter ignore compatible auxiliary hypotheses
|
virtual ~ SMESH_Algo();
|
||||||
* \retval bool - true if the algo has compatible hypotheses
|
|
||||||
|
/*!
|
||||||
|
* \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,
|
bool InitCompatibleHypoFilter( SMESH_HypoFilter & theFilter,
|
||||||
const bool ignoreAuxiliary) const;
|
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
|
* \brief Fill vector of node parameters on geometrical edge, including vertex nodes
|
||||||
* \param theMesh - The mesh containing nodes
|
* \param theMesh - The mesh containing nodes
|
||||||
* \param theEdge - The geometrical edge of interest
|
* \param theEdge - The geometrical edge of interest
|
||||||
* \param theParams - The resulting vector of sorted node parameters
|
* \param theParams - The resulting vector of sorted node parameters
|
||||||
* \retval bool - false if not all parameters are OK
|
* \retval bool - false if not all parameters are OK
|
||||||
*/
|
*/
|
||||||
static bool GetNodeParamOnEdge(const SMESHDS_Mesh* theMesh,
|
static bool GetNodeParamOnEdge(const SMESHDS_Mesh* theMesh,
|
||||||
const TopoDS_Edge& theEdge,
|
const TopoDS_Edge& theEdge,
|
||||||
std::vector< double > & theParams);
|
std::vector< double > & theParams);
|
||||||
|
|
||||||
//static bool GetSegmentLengths();
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Find out elements orientation on a geometrical face
|
* \brief Find out elements orientation on a geometrical face
|
||||||
* \param theFace - The face correctly oriented in the shape being meshed
|
* \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,
|
static bool IsReversedSubMesh (const TopoDS_Face& theFace,
|
||||||
SMESHDS_Mesh* theMeshDS);
|
SMESHDS_Mesh* theMeshDS);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Initialize my parameter values by the mesh built on the geometry
|
* \brief Compute length of an edge
|
||||||
* \param theMesh - the built mesh
|
* \param E - the edge
|
||||||
* \param theShape - the geometry of interest
|
* \retval double - the length
|
||||||
* \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);
|
static double EdgeLength(const TopoDS_Edge & E);
|
||||||
|
|
||||||
public:
|
|
||||||
// algo features
|
|
||||||
|
|
||||||
// SMESH_Hypothesis::GetDim();
|
protected:
|
||||||
// 1 - dimention of target mesh
|
bool _onlyUnaryInput;
|
||||||
|
bool _requireDescretBoundary;
|
||||||
bool OnlyUnaryInput() const { return _onlyUnaryInput; }
|
std::vector<std::string> _compatibleHypothesis;
|
||||||
// 2 - is collection of tesselatable shapes inacceptable as input;
|
std::list<const SMESHDS_Hypothesis *> _appliedHypList;
|
||||||
// "collection" means a shape containing shapes of dim equal
|
std::list<const SMESHDS_Hypothesis *> _usedHypList;
|
||||||
// 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;
|
|
||||||
|
|
||||||
// quadratic mesh creation required
|
// quadratic mesh creation required
|
||||||
bool _quadraticMesh;
|
bool _quadraticMesh;
|
||||||
|
Loading…
Reference in New Issue
Block a user