From 49fd9a633010734d8dedb18038e5a25ce5c07e90 Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 7 May 2020 19:49:06 +0300 Subject: [PATCH] Prevent processing SHAPERSTUDY objects` --- src/EntityGUI/EntityGUI.cxx | 11 +++++---- src/EntityGUI/EntityGUI_FieldDlg.cxx | 20 +++++++++------- src/EntityGUI/EntityGUI_SubShapeDlg.cxx | 1 + src/GEOMBase/GEOMBase.cxx | 10 ++++---- src/GEOMGUI/GEOMGUI_AnnotationMgr.h | 2 +- src/GEOMGUI/GEOMGUI_Selection.cxx | 2 +- src/GEOMGUI/GEOM_Displayer.cxx | 5 ++-- src/GEOMGUI/GeometryGUI.cxx | 13 +++++++++- src/GEOMGUI/GeometryGUI.h | 3 ++- src/GEOMToolsGUI/GEOMToolsGUI.cxx | 2 +- src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 4 ++-- src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx | 4 ++-- .../GEOM_Swig_LocalSelector.cxx | 24 +++++++++---------- src/GroupGUI/GroupGUI_GroupDlg.cxx | 1 + src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx | 1 + 15 files changed, 60 insertions(+), 43 deletions(-) diff --git a/src/EntityGUI/EntityGUI.cxx b/src/EntityGUI/EntityGUI.cxx index 9a6ad4dab..5d470125c 100644 --- a/src/EntityGUI/EntityGUI.cxx +++ b/src/EntityGUI/EntityGUI.cxx @@ -141,14 +141,16 @@ bool EntityGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) GEOM::GEOM_FieldStep_var step; SalomeApp_Study* study = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - if ( aList.Extent() > 0 && study ) { + if ( study ) for ( ; anIter.More(); anIter.Next() ) { Handle(SALOME_InteractiveObject) anIObj = anIter.Value(); if ( !anIObj.IsNull() && anIObj->hasEntry() ) - if ( _PTR(SObject) obj = study->studyDS()->FindObjectID( anIObj->getEntry() )) + { + _PTR(SObject) obj = study->studyDS()->FindObjectID( anIObj->getEntry() ); + if ( GeometryGUI::IsInGeomComponent( obj )) { - CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( obj ); + CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( obj ); GEOM::GEOM_BaseObject_var bo = GEOM::GEOM_BaseObject::_narrow( corbaObj ); GEOM::GEOM_Field_var f; GEOM::GEOM_FieldStep_var s; @@ -173,9 +175,8 @@ bool EntityGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) field = f; } } + } } - } - if ( !field->_is_nil()) { int stepID; if ( !step->_is_nil() ) { diff --git a/src/EntityGUI/EntityGUI_FieldDlg.cxx b/src/EntityGUI/EntityGUI_FieldDlg.cxx index 4113d1845..d3efa0a7b 100644 --- a/src/EntityGUI/EntityGUI_FieldDlg.cxx +++ b/src/EntityGUI/EntityGUI_FieldDlg.cxx @@ -1478,6 +1478,7 @@ int EntityGUI_FieldDlg::getSelectedSubshapes (TColStd_IndexedMapOfInteger& theMa _PTR(Study) aStudy = appStudy->studyDS(); _PTR(SObject) aSObj (aStudy->FindObjectID(anEntry.toUtf8().constData())); + if ( ! GeometryGUI::IsInGeomComponent( aSObj )) continue; GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObj)); TopoDS_Shape aShape; @@ -1773,20 +1774,21 @@ void EntityGUI_FieldDlg::highlightSubShapes() CORBA::String_var aMainEntry = myShape->GetStudyEntry(); _PTR(SObject) aSObj = aStudy->FindObjectID( aMainEntry.in() ); _PTR(ChildIterator) anIt = aStudy->NewChildIterator(aSObj); - for (anIt->InitEx(true); anIt->More(); anIt->Next()) { - GEOM::GEOM_Object_var aChild = - GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(anIt->Value())); - if (!CORBA::is_nil(aChild)) { - int index = aLocOp->GetSubShapeIndex(myShape, aChild); - if ( anIds.Contains( index )) { - CORBA::String_var aChildEntry = aChild->GetStudyEntry(); - //childsMap.insert(index, aChildEntry.in()); + if ( GeometryGUI::IsInGeomComponent( aSObj )) + for (anIt->InitEx(true); anIt->More(); anIt->Next()) { + GEOM::GEOM_Object_var aChild = + GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(anIt->Value())); + if (!CORBA::is_nil(aChild)) { + int index = aLocOp->GetSubShapeIndex(myShape, aChild); + if ( anIds.Contains( index )) { + CORBA::String_var aChildEntry = aChild->GetStudyEntry(); + //childsMap.insert(index, aChildEntry.in()); Handle(SALOME_InteractiveObject) tmpIO = new SALOME_InteractiveObject( aChildEntry.in(), "GEOM", "TEMP_IO"); aSelList.Append(tmpIO); + } } } - } } AIS_ListIteratorOfListOfInteractive ite (List); diff --git a/src/EntityGUI/EntityGUI_SubShapeDlg.cxx b/src/EntityGUI/EntityGUI_SubShapeDlg.cxx index 0e5a265d6..541581d0e 100644 --- a/src/EntityGUI/EntityGUI_SubShapeDlg.cxx +++ b/src/EntityGUI/EntityGUI_SubShapeDlg.cxx @@ -694,6 +694,7 @@ int EntityGUI_SubShapeDlg::getSelectedSubshapes (TColStd_IndexedMapOfInteger& th _PTR(Study) aStudy = appStudy->studyDS(); _PTR(SObject) aSObj (aStudy->FindObjectID(anEntry.toUtf8().constData())); + if ( ! GeometryGUI::IsInGeomComponent( aSObj )) continue; GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObj)); TopoDS_Shape aShape; diff --git a/src/GEOMBase/GEOMBase.cxx b/src/GEOMBase/GEOMBase.cxx index 13e293060..3b96a5331 100644 --- a/src/GEOMBase/GEOMBase.cxx +++ b/src/GEOMBase/GEOMBase.cxx @@ -450,12 +450,11 @@ GEOM::GEOM_Object_ptr GEOMBase::ConvertIOinGEOMObject( const Handle(SALOME_Inter SalomeApp_Study* study = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); if ( study ) { _PTR(Study) studyDS = study->studyDS(); - _PTR(SObject) obj( studyDS->FindObjectID( IO->getEntry() ) ); - if ( obj ) { - CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( obj ); - if ( !CORBA::is_nil( corbaObj ) ) + _PTR(SObject) obj = studyDS->FindObjectID( IO->getEntry() ); + if ( GeometryGUI::IsInGeomComponent( obj )) { + CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( obj ); object = GEOM::GEOM_Object::_narrow( corbaObj ); - } + } } } return object._retn(); @@ -489,7 +488,6 @@ void GEOMBase::ConvertListOfIOInListOfGO( const SALOME_ListIO& IObjects, } } - //================================================================================= // function : CreateArrowForLinearEdge() // purpose : Create a cone topology to be used to display an arrow in the middle diff --git a/src/GEOMGUI/GEOMGUI_AnnotationMgr.h b/src/GEOMGUI/GEOMGUI_AnnotationMgr.h index bf79aa7b4..30a92ee4b 100644 --- a/src/GEOMGUI/GEOMGUI_AnnotationMgr.h +++ b/src/GEOMGUI/GEOMGUI_AnnotationMgr.h @@ -38,7 +38,7 @@ class GEOM_Annotation; class GEOM_Displayer; /*! - * \brief A help class to process visualizatin of annotation presentations. + * \brief A help class to process visualization of annotation presentations. * It contains a map of presentations shown in each viewer. * and correct 2D position persistent properties of annotations of active viewer. * When the viewer is closed, information about the viewer is removed from the manager diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx index 32eaabf87..64193d83d 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.cxx +++ b/src/GEOMGUI/GEOMGUI_Selection.cxx @@ -132,7 +132,7 @@ void GEOMGUI_Selection::init( const QString& context, LightApp_SelectionMgr* sel QString anEntry = entry( idx ); if ( study && !anEntry.isEmpty() ) { _PTR(SObject) aSO( study->FindObjectID( anEntry.toStdString() ) ); - if ( aSO ) { + if ( GeometryGUI::IsInGeomComponent( aSO )) { CORBA::Object_var varObj = GeometryGUI::ClientSObjectToObject( aSO ); myObjects[idx] = GEOM::GEOM_BaseObject::_narrow( varObj ); } diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index 5c9236b76..f311ea4dc 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -1765,7 +1765,7 @@ SALOME_Prs* GEOM_Displayer::buildPresentation( const QString& entry, if ( getStudy() ) { _PTR(SObject) SO ( getStudy()->studyDS()->FindObjectID( theIO->getEntry() ) ); - if ( SO ) + if ( SO ) //GeometryGUI::IsInGeomComponent( SO )) { // get CORBA reference to data object CORBA::Object_var object = GeometryGUI::ClientSObjectToObject(SO); @@ -2377,6 +2377,7 @@ void GEOM_Displayer::setFieldStepInfo( const GEOM::field_data_type theFieldDataT bool GEOM_Displayer::canBeDisplayed( const QString& entry, const QString& viewer_type ) const { _PTR(SObject) anObj = getStudy()->studyDS()->FindObjectID( (const char*)entry.toUtf8() ); + //if ( ! GeometryGUI::IsInGeomComponent( anObj )) return false; GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(anObj)); // enable displaying of GEOM objects GEOM::GEOM_FieldStep_var aFieldStepObj = GEOM::GEOM_FieldStep::_narrow(GeometryGUI::ClientSObjectToObject(anObj)); // enable displaying of GEOM field steps GEOM::GEOM_Gen_var aCompObj = GEOM::GEOM_Gen::_narrow(GeometryGUI::ClientSObjectToObject(anObj)); // enable displaying of whole GEOM component @@ -2538,7 +2539,7 @@ PropMap GEOM_Displayer::getObjectProperties( const QString& entry, if ( !entry.isEmpty() ) { // get CORBA reference to geom object _PTR(SObject) SO( getStudy()->studyDS()->FindObjectID( entry.toStdString() ) ); - if ( SO ) { + if ( SO ) { //GeometryGUI::IsInGeomComponent( SO )) { CORBA::Object_var object = GeometryGUI::ClientSObjectToObject( SO ); if ( !CORBA::is_nil( object ) ) { GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_narrow( object ); diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index b4eb41733..c92b77b6d 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -176,6 +176,17 @@ CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject) } return anObj._retn(); } +//================================================================================= +// function : IsInGeomComponent +// purpose : Check if an SObject is under GEOM component +//================================================================================= +bool GeometryGUI::IsInGeomComponent( _PTR(SObject) sobject ) +{ + if ( sobject ) + if ( _PTR(SComponent) aComp = sobject->GetFatherComponent() ) + return aComp->ComponentDataType() == "GEOM"; + return false; +} //======================================================================= // function : GetStudy @@ -2128,7 +2139,7 @@ void GeometryGUI::updateCreationInfo() Handle(SALOME_InteractiveObject) io = selIt.Value(); if ( !io->hasEntry() ) continue; _PTR(SObject) sobj = study->FindObjectID( io->getEntry() ); - if ( !sobj ) continue; + if ( !GeometryGUI::IsInGeomComponent( sobj )) continue; CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj ); GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj ); if ( !gobj->_is_nil() ) diff --git a/src/GEOMGUI/GeometryGUI.h b/src/GEOMGUI/GeometryGUI.h index 514293af4..e2efd421f 100644 --- a/src/GEOMGUI/GeometryGUI.h +++ b/src/GEOMGUI/GeometryGUI.h @@ -89,9 +89,10 @@ public: static bool InitGeomGen(); - static GEOM::GEOM_Gen_var GetGeomGen(); + static GEOM::GEOM_Gen_var GetGeomGen(); static CORBA::Object_var ClientSObjectToObject (_PTR(SObject) theSObject); + static bool IsInGeomComponent( _PTR(SObject) theSObject ); static SALOMEDS::Study_var getStudyServant(); static void Modified( bool = true ); diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index 4894ccf3e..5be561172 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx @@ -94,7 +94,7 @@ static bool inUse( const QString& component, const QMap& object for ( oit = objects.begin(); oit != objects.end(); ++oit ) { _PTR(SObject) so = study->FindObjectID( oit.key().toUtf8().data() ); - if ( !so ) + if ( !GeometryGUI::IsInGeomComponent( so )) continue; aSelectedSO.push_back(so); CORBA::Object_var corbaObj_rem = GeometryGUI::ClientSObjectToObject( so ); diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx index ec61696f9..42790af11 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx @@ -160,7 +160,7 @@ void GEOMToolsGUI::OnAutoColor() _PTR(Study) aStudy = appStudy->studyDS(); _PTR(SObject) aMainSObject(aStudy->FindObjectID(anIObject->getEntry())); GEOM::GEOM_Object_var aMainObject = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aMainSObject)); - if (CORBA::is_nil(aMainObject)) return; + if (CORBA::is_nil(aMainObject) || !GeometryGUI::IsInGeomComponent( aMainSObject )) return; aMainObject->SetAutoColor( true ); @@ -229,7 +229,7 @@ void GEOMToolsGUI::OnDisableAutoColor() _PTR(Study) aStudy = appStudy->studyDS(); _PTR(SObject) aMainSObject( aStudy->FindObjectID( anIObject->getEntry() ) ); GEOM::GEOM_Object_var aMainObject = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aMainSObject)); - if( CORBA::is_nil( aMainObject ) ) + if( CORBA::is_nil( aMainObject ) || !GeometryGUI::IsInGeomComponent( aMainSObject )) return; aMainObject->SetAutoColor( false ); diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx index 1af76cae1..ee1d7a17d 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx @@ -220,7 +220,7 @@ void GEOMToolsGUI_MarkerDlg::accept() _PTR(SObject) aSObject( study->FindObjectID( it.Value()->getEntry() ) ); GEOM::GEOM_Object_var anObject = GEOM::GEOM_Object::_narrow( GeometryGUI::ClientSObjectToObject( aSObject ) ); - if ( !anObject->_is_nil() ) { + if ( !anObject->_is_nil() && GeometryGUI::IsInGeomComponent( aSObject )) { if ( myWGStack->currentIndex() == 0 ) { anObject->SetMarkerStd( getMarkerType(), getStandardMarkerScale() ); QString aMarker = "%1%2%3"; @@ -296,7 +296,7 @@ void GEOMToolsGUI_MarkerDlg::init() _PTR(SObject) aSObject( study->FindObjectID( it.Value()->getEntry() ) ); GEOM::GEOM_Object_var anObject = GEOM::GEOM_Object::_narrow( GeometryGUI::ClientSObjectToObject( aSObject ) ); - if ( !anObject->_is_nil() ) { + if ( !anObject->_is_nil() && GeometryGUI::IsInGeomComponent( aSObject )) { GEOM::marker_type mtype = anObject->GetMarkerType(); if ( aType == -1 ) aType = mtype; diff --git a/src/GEOM_SWIG_WITHIHM/GEOM_Swig_LocalSelector.cxx b/src/GEOM_SWIG_WITHIHM/GEOM_Swig_LocalSelector.cxx index a243872c6..df299aede 100644 --- a/src/GEOM_SWIG_WITHIHM/GEOM_Swig_LocalSelector.cxx +++ b/src/GEOM_SWIG_WITHIHM/GEOM_Swig_LocalSelector.cxx @@ -41,20 +41,20 @@ GEOM_Swig_LocalSelector::GEOM_Swig_LocalSelector(QWidget* parent, SUIT_ViewWindo SalomeApp_Study* study = dynamic_cast(SUIT_Session::session()->activeApplication()->activeStudy()); if (study) + { + _PTR(Study) studyDS = study->studyDS(); + _PTR(SObject) obj( studyDS->FindObjectID( shapeEntry ) ); + if ( GeometryGUI::IsInGeomComponent( obj )) { - _PTR(Study) studyDS = study->studyDS(); - _PTR(SObject) obj( studyDS->FindObjectID( shapeEntry ) ); - if (obj) - { - CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject(obj); - if (!CORBA::is_nil(corbaObj)) - { - myObject = GEOM::GEOM_Object::_narrow(corbaObj); - shapeName = myObject->GetName(); - MESSAGE("shapeName: " << shapeName); - } - } + CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject(obj); + if (!CORBA::is_nil(corbaObj)) + { + myObject = GEOM::GEOM_Object::_narrow(corbaObj); + shapeName = myObject->GetName(); + MESSAGE("shapeName: " << shapeName); + } } + } std::list modes; modes.push_back(mode); diff --git a/src/GroupGUI/GroupGUI_GroupDlg.cxx b/src/GroupGUI/GroupGUI_GroupDlg.cxx index 7c7dc925d..6f8f529ea 100644 --- a/src/GroupGUI/GroupGUI_GroupDlg.cxx +++ b/src/GroupGUI/GroupGUI_GroupDlg.cxx @@ -876,6 +876,7 @@ int GroupGUI_GroupDlg::getSelectedSubshapes (TColStd_IndexedMapOfInteger& theMap _PTR(Study) aStudy = appStudy->studyDS(); _PTR(SObject) aSObj (aStudy->FindObjectID(anEntry.toUtf8().constData())); + if ( ! GeometryGUI::IsInGeomComponent( aSObj )) continue; GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObj)); TopoDS_Shape aShape; diff --git a/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx b/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx index 67710eb73..52cd67b7b 100644 --- a/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx +++ b/src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx @@ -224,6 +224,7 @@ void RepairGUI_SuppressFacesDlg::SelectionIntoArgument() QString anEntry = anIO->getEntry(); _PTR(SObject) aSObj (aStudy->FindObjectID(anEntry.toUtf8().constData())); + if ( ! GeometryGUI::IsInGeomComponent( aSObj )) continue; GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObj)); TopoDS_Shape aShape; -- 2.39.2