X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Mesh_i.cxx;h=a170d36d5e2b1f060a01efac948d781fae12ef32;hp=44195b8c8d748ec8c2061a04058112ae9a384466;hb=09607afb276900e0f0a7b95a01751fe628020a39;hpb=a1920ff31054e2c882bd94d4f3c04abe53980ce0 diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 44195b8c8..a170d36d5 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -496,7 +496,13 @@ int SMESH_Mesh_i::ImportSTLFile( const char* theFileName ) SMESH_TRY; // Read mesh with name = into SMESH_Mesh - _impl->STLToMesh( theFileName ); + std::string name = _impl->STLToMesh( theFileName ); + if ( !name.empty() ) + { + SALOMEDS::Study_var study = _gen_i->GetCurrentStudy(); + SALOMEDS::SObject_wrap meshSO = _gen_i->ObjectToSObject( study, _this() ); + _gen_i->SetName( meshSO, name.c_str() ); + } SMESH_CATCH( SMESH::throwCorbaException ); @@ -558,7 +564,7 @@ SMESH::Hypothesis_Status SMESH_Mesh_i::ConvertHypothesisStatus switch (theStatus) { RETURNCASE( HYP_OK ); RETURNCASE( HYP_MISSING ); - RETURNCASE( HYP_CONCURENT ); + RETURNCASE( HYP_CONCURRENT ); RETURNCASE( HYP_BAD_PARAMETER ); RETURNCASE( HYP_HIDDEN_ALGO ); RETURNCASE( HYP_HIDING_ALGO ); @@ -1125,7 +1131,7 @@ void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup if ( n->NbInverseElements() == 0 ) _impl->GetMeshDS()->RemoveFreeNode( n, /*sm=*/0 ); - TPythonDump pyDump; // Supress dump from RemoveGroup() + TPythonDump pyDump; // Suppress dump from RemoveGroup() // Update Python script (theGroup must be alive for this) pyDump << SMESH::SMESH_Mesh_var(_this()) @@ -2943,7 +2949,7 @@ void SMESH_Mesh_i::PrepareForWriting (const char* file, bool overwrite) if ( !aFile.openForWriting() ) { msg << "You cannot create the file " << aFile.getName() - << ". Check the directory existance and access rights"; + << ". Check the directory existence and access rights"; } aFile.remove(); } @@ -3016,6 +3022,7 @@ void SMESH_Mesh_i::ExportToMEDX (const char* file, CORBA::Boolean autoDimension) throw(SALOME::SALOME_Exception) { + //MESSAGE("SMESH::MED_VERSION:"<< theVersion); SMESH_TRY; if ( _preMeshInfo ) _preMeshInfo->FullLoadFromFile(); @@ -3042,6 +3049,7 @@ void SMESH_Mesh_i::ExportToMED (const char* file, SMESH::MED_VERSION theVersion) throw(SALOME::SALOME_Exception) { + //MESSAGE("SMESH::MED_VERSION:"<< theVersion); ExportToMEDX(file,auto_groups,theVersion,true); } @@ -3055,7 +3063,8 @@ void SMESH_Mesh_i::ExportMED (const char* file, CORBA::Boolean auto_groups) throw(SALOME::SALOME_Exception) { - ExportToMEDX(file,auto_groups,SMESH::MED_V2_2,true); + //MESSAGE("SMESH::MED_VERSION:"<< SMESH::MED_LATEST); + ExportToMEDX(file,auto_groups,SMESH::MED_LATEST,true); } //================================================================================ @@ -3144,9 +3153,15 @@ void SMESH_Mesh_i::ExportSTL (const char *file, const bool isascii) TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportSTL( r'" << file << "', " << isascii << " )"; + CORBA::String_var name; + SALOMEDS::Study_var study = _gen_i->GetCurrentStudy(); + SALOMEDS::SObject_wrap so = _gen_i->ObjectToSObject( study, _this() ); + if ( !so->_is_nil() ) + name = so->GetName(); + // Perform Export - PrepareForWriting(file); - _impl->ExportSTL(file, isascii); + PrepareForWriting( file ); + _impl->ExportSTL( file, isascii, name.in() ); } //================================================================================ @@ -3595,8 +3610,14 @@ void SMESH_Mesh_i::ExportPartToSTL(::SMESH::SMESH_IDSource_ptr meshPart, PrepareForWriting(file); + CORBA::String_var name; + SALOMEDS::Study_var study = _gen_i->GetCurrentStudy(); + SALOMEDS::SObject_wrap so = _gen_i->ObjectToSObject( study, meshPart ); + if ( !so->_is_nil() ) + name = so->GetName(); + SMESH_MeshPartDS partDS( meshPart ); - _impl->ExportSTL(file, isascii, &partDS); + _impl->ExportSTL( file, isascii, name.in(), &partDS ); TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportPartToSTL( " << meshPart<< ", r'" << file << "', " << isascii << ")"; @@ -3610,7 +3631,8 @@ void SMESH_Mesh_i::ExportPartToSTL(::SMESH::SMESH_IDSource_ptr meshPart, void SMESH_Mesh_i::ExportCGNS(::SMESH::SMESH_IDSource_ptr meshPart, const char* file, - CORBA::Boolean overwrite) + CORBA::Boolean overwrite, + CORBA::Boolean groupElemsByType) throw (SALOME::SALOME_Exception) { #ifdef WITH_CGNS @@ -3628,8 +3650,12 @@ void SMESH_Mesh_i::ExportCGNS(::SMESH::SMESH_IDSource_ptr meshPart, CORBA::String_var name = so->GetName(); meshName = name.in(); } + SMESH_TRY; + SMESH_MeshPartDS partDS( meshPart ); - _impl->ExportCGNS(file, &partDS, meshName.c_str() ); + _impl->ExportCGNS(file, &partDS, meshName.c_str(), groupElemsByType ); + + SMESH_CATCH( SMESH::throwCorbaException ); TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportCGNS( " << meshPart<< ", r'" << file << "', " << overwrite << ")"; @@ -4753,6 +4779,35 @@ CORBA::Long SMESH_Mesh_i::FindElementByNodes(const SMESH::long_array& nodes) return elemID; } +//================================================================================ +/*! + * \brief Return elements including all given nodes. + */ +//================================================================================ + +SMESH::long_array* SMESH_Mesh_i::GetElementsByNodes(const SMESH::long_array& nodes, + SMESH::ElementType elemType) +{ + if ( _preMeshInfo ) + _preMeshInfo->FullLoadFromFile(); + + SMESH::long_array_var result = new SMESH::long_array(); + + if ( SMESHDS_Mesh* mesh = _impl->GetMeshDS() ) + { + vector< const SMDS_MeshNode * > nn( nodes.length() ); + for ( CORBA::ULong i = 0; i < nodes.length(); ++i ) + nn[i] = mesh->FindNode( nodes[i] ); + + std::vector elems; + mesh->GetElementsByNodes( nn, elems, (SMDSAbs_ElementType) elemType ); + result->length( elems.size() ); + for ( size_t i = 0; i < elems.size(); ++i ) + result[i] = elems[i]->GetID(); + } + return result._retn(); +} + //============================================================================= /*! * Returns true if given element is polygon @@ -5395,7 +5450,7 @@ namespace /* Iterators used in SMESH_Mesh_i::GetElements(SMESH::SMESH_IDSource_v { const SMDS_MeshElement* res = _node; _node = 0; - while (( _elemIter->more() || _nodeIter->more() ) && !_node ) + while ( !_node && ( _elemIter->more() || _nodeIter->more() )) { if ( _nodeIter->more() ) { @@ -5533,10 +5588,10 @@ TopAbs_ShapeEnum shapeTypeByDim(const int theDim) //----------------------------------------------------------------------------- /*! - * \brief Internal structure used to find concurent submeshes + * \brief Internal structure used to find concurrent submeshes * - * It represents a pair < submesh, concurent dimension >, where - * 'concurrent dimension' is dimension of shape where the submesh can concurent + * It represents a pair < submesh, concurrent dimension >, where + * 'concurrent dimension' is dimension of shape where the submesh can concurrent * with another submesh. In other words, it is dimension of a hypothesis assigned * to submesh. */ @@ -5928,7 +5983,7 @@ TListOfListOfInt SMESH_Mesh_i::findConcurrentSubMeshes() removeDimHyps(dimHypListArr); - // now, minimise the number of concurrent groups + // now, minimize the number of concurrent groups // Here we assume that lists of submeshes can have same submesh // in case of multi-dimension algorithms, as result // list with common submesh has to be united into one list @@ -6025,7 +6080,7 @@ void SMESH_Mesh_i::convertMeshOrder (const TListOfListOfInt& theIdsOrder, continue; if ( theIsDump ) aPythonDump << "[ "; - // convert shape indeces into interfaces + // convert shape indices into interfaces SMESH::submesh_array_var aResSubSet = new SMESH::submesh_array(); aResSubSet->length(aSubOrder.size()); TListOfInt::const_iterator subIt = aSubOrder.begin(); @@ -6067,6 +6122,7 @@ SMESH_MeshPartDS::SMESH_MeshPartDS(SMESH::SMESH_IDSource_ptr meshPart): SMESH::SMESH_Mesh_var mesh = meshPart->GetMesh(); SMESH_Mesh_i* mesh_i = SMESH::DownCast( mesh ); + mesh_i->Load(); _meshDS = mesh_i->GetImpl().GetMeshDS(); SetPersistentId( _meshDS->GetPersistentId() ); @@ -6136,6 +6192,21 @@ SMESH_MeshPartDS::SMESH_MeshPartDS(const std::list< const SMDS_MeshElement* > & myInfo = tmpInfo; } // ------------------------------------------------------------------------------------- +const SMDS_MeshElement * SMESH_MeshPartDS::FindElement(int IDelem) const +{ + if ( _meshDS ) return _meshDS->FindElement( IDelem ); + + TElemID elem( IDelem ); + for ( int iType = SMDSAbs_Edge; iType < SMDSAbs_NbElementTypes; ++iType ) + if ( !_elements[ iType ].empty() ) + { + TIDSortedElemSet::const_iterator it = _elements[ iType ].find( &elem ); + if ( it != _elements[ iType ].end() ) + return *it; + } + return 0; +} +// ------------------------------------------------------------------------------------- SMDS_ElemIteratorPtr SMESH_MeshPartDS::elementGeomIterator(SMDSAbs_GeometryType geomType) const { if ( _meshDS ) return _meshDS->elementGeomIterator( geomType );