X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMToolsGUI%2FGEOMToolsGUI.cxx;h=68d4cefd7c956cbb882b0ece4313a8c9e7ad7f86;hb=15e78623e92030e26c218fab844b77f2c4d09d89;hp=f1abd61d09d33cc6fa8c1b82747a07e4fa23b9ff;hpb=a2ad5e1364dc5f32a9cec145b07b1b608b4da190;p=modules%2Fgeom.git diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index f1abd61d0..68d4cefd7 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.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 @@ -23,7 +23,7 @@ // GEOM GEOMGUI : GUI for Geometry component // File : GEOMBase_Tools.cxx // Author : Damien COQUERET, Open CASCADE S.A.S. -// + #include "GEOMToolsGUI.h" #include "GEOMToolsGUI_DeleteDlg.h" @@ -78,9 +78,9 @@ static QString getFileName( QWidget* parent, { //QStringList filters; QString aBrepFilter; - for ( FilterMap::const_iterator it = filterMap.begin(); it != filterMap.end(); ++it ) { + for (FilterMap::const_iterator it = filterMap.begin(); it != filterMap.end(); ++it) { //filters.push_back( it.key() ); - if ( it.key().contains( "BREP", Qt::CaseInsensitive ) ) + if (it.key().contains( "BREP", Qt::CaseInsensitive )) aBrepFilter = it.key(); } @@ -90,12 +90,12 @@ static QString getFileName( QWidget* parent, if ( !initial.isEmpty() ) fd->selectFile( initial ); - + if ( showCurrentDirInitially && SUIT_FileDlg::getLastVisitedPath().isEmpty() ) fd->setDirectory( QDir::currentPath() ); fd->setFilters( filters ); - + if ( !lastUsedFilter.isEmpty() && filterMap.contains( lastUsedFilter ) ) { fd->selectFilter( lastUsedFilter ); } @@ -144,19 +144,19 @@ static QStringList getFileNames( QWidget* parent, } } filters.append( QObject::tr( "GEOM_ALL_IMPORT_FILES" ).arg( allFilters.join( " " ) ) ); - + SUIT_FileDlg fd( parent, true, true, true ); - fd.setFileMode( SUIT_FileDlg::ExistingFiles ); + fd.setFileMode( SUIT_FileDlg::ExistingFiles ); if ( !caption.isEmpty() ) fd.setWindowTitle( caption ); if ( !initial.isEmpty() ) fd.selectFile( initial ); - + if ( showCurrentDirInitially && SUIT_FileDlg::getLastVisitedPath().isEmpty() ) fd.setDirectory( QDir::currentPath() ); - + fd.setFilters( filters ); - + if ( !lastUsedFilter.isEmpty() && filterMap.contains( lastUsedFilter ) ) fd.selectFilter( lastUsedFilter ); else if ( !aBrepFilter.isEmpty() ) @@ -208,7 +208,7 @@ static bool inUse( _PTR(Study) study, const QString& component, const QMap::iterator itSO = aSelectedSO.begin(); for ( ; itSO != aSelectedSO.end(); ++itSO ) { - std::vector<_PTR(SObject)> aReferences = study->FindDependances( *itSO ); + std::vector<_PTR(SObject)> aReferences = study->FindDependances( *itSO ); int aRefLength = aReferences.size(); if (aRefLength) { for (int i = 0; i < aRefLength; i++) { @@ -235,11 +235,11 @@ static bool inUse( _PTR(Study) study, const QString& component, const QMapValue() ); CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( child ); GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); - if( CORBA::is_nil( geomObj ) ) + if( CORBA::is_nil( geomObj ) ) continue; GEOM::ListOfGO_var list = geomObj->GetDependency(); - if( list->length() == 0 ) + if( list->length() == 0 ) continue; for( int i = 0; i < list->length(); i++ ) { @@ -257,7 +257,6 @@ static bool inUse( _PTR(Study) study, const QString& component, const QMapactiveApplication()->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); break; @@ -378,7 +387,6 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) return true; } - //=============================================================================== // function : OnEditDelete() // purpose : @@ -402,7 +410,7 @@ void GEOMToolsGUI::OnEditDelete() return; _PTR(Study) aStudy = appStudy->studyDS(); - + // check if study is locked if ( _PTR(AttributeStudyProperties)( aStudy->GetProperties() )->IsLocked() ) { SUIT_MessageBox::warning( app->desktop(), @@ -410,7 +418,7 @@ void GEOMToolsGUI::OnEditDelete() tr("WRN_STUDY_LOCKED") ); return; // study is locked } - + // get GEOM component CORBA::String_var geomIOR = app->orb()->object_to_string( GeometryGUI::GetGeomGen() ); QString geomComp = getParentComponent( aStudy->FindObjectIOR( geomIOR.in() ) ); @@ -419,7 +427,7 @@ void GEOMToolsGUI::OnEditDelete() QMap toBeDeleted; QMap allDeleted; bool isComponentSelected = false; - + for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { Handle(SALOME_InteractiveObject) anIObject = It.Value(); if ( !anIObject->hasEntry() ) @@ -438,9 +446,9 @@ void GEOMToolsGUI::OnEditDelete() /////////////////////////////////////////////////////// // if GEOM component is selected, so skip other checks - if ( isComponentSelected ) continue; + if ( isComponentSelected ) continue; /////////////////////////////////////////////////////// - + // check if object is reference _PTR(SObject) refobj; if ( obj && obj->ReferencedObject( refobj ) ) { @@ -468,7 +476,7 @@ void GEOMToolsGUI::OnEditDelete() allDeleted.insert( child->GetID().c_str(), aName ); } } - + // is there is anything to delete? if ( !isComponentSelected && allDeleted.count() <= 0 ) return; // nothing to delete @@ -477,7 +485,7 @@ void GEOMToolsGUI::OnEditDelete() GEOMToolsGUI_DeleteDlg dlg( app->desktop(), allDeleted, isComponentSelected ); if ( !dlg.exec() ) return; // operation is cancelled by user - + // get currently opened views QList views; SALOME_View* view; @@ -489,10 +497,10 @@ void GEOMToolsGUI::OnEditDelete() if ( view ) views.append( view ); } - + _PTR(StudyBuilder) aStudyBuilder (aStudy->NewBuilder()); GEOM_Displayer* disp = new GEOM_Displayer( appStudy ); - + if ( isComponentSelected ) { // GEOM component is selected: delete all objects recursively _PTR(SObject) comp = aStudy->FindObjectID( geomComp.toLatin1().data() ); @@ -523,12 +531,10 @@ void GEOMToolsGUI::OnEditDelete() // remove object from GEOM engine removeObjectWithChildren( obj, aStudy, views, disp ); // remove objects from study - aStudyBuilder->RemoveObjectWithChildren( obj ); + aStudyBuilder->RemoveObjectWithChildren( obj ); } } - - selected.Clear(); aSelMgr->setSelectedObjects( selected ); getGeometryGUI()->updateObjBrowser(); @@ -614,7 +620,7 @@ bool GEOMToolsGUI::Import() // file type is not defined, try to detect QString ext = QFileInfo( fileName ).suffix().toUpper(); QRegExp re( "\\*\\.(\\w+)" ); - for ( FilterMap::const_iterator it = aMap.begin(); + for ( FilterMap::const_iterator it = aMap.begin(); it != aMap.end() && aCurrentType.isEmpty(); ++it ) { int pos = 0; while ( re.indexIn( it.key(), pos ) >= 0 ) { @@ -641,6 +647,42 @@ bool GEOMToolsGUI::Import() CORBA::String_var fileN = fileName.toLatin1().constData(); CORBA::String_var fileT = aCurrentType.toLatin1().constData(); + // jfa 21.08.2012 for mantis issue 21511 (STEP file units) + CORBA::String_var aUnits = aInsOp->ReadValue(fileN, fileT, "LEN_UNITS"); + TCollection_AsciiString aUnitsStr (aUnits.in()); + bool needConvert = true; + if (aUnitsStr.IsEmpty() || aUnitsStr == "UNIT_M") + needConvert = false; + + if (needConvert) { + if (igesAnswer == SUIT_MessageBox::NoToAll) { + // converting for all files is already approved + fileT = (aCurrentType + "_SCALE").toLatin1().constData(); + } + else if (igesAnswer != SUIT_MessageBox::YesToAll) { + SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No; + if (i < fileNames.count() - 1) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll; + igesAnswer = SUIT_MessageBox::question(app->desktop(), + "Question",//tr("WRN_WARNING"), + tr("GEOM_SCALE_DIMENSIONS"), + btns | SUIT_MessageBox::Cancel, + SUIT_MessageBox::No); + switch (igesAnswer) { + case SUIT_MessageBox::Cancel: + return false; // cancel (break) import operation + case SUIT_MessageBox::Yes: + case SUIT_MessageBox::YesToAll: + break; // scaling is confirmed + case SUIT_MessageBox::No: + case SUIT_MessageBox::NoAll: + fileT = (aCurrentType + "_SCALE").toLatin1().constData(); + default: + break; // scaling is rejected + } // switch ( igesAnswer ) + } // if ( igeAnswer != NoToAll ) + } // if ( needConvert ) + + /* // skl 29.05.2009 if ( aCurrentType == "IGES" ) { GEOM::GEOM_Object_var anObj = aInsOp->ImportFile( fileN, "IGES_UNIT" ); @@ -678,6 +720,9 @@ bool GEOMToolsGUI::Import() } // if ( needConvert ) } // if ( aCurrentType == "IGES" ) else if ( aCurrentType == "ACIS" ) { + */ + + if ( aCurrentType == "ACIS" ) { if ( acisAnswer != SUIT_MessageBox::YesToAll && acisAnswer != SUIT_MessageBox::NoToAll ) { SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No; if ( i < fileNames.count()-1 ) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll; @@ -690,23 +735,25 @@ bool GEOMToolsGUI::Import() return false; // cancel (break) import operation } // if ( acisAnswer != YesToAll && acisAnswer != NoToAll ) } // else if ( aCurrentType == "ACIS" ) - + + // IMPORT GEOM::GEOM_Object_var anObj = aInsOp->ImportFile( fileN, fileT ); if ( !anObj->_is_nil() && aInsOp->IsDone() ) { - QString aPublishObjName = + QString aPublishObjName = GEOMBase::GetDefaultName( SUIT_Tools::file( fileName, /*withExten=*/true ) ); - + SALOMEDS::Study_var aDSStudy = GeometryGUI::ClientStudyToStudy( aStudy ); - SALOMEDS::SObject_var aSO = GeometryGUI::GetGeomGen()->PublishInStudy( aDSStudy, - SALOMEDS::SObject::_nil(), - anObj, - aPublishObjName.toLatin1().constData() ); - if( ( !aSO->_is_nil() ) ) + SALOMEDS::SObject_var aSO = + GeometryGUI::GetGeomGen()->PublishInStudy( aDSStudy, + SALOMEDS::SObject::_nil(), + anObj, + aPublishObjName.toLatin1().constData() ); + if ( ( !aSO->_is_nil() ) ) anEntryList.append( aSO->GetID() ); - + objsForDisplay.append( anObj ); - + if ( aCurrentType == "ACIS" ) { if ( acisAnswer == SUIT_MessageBox::Yes || acisAnswer == SUIT_MessageBox::YesToAll ) GeometryGUI::GetGeomGen()->PublishNamedShapesInStudy( aDSStudy, anObj ); @@ -746,7 +793,6 @@ bool GEOMToolsGUI::Import() return objsForDisplay.count() > 0; } - //===================================================================================== // function : Export // purpose : BRep, Iges, Step @@ -795,7 +841,7 @@ bool GEOMToolsGUI::Export() bool appropriateObj = false; SALOME_ListIteratorOfListIO It( selectedObjects ); - for(;It.More();It.Next()) { + for (; It.More(); It.Next()) { Handle(SALOME_InteractiveObject) IObject = It.Value(); GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( IObject ); @@ -818,20 +864,18 @@ bool GEOMToolsGUI::Export() anOp->start(); - aInsOp->Export( anObj, file.toStdString().c_str(), fileType.toLatin1().constData() ); - if ( aInsOp->IsDone() ) + if (aInsOp->IsDone()) anOp->commit(); - else - { - anOp->abort(); - wc.suspend(); - SUIT_MessageBox::critical( app->desktop(), - QObject::tr( "GEOM_ERROR" ), - QObject::tr("GEOM_PRP_ABORT") + "\n" + QString( aInsOp->GetErrorCode() ) ); - return false; - } + else { + anOp->abort(); + wc.suspend(); + SUIT_MessageBox::critical(app->desktop(), + QObject::tr("GEOM_ERROR"), + QObject::tr("GEOM_PRP_ABORT") + "\n" + QObject::tr(aInsOp->GetErrorCode())); + return false; + } } catch (const SALOME::SALOME_Exception& S_ex) { //QtCatchCorbaException(S_ex); @@ -867,7 +911,7 @@ void GEOMToolsGUI::removeObjectWithChildren(_PTR(SObject) obj, _PTR(GenericAttribute) anAttr; if (obj->FindAttribute(anAttr, "AttributeIOR")) { _PTR(AttributeIOR) anIOR (anAttr); - + SalomeApp_Study* appStudy = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); // Delete shape in Client @@ -877,16 +921,16 @@ void GEOMToolsGUI::removeObjectWithChildren(_PTR(SObject) obj, CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject(obj); GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj ); if (!CORBA::is_nil(geomObj)) { - + //Remove visual properties of the object appStudy->removeObjectFromAll(obj->GetID().c_str()); - + // Erase graphical object QListIterator it( views ); while ( it.hasNext() ) if ( SALOME_View* view = it.next() ) disp->Erase(geomObj, true, view); - + // Remove object from Engine // We can't directly remove object from engine. All we can do is to unpublish the object // from the study. Another client could be using the object.