X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMToolsGUI%2FGEOMToolsGUI.cxx;h=39022be14fe8b2d8cdf4d9877ce83a57955e67da;hb=4cf6ece050adcf0ae832f44b82cdeb65ec923245;hp=03d85716884fef4ed05e60e5f1490f38d5d299d4;hpb=6fa64130e586f57e807bfb298c52f10bfb2c0b2d;p=modules%2Fgeom.git diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index 03d857168..39022be14 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx @@ -17,7 +17,7 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -154,6 +155,46 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) Export(); break; } + case 2171: // POPUP VIEWER - SELECT ONLY - VERTEX + { + OnSelectOnly( GEOM_POINT ); + break; + } + case 2172: // POPUP VIEWER - SELECT ONLY - EDGE + { + OnSelectOnly( GEOM_EDGE ); + break; + } + case 2173: // POPUP VIEWER - SELECT ONLY - WIRE + { + OnSelectOnly( GEOM_WIRE ); + break; + } + case 2174: // POPUP VIEWER - SELECT ONLY - FACE + { + OnSelectOnly( GEOM_FACE ); + break; + } + case 2175: // POPUP VIEWER - SELECT ONLY - SHELL + { + OnSelectOnly( GEOM_SHELL ); + break; + } + case 2176: // POPUP VIEWER - SELECT ONLY - SOLID + { + OnSelectOnly( GEOM_SOLID ); + break; + } + case 2177: // POPUP VIEWER - SELECT ONLY - COMPOUND + { + OnSelectOnly( GEOM_COMPOUND ); + break; + } + case 2178: // POPUP VIEWER - SELECT ONLY - SELECT ALL + { + OnSelectOnly( GEOM_ALLOBJECTS ); + break; + } case 411: // SETTINGS - ADD IN STUDY { // SAN -- TO BE REMOVED !!! @@ -227,7 +268,8 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) void GEOMToolsGUI::OnEditDelete() { SALOME_ListIO selected; - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + SalomeApp_Application* app = + dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( app ) { LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); @@ -287,6 +329,10 @@ void GEOMToolsGUI::OnEditDelete() _PTR(GenericAttribute) anAttr; GEOM_Displayer* disp = new GEOM_Displayer( appStudy ); + _PTR(SComponent) aGeom ( aStudy->FindComponent("GEOM") ); + if ( !aGeom ) + return; + // MAIN LOOP OF SELECTED OBJECTS for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { @@ -300,42 +346,19 @@ void GEOMToolsGUI::OnEditDelete() if ( !strcmp( obj->GetIOR().c_str(), geomIOR ) ) continue; - // iterate through all children of obj, find IOR attributes on children - // and remove shapes that correspond to these IORs - for (_PTR(ChildIterator) it (aStudy->NewChildIterator(obj)); it->More(); it->Next()) { - _PTR(SObject) child (it->Value()); - if (child->FindAttribute(anAttr, "AttributeIOR")) { - _PTR(AttributeIOR) anIOR (anAttr); - - // Delete child( s ) shape in Client : - const TCollection_AsciiString ASCior ((char*)anIOR->Value().c_str()); - getGeometryGUI()->GetShapeReader().RemoveShapeFromBuffer(ASCior); - - CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject(child); - GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow(corbaObj); - if (!CORBA::is_nil(geomObj)) { - for (view = views.first(); view; view = views.next()) { - disp->Erase(geomObj, true, view); - } - } - } - } // for ( children of obj ) - - // Erase main graphical object - for ( view = views.first(); view; view = views.next() ) - disp->Erase( io, true, view ); - - // Delete main shape in Client : - if ( obj->FindAttribute( anAttr, "AttributeIOR" ) ) { - _PTR(AttributeIOR) anIOR( anAttr ); - const TCollection_AsciiString ASCIor( (char*)anIOR->Value().c_str() ); - getGeometryGUI()->GetShapeReader().RemoveShapeFromBuffer( ASCIor ); - } - - CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject(obj); - GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); - if ( !CORBA::is_nil( geomObj ) ) - GeometryGUI::GetGeomGen()->RemoveObject( geomObj ); + //If the object has been used to create another one,then it can't be deleted + _PTR(ChildIterator) it (aStudy->NewChildIterator(aGeom)); + for ( it->InitEx( true ); it->More(); it->Next() ) { + _PTR(SObject) chobj (it->Value()); + if(CheckSubObjectInUse(chobj, obj, aStudy)) return; + //check subobjects + for (_PTR(ChildIterator) it (aStudy->NewChildIterator(obj)); it->More(); it->Next()) { + _PTR(SObject) child (it->Value()); + if(CheckSubObjectInUse( chobj, child, aStudy)) return; + } + } + + RemoveObjectWithChildren(obj, aStudy, views, disp); // Remove objects from Study aStudyBuilder->RemoveObject( obj ); @@ -450,6 +473,17 @@ bool GEOMToolsGUI::Import() QString fileName = getFileName(app->desktop(), "", aMap, tr("GEOM_MEN_IMPORT"), true, fileType); + + if (fileType.isEmpty() ) + { + // Trying to detect file type + QFileInfo aFileInfo( fileName ); + QString aPossibleType = (aFileInfo.extension(false)).upper() ; + + if ( (aMap.values()).contains(aPossibleType) ) + fileType = aPossibleType; + } + if (fileName.isEmpty() || fileType.isEmpty()) return false; @@ -466,7 +500,6 @@ bool GEOMToolsGUI::Import() anObj = aInsOp->Import(fileN, fileT); if ( !anObj->_is_nil() && aInsOp->IsDone() ) { - anObj->SetName(GEOMBase::GetDefaultName(QObject::tr("GEOM_IMPORT")).latin1()); QString aPublishObjName = GEOMBase::GetDefaultName(SUIT_Tools::file(fileName, /*withExten=*/true)); @@ -638,6 +671,93 @@ QString GEOMToolsGUI::getParentComponent( _PTR( SObject ) obj ) return QString(); } +//===================================================================================== +// function : RemoveObjectWithChildren +// purpose : to be used by OnEditDelete() method +//===================================================================================== +void GEOMToolsGUI::RemoveObjectWithChildren(_PTR(SObject) obj, + _PTR(Study) aStudy, + QPtrList views, + GEOM_Displayer* disp) +{ + // iterate through all children of obj + for (_PTR(ChildIterator) it (aStudy->NewChildIterator(obj)); it->More(); it->Next()) { + _PTR(SObject) child (it->Value()); + RemoveObjectWithChildren(child, aStudy, views, disp); + } + + // erase object and remove it from engine + _PTR(GenericAttribute) anAttr; + if (obj->FindAttribute(anAttr, "AttributeIOR")) { + _PTR(AttributeIOR) anIOR (anAttr); + + // Delete shape in Client + const TCollection_AsciiString ASCIor ((char*)anIOR->Value().c_str()); + getGeometryGUI()->GetShapeReader().RemoveShapeFromBuffer(ASCIor); + + CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject(obj); + GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); + if (!CORBA::is_nil(geomObj)) { + // Erase graphical object + SALOME_View* view = views.first(); + for (; view; view = views.next()) { + disp->Erase(geomObj, true, view); + } + + // Remove object from Engine + GeometryGUI::GetGeomGen()->RemoveObject( geomObj ); + } + } +} + +//===================================================================================== +// function : CheckSubObjectInUse +// purpose : to be used by OnEditDelete() method +//===================================================================================== +bool GEOMToolsGUI::CheckSubObjectInUse(_PTR(SObject) checkobj, + _PTR(SObject) remobj, + _PTR(Study) aStudy) +{ + CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject(checkobj); + GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); + if( CORBA::is_nil(geomObj) ) + return false; + + GEOM::ListOfGO_var list = geomObj->GetDependency(); + if( list->length() > 1 ) + for(int i = 0; i < list->length(); i++ ){ + CORBA::Object_var corbaObj_rem = GeometryGUI::ClientSObjectToObject(remobj); + GEOM::GEOM_Object_var geomObj_rem = GEOM::GEOM_Object::_narrow( corbaObj_rem ); + if( list[i]->_is_equivalent( geomObj_rem ) ){ + SalomeApp_Application* app = + dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + + SUIT_MessageBox::warn1 ( app->desktop(), + QObject::tr("WRN_WARNING"), + QObject::tr("DEP_OBJECT"), + QObject::tr("BUT_OK") ); + return true; + } + } + + return false; +} + +//================================================================================= +// function : deactivate() +// purpose : Called when GEOM component is deactivated +//================================================================================= +void GEOMToolsGUI::deactivate() +{ + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( app ) { + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + GEOM_Displayer aDisp (appStudy); + aDisp.GlobalSelection(); + getGeometryGUI()->setLocalSelectionMode(GEOM_ALLOBJECTS); + } +} + //===================================================================================== // EXPORTED METHODS //=====================================================================================