- 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;
- }
- }