-// 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
#include <HYDROData_CalculationCase.h>
#include <GeometryGUI.h>
-#include <GEOMBase.h>
#include <SalomeApp_Study.h>
-#include <TopoDS_Shell.hxx>
-#include <BRepTools.hxx>
-
#include <LightApp_Application.h>
#include <LightApp_UpdateFlags.h>
}
bool HYDROGUI_ExportCalculationOp::processApply( int& theUpdateFlags,
- QString& theErrorMsg )
+ QString& theErrorMsg,
+ QStringList& theBrowseObjectsEntries )
{
// Get the selected calculation case
Handle(HYDROData_CalculationCase) aCalculation =
HYDROGUI_Tool::GetSelectedObject( module() ) );
if ( aCalculation.IsNull() ) {
- theErrorMsg = tr( "EXPORT_FAILED" );
+ theErrorMsg = tr( "NULL_DATA_OBJECT" );
return false;
}
- QString anErrorMsg;
- 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<SalomeApp_Study*>( 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 = GEOMBase::GetDefaultName( 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 {
- anErrorMsg = tr( "RESULT_SHAPE_NULL" );
- }
+ bool isOk = false;
- if ( !anIsOk ) {
- theErrorMsg = tr( "EXPORT_FAILED" );
+ // Get active study
+ SalomeApp_Study* aStudy =
+ dynamic_cast<SalomeApp_Study*>( module()->getApp()->activeStudy() );
- if( !anErrorMsg.isEmpty() ) {
- theErrorMsg.prepend( anErrorMsg + "\n" );
+ // 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()
QString anErrorMsg;
bool aResult = false;
-
+ QStringList aBrowseObjectsEntries;
+
try {
- aResult = processApply( anUpdateFlags, anErrorMsg );
+ aResult = processApply( anUpdateFlags, anErrorMsg, aBrowseObjectsEntries );
}
catch ( Standard_Failure )
{
if ( aResult ) {
module()->update( anUpdateFlags );
commit();
+ browseObjects( aBrowseObjectsEntries );
// Show message box
SUIT_MessageBox::information( module()->getApp()->desktop(),
}
else {
abort();
- QString aMsg = tr( "EXPORT_FAILED" );
- /* TODO: improve error processing
- 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
+}