-// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#endif
// Static variables definition
-GEOM::GEOM_Gen_var SMESH_Gen_i::myGeomGen = GEOM::GEOM_Gen::_nil();
+GEOM::GEOM_Gen_var SMESH_Gen_i::myGeomGen;
CORBA::ORB_var SMESH_Gen_i::myOrb;
PortableServer::POA_var SMESH_Gen_i::myPoa;
SALOME_NamingService* SMESH_Gen_i::myNS = NULL;
* Get SALOME_LifeCycleCORBA object
*/
//=============================================================================
-SALOME_LifeCycleCORBA* SMESH_Gen_i::GetLCC() {
+
+SALOME_LifeCycleCORBA* SMESH_Gen_i::GetLCC()
+{
if ( myLCC == NULL ) {
myLCC = new SALOME_LifeCycleCORBA( GetNS() );
}
return myLCC;
}
-
//=============================================================================
/*!
* GetGeomEngine [ static ]
* Get GEOM::GEOM_Gen reference
*/
//=============================================================================
-GEOM::GEOM_Gen_var SMESH_Gen_i::GetGeomEngine() {
- //CCRT GEOM::GEOM_Gen_var aGeomEngine =
- //CCRT GEOM::GEOM_Gen::_narrow( GetLCC()->FindOrLoad_Component("FactoryServer","GEOM") );
- //CCRT return aGeomEngine._retn();
- if(CORBA::is_nil(myGeomGen))
- {
- Engines::EngineComponent_ptr temp=GetLCC()->FindOrLoad_Component("FactoryServer","GEOM");
- myGeomGen=GEOM::GEOM_Gen::_narrow(temp);
- }
+
+GEOM::GEOM_Gen_var SMESH_Gen_i::GetGeomEngine( bool isShaper )
+{
+ Engines::EngineComponent_ptr temp =
+ GetLCC()->FindOrLoad_Component( isShaper ? "FactoryServer" : "FactoryServer",
+ isShaper ? "SHAPERSTUDY" : "GEOM" );
+ myGeomGen = GEOM::GEOM_Gen::_narrow( temp );
+
return myGeomGen;
}
+//=============================================================================
+/*!
+ * GetGeomEngine [ static ]
+ *
+ * Get GEOM::GEOM_Gen reference
+ */
+//=============================================================================
+
+GEOM::GEOM_Gen_var SMESH_Gen_i::GetGeomEngine( GEOM::GEOM_Object_ptr go )
+{
+ GEOM::GEOM_Gen_ptr gen;
+ if ( !CORBA::is_nil( go ))
+ gen = go->GetGen();
+ return gen;
+}
+
//=============================================================================
/*!
* SMESH_Gen_i::SMESH_Gen_i
if ( myShapeReader )
delete myShapeReader;
}
+
//=============================================================================
/*!
* SMESH_Gen_i::getHypothesisCreator
* Get hypothesis creator
*/
//=============================================================================
+
GenericHypothesisCreator_i* SMESH_Gen_i::getHypothesisCreator(const char* theHypName,
const char* theLibName,
std::string& thePlatformLibName)
* Create hypothesis of given type
*/
//=============================================================================
+
SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName,
const char* theLibName)
{
* Create empty mesh on shape
*/
//=============================================================================
+
SMESH::SMESH_Mesh_ptr SMESH_Gen_i::createMesh()
throw ( SALOME::SALOME_Exception )
{
* Get shape reader
*/
//=============================================================================
+
GEOM_Client* SMESH_Gen_i::GetShapeReader()
{
// create shape reader if necessary
* Set GEOM::GEOM_Gen reference
*/
//=============================================================================
-//GEOM::GEOM_Gen_ptr SMESH_Gen_i::SetGeomEngine( const char* containerLoc )
+
void SMESH_Gen_i::SetGeomEngine( GEOM::GEOM_Gen_ptr geomcompo )
{
- //Engines::Component_ptr temp=GetLCC()->FindOrLoad_Component(containerLoc,"GEOM");
- //myGeomGen=GEOM::GEOM_Gen::_narrow(temp);
- myGeomGen=GEOM::GEOM_Gen::_duplicate(geomcompo);
- //return myGeomGen;
+ myGeomGen = GEOM::GEOM_Gen::_duplicate( geomcompo );
}
//=============================================================================
* Set enable publishing in the study
*/
//=============================================================================
+
void SMESH_Gen_i::SetEnablePublish( CORBA::Boolean theIsEnablePublish )
{
myIsEnablePublish = theIsEnablePublish;
myStudyContext = new StudyContext;
SALOMEDS::Study_var aStudy = getStudyServant();
- if ( !CORBA::is_nil( aStudy ) ) {
+ if ( !CORBA::is_nil( aStudy ) )
+ {
SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+
SALOMEDS::SComponent_wrap GEOM_var = aStudy->FindComponent( "GEOM" );
if( !GEOM_var->_is_nil() )
- aStudyBuilder->LoadWith( GEOM_var, GetGeomEngine() );
+ aStudyBuilder->LoadWith( GEOM_var, GetGeomEngine( /*isShaper=*/false ) );
+
+ GEOM_var = aStudy->FindComponent( "SHAPERSTUDY" );
+ if( !GEOM_var->_is_nil() )
+ aStudyBuilder->LoadWith( GEOM_var, GetGeomEngine( /*isShaper=*/true ) );
+
// NPAL16168, issue 0020210
// Let meshes update their data depending on GEOM groups that could change
CORBA::String_var compDataType = ComponentDataType();
}
}
+//================================================================================
+/*!
+ * \brief Return true if mesh has ICON_SMESH_TREE_GEOM_MODIF icon
+ */
+//================================================================================
+
+bool SMESH_Gen_i::isGeomModifIcon( SMESH::SMESH_Mesh_ptr mesh )
+{
+ SALOMEDS::SObject_wrap so = ObjectToSObject( mesh );
+ SALOMEDS::GenericAttribute_wrap attr;
+ if ( ! so->_is_nil() && so->FindAttribute( attr.inout(), "AttributePixMap" ))
+ {
+ SALOMEDS::AttributePixMap_wrap pm = attr;
+ CORBA::String_var ico = pm->GetPixMap();
+ return ( strcmp( ico.in(), "ICON_SMESH_TREE_GEOM_MODIF" ) == 0 );
+ }
+ return false;
+}
+
+//=================================================================================
+// function : hasObjectInfo()
+// purpose : shows if module provides information for its objects
+//=================================================================================
+
+bool SMESH_Gen_i::hasObjectInfo()
+{
+ return true;
+}
+
+//=================================================================================
+// function : getObjectInfo()
+// purpose : returns an information for a given object by its entry
+//=================================================================================
+
+char* SMESH_Gen_i::getObjectInfo( const char* entry )
+{
+ // for a mesh with icon == ICON_SMESH_TREE_GEOM_MODIF show a warning;
+ // for the rest, "module 'SMESH', ID=0:1:2:*"
+
+ SMESH_Comment txt;
+
+ SALOMEDS::SObject_wrap so = getStudyServant()->FindObjectID( entry );
+ CORBA::Object_var obj = SObjectToObject( so );
+ SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
+ if ( isGeomModifIcon( mesh ))
+ {
+ txt << "The geometry was changed and the mesh needs to be recomputed";
+ }
+
+ if ( txt.empty() )
+ {
+ CORBA::String_var compType = ComponentDataType();
+ txt << "module '" << compType << "', ID=" << entry;
+ }
+ return CORBA::string_dup( txt );
+}
+
//=============================================================================
/*!
* SMESH_Gen_i::GetStudyContext
* Get study context
*/
//=============================================================================
+
StudyContext* SMESH_Gen_i::GetStudyContext()
{
return myStudyContext;
return hyp._retn();
}
+//================================================================================
+/*!
+ * \brief Return a hypothesis initialized by given average length.
+ * \param theHypType - hypothesis type name
+ * \param theLibName - plugin library name
+ * \param theAverageLength - average length
+ * \param theQuadDominated - is quad-dominated flag
+ * \retval SMESH::SMESH_Hypothesis_ptr - the new hypothesis
+ */
+//================================================================================
+
+SMESH::SMESH_Hypothesis_ptr
+SMESH_Gen_i::CreateHypothesisByAverageLength( const char* theHypType,
+ const char* theLibName,
+ CORBA::Double theAverageLength,
+ CORBA::Boolean theQuadDominated)
+ throw ( SALOME::SALOME_Exception )
+{
+ SMESH::HypInitParams initParams = { ::SMESH_Hypothesis::BY_AVERAGE_LENGTH,
+ theAverageLength, theQuadDominated };
+
+ SMESH::SMESH_Hypothesis_var hyp =
+ GetHypothesisParameterValues( theHypType, theLibName,
+ SMESH::SMESH_Mesh::_nil(),
+ GEOM::GEOM_Object::_nil(),
+ initParams );
+ SALOMEDS::SObject_wrap so = PublishHypothesis( hyp );
+
+ TPythonDump() << hyp << " = " << this << ".CreateHypothesisByAverageLength( '"
+ << theHypType << "', '"
+ << theLibName << "', "
+ << theAverageLength << ", "
+ << theQuadDominated << " )";
+
+ return hyp._retn();
+}
+
//================================================================================
/*!
* \brief Return a hypothesis holding parameter values corresponding either to the mesh
//================================================================================
SMESH::SMESH_Hypothesis_ptr
-SMESH_Gen_i::GetHypothesisParameterValues (const char* theHypType,
- const char* theLibName,
- SMESH::SMESH_Mesh_ptr theMesh,
- GEOM::GEOM_Object_ptr theGeom,
- CORBA::Boolean byMesh)
+SMESH_Gen_i::GetHypothesisParameterValues( const char* theHypType,
+ const char* theLibName,
+ SMESH::SMESH_Mesh_ptr theMesh,
+ GEOM::GEOM_Object_ptr theGeom,
+ const SMESH::HypInitParams& theParams)
throw ( SALOME::SALOME_Exception )
{
Unexpect aCatch(SALOME_SalomeException);
+
+ const bool byMesh = ( theParams.way == ::SMESH_Hypothesis::BY_MESH );
if ( byMesh && CORBA::is_nil( theMesh ) )
return SMESH::SMESH_Hypothesis::_nil();
if ( byMesh && CORBA::is_nil( theGeom ) )
if ( hyp->SetParametersByMesh( mesh, shape ))
return SMESH::SMESH_Hypothesis::_duplicate( tmpHyp );
}
- else {
- double diagonal = 0;
- if ( mesh )
- diagonal = mesh->GetShapeDiagonalSize();
- else
- diagonal = ::SMESH_Mesh::GetShapeDiagonalSize( shape );
+ else
+ {
::SMESH_Hypothesis::TDefaults dflts;
- dflts._elemLength = diagonal / myGen.GetBoundaryBoxSegmentation();
- dflts._nbSegments = myGen.GetDefaultNbSegments();
- dflts._shape = &shape;
- // let the temporary hypothesis initialize it's values
+ dflts._way = ( ::SMESH_Hypothesis::InitWay) theParams.way;
+ dflts._nbSegments = myGen.GetDefaultNbSegments();
+ dflts._elemLength = theParams.averageLength;
+ dflts._quadDominated = theParams.quadDominated;
+ if ( theParams.way == ::SMESH_Hypothesis::BY_GEOM )
+ {
+ if ( mesh )
+ dflts._diagonal = mesh->GetShapeDiagonalSize();
+ else
+ dflts._diagonal = ::SMESH_Mesh::GetShapeDiagonalSize( shape );
+ dflts._elemLength = dflts._diagonal / myGen.GetBoundaryBoxSegmentation();
+ dflts._shape = &shape;
+ }
+
+ // let the hypothesis initialize it's values
if ( hyp->SetParametersByDefaults( dflts, mesh ))
return SMESH::SMESH_Hypothesis::_duplicate( tmpHyp );
}
//=============================================================================
/*!
- * Sets number of segments per diagonal of boundary box of geometry by which
+ * Set number of segments per diagonal of boundary box of geometry by which
* default segment length of appropriate 1D hypotheses is defined
*/
//=============================================================================
else
THROW_SALOME_CORBA_EXCEPTION( "non-positive number of segments", SALOME::BAD_PARAM );
}
+
//=============================================================================
- /*!
- * \brief Sets default number of segments per edge
- */
+/*!
+ * \brief Set default number of segments per edge
+ */
//=============================================================================
+
void SMESH_Gen_i::SetDefaultNbSegments(CORBA::Long theNbSegments)
throw ( SALOME::SALOME_Exception )
{
//=============================================================================
/*!
- Set an option value
-*/
+ * Set an option value
+ */
//=============================================================================
void SMESH_Gen_i::SetOption(const char* name, const char* value)
//=============================================================================
/*!
- Return an option value
-*/
+ * Return an option value
+ */
//=============================================================================
char* SMESH_Gen_i::GetOption(const char* name)
{
//================================================================================
/*!
- * \brief Throws an exception in case if the file can't be read
+ * \brief Throw an exception in case if the file can't be read
*/
//================================================================================
return aResult._retn();
}
-SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName,
+//================================================================================
+/*!
+ * \brief Create meshes by reading a MED file
+ */
+//================================================================================
+
+SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName,
SMESH::DriverMED_ReadStatus& theStatus)
throw ( SALOME::SALOME_Exception )
{
Unexpect aCatch(SALOME_SalomeException);
checkFileReadable( theFileName );
- SMESH::mesh_array* result = CreateMeshesFromMEDorSAUV(theFileName, theStatus, "CreateMeshesFromMED", theFileName);
+ SMESH::mesh_array* result = CreateMeshesFromMEDorSAUV(theFileName, theStatus,
+ "CreateMeshesFromMED", theFileName);
return result;
}
*/
//=============================================================================
-SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromSAUV( const char* theFileName,
+SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromSAUV( const char* theFileName,
SMESH::DriverMED_ReadStatus& theStatus)
throw ( SALOME::SALOME_Exception )
{
cmd += "from medutilities import convert ; convert(r'" + sauvfilename + "', 'GIBI', 'MED', 1, r'" + medfilename + "')";
cmd += "\"";
system(cmd.c_str());
- SMESH::mesh_array* result = CreateMeshesFromMEDorSAUV(medfilename.c_str(), theStatus, "CreateMeshesFromSAUV", sauvfilename.c_str());
+ SMESH::mesh_array* result = CreateMeshesFromMEDorSAUV(medfilename.c_str(),
+ theStatus,
+ "CreateMeshesFromSAUV",
+ sauvfilename.c_str());
#ifdef WIN32
cmd = "%PYTHONBIN% ";
#else
*/
//================================================================================
-SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromCGNS( const char* theFileName,
+SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromCGNS( const char* theFileName,
SMESH::DriverMED_ReadStatus& theStatus)
throw ( SALOME::SALOME_Exception )
{
/*!
* SMESH_Gen_i::IsReadyToCompute
*
- * Returns true if mesh contains enough data to be computed
+ * Return true if mesh contains enough data to be computed
*/
//=============================================================================
if ( CORBA::is_nil( theShapeObject ) )
THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference",
SALOME::BAD_PARAM );
-
if ( CORBA::is_nil( theMesh ) )
THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference",
SALOME::BAD_PARAM );
-
try {
// get mesh servant
SMESH_Mesh_i* meshServant = dynamic_cast<SMESH_Mesh_i*>( GetServant( theMesh ).in() );
SALOMEDS::SObject_ptr SMESH_Gen_i::GetAlgoSO(const ::SMESH_Algo* algo)
{
if ( algo ) {
- SALOMEDS::Study_var aStudy = getStudyServant();
+ SALOMEDS::Study_var aStudy = getStudyServant();
if ( !aStudy->_is_nil() ) {
// find algo in the study
CORBA::String_var compDataType = ComponentDataType();
//================================================================================
/*!
* \brief Returns errors of hypotheses definition
- * \param theMesh - the mesh
- * \param theSubObject - the main or sub- shape
- * \retval SMESH::algo_error_array* - sequence of errors
+ * \param theMesh - the mesh
+ * \param theSubObject - the main or sub- shape
+ * \retval SMESH::algo_error_array* - sequence of errors
*/
//================================================================================
SMESH_Mesh_i* meshServant = SMESH::DownCast<SMESH_Mesh_i*>( theMesh );
ASSERT( meshServant );
if ( meshServant ) {
- meshServant->Load();
+ if ( isGeomModifIcon( theMesh ))
+ meshServant->Clear();
+ else
+ meshServant->Load();
// NPAL16168: "geometrical group edition from a submesh don't modify mesh computation"
meshServant->CheckGeomModif();
// get local TopoDS_Shape
if(theMesh->HasShapeToMesh())
myLocShape = GeomObjectToShape( theShapeObject );
else
- return result._retn();;
+ return result._retn();
// call implementation compute
::SMESH_Mesh& myLocMesh = meshServant->GetImpl();
if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Evaluate" );
if ( CORBA::is_nil( theShapeObject ) && theMesh->HasShapeToMesh())
- THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference",
- SALOME::BAD_PARAM );
+ THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", SALOME::BAD_PARAM );
if ( CORBA::is_nil( theMesh ) )
- THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference",
- SALOME::BAD_PARAM );
+ THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference", SALOME::BAD_PARAM );
SMESH::long_array_var nbels = new SMESH::long_array;
nbels->length(SMESH::Entity_Last);
GEOM::GEOM_Object_wrap geom = FindGeometryByMeshElement(theMesh, theElementID);
if ( !geom->_is_nil() ) {
GEOM::GEOM_Object_var mainShape = theMesh->GetShapeToMesh();
- GEOM::GEOM_Gen_ptr geomGen = GetGeomEngine();
+ GEOM::GEOM_Gen_var geomGen = GetGeomEngine( geom );
// try to find the corresponding SObject
SALOMEDS::SObject_wrap SObj = ObjectToSObject( geom.in() );
}
}
}
- if ( SObj->_is_nil() ) // publish a new subshape
+ if ( SObj->_is_nil() && !geomGen->_is_nil() ) // publish a new subshape
SObj = geomGen->AddInStudy( geom, theGeomName, mainShape );
// return only published geometry
THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference", SALOME::BAD_PARAM );
GEOM::GEOM_Object_var mainShape = theMesh->GetShapeToMesh();
- GEOM::GEOM_Gen_ptr geomGen = GetGeomEngine();
+ GEOM::GEOM_Gen_var geomGen = GetGeomEngine( mainShape );
// get a core mesh DS
SMESH_Mesh_i* meshServant = SMESH::DownCast<SMESH_Mesh_i*>( theMesh );
}
if ( !it->_is_nil() ) {
for ( it->InitEx(true); it->More(); it->Next() ) {
- SALOMEDS::SObject_wrap so = it->Value();
+ SALOMEDS::SObject_wrap so = it->Value();
CORBA::Object_var obj = SObjectToObject( so );
GEOM::GEOM_Object_var subGeom = GEOM::GEOM_Object::_narrow( obj );
if ( !subGeom->_is_nil() ) {
std::string newMainEntry = newEntry.in();
SALOMEDS::Study_var study = myGen_i->getStudyServant();
- GEOM::GEOM_Gen_var geomGen = myGen_i->GetGeomEngine();
+ GEOM::GEOM_Gen_var geomGen = myGen_i->GetGeomEngine( mainShapeNew );
GEOM::GEOM_IShapesOperations_wrap op = geomGen->GetIShapesOperations();
mySubshapes = op->GetExistingSubObjects( mainShapeNew,
/*groupsOnly=*/false );
return GEOM::GEOM_Object::_duplicate( oldShape ); // shape independent of the old shape
GEOM::GEOM_Object_var mainShapeNew = myNewMesh_i->GetShapeToMesh();
- GEOM::GEOM_Gen_var geomGen = myGen_i->GetGeomEngine();
+ GEOM::GEOM_Gen_var geomGen = myGen_i->GetGeomEngine( mainShapeNew );
// try to find by entry or name
if ( myToPublish )
GEOM::GEOM_Object_var mainShapeNew = myNewMesh_i->GetShapeToMesh();
GEOM::GEOM_Object_var mainShapeOld = mySrcMesh_i->GetShapeToMesh();
- GEOM::GEOM_Gen_var geomGen = myGen_i->GetGeomEngine();
+ GEOM::GEOM_Gen_var geomGen = myGen_i->GetGeomEngine( mainShapeNew );
GEOM::GEOM_IShapesOperations_wrap op = geomGen->GetIShapesOperations();
try
{
GEOM::GEOM_Object_var newShape;
GEOM::GEOM_Object_var mainShapeNew = myNewMesh_i->GetShapeToMesh();
- GEOM::GEOM_Gen_var geomGen = myGen_i->GetGeomEngine();
+ GEOM::GEOM_Gen_var geomGen = myGen_i->GetGeomEngine( mainShapeNew );
GEOM::GEOM_IShapesOperations_wrap op = geomGen->GetIShapesOperations();
try
{
* Get MED version of the file by its name
*/
//================================================================================
+
char* SMESH_Gen_i::GetMEDVersion(const char* theFileName)
{
std::string version = MED::GetMEDVersion( theFileName );
* Check compatibility of file with MED format being used, read only.
*/
//================================================================================
+
CORBA::Boolean SMESH_Gen_i::CheckCompatibility(const char* theFileName)
{
return MED::CheckCompatibility( theFileName );
* Check compatibility of file with MED format being used, for append on write.
*/
//================================================================================
+
CORBA::Boolean SMESH_Gen_i::CheckWriteCompatibility(const char* theFileName)
{
return MED::CheckCompatibility( theFileName, true );
*/
//================================================================================
SMESH::string_array* SMESH_Gen_i::GetMeshNames(const char* theFileName)
+
{
- //MESSAGE("GetMeshNames " << theFileName);
SMESH::string_array_var aResult = new SMESH::string_array();
MED::PWrapper aMed = MED::CrWrapperR( theFileName );
MED::TErr anErr;
MED::TInt aNbMeshes = aMed->GetNbMeshes( &anErr );
- //MESSAGE("---" << aNbMeshes);
if( anErr >= 0 ) {
aResult->length( aNbMeshes );
for( MED::TInt i = 0; i < aNbMeshes; i++ ) {
* Save SMESH module's data
*/
//=============================================================================
+
SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
const char* theURL,
bool isMultiFile )
#else
// PAL17753 (Regression: missing hypothesis in restored study)
// "lib" also should be removed from the beginning
- //if( libname_len > 3 )
- //libname.resize( libname_len - 3 );
if( libname_len > 6 )
libname = libname.substr( 3, libname_len - 3 - 3 );
#endif
#else
// PAL17753 (Regression: missing hypothesis in restored study)
// "lib" also should be removed from the beginning
- //if( libname_len > 3 )
- //libname.resize( libname_len - 3 );
if( libname_len > 6 )
libname = libname.substr( 3, libname_len - 3 - 3 );
#endif
aDataset->WriteOnDisk( &meshPersistentId );
aDataset->CloseOnDisk();
+ // Store SMESH_Mesh_i::_mainShapeTick
+ int shapeTick = myImpl->MainShapeTick();
+ aSize[ 0 ] = 1;
+ aDataset = new HDFdataset( "shapeTick", aTopGroup, HDF_INT32, aSize, 1 );
+ aDataset->CreateOnDisk();
+ aDataset->WriteOnDisk( &shapeTick );
+ aDataset->CloseOnDisk();
+
// write reference on a shape if exists
SALOMEDS::SObject_wrap myRef;
bool shapeRefFound = false;
aGroup->CloseOnDisk();
}
}
- // All sub-meshes will be stored in MED file
- // .. will NOT (PAL 12992)
- //if ( shapeRefFound )
- //myWriter.AddAllSubMeshes();
// store submesh order if any
const TListOfListOfInt& theOrderIds = myLocMesh.GetMeshOrder();
return anAsciiStreamFile._retn();
}
-//=============================================================================
-/*!
- * SMESH_Gen_i::loadGeomData
- *
- * Load GEOM module data
- */
-//=============================================================================
-
-void SMESH_Gen_i::loadGeomData( SALOMEDS::SComponent_ptr theCompRoot )
-{
- if ( theCompRoot->_is_nil() )
- return;
-
- SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
- aStudyBuilder->LoadWith( theCompRoot, GetGeomEngine() );
-}
-
//=============================================================================
/*!
* SMESH_Gen_i::Load
const char* theURL,
bool isMultiFile )
{
- // localizing
+ UpdateStudy(); // load geom data
Kernel_Utils::Localizer loc;
- //if (!myStudyContext)
- UpdateStudy();
SALOMEDS::Study_var aStudy = getStudyServant();
- /* if( !theComponent->_is_nil() )
- {
- if( !aStudy->FindComponent( "GEOM" )->_is_nil() )
- loadGeomData( aStudy->FindComponent( "GEOM" ) );
- }*/
// Get temporary files location
TCollection_AsciiString tmpDir =
TPythonDump pd; // prevent dump during loading
- // DriverMED_R_SMESHDS_Mesh myReader;
- // myReader.SetFile( meshfile.ToCString() );
-
// For PAL13473 ("Repetitive mesh") implementation.
// New dependencies between SMESH objects are established:
// now hypotheses can refer to meshes, shapes and other hypotheses.
aDataset->CloseOnDisk();
if ( strlen( refFromFile ) > 0 ) {
SALOMEDS::SObject_wrap shapeSO = aStudy->FindObjectID( refFromFile );
-
- // Make sure GEOM data are loaded first
- //loadGeomData( shapeSO->GetFatherComponent() );
-
- CORBA::Object_var shapeObject = SObjectToObject( shapeSO );
+ CORBA::Object_var shapeObject = SObjectToObject( shapeSO );
if ( !CORBA::is_nil( shapeObject ) ) {
aShapeObject = GEOM::GEOM_Object::_narrow( shapeObject );
if ( !aShapeObject->_is_nil() )
}
// issue 20918. Restore Persistent Id of SMESHDS_Mesh
- if( aTopGroup->ExistInternalObject( "meshPersistentId" ) )
+ if ( aTopGroup->ExistInternalObject( "meshPersistentId" ) )
{
aDataset = new HDFdataset( "meshPersistentId", aTopGroup );
aDataset->OpenOnDisk();
delete [] meshPersistentId;
}
+ // Restore SMESH_Mesh_i::_mainShapeTick
+ if ( aTopGroup->ExistInternalObject( "shapeTick" ))
+ {
+ aDataset = new HDFdataset( "shapeTick", aTopGroup );
+ aDataset->OpenOnDisk();
+ int* shapeTick = & myNewMeshImpl->MainShapeTick();
+ aDataset->ReadFromDisk( shapeTick );
+ aDataset->CloseOnDisk();
+ }
+
// Restore file info
if ( aTopGroup->ExistInternalObject( "file info" ))
{
{
aTopGroup = meshi_group->second;
SMESH_Mesh_i* myNewMeshImpl = meshi_group->first;
- //::SMESH_Mesh& myLocMesh = myNewMeshImpl->GetImpl();
- //SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS();
GEOM::GEOM_Object_var aShapeObject = myNewMeshImpl->GetShapeToMesh();
bool hasData = false;
aDataset->ReadFromDisk( refFromFile );
aDataset->CloseOnDisk();
// san - it is impossible to recover applied algorithms using their entries within Load() method
- //SALOMEDS::SObject_wrap hypSO = aStudy->FindObjectID( refFromFile );
- //CORBA::Object_var hypObject = SObjectToObject( hypSO );
int id = atoi( refFromFile );
delete [] refFromFile;
string anIOR = myStudyContext->getIORbyOldId( id );
aDataset->ReadFromDisk( refFromFile );
aDataset->CloseOnDisk();
// san - it is impossible to recover applied hypotheses using their entries within Load() method
- //SALOMEDS::SObject_wrap hypSO = myStudy->FindObjectID( refFromFile );
- //CORBA::Object_var hypObject = SObjectToObject( hypSO );
int id = atoi( refFromFile );
delete [] refFromFile;
string anIOR = myStudyContext->getIORbyOldId( id );
* Set a new object name
*/
//=============================================================================
+
void SMESH_Gen_i::SetName(const char* theIOR,
const char* theName)
{
// purpose : Moves objects to the specified position.
// Is used in the drag-n-drop functionality.
//=================================================================================
+
void SMESH_Gen_i::Move( const SMESH::sobject_list& what,
SALOMEDS::SObject_ptr where,
CORBA::Long row )
return true;
}
-//=================================================================================
-// function : GetInsideSphere
-// purpose : Collect indices of elements, which are located inside the sphere
-//=================================================================================
+//================================================================================
+/*!
+ * \brief Collect indices of elements, which are located inside the sphere
+ */
+//================================================================================
+
SMESH::long_array* SMESH_Gen_i::GetInsideSphere( SMESH::SMESH_IDSource_ptr meshPart,
SMESH::ElementType theElemType,
CORBA::Double theX,
return aResult._retn();
}
+//================================================================================
+/*!
+ * \brief Collect indices of elements, which are located inside the box
+ */
+//================================================================================
+
SMESH::long_array* SMESH_Gen_i::GetInsideBox( SMESH::SMESH_IDSource_ptr meshPart,
SMESH::ElementType theElemType,
CORBA::Double theX1,
CORBA::Double theZ1,
CORBA::Double theX2,
CORBA::Double theY2,
- CORBA::Double theZ2) {
+ CORBA::Double theZ2)
+{
SMESH::long_array_var aResult = new SMESH::long_array();
if( meshPart->_is_nil() )
return aResult._retn();
- TopoDS_Shape aShape = BRepPrimAPI_MakeBox( gp_Pnt( theX1, theY1, theZ1 ), gp_Pnt( theX2, theY2, theZ2 ) ).Shape();
+ TopoDS_Shape aShape = BRepPrimAPI_MakeBox( gp_Pnt( theX1, theY1, theZ1 ),
+ gp_Pnt( theX2, theY2, theZ2 ) ).Shape();
std::vector<long> lst =_GetInside(meshPart, theElemType, aShape);
return aResult._retn();
}
+//================================================================================
+/*!
+ * \brief Collect indices of elements, which are located inside the cylinder
+ */
+//================================================================================
+
SMESH::long_array* SMESH_Gen_i::GetInsideCylinder( SMESH::SMESH_IDSource_ptr meshPart,
SMESH::ElementType theElemType,
CORBA::Double theX,
CORBA::Double theDY,
CORBA::Double theDZ,
CORBA::Double theH,
- CORBA::Double theR ){
+ CORBA::Double theR )
+{
SMESH::long_array_var aResult = new SMESH::long_array();
if( meshPart->_is_nil() )
return aResult._retn();
return aResult._retn();
}
+//================================================================================
+/*!
+ * \brief Collect indices of elements, which are located inside the geom object
+ */
+//================================================================================
+
SMESH::long_array* SMESH_Gen_i::GetInside( SMESH::SMESH_IDSource_ptr meshPart,
SMESH::ElementType theElemType,
GEOM::GEOM_Object_ptr theGeom,
- CORBA::Double theTolerance ) {
+ CORBA::Double theTolerance )
+{
SMESH::long_array_var aResult = new SMESH::long_array();
if( meshPart->_is_nil() || theGeom->_is_nil() )
return aResult._retn();
return aResult._retn();
}
-
+//================================================================================
+/*!
+ * \brief Collect indices of elements, which are located inside the TopoDS_Shape
+ */
+//================================================================================
std::vector<long> SMESH_Gen_i::_GetInside( SMESH::SMESH_IDSource_ptr meshPart,
- SMESH::ElementType theElemType,
- TopoDS_Shape& aShape,
- double* theTolerance) {
+ SMESH::ElementType theElemType,
+ const TopoDS_Shape& theShape,
+ double* theTolerance) {
std::vector<long> res;
SMESH::SMESH_Mesh_var mesh = meshPart->GetMesh();
SMESH::Controls::ElementsOnShape* anElementsOnShape = new SMESH::Controls::ElementsOnShape();
anElementsOnShape->SetAllNodes( true );
anElementsOnShape->SetMesh( meshDS );
- anElementsOnShape->SetShape( aShape, aType );
+ anElementsOnShape->SetShape( theShape, aType );
if(theTolerance)
anElementsOnShape->SetTolerance(*theTolerance);
return res;
}
-
//=============================================================================
/*!
* SMESHEngine_factory