2003-07-10 16:13:42 +06:00
|
|
|
// SMESH SMESH : implementaion of SMESH idl descriptions
|
|
|
|
//
|
|
|
|
// Copyright (C) 2003 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 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
|
|
|
|
//
|
|
|
|
// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// File : SMESH_Algo.hxx
|
|
|
|
// Author : Paul RASCLE, EDF
|
|
|
|
// Module : SMESH
|
|
|
|
// $Header$
|
2003-05-19 19:18:36 +06:00
|
|
|
|
|
|
|
#ifndef _SMESH_ALGO_HXX_
|
|
|
|
#define _SMESH_ALGO_HXX_
|
|
|
|
|
|
|
|
#include "SMESH_Hypothesis.hxx"
|
|
|
|
|
|
|
|
#include <TopoDS_Shape.hxx>
|
|
|
|
#include <TopoDS_Edge.hxx>
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
#include <list>
|
|
|
|
|
2004-06-18 14:55:35 +06:00
|
|
|
class SMESH_Gen;
|
2003-05-19 19:18:36 +06:00
|
|
|
class SMESH_Mesh;
|
2005-12-20 18:53:23 +05:00
|
|
|
class TopoDS_Face;
|
2006-02-07 20:01:11 +05:00
|
|
|
class TopoDS_Shape;
|
2005-12-20 18:53:23 +05:00
|
|
|
class SMESHDS_Mesh;
|
2003-05-19 19:18:36 +06:00
|
|
|
|
2003-09-04 15:21:41 +06:00
|
|
|
class SMESH_Algo:public SMESH_Hypothesis
|
2003-05-19 19:18:36 +06:00
|
|
|
{
|
2003-09-04 15:21:41 +06:00
|
|
|
public:
|
|
|
|
SMESH_Algo(int hypId, int studyId, SMESH_Gen * gen);
|
|
|
|
virtual ~ SMESH_Algo();
|
2003-05-19 19:18:36 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
const std::vector < std::string > &GetCompatibleHypothesis();
|
2004-06-18 14:55:35 +06:00
|
|
|
virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
|
|
|
|
const TopoDS_Shape& aShape,
|
|
|
|
SMESH_Hypothesis::Hypothesis_Status& aStatus) = 0;
|
2003-05-19 19:18:36 +06:00
|
|
|
|
2004-06-18 14:55:35 +06:00
|
|
|
virtual bool Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) = 0;
|
2003-05-19 19:18:36 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
virtual const std::list <const SMESHDS_Hypothesis *> &
|
2003-09-04 15:21:41 +06:00
|
|
|
GetUsedHypothesis(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape);
|
2003-05-19 19:18:36 +06:00
|
|
|
|
2003-09-04 15:21:41 +06:00
|
|
|
const list <const SMESHDS_Hypothesis *> &
|
|
|
|
GetAppliedHypothesis(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape);
|
2003-05-19 19:18:36 +06:00
|
|
|
|
2003-09-04 15:21:41 +06:00
|
|
|
static double EdgeLength(const TopoDS_Edge & E);
|
2003-05-19 19:18:36 +06:00
|
|
|
|
2006-02-07 20:01:11 +05:00
|
|
|
/*!
|
|
|
|
* \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
|
|
|
|
*/
|
|
|
|
static bool GetNodeParamOnEdge(const SMESHDS_Mesh* theMesh,
|
|
|
|
const TopoDS_Edge& theEdge,
|
|
|
|
std::vector< double > & theParams);
|
|
|
|
|
|
|
|
//static bool GetSegmentLengths();
|
|
|
|
|
2005-12-20 18:53:23 +05:00
|
|
|
/*!
|
|
|
|
* \brief Find out elements orientation on a geometrical face
|
|
|
|
* \param theFace - The face correctly oriented in the shape being meshed
|
|
|
|
* \param theMeshDS - The mesh data structure
|
|
|
|
* \retval bool - true if the face normal and the normal of first element
|
|
|
|
* in the correspoding submesh point in different directions
|
|
|
|
*/
|
|
|
|
static bool IsReversedSubMesh (const TopoDS_Face& theFace,
|
|
|
|
SMESHDS_Mesh* theMeshDS);
|
|
|
|
|
2006-02-07 20:01:11 +05:00
|
|
|
/*!
|
|
|
|
* \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);
|
|
|
|
|
2004-06-18 14:55:35 +06:00
|
|
|
public:
|
|
|
|
// algo features
|
2003-05-19 19:18:36 +06:00
|
|
|
|
2004-06-18 14:55:35 +06:00
|
|
|
// 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;
|
2004-12-01 15:48:31 +05:00
|
|
|
std::vector<std::string> _compatibleHypothesis;
|
|
|
|
std::list<const SMESHDS_Hypothesis *> _appliedHypList;
|
|
|
|
std::list<const SMESHDS_Hypothesis *> _usedHypList;
|
2003-05-19 19:18:36 +06:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|