PAL13504 (Mesh from an imported mesh)

add PseudoShape(), HasShapeToMesh()
This commit is contained in:
eap 2007-02-19 15:55:57 +00:00
parent c0e60da668
commit b4888f2b96
2 changed files with 77 additions and 57 deletions

View File

@ -49,6 +49,7 @@
#include "DriverSTL_R_SMDS_Mesh.h"
#include <BRepTools_WireExplorer.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <BRep_Builder.hxx>
#include <gp_Pnt.hxx>
@ -94,6 +95,7 @@ SMESH_Mesh::SMESH_Mesh(int theLocalId,
_myDocument = theDocument;
_idDoc = theDocument->NewMesh(theIsEmbeddedMode);
_myMeshDS = theDocument->GetMesh(_idDoc);
_myMeshDS->ShapeToMesh( PseudoShape() );
_isShapeToMesh = false;
}
@ -117,7 +119,7 @@ SMESH_Mesh::~SMESH_Mesh()
//=============================================================================
/*!
*
* \brief Set geometry to be meshed
*/
//=============================================================================
@ -125,7 +127,11 @@ void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
{
if(MYDEBUG) MESSAGE("SMESH_Mesh::ShapeToMesh");
if ( !_myMeshDS->ShapeToMesh().IsNull() && aShape.IsNull() )
if ( !aShape.IsNull() && _isShapeToMesh )
throw SALOME_Exception(LOCALIZED ("a shape to mesh has already been defined"));
// clear current data
if ( !_myMeshDS->ShapeToMesh().IsNull() )
{
// removal of a shape to mesh, delete objects referring to sub-shapes:
// - sub-meshes
@ -144,28 +150,57 @@ void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
else
i_gr++;
}
_mapAncestors.Clear();
_mapPropagationChains.Clear();
// clear SMESHDS
TopoDS_Shape aNullShape;
_myMeshDS->ShapeToMesh( aNullShape );
}
else
// set a new geometry
if ( !aShape.IsNull() )
{
if (_isShapeToMesh)
throw SALOME_Exception(LOCALIZED ("a shape to mesh has already been defined"));
_myMeshDS->ShapeToMesh(aShape);
_isShapeToMesh = true;
// fill _mapAncestors
int desType, ancType;
for ( desType = TopAbs_VERTEX; desType > TopAbs_COMPOUND; desType-- )
for ( ancType = desType - 1; ancType >= TopAbs_COMPOUND; ancType-- )
TopExp::MapShapesAndAncestors ( aShape,
(TopAbs_ShapeEnum) desType,
(TopAbs_ShapeEnum) ancType,
_mapAncestors );
}
_isShapeToMesh = true;
_myMeshDS->ShapeToMesh(aShape);
}
// fill _mapAncestors
_mapAncestors.Clear();
int desType, ancType;
for ( desType = TopAbs_VERTEX; desType > TopAbs_COMPOUND; desType-- )
for ( ancType = desType - 1; ancType >= TopAbs_COMPOUND; ancType-- )
TopExp::MapShapesAndAncestors ( aShape,
(TopAbs_ShapeEnum) desType,
(TopAbs_ShapeEnum) ancType,
_mapAncestors );
//=======================================================================
/*!
* \brief Return geometry to be meshed. (It may be a PseudoShape()!)
*/
//=======================================================================
// NRI : 24/02/03
//EAP: 1/9/04 TopExp::MapShapes(aShape, _subShapes); USE the same map of _myMeshDS
TopoDS_Shape SMESH_Mesh::GetShapeToMesh() const
{
return _myMeshDS->ShapeToMesh();
}
//=======================================================================
/*!
* \brief Return a solid which is returned by GetShapeToMesh() if
* a real geometry to be meshed was not set
*/
//=======================================================================
const TopoDS_Solid& SMESH_Mesh::PseudoShape()
{
static TopoDS_Solid aSolid;
if ( aSolid.IsNull() )
{
aSolid = BRepPrimAPI_MakeBox(1,1,1);
}
return aSolid;
}
//=======================================================================
@ -494,17 +529,6 @@ SMESH_Hypothesis::Hypothesis_Status
*/
//=============================================================================
SMESHDS_Mesh * SMESH_Mesh::GetMeshDS()
{
return _myMeshDS;
}
//=============================================================================
/*!
*
*/
//=============================================================================
const list<const SMESHDS_Hypothesis*>&
SMESH_Mesh::GetHypothesisList(const TopoDS_Shape & aSubShape) const
throw(SALOME_Exception)
@ -649,29 +673,6 @@ void SMESH_Mesh::ClearLog() throw(SALOME_Exception)
_myMeshDS->GetScript()->Clear();
}
//=============================================================================
/*!
*
*/
//=============================================================================
int SMESH_Mesh::GetId()
{
if(MYDEBUG) MESSAGE("SMESH_Mesh::GetId");
return _id;
}
//=============================================================================
/*!
*
*/
//=============================================================================
SMESH_Gen *SMESH_Mesh::GetGen()
{
return _gen;
}
//=============================================================================
/*!
* Get or Create the SMESH_subMesh object implementation
@ -857,7 +858,8 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* t
if ( GetHypotheses( aSubShape, compatibleHypoKind, usedHyps, true ) &&
find( usedHyps.begin(), usedHyps.end(), hyp ) != usedHyps.end() )
{
aSubMesh->ComputeStateEngine(SMESH_subMesh::MODIF_HYP);
aSubMesh->AlgoStateEngine(SMESH_subMesh::MODIF_HYP,
const_cast< SMESH_Hypothesis*>( hyp ));
if ( algo->GetDim() == 1 && IsPropagationHypothesis( aSubShape ))
CleanMeshOnPropagationChain( aSubShape );

View File

@ -70,6 +70,7 @@ class SMESH_Group;
class TopTools_ListOfShape;
class SMESH_subMesh;
class SMESH_HypoFilter;
class TopoDS_Solid;
//typedef NMTTools_IndexedDataMapOfShapeIndexedMapOfShape IndexedMapOfChain;
typedef SMESH_IndexedDataMapOfShapeIndexedMapOfShape IndexedMapOfChain;
@ -87,7 +88,24 @@ public:
virtual ~SMESH_Mesh();
/*!
* \brief Set geometry to be meshed
*/
void ShapeToMesh(const TopoDS_Shape & aShape);
/*!
* \brief Return geometry to be meshed. (It may be a PseudoShape()!)
*/
TopoDS_Shape GetShapeToMesh() const;
/*!
* \brief Return true if there is a geometry to be meshed, not PseudoShape()
*/
bool HasShapeToMesh() const { return _isShapeToMesh; }
/*!
* \brief Return a solid which is returned by GetShapeToMesh() if
* a real geometry to be meshed was not set
*/
static const TopoDS_Solid& PseudoShape();
int UNVToMesh(const char* theFileName);
/*!
@ -122,11 +140,11 @@ public:
void ClearLog() throw(SALOME_Exception);
int GetId();
int GetId() { return _id; }
SMESHDS_Mesh * GetMeshDS();
SMESHDS_Mesh * GetMeshDS() { return _myMeshDS; }
SMESH_Gen *GetGen();
SMESH_Gen *GetGen() { return _gen; }
SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape)
throw(SALOME_Exception);