X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Filter_i.cxx;h=523bf46770efc3b13e4f8987e3f0f9ef54c22605;hb=414745da0ea156072e608c41825eb11890bbb4b2;hp=06a6e674adbfa94dff3fea956eb0280303c8fa98;hpb=98460fb0dcb4172fd31550a60732a3b475389f7d;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_Filter_i.cxx b/src/SMESH_I/SMESH_Filter_i.cxx index 06a6e674a..523bf4677 100644 --- a/src/SMESH_I/SMESH_Filter_i.cxx +++ b/src/SMESH_I/SMESH_Filter_i.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2012 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 @@ -27,15 +27,15 @@ // #include "SMESH_Filter_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_PythonDump.hxx" - +#include "SMDS_ElemIterator.hxx" #include "SMDS_Mesh.hxx" -#include "SMDS_MeshNode.hxx" #include "SMDS_MeshElement.hxx" -#include "SMDS_ElemIterator.hxx" - +#include "SMDS_MeshNode.hxx" #include "SMESHDS_Mesh.hxx" +#include "SMESH_Gen_i.hxx" +#include "SMESH_PythonDump.hxx" + +#include #include #include @@ -487,21 +487,18 @@ static TopoDS_Shape getShapeByName( const char* theName ) { if ( theName != 0 ) { - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy(); - if (!CORBA::is_nil(aStudy)) + SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); + SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy(); + if ( !aStudy->_is_nil() ) { - SALOMEDS::Study::ListOfSObject_var aList = - aStudy->FindObjectByName( theName, "GEOM" ); + SALOMEDS::Study::ListOfSObject_var aList = aStudy->FindObjectByName( theName, "GEOM" ); if ( aList->length() > 0 ) { - GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow( aList[ 0 ]->GetObject() ); - if ( !aGeomObj->_is_nil() ) - { - GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, aGeomObj ); - return aLocShape; - } + 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; } } } @@ -510,48 +507,35 @@ static TopoDS_Shape getShapeByName( const char* theName ) static TopoDS_Shape getShapeByID (const char* theID) { - if (theID != 0 && theID != "") { - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy(); - if (aStudy != 0) { - SALOMEDS::SObject_var aSObj = aStudy->FindObjectID(theID); - SALOMEDS::GenericAttribute_var anAttr; - if (!aSObj->_is_nil() && aSObj->FindAttribute(anAttr, "AttributeIOR")) { - SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - CORBA::String_var aVal = anIOR->Value(); - CORBA::Object_var obj = aStudy->ConvertIORToObject(aVal); + 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); - - if (!aGeomObj->_is_nil()) { - GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, aGeomObj ); - return aLocShape; - } + return aSMESHGen->GeomObjectToShape( aGeomObj ); } } } return TopoDS_Shape(); } -static char* getShapeNameByID (const char* theID) +static std::string getShapeNameByID (const char* theID) { - char* aName = (char*)""; - - if (theID != 0 && theID != "") { - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy(); - if (aStudy != 0) { - //SALOMEDS::SObject_var aSObj = aStudy->FindObjectIOR( theID ); - SALOMEDS::SObject_var aSObj = aStudy->FindObjectID(theID); - SALOMEDS::GenericAttribute_var anAttr; - if (!aSObj->_is_nil() && aSObj->FindAttribute(anAttr, "AttributeName")) { - SALOMEDS::AttributeName_var aNameAttr = SALOMEDS::AttributeName::_narrow(anAttr); - aName = aNameAttr->Value(); + 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(); } } } - - return aName; + return ""; } /* @@ -866,6 +850,21 @@ FunctorType MultiConnection_i::GetFunctorType() return SMESH::FT_MultiConnection; } +/* + Class : BallDiameter_i + Description : Functor returning diameter of a ball element +*/ +BallDiameter_i::BallDiameter_i() +{ + myNumericalFunctorPtr.reset( new Controls::BallDiameter() ); + myFunctorPtr = myNumericalFunctorPtr; +} + +FunctorType BallDiameter_i::GetFunctorType() +{ + return SMESH::FT_BallDiameter; +} + /* Class : MultiConnection2D_i Description : Functor for calculating number of faces conneted to the edge @@ -1064,7 +1063,7 @@ void BelongToGeom_i::SetShape( const char* theID, const char* theName ) else myShapeID = 0; - if ( myShapeID && strcmp(myShapeName, getShapeNameByID(myShapeID)) == 0 ) + if ( myShapeID && myShapeName == getShapeNameByID(myShapeID)) myBelongToGeomPtr->SetGeom( getShapeByID(myShapeID) ); else myBelongToGeomPtr->SetGeom( getShapeByName( myShapeName ) ); @@ -1149,7 +1148,7 @@ void BelongToSurface_i::SetShape( const char* theID, const char* theName, Eleme else myShapeID = 0; - if ( myShapeID && strcmp(myShapeName, getShapeNameByID(myShapeID)) == 0 ) + if ( myShapeID && myShapeName == getShapeNameByID(myShapeID)) myElementsOnSurfacePtr->SetSurface( getShapeByID(myShapeID), (SMDSAbs_ElementType)theType ); else myElementsOnSurfacePtr->SetSurface( getShapeByName( myShapeName ), (SMDSAbs_ElementType)theType ); @@ -1319,7 +1318,7 @@ void LyingOnGeom_i::SetShape( const char* theID, const char* theName ) else myShapeID = 0; - if ( myShapeID && strcmp(myShapeName, getShapeNameByID(myShapeID)) == 0 ) + if ( myShapeID && myShapeName == getShapeNameByID(myShapeID)) myLyingOnGeomPtr->SetGeom( getShapeByID(myShapeID) ); else myLyingOnGeomPtr->SetGeom( getShapeByName( myShapeName ) ); @@ -2076,6 +2075,14 @@ MultiConnection2D_ptr FilterManager_i::CreateMultiConnection2D() return anObj._retn(); } +BallDiameter_ptr FilterManager_i::CreateBallDiameter() +{ + SMESH::BallDiameter_i* aServant = new SMESH::BallDiameter_i(); + SMESH::BallDiameter_var anObj = aServant->_this(); + TPythonDump()<CreateMaxElementLength3D(); break; + case SMESH::FT_BallDiameter: + aFunctor = aFilterMgr->CreateBallDiameter(); + break; // Predicates @@ -3858,17 +3868,51 @@ static const char** getFunctNames() static const char* functName[ SMESH::FT_Undefined + 1 ] = { // IT's necessary to update this array according to enum FunctorType (SMESH_Filter.idl) // The order is IMPORTANT !!! - "FT_AspectRatio", "FT_AspectRatio3D", "FT_Warping", "FT_MinimumAngle", - "FT_Taper", "FT_Skew", "FT_Area", "FT_Volume3D", "FT_MaxElementLength2D", - "FT_MaxElementLength3D", "FT_FreeBorders", "FT_FreeEdges", "FT_FreeNodes", - "FT_FreeFaces","FT_EqualNodes","FT_EqualEdges","FT_EqualFaces","FT_EqualVolumes", - "FT_MultiConnection", "FT_MultiConnection2D", "FT_Length", - "FT_Length2D", "FT_BelongToGeom", "FT_BelongToPlane", "FT_BelongToCylinder", - "FT_BelongToGenSurface", "FT_LyingOnGeom", "FT_RangeOfIds", "FT_BadOrientedVolume", - "FT_BareBorderVolume", "FT_BareBorderFace", "FT_OverConstrainedVolume", - "FT_OverConstrainedFace", "FT_LinearOrQuadratic", "FT_GroupColor", "FT_ElemGeomType", - "FT_CoplanarFaces", "FT_LessThan", "FT_MoreThan", "FT_EqualTo", "FT_LogicalNOT", - "FT_LogicalAND", "FT_LogicalOR", "FT_Undefined" }; + "FT_AspectRatio", + "FT_AspectRatio3D", + "FT_Warping", + "FT_MinimumAngle", + "FT_Taper", + "FT_Skew", + "FT_Area", + "FT_Volume3D", + "FT_MaxElementLength2D", + "FT_MaxElementLength3D", + "FT_FreeBorders", + "FT_FreeEdges", + "FT_FreeNodes", + "FT_FreeFaces", + "FT_EqualNodes", + "FT_EqualEdges", + "FT_EqualFaces", + "FT_EqualVolumes", + "FT_MultiConnection", + "FT_MultiConnection2D", + "FT_Length", + "FT_Length2D", + "FT_BelongToGeom", + "FT_BelongToPlane", + "FT_BelongToCylinder", + "FT_BelongToGenSurface", + "FT_LyingOnGeom", + "FT_RangeOfIds", + "FT_BadOrientedVolume", + "FT_BareBorderVolume", + "FT_BareBorderFace", + "FT_OverConstrainedVolume", + "FT_OverConstrainedFace", + "FT_LinearOrQuadratic", + "FT_GroupColor", + "FT_ElemGeomType", + "FT_CoplanarFaces", + "FT_BallDiameter", + "FT_LessThan", + "FT_MoreThan", + "FT_EqualTo", + "FT_LogicalNOT", + "FT_LogicalAND", + "FT_LogicalOR", + "FT_Undefined" }; return functName; }