mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-05 06:10:33 +05:00
PAL16842 (Genertion of groups when a mesh is transformed)
+ CORBA::Long NbGroups()
This commit is contained in:
parent
019d2167d9
commit
ba46f82f7d
@ -27,29 +27,30 @@
|
|||||||
// $Header$
|
// $Header$
|
||||||
|
|
||||||
#include "SMESH_Mesh_i.hxx"
|
#include "SMESH_Mesh_i.hxx"
|
||||||
#include "SMESH_subMesh_i.hxx"
|
|
||||||
#include "SMESH_MEDMesh_i.hxx"
|
|
||||||
#include "SMESH_Group_i.hxx"
|
|
||||||
#include "SMESH_Filter_i.hxx"
|
#include "SMESH_Filter_i.hxx"
|
||||||
|
#include "SMESH_Gen_i.hxx"
|
||||||
|
#include "SMESH_Group_i.hxx"
|
||||||
|
#include "SMESH_MEDMesh_i.hxx"
|
||||||
|
#include "SMESH_MeshEditor_i.hxx"
|
||||||
#include "SMESH_PythonDump.hxx"
|
#include "SMESH_PythonDump.hxx"
|
||||||
|
#include "SMESH_subMesh_i.hxx"
|
||||||
|
|
||||||
#include "Utils_CorbaException.hxx"
|
#include "DriverMED_R_SMESHDS_Mesh.h"
|
||||||
#include "Utils_ExceptHandlers.hxx"
|
#include "SMDS_VolumeTool.hxx"
|
||||||
#include "utilities.h"
|
|
||||||
|
|
||||||
#include "SALOME_NamingService.hxx"
|
|
||||||
#include "Utils_SINGLETON.hxx"
|
|
||||||
#include "OpUtil.hxx"
|
|
||||||
|
|
||||||
#include "SMESHDS_Command.hxx"
|
#include "SMESHDS_Command.hxx"
|
||||||
#include "SMESHDS_CommandType.hxx"
|
#include "SMESHDS_CommandType.hxx"
|
||||||
#include "SMESH_MeshEditor_i.hxx"
|
#include "SMESHDS_GroupOnGeom.hxx"
|
||||||
#include "SMESH_Gen_i.hxx"
|
#include "SMESH_Group.hxx"
|
||||||
#include "DriverMED_R_SMESHDS_Mesh.h"
|
|
||||||
//#include "SMDS_ElemIterator.hxx"
|
|
||||||
#include "SMDS_VolumeTool.hxx"
|
|
||||||
#include "SMESH_MesherHelper.hxx"
|
|
||||||
#include "SMESH_MeshEditor.hxx"
|
#include "SMESH_MeshEditor.hxx"
|
||||||
|
#include "SMESH_MesherHelper.hxx"
|
||||||
|
|
||||||
|
#include "OpUtil.hxx"
|
||||||
|
#include "SALOME_NamingService.hxx"
|
||||||
|
#include "Utils_CorbaException.hxx"
|
||||||
|
#include "Utils_ExceptHandlers.hxx"
|
||||||
|
#include "Utils_SINGLETON.hxx"
|
||||||
|
#include "utilities.h"
|
||||||
|
|
||||||
// OCCT Includes
|
// OCCT Includes
|
||||||
#include <BRep_Builder.hxx>
|
#include <BRep_Builder.hxx>
|
||||||
@ -226,7 +227,7 @@ SMESH_Mesh_i::ImportMEDFile( const char* theFileName, const char* theMeshName )
|
|||||||
Unexpect aCatch(SALOME_SalomeException);
|
Unexpect aCatch(SALOME_SalomeException);
|
||||||
int status;
|
int status;
|
||||||
try {
|
try {
|
||||||
status = importMEDFile( theFileName, theMeshName );
|
status = _impl->MEDToMesh( theFileName, theMeshName );
|
||||||
}
|
}
|
||||||
catch( SALOME_Exception& S_ex ) {
|
catch( SALOME_Exception& S_ex ) {
|
||||||
THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
|
THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
|
||||||
@ -235,16 +236,8 @@ SMESH_Mesh_i::ImportMEDFile( const char* theFileName, const char* theMeshName )
|
|||||||
THROW_SALOME_CORBA_EXCEPTION("ImportMEDFile(): unknown exception", SALOME::BAD_PARAM);
|
THROW_SALOME_CORBA_EXCEPTION("ImportMEDFile(): unknown exception", SALOME::BAD_PARAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy();
|
CreateGroupServants();
|
||||||
if ( !aStudy->_is_nil() ) {
|
|
||||||
// publishing of the groups in the study (sub-meshes are out of scope of MED import)
|
|
||||||
map<int, SMESH::SMESH_GroupBase_ptr>::iterator it = _mapGroups.begin();
|
|
||||||
for (; it != _mapGroups.end(); it++ ) {
|
|
||||||
SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_duplicate( it->second );
|
|
||||||
_gen_i->PublishGroup( aStudy, _this(), aGroup,
|
|
||||||
GEOM::GEOM_Object::_nil(), aGroup->GetName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ConvertDriverMEDReadStatus(status);
|
return ConvertDriverMEDReadStatus(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,16 +257,6 @@ int SMESH_Mesh_i::ImportUNVFile( const char* theFileName )
|
|||||||
|
|
||||||
CreateGroupServants();
|
CreateGroupServants();
|
||||||
|
|
||||||
SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy();
|
|
||||||
if ( !aStudy->_is_nil() ) {
|
|
||||||
// publishing of the groups in the study (sub-meshes are out of scope of UNV import)
|
|
||||||
map<int, SMESH::SMESH_GroupBase_ptr>::iterator it = _mapGroups.begin();
|
|
||||||
for (; it != _mapGroups.end(); it++ ) {
|
|
||||||
SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_duplicate( it->second );
|
|
||||||
_gen_i->PublishGroup( aStudy, _this(), aGroup,
|
|
||||||
GEOM::GEOM_Object::_nil(), aGroup->GetName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,14 +284,14 @@ int SMESH_Mesh_i::ImportSTLFile( const char* theFileName )
|
|||||||
*/
|
*/
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
int SMESH_Mesh_i::importMEDFile( const char* theFileName, const char* theMeshName )
|
// int SMESH_Mesh_i::importMEDFile( const char* theFileName, const char* theMeshName )
|
||||||
{
|
// {
|
||||||
// Read mesh with name = <theMeshName> and all its groups into SMESH_Mesh
|
// // Read mesh with name = <theMeshName> and all its groups into SMESH_Mesh
|
||||||
int status = _impl->MEDToMesh( theFileName, theMeshName );
|
// int status = _impl->MEDToMesh( theFileName, theMeshName );
|
||||||
CreateGroupServants();
|
// CreateGroupServants();
|
||||||
|
|
||||||
return status;
|
// return status;
|
||||||
}
|
// }
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*!
|
/*!
|
||||||
@ -811,6 +794,17 @@ SMESH::ListOfGroups * SMESH_Mesh_i::GetGroups() throw(SALOME::SALOME_Exception)
|
|||||||
|
|
||||||
return aList._retn();
|
return aList._retn();
|
||||||
}
|
}
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* Get number of groups existing in the mesh
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
CORBA::Long SMESH_Mesh_i::NbGroups() throw (SALOME::SALOME_Exception)
|
||||||
|
{
|
||||||
|
Unexpect aCatch(SALOME_SalomeException);
|
||||||
|
return _mapGroups.size();
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*! UnionGroups
|
/*! UnionGroups
|
||||||
@ -1370,7 +1364,7 @@ void SMESH_Mesh_i::SetImpl(::SMESH_Mesh * impl)
|
|||||||
SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor()
|
SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor()
|
||||||
{
|
{
|
||||||
// Create MeshEditor
|
// Create MeshEditor
|
||||||
SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( _impl, false );
|
SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( this, false );
|
||||||
SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this();
|
SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this();
|
||||||
|
|
||||||
// Update Python script
|
// Update Python script
|
||||||
@ -1387,7 +1381,7 @@ SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor()
|
|||||||
|
|
||||||
SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditPreviewer()
|
SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditPreviewer()
|
||||||
{
|
{
|
||||||
SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( _impl, true );
|
SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( this, true );
|
||||||
SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this();
|
SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this();
|
||||||
return aMesh._retn();
|
return aMesh._retn();
|
||||||
}
|
}
|
||||||
@ -2313,17 +2307,11 @@ SMESH::double_array* SMESH_Mesh_i::BaryCenter(const CORBA::Long id)
|
|||||||
return aResult._retn();
|
return aResult._retn();
|
||||||
|
|
||||||
if(elem->GetType()==SMDSAbs_Volume) {
|
if(elem->GetType()==SMDSAbs_Volume) {
|
||||||
// use SMDS_VolumeTool
|
|
||||||
SMDS_VolumeTool aTool;
|
SMDS_VolumeTool aTool;
|
||||||
if(aTool.Set(elem)) {
|
if(aTool.Set(elem)) {
|
||||||
double x=0., y=0., z=0.;
|
aResult->length(3);
|
||||||
if(aTool.GetBaryCenter(x,y,z)) {
|
if (!aTool.GetBaryCenter( aResult[0], aResult[1], aResult[2]) )
|
||||||
// add coordinates
|
aResult->length(0);
|
||||||
aResult->length(3);
|
|
||||||
aResult[0] = x;
|
|
||||||
aResult[1] = y;
|
|
||||||
aResult[2] = z;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -2352,27 +2340,75 @@ SMESH::double_array* SMESH_Mesh_i::BaryCenter(const CORBA::Long id)
|
|||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*!
|
/*!
|
||||||
*
|
* Create and publish group servants if any groups were imported or created anyhow
|
||||||
*/
|
*/
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
void SMESH_Mesh_i::CreateGroupServants()
|
void SMESH_Mesh_i::CreateGroupServants()
|
||||||
{
|
{
|
||||||
// Create group servants, if any groups were imported
|
SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy();
|
||||||
list<int> aGroupIds = _impl->GetGroupIds();
|
|
||||||
for ( list<int>::iterator it = aGroupIds.begin(); it != aGroupIds.end(); it++ ) {
|
|
||||||
SMESH_Group_i* aGroupImpl = new SMESH_Group_i( SMESH_Gen_i::GetPOA(), this, *it );
|
|
||||||
|
|
||||||
// PAL7962: san -- To ensure correct mapping of servant and correct reference counting in GenericObj_i
|
::SMESH_Mesh::GroupIteratorPtr groupIt = _impl->GetGroups();
|
||||||
|
while ( groupIt->more() )
|
||||||
|
{
|
||||||
|
::SMESH_Group* group = groupIt->next();
|
||||||
|
int anId = group->GetGroupDS()->GetID();
|
||||||
|
|
||||||
|
map<int, SMESH::SMESH_GroupBase_ptr>::iterator it = _mapGroups.find(anId);
|
||||||
|
if ( it != _mapGroups.end() && !CORBA::is_nil( it->second ))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
SMESH_GroupBase_i* aGroupImpl;
|
||||||
|
TopoDS_Shape shape;
|
||||||
|
if ( SMESHDS_GroupOnGeom* groupOnGeom =
|
||||||
|
dynamic_cast<SMESHDS_GroupOnGeom*>( group->GetGroupDS() ))
|
||||||
|
{
|
||||||
|
aGroupImpl = new SMESH_GroupOnGeom_i( SMESH_Gen_i::GetPOA(), this, anId );
|
||||||
|
shape = groupOnGeom->GetShape();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
aGroupImpl = new SMESH_Group_i( SMESH_Gen_i::GetPOA(), this, anId );
|
||||||
|
}
|
||||||
|
|
||||||
|
// To ensure correct mapping of servant and correct reference counting in GenericObj_i
|
||||||
SMESH_Gen_i::GetPOA()->activate_object( aGroupImpl );
|
SMESH_Gen_i::GetPOA()->activate_object( aGroupImpl );
|
||||||
aGroupImpl->Register();
|
aGroupImpl->Register();
|
||||||
// PAL7962: san -- To ensure correct mapping of servant and correct reference counting in GenericObj_i
|
|
||||||
|
|
||||||
SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow( aGroupImpl->_this() );
|
SMESH::SMESH_GroupBase_var groupVar =
|
||||||
_mapGroups[*it] = SMESH::SMESH_Group::_duplicate( aGroup );
|
SMESH::SMESH_GroupBase::_narrow( aGroupImpl->_this() );
|
||||||
|
_mapGroups[anId] = SMESH::SMESH_GroupBase::_duplicate( groupVar );
|
||||||
|
|
||||||
// register CORBA object for persistence
|
// register CORBA object for persistence
|
||||||
int nextId = _gen_i->RegisterObject( aGroup );
|
int nextId = _gen_i->RegisterObject( groupVar );
|
||||||
if(MYDEBUG) MESSAGE( "Add group to map with id = "<< nextId);
|
if(MYDEBUG) MESSAGE( "Add group to map with id = "<< nextId);
|
||||||
|
|
||||||
|
// publishing of the groups in the study
|
||||||
|
if ( !aStudy->_is_nil() ) {
|
||||||
|
GEOM::GEOM_Object_var shapeVar = _gen_i->ShapeToGeomObject( shape );
|
||||||
|
_gen_i->PublishGroup( aStudy, _this(), groupVar, shapeVar, groupVar->GetName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* \brief Return groups cantained in _mapGroups by their IDs
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
SMESH::ListOfGroups* SMESH_Mesh_i::GetGroups(const list<int>& groupIDs) const
|
||||||
|
{
|
||||||
|
int nbGroups = groupIDs.size();
|
||||||
|
SMESH::ListOfGroups_var aList = new SMESH::ListOfGroups();
|
||||||
|
aList->length( nbGroups );
|
||||||
|
|
||||||
|
list<int>::const_iterator ids = groupIDs.begin();
|
||||||
|
for ( nbGroups = 0; ids != groupIDs.end(); ++ids )
|
||||||
|
{
|
||||||
|
map<int, SMESH::SMESH_GroupBase_ptr>::const_iterator it = _mapGroups.find( *ids );
|
||||||
|
if ( it != _mapGroups.end() && !CORBA::is_nil( it->second ))
|
||||||
|
aList[nbGroups++] = SMESH::SMESH_GroupBase::_duplicate( it->second );
|
||||||
|
}
|
||||||
|
aList->length( nbGroups );
|
||||||
|
return aList._retn();
|
||||||
|
}
|
||||||
|
@ -108,6 +108,9 @@ public:
|
|||||||
SMESH::ListOfGroups* GetGroups()
|
SMESH::ListOfGroups* GetGroups()
|
||||||
throw (SALOME::SALOME_Exception);
|
throw (SALOME::SALOME_Exception);
|
||||||
|
|
||||||
|
CORBA::Long NbGroups()
|
||||||
|
throw (SALOME::SALOME_Exception);
|
||||||
|
|
||||||
SMESH::SMESH_Group_ptr UnionGroups( SMESH::SMESH_GroupBase_ptr theGroup1,
|
SMESH::SMESH_Group_ptr UnionGroups( SMESH::SMESH_GroupBase_ptr theGroup1,
|
||||||
SMESH::SMESH_GroupBase_ptr theGroup2,
|
SMESH::SMESH_GroupBase_ptr theGroup2,
|
||||||
const char* theName )
|
const char* theName )
|
||||||
@ -303,7 +306,7 @@ public:
|
|||||||
static SMESH::Hypothesis_Status
|
static SMESH::Hypothesis_Status
|
||||||
ConvertHypothesisStatus (SMESH_Hypothesis::Hypothesis_Status theStatus);
|
ConvertHypothesisStatus (SMESH_Hypothesis::Hypothesis_Status theStatus);
|
||||||
|
|
||||||
int importMEDFile( const char* theFileName, const char* theMeshName );
|
//int importMEDFile( const char* theFileName, const char* theMeshName );
|
||||||
|
|
||||||
SMESH::SMESH_subMesh_ptr createSubMesh( GEOM::GEOM_Object_ptr theSubShapeObject );
|
SMESH::SMESH_subMesh_ptr createSubMesh( GEOM::GEOM_Object_ptr theSubShapeObject );
|
||||||
|
|
||||||
@ -333,6 +336,15 @@ public:
|
|||||||
|
|
||||||
CORBA::LongLong GetMeshPtr();
|
CORBA::LongLong GetMeshPtr();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Assure that all groups are published
|
||||||
|
*/
|
||||||
|
void CreateGroupServants();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Return groups cantained in _mapGroups by their IDs
|
||||||
|
*/
|
||||||
|
SMESH::ListOfGroups* GetGroups(const std::list<int>& groupIDs) const;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Get XYZ coordinates of node as list of double
|
* Get XYZ coordinates of node as list of double
|
||||||
@ -420,7 +432,6 @@ public:
|
|||||||
map<int, ::SMESH_subMesh*> _mapSubMesh; //NRI
|
map<int, ::SMESH_subMesh*> _mapSubMesh; //NRI
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void CreateGroupServants();
|
|
||||||
|
|
||||||
static int myIdGenerator;
|
static int myIdGenerator;
|
||||||
::SMESH_Mesh* _impl; // :: force no namespace here
|
::SMESH_Mesh* _impl; // :: force no namespace here
|
||||||
|
Loading…
Reference in New Issue
Block a user