X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ExportCalculationOp.cxx;h=93467ea163c0cb457549bfa8ef3c3a4b4a20040f;hb=fcf6bb94aa4bb389b1e4b2150d631048ef89e1ad;hp=65b86410a22cbdc32d6ada80dee8a958e83cd50d;hpb=7e825ec456c9331ef0df1cb59865cc55f0d8516a;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ExportCalculationOp.cxx b/src/HYDROGUI/HYDROGUI_ExportCalculationOp.cxx index 65b86410..93467ea1 100644 --- a/src/HYDROGUI/HYDROGUI_ExportCalculationOp.cxx +++ b/src/HYDROGUI/HYDROGUI_ExportCalculationOp.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 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 -// +// Copyright (C) 2014-2015 EDF-R&D // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -24,7 +20,7 @@ #include "HYDROGUI_DataModel.h" #include "HYDROGUI_Module.h" -#include "HYDROGUI_Tool.h" +#include "HYDROGUI_Tool2.h" #include @@ -32,9 +28,6 @@ #include -#include -#include - #include #include @@ -71,7 +64,8 @@ void HYDROGUI_ExportCalculationOp::commitOperation() } bool HYDROGUI_ExportCalculationOp::processApply( int& theUpdateFlags, - QString& theErrorMsg ) + QString& theErrorMsg, + QStringList& theBrowseObjectsEntries ) { // Get the selected calculation case Handle(HYDROData_CalculationCase) aCalculation = @@ -79,59 +73,29 @@ bool HYDROGUI_ExportCalculationOp::processApply( int& theUpdateFlags, HYDROGUI_Tool::GetSelectedObject( module() ) ); if ( aCalculation.IsNull() ) { - theErrorMsg = tr( "EXPORT_FAILED" ); + theErrorMsg = tr( "NULL_DATA_OBJECT" ); return false; } - bool anIsOk = false; - - TopoDS_Shell aShell = aCalculation->GetShell(); - - if ( !aShell.IsNull() ) { - // TODO move this code to anothe place? - std::ostringstream aStreamShape; - // Write TopoDS_Shape in ASCII format to the stream - BRepTools::Write( aShell, aStreamShape ); - // Returns the number of bytes that have been stored in the stream's buffer. - int aSize = aStreamShape.str().size(); - // Allocate octect buffer of required size - CORBA::Octet* anOctetBuf = SALOMEDS::TMPFile::allocbuf( aSize ); - // Copy ostrstream content to the octect buffer - memcpy( anOctetBuf, aStreamShape.str().c_str(), aSize ); - // Create TMPFile - SALOMEDS::TMPFile_var aSeqFile = new SALOMEDS::TMPFile( aSize, aSize, anOctetBuf, 1 ); - - // Get active study - SalomeApp_Study* aStudy = - dynamic_cast( module()->getApp()->activeStudy() ); - - // Restore shape from the stream and get the GEOM object - GEOM::GEOM_Gen_var aGeomEngine = GeometryGUI::GetGeomGen(); // TODO: get GEOM engine in another way? - GEOM::GEOM_IInsertOperations_var anInsOp = aGeomEngine->GetIInsertOperations( module()->getStudyId() ); - GEOM::GEOM_Object_var aGeomObj = anInsOp->RestoreShape( aSeqFile ); - - // Puplish the GEOM object - if ( !aGeomObj->_is_nil() ) { - QString aName = tr( "OBJ_PREFIX" ) + aCalculation->GetName(); - - SALOMEDS::Study_var aDSStudy = GeometryGUI::ClientStudyToStudy( aStudy->studyDS() ); - SALOMEDS::SObject_var aResultSO = - aGeomEngine->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), - aGeomObj, qPrintable( aName ) ); - if ( !aResultSO->_is_nil() ) { - theUpdateFlags = UF_ObjBrowser; - anIsOk = true; - } - } - } else { - theErrorMsg = tr( "RESULT_SHAPE_NULL" ); - } + bool isOk = false; + + // Get active study + SalomeApp_Study* aStudy = + dynamic_cast( module()->getApp()->activeStudy() ); - if ( !anIsOk && theErrorMsg.isEmpty() ) { - theErrorMsg = tr( "EXPORT_FAILED" ); + // Export + QString anErrorMsg; + if ( aStudy ) { + SALOMEDS::Study_var aDSStudy = GeometryGUI::ClientStudyToStudy( aStudy->studyDS() ); + GEOM::GEOM_Gen_var aGeomEngine = GeometryGUI::GetGeomGen(); + QString anEntry; + if ( aCalculation->Export( aGeomEngine, aDSStudy, anEntry, theErrorMsg ) ) { + theUpdateFlags = UF_ObjBrowser; + isOk = true; + } } - return anIsOk; + return isOk; } void HYDROGUI_ExportCalculationOp::onApply() @@ -142,9 +106,10 @@ void HYDROGUI_ExportCalculationOp::onApply() QString anErrorMsg; bool aResult = false; - + QStringList aBrowseObjectsEntries; + try { - aResult = processApply( anUpdateFlags, anErrorMsg ); + aResult = processApply( anUpdateFlags, anErrorMsg, aBrowseObjectsEntries ); } catch ( Standard_Failure ) { @@ -162,6 +127,7 @@ void HYDROGUI_ExportCalculationOp::onApply() if ( aResult ) { module()->update( anUpdateFlags ); commit(); + browseObjects( aBrowseObjectsEntries ); // Show message box SUIT_MessageBox::information( module()->getApp()->desktop(), @@ -170,11 +136,14 @@ void HYDROGUI_ExportCalculationOp::onApply() } else { abort(); - QString aMsg = tr( "INPUT_VALID_DATA" ); - if( !anErrorMsg.isEmpty() ) - aMsg.prepend( anErrorMsg + "\n" ); + + if ( anErrorMsg.isEmpty() ) + anErrorMsg = tr( "EXPORT_DATA_FAILED" ); + + anErrorMsg.prepend( tr( "EXPORT_FAILED" ) + "\n" ); + SUIT_MessageBox::critical( module()->getApp()->desktop(), tr( "EXPORT_STATUS" ), - aMsg ); + anErrorMsg ); } -} \ No newline at end of file +}