#19078 [CEA] Mesh Group - Group on filter

fix places where component name "GEOM" is used
This commit is contained in:
eap 2020-05-08 19:27:33 +03:00
parent 20d7486abe
commit 4d658cb770
9 changed files with 59 additions and 83 deletions

View File

@ -28,6 +28,7 @@
#include <SalomeApp_Application.h> #include <SalomeApp_Application.h>
#include <SUIT_Session.h> #include <SUIT_Session.h>
#include <GEOMBase.h>
#include <GEOMImpl_Types.hxx> #include <GEOMImpl_Types.hxx>
#include <GEOM_Client.hxx> #include <GEOM_Client.hxx>
#include <GEOM_wrap.hxx> #include <GEOM_wrap.hxx>
@ -144,7 +145,8 @@ std::string GeomSelectionTools::getEntryOfObject(Handle(SALOME_InteractiveObject
* @param entry the entry of the object * @param entry the entry of the object
* @return the name of the object * @return the name of the object
*/ */
std::string GeomSelectionTools::getNameFromEntry(std::string entry){ std::string GeomSelectionTools::getNameFromEntry(const std::string& entry)
{
std::string name = ""; std::string name = "";
_PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry); _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry);
if (aSO){ if (aSO){
@ -186,57 +188,38 @@ std::string GeomSelectionTools::getFirstSelectedComponentDataType()
* Retrieve the shape type from the entry * Retrieve the shape type from the entry
* @return the shape type from the entry, return TopAbs_SHAPE if the object does not define a shape or a group. * @return the shape type from the entry, return TopAbs_SHAPE if the object does not define a shape or a group.
*/ */
TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(const std::string& entry)
// MESSAGE("GeomSelectionTools::entryToShapeType"<<entry ); {
TopoDS_Shape S = TopoDS_Shape();
TopAbs_ShapeEnum ShapeType = TopAbs_SHAPE; TopAbs_ShapeEnum ShapeType = TopAbs_SHAPE;
_PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry); if ( _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry))
if (aSO){ {
_PTR(SObject) aRefSObj; _PTR(SObject) aRefSObj;
GEOM::GEOM_Object_var aShape; if ( aSO->ReferencedObject( aRefSObj )) // If selected object is a reference
// MESSAGE("Got a SO");
// If selected object is a reference
if ( aSO->ReferencedObject( aRefSObj ))
aSO = aRefSObj; aSO = aRefSObj;
// MESSAGE("aSO->GetFatherComponent()->ComponentDataType(): " << aSO->GetFatherComponent()->ComponentDataType()); GEOM::GEOM_Object_var aShape = SMESH::SObjectToInterface<GEOM::GEOM_Object>(aSO);
std::string aComponentType = aSO->GetFatherComponent()->ComponentDataType(); if ( !aShape->_is_nil() )
if (aComponentType == "GEOM" || aComponentType == "SHAPERSTUDY") {
aShape = SMESH::SObjectToInterface<GEOM::GEOM_Object>(aSO); ShapeType= (TopAbs_ShapeEnum)aShape->GetShapeType();
if ( !aShape->_is_nil() ){ // if the Geom Object is a group
// MESSAGE("Got the Geom Object "); if (aShape->GetType() == GEOM_GROUP)
// MESSAGE("Geom Object Type "<< aShape->GetType()); {
SalomeApp_Application* anApp = GetSalomeApplication(); GEOM::GEOM_Gen_var _geomEngine = aShape->GetGen();
if (anApp) { GEOM::GEOM_IGroupOperations_wrap aGroupOp = _geomEngine->GetIGroupOperations();
// MESSAGE("Got Application"); ShapeType= (TopAbs_ShapeEnum)aGroupOp->GetType(aShape);
Engines::EngineComponent_var component = anApp->lcc()->FindOrLoad_Component( "FactoryServer", aComponentType.c_str()); }
GEOM::GEOM_Gen_var _geomEngine = GEOM::GEOM_Gen::_narrow(component); // if not
// MESSAGE("Got GEOM engine"); else if ( ShapeType == TopAbs_COMPOUND )
// if the Geom Object is a group {
if (aShape->GetType() == GEOM_GROUP){ TopoDS_Shape shape;
// MESSAGE("It's a group"); if (GEOMBase::GetShape(aShape, shape))
GEOM::GEOM_IGroupOperations_wrap aGroupOp = {
_geomEngine->GetIGroupOperations(); TopoDS_Iterator it( shape );
ShapeType= (TopAbs_ShapeEnum)aGroupOp->GetType(aShape); if ( it.More() )
} ShapeType = it.Value().ShapeType();
// if not
else {
GEOM_Client* aClient = new GEOM_Client();
if ( aClient && !_geomEngine->_is_nil() ) {
// MESSAGE("GEOM client is OK and GEOM engine is not null");
S = aClient->GetShape( _geomEngine, aShape );
ShapeType=S.ShapeType();
if ( ShapeType == TopAbs_COMPOUND )
{
TopoDS_Iterator it( S );
if ( it.More() )
ShapeType = it.Value().ShapeType();
}
}
} }
} }
} }
} }
// MESSAGE("ShapeType returned is " << ShapeType);
return ShapeType; return ShapeType;
} }
@ -246,9 +229,8 @@ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){
*/ */
TopAbs_ShapeEnum GeomSelectionTools:: getFirstSelectedShapeType() TopAbs_ShapeEnum GeomSelectionTools:: getFirstSelectedShapeType()
{ {
Handle(SALOME_InteractiveObject) anIO; Handle(SALOME_InteractiveObject) anIO=GeomSelectionTools::getFirstSelectedSalomeObject();
anIO=GeomSelectionTools::getFirstSelectedSalomeObject(); return entryToShapeType(anIO->getEntry());
return entryToShapeType(anIO->getEntry());
} }
/*! /*!

View File

@ -58,10 +58,10 @@ public:
Handle(SALOME_InteractiveObject) getFirstSelectedSalomeObject(); Handle(SALOME_InteractiveObject) getFirstSelectedSalomeObject();
std::string getFirstSelectedEntry(); std::string getFirstSelectedEntry();
std::string getEntryOfObject(Handle(SALOME_InteractiveObject)); std::string getEntryOfObject(Handle(SALOME_InteractiveObject));
std::string getNameFromEntry(std::string); std::string getNameFromEntry(const std::string& );
std::string getFirstSelectedComponentDataType(); std::string getFirstSelectedComponentDataType();
TopAbs_ShapeEnum getFirstSelectedShapeType(); TopAbs_ShapeEnum getFirstSelectedShapeType();
TopAbs_ShapeEnum entryToShapeType(std::string ); TopAbs_ShapeEnum entryToShapeType(const std::string& );
GeomAbs_SurfaceType getFaceInformation(TopoDS_Shape); GeomAbs_SurfaceType getFaceInformation(TopoDS_Shape);
}; };

View File

@ -107,17 +107,14 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const
return false; return false;
// Get GEOM engine // Get GEOM engine
Engines::EngineComponent_var comp = GEOM::GEOM_Gen_var geomEngine = aGeomObj->GetGen();
SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" ); if ( CORBA::is_nil( geomEngine ))
GEOM::GEOM_Gen_var geomEngine = GEOM::GEOM_Gen::_narrow( comp );
if ( CORBA::is_nil( geomEngine ) )
return false; return false;
// Get shape from geom object and verify its parameters // Get shape from geom object and verify its parameters
GEOM_Client aGeomClient; GEOM_Client aGeomClient;
TopoDS_Shape aShape = aGeomClient.GetShape(geomEngine.in(), aGeomObj); TopoDS_Shape aShape = aGeomClient.GetShape(geomEngine.in(), aGeomObj);
if (aShape.IsNull() || if (aShape.IsNull() || !myShapeTypes.Contains(aShape.ShapeType()))
!myShapeTypes.Contains(aShape.ShapeType()))
return false; return false;
if (myIsClosedOnly && aShape.ShapeType() == TopAbs_SHELL && !aShape.Closed()) if (myIsClosedOnly && aShape.ShapeType() == TopAbs_SHELL && !aShape.Closed())
@ -129,16 +126,11 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const
if (aMainShape.IsNull()) if (aMainShape.IsNull())
return false; return false;
bool isFound = false; TopExp_Explorer anExp (aMainShape, aShape.ShapeType());
TopAbs_ShapeEnum aShapeType = aShape.ShapeType(); for (; anExp.More(); anExp.Next())
TopExp_Explorer anExp (aMainShape, aShapeType); if (anExp.Current() == aShape)
for (; anExp.More(); anExp.Next()) {
if (anExp.Current() == aShape) {
isFound = true;
break; break;
} if (!anExp.More())
}
if (!isFound)
return false; return false;
} }

View File

@ -97,12 +97,12 @@
#include "SMESH_version.h" #include "SMESH_version.h"
#include "SMESH_ControlsDef.hxx"
#include "SMESH_Actor.h" #include "SMESH_Actor.h"
#include "SMESH_ActorUtils.h" #include "SMESH_ActorUtils.h"
#include "SMESH_Client.hxx" #include "SMESH_Client.hxx"
#include "SMESH_Comment.hxx"
#include "SMESH_ControlsDef.hxx"
#include "SMESH_ScalarBarActor.h" #include "SMESH_ScalarBarActor.h"
#include <SMESH_Comment.hxx>
#include "SMESH_TypeFilter.hxx" #include "SMESH_TypeFilter.hxx"
// SALOME GUI includes // SALOME GUI includes
@ -5068,8 +5068,9 @@ bool SMESHGUI::isSelectionCompatible()
SALOME_ListIteratorOfListIO It( selected ); SALOME_ListIteratorOfListIO It( selected );
for ( ; isCompatible && It.More(); It.Next()) for ( ; isCompatible && It.More(); It.Next())
isCompatible = isCompatible =
( strcmp("GEOM", It.Value()->getComponentDataType()) == 0 ) || ( strcmp("GEOM", It.Value()->getComponentDataType()) == 0 ) ||
( strcmp("SMESH", It.Value()->getComponentDataType()) == 0 ); ( strcmp("SHAPERSTUDY", It.Value()->getComponentDataType()) == 0 ) ||
( strcmp("SMESH", It.Value()->getComponentDataType()) == 0 );
return isCompatible; return isCompatible;
} }
@ -6332,8 +6333,6 @@ void SMESHGUI::restoreVisualParameters (int savePoint)
// componentName is used for encoding of entries when storing them in IParameters // componentName is used for encoding of entries when storing them in IParameters
std::string componentName = myComponentSMESH->ComponentDataType(); std::string componentName = myComponentSMESH->ComponentDataType();
//_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
//if (!aSComponent) return;
// IParameters // IParameters
_PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative", _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",

View File

@ -3203,6 +3203,8 @@ bool SMESHGUI_FilterDlg::isValid() const
myTable->GetThreshold(i, aName); myTable->GetThreshold(i, aName);
std::vector<_PTR(SObject)> aList = SMESH::getStudy()->FindObjectByName(aName.toUtf8().constData(), "GEOM"); std::vector<_PTR(SObject)> aList = SMESH::getStudy()->FindObjectByName(aName.toUtf8().constData(), "GEOM");
if (aList.size() == 0)
aList = SMESH::getStudy()->FindObjectByName(aName.toUtf8().constData(), "SHAPERSTUDY");
if (aList.size() == 0) { if (aList.size() == 0) {
SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"),
tr("BAD_SHAPE_NAME").arg(aName)); tr("BAD_SHAPE_NAME").arg(aName));

View File

@ -137,6 +137,8 @@ static TopoDS_Shape getShapeByName( const char* theName )
{ {
SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
SALOMEDS::Study::ListOfSObject_var aList = SMESH_Gen_i::getStudyServant()->FindObjectByName( theName, "GEOM" ); SALOMEDS::Study::ListOfSObject_var aList = SMESH_Gen_i::getStudyServant()->FindObjectByName( theName, "GEOM" );
if ( aList->length() == 0 )
aList = SMESH_Gen_i::getStudyServant()->FindObjectByName( theName, "SHAPERSTUDY" );
if ( aList->length() > 0 ) if ( aList->length() > 0 )
{ {
CORBA::Object_var anObj = aList[ 0 ]->GetObject(); CORBA::Object_var anObj = aList[ 0 ]->GetObject();

View File

@ -196,10 +196,15 @@ bool SMESH_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
SALOMEDS::SObject_ptr SMESH_Gen_i::ObjectToSObject(CORBA::Object_ptr theObject) SALOMEDS::SObject_ptr SMESH_Gen_i::ObjectToSObject(CORBA::Object_ptr theObject)
{ {
SALOMEDS::SObject_wrap aSO; SALOMEDS::SObject_wrap aSO;
if ( !CORBA::is_nil( theObject )) try {
if ( !CORBA::is_nil( theObject ))
{
CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theObject );
aSO = getStudyServant()->FindObjectIOR( objStr.in() );
}
}
catch (...)
{ {
CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theObject );
aSO = getStudyServant()->FindObjectIOR( objStr.in() );
} }
return aSO._retn(); return aSO._retn();
} }

View File

@ -955,9 +955,7 @@ QFrame* StdMeshersGUI_CartesianParamCreator::buildFrame()
if ( !shapeEntry.isEmpty() ) if ( !shapeEntry.isEmpty() )
{ {
// find origin // find origin
Handle(SALOME_InteractiveObject) io = GEOM::GEOM_Object_var geomObj = SMESH::EntryToInterface<GEOM::GEOM_Object>( shapeEntry );
new SALOME_InteractiveObject( shapeEntry.toStdString().c_str(), "GEOM" );
GEOM::GEOM_Object_var geomObj = SMESH::IObjectToInterface<GEOM::GEOM_Object>( io );
if ( GEOMBase::GetShape( geomObj, shape ) && !shape.IsNull()) if ( GEOMBase::GetShape( geomObj, shape ) && !shape.IsNull())
{ {
Bnd_Box box; Bnd_Box box;
@ -1394,9 +1392,7 @@ void StdMeshersGUI_CartesianParamCreator::onOptimalAxes(bool)
if ( shapeEntry.isEmpty() ) if ( shapeEntry.isEmpty() )
return; return;
Handle(SALOME_InteractiveObject) io = GEOM::GEOM_Object_var geomObj = SMESH::EntryToInterface<GEOM::GEOM_Object>( shapeEntry );
new SALOME_InteractiveObject( shapeEntry.toStdString().c_str(), "GEOM" );
GEOM::GEOM_Object_var geomObj = SMESH::IObjectToInterface<GEOM::GEOM_Object>( io );
if ( geomObj->_is_nil() ) if ( geomObj->_is_nil() )
return; return;

View File

@ -288,9 +288,7 @@ QString StdMeshersGUI_QuadrangleParamCreator::storeParams() const
{ {
QListWidgetItem* item = myShapesList->item(i); QListWidgetItem* item = myShapesList->item(i);
QString entry = item->data( Qt::UserRole ).toString(); QString entry = item->data( Qt::UserRole ).toString();
Handle(SALOME_InteractiveObject) io = GEOM::GEOM_Object_var go = SMESH::EntryToInterface<GEOM::GEOM_Object>( entry );
new SALOME_InteractiveObject( entry.toStdString().c_str(), "GEOM" );
GEOM::GEOM_Object_var go = GEOMBase::ConvertIOinGEOMObject( io );
if ( !go->_is_nil() ) if ( !go->_is_nil() )
goList[ nbShapes++ ] = go; goList[ nbShapes++ ] = go;
} }