X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Filter_i.cxx;h=2429d5fc1eacbfe5e9765cd651f04bef50122fb2;hp=42db79ef48fe71f1a01f00f9018a2d8dc9210228;hb=b09372829929f8f561495d6c16527134971a1909;hpb=920fe932b10ce5e9da132f0fce3be2bbef95fa3a diff --git a/src/SMESH_I/SMESH_Filter_i.cxx b/src/SMESH_I/SMESH_Filter_i.cxx index 42db79ef4..2429d5fc1 100644 --- a/src/SMESH_I/SMESH_Filter_i.cxx +++ b/src/SMESH_I/SMESH_Filter_i.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 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 @@ -20,7 +20,7 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses +// SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes // File : SMESH_Filter_i.cxx // Author : Alexey Petrov, OCC // Module : SMESH @@ -136,18 +136,16 @@ static TopoDS_Shape getShapeByName( const char* theName ) if ( theName != 0 ) { SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy(); - if ( !aStudy->_is_nil() ) + SALOMEDS::Study::ListOfSObject_var aList = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectByName( theName, "GEOM" ); + if ( aList->length() == 0 ) + aList = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectByName( theName, "SHAPERSTUDY" ); + if ( aList->length() > 0 ) { - SALOMEDS::Study::ListOfSObject_var aList = aStudy->FindObjectByName( theName, "GEOM" ); - if ( aList->length() > 0 ) - { - CORBA::Object_var anObj = aList[ 0 ]->GetObject(); - GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow( anObj ); - TopoDS_Shape shape = aSMESHGen->GeomObjectToShape( aGeomObj ); - SALOME::UnRegister( aList ); // UnRegister() objects in aList - return shape; - } + CORBA::Object_var anObj = aList[ 0 ]->GetObject(); + GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow( anObj ); + TopoDS_Shape shape = aSMESHGen->GeomObjectToShape( aGeomObj ); + SALOME::UnRegister( aList ); // UnRegister() objects in aList + return shape; } } return TopoDS_Shape(); @@ -157,14 +155,11 @@ static TopoDS_Shape getShapeByID (const char* theID) { if ( theID && strlen( theID ) > 0 ) { SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy(); - if ( !aStudy->_is_nil() ) { - SALOMEDS::SObject_wrap aSObj = aStudy->FindObjectID(theID); - if ( !aSObj->_is_nil() ) { - CORBA::Object_var obj = aSObj->GetObject(); - GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(obj); - return aSMESHGen->GeomObjectToShape( aGeomObj ); - } + SALOMEDS::SObject_wrap aSObj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID(theID); + if ( !aSObj->_is_nil() ) { + CORBA::Object_var obj = aSObj->GetObject(); + GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(obj); + return aSMESHGen->GeomObjectToShape( aGeomObj ); } } return TopoDS_Shape(); @@ -173,14 +168,10 @@ static TopoDS_Shape getShapeByID (const char* theID) // static std::string getShapeNameByID (const char* theID) // { // if ( theID && strlen( theID ) > 0 ) { -// SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); -// SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy(); -// if ( !aStudy->_is_nil() ) { -// SALOMEDS::SObject_wrap aSObj = aStudy->FindObjectID(theID); -// if ( !aSObj->_is_nil() ) { -// CORBA::String_var name = aSObj->GetName(); -// return name.in(); -// } +// SALOMEDS::SObject_wrap aSObj = SMESH_Gen_i::getStudyServant()->FindObjectID(theID); +// if ( !aSObj->_is_nil() ) { +// CORBA::String_var name = aSObj->GetName(); +// return name.in(); // } // } // return ""; @@ -192,7 +183,7 @@ static TopoDS_Shape getShapeByID (const char* theID) /* Class : Functor_i - Description : An abstact class for all functors + Description : An abstract class for all functors */ Functor_i::Functor_i(): SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() ) @@ -223,16 +214,21 @@ ElementType Functor_i::GetElementType() Class : NumericalFunctor_i Description : Base class for numerical functors */ -CORBA::Double NumericalFunctor_i::GetValue( CORBA::Long theId ) +CORBA::Double NumericalFunctor_i::GetValue( SMESH::smIdType theId ) { return myNumericalFunctorPtr->GetValue( theId ); } +CORBA::Boolean NumericalFunctor_i::IsApplicable( SMESH::smIdType theElementId ) +{ + return myNumericalFunctorPtr->IsApplicable( theElementId ); +} + SMESH::Histogram* NumericalFunctor_i::GetHistogram(CORBA::Short nbIntervals, CORBA::Boolean isLogarithmic) { std::vector nbEvents; std::vector funValues; - std::vector elements; + std::vector elements; myNumericalFunctorPtr->GetHistogram(nbIntervals,nbEvents,funValues,elements,0,isLogarithmic); SMESH::Histogram_var histogram = new SMESH::Histogram; @@ -259,9 +255,9 @@ SMESH::Histogram* NumericalFunctor_i::GetLocalHistogram(CORBA::Short { SMESH::Histogram_var histogram = new SMESH::Histogram; - std::vector nbEvents; - std::vector funValues; - std::vector elements; + std::vector nbEvents; + std::vector funValues; + std::vector elements; SMDS_ElemIteratorPtr elemIt; if ( SMESH::DownCast< SMESH_GroupOnFilter_i* >( object ) || @@ -272,9 +268,9 @@ SMESH::Histogram* NumericalFunctor_i::GetLocalHistogram(CORBA::Short } else { - SMESH::SMESH_Mesh_var mesh = object->GetMesh(); - SMESH::long_array_var objNbElems = object->GetNbElementsByType(); - SMESH::long_array_var meshNbElems = mesh-> GetNbElementsByType(); + SMESH::SMESH_Mesh_var mesh = object->GetMesh(); + SMESH::smIdType_array_var objNbElems = object->GetNbElementsByType(); + SMESH::smIdType_array_var meshNbElems = mesh-> GetNbElementsByType(); if ( meshNbElems[ GetElementType() ] != objNbElems [ GetElementType() ] ) { @@ -532,6 +528,61 @@ SMESH::Length2D::Values* Length2D_i::GetValues() return aResult._retn(); } + +/* + Class : Length3D_i + Description : Functor for calculating length of edge +*/ +Length3D_i::Length3D_i() +{ + myNumericalFunctorPtr.reset( new Controls::Length3D() ); + myFunctorPtr = myNumericalFunctorPtr; +} + +FunctorType Length3D_i::GetFunctorType() +{ + return SMESH::FT_Length3D; +} + +// SMESH::Length3D::Values* Length3D_i::GetValues() +// { +// SMESH::Controls::Length3D::TValues aValues; +// (dynamic_cast(myFunctorPtr.get()))->GetValues( aValues ); + +// long i = 0, iEnd = aValues.size(); + +// SMESH::Length3D::Values_var aResult = new SMESH::Length3D::Values(iEnd); +// aResult->length(iEnd); + +// SMESH::Controls::Length3D::TValues::const_iterator anIter; +// for ( anIter = aValues.begin() ; anIter != aValues.end(); anIter++, i++ ) +// { +// const SMESH::Controls::Length3D::Value& aVal = *anIter; +// SMESH::Length3D::Value &aValue = aResult[ i ]; + +// aValue.myLength = aVal.myLength; +// aValue.myPnt1 = aVal.myPntId[ 0 ]; +// aValue.myPnt2 = aVal.myPntId[ 1 ]; +// } + +// return aResult._retn(); +// } + +/* + Class : Deflection2D_i + Description : Functor for calculating distance between a face and geometry +*/ +Deflection2D_i::Deflection2D_i() +{ + myNumericalFunctorPtr.reset( new Controls::Deflection2D() ); + myFunctorPtr = myNumericalFunctorPtr; +} + +FunctorType Deflection2D_i::GetFunctorType() +{ + return SMESH::FT_Deflection2D; +} + /* Class : MultiConnection_i Description : Functor for calculating number of faces conneted to the edge @@ -562,6 +613,21 @@ FunctorType BallDiameter_i::GetFunctorType() return SMESH::FT_BallDiameter; } +/* + Class : NodeConnectivityNumber_i + Description : Functor returning diameter of a ball element +*/ +NodeConnectivityNumber_i::NodeConnectivityNumber_i() +{ + myNumericalFunctorPtr.reset( new Controls::NodeConnectivityNumber() ); + myFunctorPtr = myNumericalFunctorPtr; +} + +FunctorType NodeConnectivityNumber_i::GetFunctorType() +{ + return SMESH::FT_NodeConnectivityNumber; +} + /* Class : MultiConnection2D_i Description : Functor for calculating number of faces conneted to the edge @@ -652,7 +718,7 @@ BadOrientedVolume_i::BadOrientedVolume_i() { Controls::PredicatePtr control( new Controls::BadOrientedVolume() ); myFunctorPtr = myPredicatePtr = control; -}; +} FunctorType BadOrientedVolume_i::GetFunctorType() { @@ -667,7 +733,7 @@ BareBorderVolume_i::BareBorderVolume_i() { Controls::PredicatePtr control( new Controls::BareBorderVolume() ); myFunctorPtr = myPredicatePtr = control; -}; +} FunctorType BareBorderVolume_i::GetFunctorType() { @@ -682,7 +748,7 @@ BareBorderFace_i::BareBorderFace_i() { Controls::PredicatePtr control( new Controls::BareBorderFace() ); myFunctorPtr = myPredicatePtr = control; -}; +} FunctorType BareBorderFace_i::GetFunctorType() { @@ -697,7 +763,7 @@ OverConstrainedVolume_i::OverConstrainedVolume_i() { Controls::PredicatePtr control( new Controls::OverConstrainedVolume() ); myFunctorPtr = myPredicatePtr = control; -}; +} FunctorType OverConstrainedVolume_i::GetFunctorType() { @@ -712,7 +778,7 @@ OverConstrainedFace_i::OverConstrainedFace_i() { Controls::PredicatePtr control( new Controls::OverConstrainedFace() ); myFunctorPtr = myPredicatePtr = control; -}; +} FunctorType OverConstrainedFace_i::GetFunctorType() { @@ -762,14 +828,10 @@ void BelongToMeshGroup_i::SetGroupID( const char* theID ) // IOR or StoreName } else if ( strncmp( "0:", myID.c_str(), 2 ) == 0 ) // transient mode + GUI { - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy(); - if ( !aStudy->_is_nil() ) { - SALOMEDS::SObject_wrap aSObj = aStudy->FindObjectID( myID.c_str() ); - if ( !aSObj->_is_nil() ) { - CORBA::Object_var obj = aSObj->GetObject(); - SetGroup( SMESH::SMESH_GroupBase::_narrow( obj )); - } + SALOMEDS::SObject_wrap aSObj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( myID.c_str() ); + if ( !aSObj->_is_nil() ) { + CORBA::Object_var obj = aSObj->GetObject(); + SetGroup( SMESH::SMESH_GroupBase::_narrow( obj )); } } else if ( !myID.empty() ) // persistent mode @@ -781,7 +843,7 @@ void BelongToMeshGroup_i::SetGroupID( const char* theID ) // IOR or StoreName std::string BelongToMeshGroup_i::GetGroupID() { if ( myGroup->_is_nil() ) - SMESH::SMESH_GroupBase_var( GetGroup() ); + SMESH::SMESH_GroupBase_var( GetGroup() ); // decref the returned pointer if ( !myGroup->_is_nil() ) myID = SMESH_Gen_i::GetORB()->object_to_string( myGroup ); @@ -795,7 +857,7 @@ SMESH::SMESH_GroupBase_ptr BelongToMeshGroup_i::GetGroup() { // search for a group in a current study SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - if ( StudyContext* sc = aSMESHGen->GetCurrentStudyContext() ) + if ( StudyContext* sc = aSMESHGen->GetStudyContext() ) { int id = 1; std::string ior; @@ -843,9 +905,7 @@ void BelongToGeom_i::SetGeom( GEOM::GEOM_Object_ptr theGeom ) { if ( theGeom->_is_nil() ) return; - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom ); + TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom ); myBelongToGeomPtr->SetGeom( aLocShape ); TPythonDump()<_is_nil() ) return; - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom ); + TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom ); if ( aLocShape.ShapeType() == TopAbs_FACE ) { @@ -1113,9 +1171,7 @@ void LyingOnGeom_i::SetGeom( GEOM::GEOM_Object_ptr theGeom ) { if ( theGeom->_is_nil() ) return; - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom ); + TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom ); myLyingOnGeomPtr->SetGeom( aLocShape ); TPythonDump()<AddToRange( theIds[ i ] ); TPythonDump()<GeomObjectToShape( vertex ); if ( shape.IsNull() ) @@ -1602,8 +1657,7 @@ void ConnectedElements_i::SetVertex( GEOM::GEOM_Object_ptr vertex ) TPythonDump() << this << ".SetVertex( " << vertex << " )"; } -void ConnectedElements_i::SetNode ( CORBA::Long nodeID ) - throw (SALOME::SALOME_Exception) +void ConnectedElements_i::SetNode ( SMESH::smIdType nodeID ) { if ( nodeID < 1 ) THROW_SALOME_CORBA_EXCEPTION( "ConnectedElements_i::SetNode(): nodeID must be > 0", @@ -1619,7 +1673,6 @@ void ConnectedElements_i::SetNode ( CORBA::Long nodeID ) */ void ConnectedElements_i::SetThreshold ( const char* threshold, SMESH::ConnectedElements::ThresholdType type ) - throw (SALOME::SALOME_Exception) { if ( !threshold ) THROW_SALOME_CORBA_EXCEPTION( "ConnectedElements_i::SetThreshold(): NULL threshold", @@ -1660,11 +1713,7 @@ void ConnectedElements_i::SetThreshold ( const char* } case SMESH::ConnectedElements::VERTEX: // get a VERTEX by its entry ///////////////// { - SALOMEDS::Study_var study = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy(); - if ( study->_is_nil() ) - THROW_SALOME_CORBA_EXCEPTION - ( "ConnectedElements_i::SetThreshold(): NULL current study", SALOME::BAD_PARAM ); - SALOMEDS::SObject_wrap sobj = study->FindObjectID( threshold ); + SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( threshold ); if ( sobj->_is_nil() ) THROW_SALOME_CORBA_EXCEPTION ( "ConnectedElements_i::SetThreshold(): invalid vertex study entry", SALOME::BAD_PARAM ); @@ -2096,6 +2145,22 @@ Length2D_ptr FilterManager_i::CreateLength2D() return anObj._retn(); } +Length3D_ptr FilterManager_i::CreateLength3D() +{ + SMESH::Length3D_i* aServant = new SMESH::Length3D_i(); + SMESH::Length3D_var anObj = aServant->_this(); + TPythonDump()<_this(); + TPythonDump()<_this(); + TPythonDump()<GetPredicate()->SetMesh( aMesh ); } -SMESH::long_array* +SMESH::smIdType_array* Filter_i:: GetIDs() { @@ -2533,11 +2606,11 @@ GetElementsId( Predicate_i* thePredicate, Controls::Filter::GetElementsId(aMesh,thePredicate->GetPredicate(),theSequence); } -SMESH::long_array* +SMESH::smIdType_array* Filter_i:: GetElementsId( SMESH_Mesh_ptr theMesh ) { - SMESH::long_array_var anArray = new SMESH::long_array; + SMESH::smIdType_array_var anArray = new SMESH::smIdType_array; if(!CORBA::is_nil(theMesh) && myPredicate){ theMesh->Load(); Controls::Filter::TIdSequence aSequence; @@ -2550,15 +2623,45 @@ GetElementsId( SMESH_Mesh_ptr theMesh ) return anArray._retn(); } +SMESH::smIdType_array* +Filter_i:: +GetElementsIdFromParts( const ListOfIDSources& theParts ) +{ + SMESH::smIdType_array_var array = new SMESH::smIdType_array; + if ( theParts.length() > 0 && myPredicate ) + { + SMESH_Mesh_ptr mesh = theParts[0]->GetMesh(); + mesh->Load(); + const SMDS_Mesh* meshDS = MeshPtr2SMDSMesh( mesh ); + Controls::Filter::TIdSequence totalSequence; + for ( CORBA::ULong i = 0; i < theParts.length(); ++i ) + { + if ( SMESH::Filter_i* filter = SMESH::DownCast( theParts[i] )) + filter->SetMesh( mesh ); + SMDS_ElemIteratorPtr iter = SMESH_Mesh_i::GetElements( theParts[i], GetElementType() ); + if ( iter && meshDS ) + { + Controls::Filter::TIdSequence sequence; + Controls::Filter::GetElementsId( meshDS, myPredicate->GetPredicate(), sequence, iter ); + totalSequence.insert( totalSequence.end(), sequence.begin(), sequence.end() ); + } + } + array->length( totalSequence.size() ); + for ( size_t i = 0; i < totalSequence.size(); ++i ) + array[ i ] = totalSequence[ i ]; + } + return array._retn(); +} + //============================================================================= /*! * \brief Returns number of mesh elements per each \a EntityType */ //============================================================================= -SMESH::long_array* ::Filter_i::GetMeshInfo() +SMESH::smIdType_array* ::Filter_i::GetMeshInfo() { - SMESH::long_array_var aRes = new SMESH::long_array(); + SMESH::smIdType_array_var aRes = new SMESH::smIdType_array(); aRes->length(SMESH::Entity_Last); for (int i = 0; i < SMESH::Entity_Last; i++) aRes[i] = 0; @@ -2584,9 +2687,9 @@ SMESH::long_array* ::Filter_i::GetMeshInfo() */ //============================================================================= -SMESH::long_array* ::Filter_i::GetNbElementsByType() +SMESH::smIdType_array* ::Filter_i::GetNbElementsByType() { - SMESH::long_array_var aRes = new SMESH::long_array(); + SMESH::smIdType_array_var aRes = new SMESH::smIdType_array(); aRes->length(SMESH::NB_ELEMENT_TYPES); for (int i = 0; i < SMESH::NB_ELEMENT_TYPES; i++) aRes[i] = 0; @@ -2594,7 +2697,7 @@ SMESH::long_array* ::Filter_i::GetNbElementsByType() if ( !CORBA::is_nil(myMesh) && myPredicate ) { const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(myMesh); SMDS_ElemIteratorPtr it = aMesh->elementsIterator( SMDSAbs_ElementType( GetElementType() )); - CORBA::Long& nbElems = aRes[ GetElementType() ]; + SMESH::smIdType& nbElems = aRes[ GetElementType() ]; while ( it->more() ) { const SMDS_MeshElement* anElem = it->next(); @@ -2931,6 +3034,12 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria case SMESH::FT_Length2D: aFunctor = aFilterMgr->CreateLength2D(); break; + case SMESH::FT_Length3D: + aFunctor = aFilterMgr->CreateLength3D(); + break; + case SMESH::FT_Deflection2D: + aFunctor = aFilterMgr->CreateDeflection2D(); + break; case SMESH::FT_AspectRatio: aFunctor = aFilterMgr->CreateAspectRatio(); break; @@ -2964,6 +3073,9 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria case SMESH::FT_BallDiameter: aFunctor = aFilterMgr->CreateBallDiameter(); break; + case SMESH::FT_NodeConnectivityNumber: + aFunctor = aFilterMgr->CreateNodeConnectivityNumber(); + break; // Predicates @@ -3423,9 +3535,11 @@ static inline LDOMString toString( CORBA::Long theType ) case FT_EqualFaces : return "Equal faces"; case FT_EqualVolumes : return "Equal volumes"; case FT_MultiConnection : return "Borders at multi-connections"; - case FT_MultiConnection2D :return "Borders at multi-connections 2D"; + case FT_MultiConnection2D : return "Borders at multi-connections 2D"; case FT_Length : return "Length"; case FT_Length2D : return "Length 2D"; + case FT_Length3D : return "Length 3D"; + case FT_Deflection2D : return "Deflection 2D"; case FT_LessThan : return "Less than"; case FT_MoreThan : return "More than"; case FT_EqualTo : return "Equal to"; @@ -3434,7 +3548,7 @@ static inline LDOMString toString( CORBA::Long theType ) case FT_LogicalOR : return "Or"; case FT_GroupColor : return "Color of Group"; case FT_LinearOrQuadratic : return "Linear or Quadratic"; - case FT_ElemGeomType : return "Element geomtry type"; + case FT_ElemGeomType : return "Element geometry type"; case FT_EntityType : return "Entity type"; case FT_Undefined : return ""; default : return ""; @@ -3474,6 +3588,8 @@ static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr ) // else if ( theStr.equals( "Borders at multi-connections 2D" ) ) return FT_MultiConnection2D; else if ( theStr.equals( "Length" ) ) return FT_Length; // else if ( theStr.equals( "Length2D" ) ) return FT_Length2D; + // else if ( theStr.equals( "Length3D" ) ) return FT_Length3D; + else if ( theStr.equals( "Deflection" ) ) return FT_Deflection2D; else if ( theStr.equals( "Range of IDs" ) ) return FT_RangeOfIds; else if ( theStr.equals( "Bad Oriented Volume" ) ) return FT_BadOrientedVolume; else if ( theStr.equals( "Volumes with bare border" ) ) return FT_BareBorderVolume; @@ -3488,7 +3604,7 @@ static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr ) else if ( theStr.equals( "Or" ) ) return FT_LogicalOR; else if ( theStr.equals( "Color of Group" ) ) return FT_GroupColor; else if ( theStr.equals( "Linear or Quadratic" ) ) return FT_LinearOrQuadratic; - else if ( theStr.equals( "Element geomtry type" ) ) return FT_ElemGeomType; + else if ( theStr.equals( "Element geometry type" ) ) return FT_ElemGeomType; else if ( theStr.equals( "Entity type" ) ) return FT_EntityType; else if ( theStr.equals( "" ) ) return FT_Undefined; else return FT_Undefined; @@ -3913,14 +4029,15 @@ CORBA::Boolean FilterLibrary_i::Save() if ( myFileName == 0 || strlen( myFileName ) == 0 ) return false; - FILE* aOutFile = fopen( myFileName, "wt" ); - if ( !aOutFile ) - return false; + std::filebuf fb; + fb.open( myFileName, std::ios::out ); + + Standard_OStream os( &fb ); - LDOM_XmlWriter aWriter( aOutFile ); + LDOM_XmlWriter aWriter; aWriter.SetIndentation( 2 ); - aWriter << myDoc; - fclose( aOutFile ); + aWriter.Write( os, myDoc ); + fb.close(); TPythonDump()<