X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FVISU_I%2FVISU_TimeAnimation.cxx;h=fa5befe56612e2e7a1d87990af36ba8a806ffc4e;hb=e208a04edd5d8cebc0185834ecdf3faec4514f99;hp=381061681e5d4cc9a8ecce1c934a608dea8be602;hpb=841f0997ef150283cedda4a8e3fd5d8e0f783ac0;p=modules%2Fvisu.git diff --git a/src/VISU_I/VISU_TimeAnimation.cxx b/src/VISU_I/VISU_TimeAnimation.cxx index 38106168..fa5befe5 100644 --- a/src/VISU_I/VISU_TimeAnimation.cxx +++ b/src/VISU_I/VISU_TimeAnimation.cxx @@ -7,31 +7,53 @@ // Module : VISU #include "VISU_TimeAnimation.h" + +#include "VISUConfig.hh" + #include "VISU_Result_i.hh" #include "VISU_Prs3d_i.hh" #include "VISU_Mesh_i.hh" #include "VISU_ScalarMap_i.hh" #include "VISU_IsoSurfaces_i.hh" #include "VISU_DeformedShape_i.hh" +#include "VISU_ScalarMapOnDeformedShape_i.hh" #include "VISU_CutPlanes_i.hh" +#include "VISU_Plot3D_i.hh" #include "VISU_CutLines_i.hh" #include "VISU_Vectors_i.hh" #include "VISU_StreamLines_i.hh" +#include "VISU_GaussPoints_i.hh" #include "VISU_ViewManager_i.hh" +#include "VISU_View_i.hh" + #include "VISU_ScalarBarActor.hxx" #include "VISU_Actor.h" -#include "VTKViewer_ViewFrame.h" +#include "SalomeApp_Study.h" + +#include "SVTK_ViewWindow.h" + +#include "SALOME_Event.hxx" -#include "QAD_Config.h" +#include "SUIT_ResourceMgr.h" +#include "SUIT_Application.h" +#include "SUIT_Session.h" +#include "SUIT_Study.h" + +#include "SALOMEDSClient_AttributeComment.hxx" +#include "SALOMEDSClient_AttributeName.hxx" + +#include +#include +#include using namespace std; -//QWaitCondition myCondition; -static int MYDELAY = 1; -//************************************************************************ -VISU_TimeAnimation::VISU_TimeAnimation(SALOMEDS::Study_var theStudy, VISU::View3D_ptr theView3D) { +//------------------------------------------------------------------------ +VISU_TimeAnimation::VISU_TimeAnimation (_PTR(Study) theStudy, + VISU::View3D_ptr theView3D) +{ myStudy = theStudy; myIsActive = false; myFrame = 0; @@ -39,46 +61,53 @@ VISU_TimeAnimation::VISU_TimeAnimation(SALOMEDS::Study_var theStudy, VISU::View3 myProportional = false; myView = 0; - if(!CORBA::is_nil(theView3D)){ + if (!CORBA::is_nil(theView3D)) { VISU::View3D_i* pView = dynamic_cast(GetServant(theView3D).in()); - QAD_StudyFrame* aStudyFrame = pView->GetStudyFrame(); - myView = VISU::GetViewFrame(aStudyFrame); + SUIT_ViewWindow* aVW = pView->GetViewWindow(); + myView = dynamic_cast(aVW); + connect( myView, SIGNAL( destroyed() ), this, SLOT( onViewDeleted() ) ); } - myMaxVal = 0; - myMinVal = 0; + myTimeMinVal = 0; + myTimeMaxVal = 0; myTimeMin = 0; myTimeMax = 0; myLastError = ""; myCycling = false; + + myAnimEntry = ""; } -//************************************************************************ -VISU_TimeAnimation::~VISU_TimeAnimation() { +//------------------------------------------------------------------------ +VISU_TimeAnimation::~VISU_TimeAnimation() +{ + if (!myView) { + MESSAGE("Viewer is not defined for animation"); + return; + } + for (int i = 0; i < getNbFields(); i++) { clearData(myFieldsLst[i]); } } -//************************************************************************ -void VISU_TimeAnimation::addField(SALOMEDS::SObject_ptr theField) { +//------------------------------------------------------------------------ +void VISU_TimeAnimation::addField (_PTR(SObject) theField) +{ FieldData aNewData; - aNewData.myField = SALOMEDS::SObject::_duplicate(theField); + aNewData.myField = theField; aNewData.myNbFrames = 0; - aNewData.myPrs = 0; - aNewData.myActors = 0; - aNewData.myTiming = 0; aNewData.myPrsType = VISU::TSCALARMAP; + aNewData.myOffset[0] = aNewData.myOffset[1] = aNewData.myOffset[2] = 0; VISU::Storable::TRestoringMap aMap = getMapOfValue(aNewData.myField); aNewData.myNbTimes = VISU::Storable::FindValue(aMap,"myNbTimeStamps").toLong(); myFieldsLst.append(aNewData); //find Min/Max timestamps if ((myTimeMin == 0) && (myTimeMax == 0)) { - SALOMEDS::ChildIterator_var anIter = myStudy->NewChildIterator(theField); - SALOMEDS::SObject_var aTimeStamp; + _PTR(ChildIterator) anIter = myStudy->NewChildIterator(theField); anIter->Next(); // First is reference on support myTimeMin = getTimeValue(anIter->Value()); for(; anIter->More(); anIter->Next()) { @@ -87,183 +116,241 @@ void VISU_TimeAnimation::addField(SALOMEDS::SObject_ptr theField) { } } +//------------------------------------------------------------------------ +void VISU_TimeAnimation::addField (SALOMEDS::SObject_ptr theField) +{ + SALOMEDS::SObject_var theFieldDup = SALOMEDS::SObject::_duplicate(theField); + _PTR(SObject) aField = VISU::GetClientSObject(theFieldDup, myStudy); + addField(aField); +} + -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::clearData(FieldData& theData) { - if (theData.myTiming) { - free(theData.myTiming); - theData.myTiming = 0; + if (!myView) { + MESSAGE("Viewer is not defined for animation"); + return; } + theData.myTiming.clear(); vtkRenderer* aRen = myView->getRenderer(); - if (theData.myActors) { - for (int i = 0; i < theData.myNbFrames; i++) { + if (!theData.myActors.empty()) { + for (int i = 0, iEnd = theData.myActors.size(); i < iEnd; i++) { if (theData.myActors[i] != 0) { theData.myActors[i]->RemoveFromRender(aRen); - theData.myActors[i]->Delete(); } } - free(theData.myActors); - theData.myActors = 0; - } - if (theData.myPrs) { - for (int i = 0; i < theData.myNbFrames; i++) - theData.myPrs[i]->_remove_ref(); - free(theData.myPrs); - theData.myPrs = 0; - } + theData.myActors.clear(); + } + if (!theData.myPrs.empty()) { + for (int i = 0, iEnd = theData.myPrs.size(); i < iEnd; i++) + if (theData.myPrs[i] != 0) { + theData.myPrs[i]->_remove_ref(); + } + theData.myPrs.clear(); + } theData.myNbFrames = 0; myView->update(); } -//************************************************************************ +namespace +{ + //------------------------------------------------------------------------ + template + void + GeneratePresentations(_PTR(Study) theStudy, + FieldData& theData, + VISU::Result_i* theResult, + bool theIsRangeDefined, + CORBA::Double theTimeMin, + CORBA::Double theTimeMax) + { + double aMin = VTK_LARGE_FLOAT, aMax = -VTK_LARGE_FLOAT; + + _PTR(ChildIterator) anIter = theStudy->NewChildIterator(theData.myField); + anIter->Next(); // First is reference on support + + long aFrameId = 0; + for(; anIter->More(); anIter->Next()){ + if (aFrameId == theData.myNbTimes) { + MESSAGE("There are extra timestamps in field"); + return; + } + _PTR(SObject) aTimeStamp = anIter->Value(); + if(!aTimeStamp) + continue; + + theData.myTiming[aFrameId] = VISU_TimeAnimation::getTimeValue(aTimeStamp); + if (theIsRangeDefined) { + if (theData.myTiming[aFrameId] < theTimeMin) + continue; + if (theData.myTiming[aFrameId] > theTimeMax) + break; + } + + VISU::Storable::TRestoringMap aTimeMap = VISU_TimeAnimation::getMapOfValue(aTimeStamp); + QString aMeshName = VISU::Storable::FindValue(aTimeMap,"myMeshName"); + VISU::Entity anEntity = (VISU::Entity) VISU::Storable::FindValue(aTimeMap,"myEntityId").toInt(); + QString aFieldName = VISU::Storable::FindValue(aTimeMap,"myFieldName"); + int aTimeStampId = VISU::Storable::FindValue(aTimeMap,"myTimeStampId").toInt(); + + TPrs3d* aPresent = new TPrs3d(theResult, false); + aPresent->Create(aMeshName.latin1(), anEntity, + aFieldName.latin1(), aTimeStampId); + theData.myPrs[aFrameId++] = aPresent; + + aMin = std::min(aPresent->GetMin(), aMin); + aMax = std::max(aPresent->GetMax(), aMax); + } + theData.myNbFrames = aFrameId; + + if (theData.myPrsType != VISU::TGAUSSPOINTS){ + int aRangeType = VISU::GetResourceMgr()->integerValue("VISU" , "scalar_range_type", 0); + if( aRangeType != 1 ){ + for(long aFrameId = 0; aFrameId < theData.myNbFrames; aFrameId++) { + if (VISU::ScalarMap_i* aPrs = dynamic_cast(theData.myPrs[aFrameId])){ + aPrs->SetRange(aMin, aMax); + aPrs->SetOffset(theData.myOffset); + } + } + } + if (theData.myPrsType == VISU::TISOSURFACE) + for (long aFrameId = 0; aFrameId < theData.myNbFrames; aFrameId++) + if (VISU::IsoSurfaces_i* aPrs = dynamic_cast(theData.myPrs[aFrameId])) + aPrs->SetSubRange(aMin, aMax); + } + } +} + void VISU_TimeAnimation::generatePresentations(CORBA::Long theFieldNum) { FieldData& aData = myFieldsLst[theFieldNum]; // Delete previous presentations clearData(aData); - VISU::Result_i* pResult = createPresent(aData.myField); + VISU::Result_i* aResult = createPresent(aData.myField); VISU::Storable::TRestoringMap aMap = getMapOfValue(aData.myField); aData.myNbFrames = aData.myNbTimes; - //VISU::Storable::FindValue(aMap,"myNbTimeStamps").toLong(); - - aData.myPrs = (VISU::ScalarMap_i**) malloc(aData.myNbTimes * sizeof(VISU::ScalarMap_i*)); - aData.myTiming = (double*) malloc(aData.myNbTimes * sizeof(double)); - - SALOMEDS::ChildIterator_var anIter = myStudy->NewChildIterator(aData.myField); - SALOMEDS::SObject_var aTimeStamp; - anIter->Next(); // First is reference on support - long i = 0; - double aMin = VTK_LARGE_FLOAT, aMax = -VTK_LARGE_FLOAT; - for(;anIter->More();anIter->Next()) { - if (i == aData.myNbTimes) { - MESSAGE("There are extra timestamps in field"); - return; - } - aTimeStamp = anIter->Value(); - if (aTimeStamp->_is_nil()) continue; + //VISU::Storable::FindValue(aMap,"myNbTimeStamps").toLong(); - aData.myTiming[i] = getTimeValue(aTimeStamp); - if (isRangeDefined()) { - if (aData.myTiming[i] < myMinVal) continue; - if (aData.myTiming[i] > myMaxVal) break; - } + aData.myPrs.resize(aData.myNbTimes,NULL); + aData.myTiming.resize(aData.myNbTimes); - VISU::Storable::TRestoringMap aTimeMap = getMapOfValue(aTimeStamp); - QString aMeshName = VISU::Storable::FindValue(aTimeMap,"myMeshName"); - VISU::Entity anEntity = (VISU::Entity) VISU::Storable::FindValue(aTimeMap,"myEntityId").toInt(); - QString aFieldName = VISU::Storable::FindValue(aTimeMap,"myFieldName"); - int aTimeStampId = VISU::Storable::FindValue(aTimeMap,"myTimeStampId").toInt(); - - switch (aData.myPrsType) { - case VISU::TSCALARMAP: // ScalarMap - { - VISU::ScalarMap_i* aPresent = new VISU::ScalarMap_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::ScalarMap_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TISOSURFACE: // Iso Surfaces - { - VISU::IsoSurfaces_i* aPresent = new VISU::IsoSurfaces_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::IsoSurfaces_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TCUTPLANES: // Cut Planes - { - VISU::CutPlanes_i* aPresent = new VISU::CutPlanes_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::CutPlanes_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TDEFORMEDSHAPE: // Deformed Shape - { - VISU::DeformedShape_i* aPresent = new VISU::DeformedShape_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::DeformedShape_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TVECTORS: // Vectors - { - VISU::Vectors_i* aPresent = new VISU::Vectors_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::Vectors_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - - case VISU::TSTREAMLINES: // Stream Lines - { - VISU::StreamLines_i* aPresent = new VISU::StreamLines_i(pResult, false); - aPresent->Create(aMeshName.latin1(), anEntity, - aFieldName.latin1(), aTimeStampId); - //VISU::StreamLines_var aTmp = aPresent->_this(); - //aPresent->_remove_ref(); - aData.myPrs[i] = aPresent; - } - break; - } - if (aData.myPrs[i]->GetMin() < aMin) aMin = aData.myPrs[i]->GetMin(); - if (aData.myPrs[i]->GetMax() > aMax) aMax = aData.myPrs[i]->GetMax(); - i++; - } - aData.myNbFrames = i; - QString aFixRange = QAD_CONFIG->getSetting("Visu:SBImposeRange"); - if (aFixRange.compare("true") != 0) { - for (i = 0; i < aData.myNbFrames; i++) - aData.myPrs[i]->SetRange(aMin, aMax); - if(aData.myPrsType == VISU::TISOSURFACE) - for (i = 0; i < aData.myNbFrames; i++) - if(VISU::IsoSurfaces_i* aPrs = dynamic_cast(aData.myPrs[i])) - aPrs->SetSubRange(aMin, aMax); + using namespace VISU; + switch (aData.myPrsType) { + case VISU::TSCALARMAP: // ScalarMap + GeneratePresentations(myStudy, + aData, + aResult, + isRangeDefined(), + myTimeMinVal, + myTimeMaxVal); + break; + case VISU::TISOSURFACE: // Iso Surfaces + GeneratePresentations(myStudy, + aData, + aResult, + isRangeDefined(), + myTimeMinVal, + myTimeMaxVal); + break; + case VISU::TCUTPLANES: // Cut Planes + GeneratePresentations(myStudy, + aData, + aResult, + isRangeDefined(), + myTimeMinVal, + myTimeMaxVal); + break; + case VISU::TCUTLINES: // Cut Lines + GeneratePresentations(myStudy, + aData, + aResult, + isRangeDefined(), + myTimeMinVal, + myTimeMaxVal); + break; + case VISU::TPLOT3D: // Plot3d + GeneratePresentations(myStudy, + aData, + aResult, + isRangeDefined(), + myTimeMinVal, + myTimeMaxVal); + break; + case VISU::TDEFORMEDSHAPE: // Deformed Shape + GeneratePresentations(myStudy, + aData, + aResult, + isRangeDefined(), + myTimeMinVal, + myTimeMaxVal); + break; + case VISU::TVECTORS: // Vectors + GeneratePresentations(myStudy, + aData, + aResult, + isRangeDefined(), + myTimeMinVal, + myTimeMaxVal); + break; + case VISU::TSTREAMLINES: // Stream Lines + GeneratePresentations(myStudy, + aData, + aResult, + isRangeDefined(), + myTimeMinVal, + myTimeMaxVal); + break; + case VISU::TGAUSSPOINTS: // Gauss Points + GeneratePresentations(myStudy, + aData, + aResult, + isRangeDefined(), + myTimeMinVal, + myTimeMaxVal); + break; + case VISU::TSCALARMAPONDEFORMEDSHAPE: // Scalar map on deformed shape + GeneratePresentations(myStudy, + aData, + aResult, + isRangeDefined(), + myTimeMinVal, + myTimeMaxVal); + break; + default: + MESSAGE("Not implemented for this presentation type: " << aData.myPrsType); + return; } } -//************************************************************************ +//------------------------------------------------------------------------ CORBA::Boolean VISU_TimeAnimation::generateFrames() { if (!myView) { - MESSAGE("Viewer is nod defined for animation"); + MESSAGE("Viewer is not defined for animation"); return false; } + myLastError = QString("Frame(s) for "); bool aNoError = true; - VISU::Mutex mt(myMutex,qApp,MYDELAY); + clearView(); - vtkRenderer* aRen = myView->getRenderer(); + for (int i = 0; i < getNbFields(); i++) { FieldData& aData = myFieldsLst[i]; - aData.myActors = (VISU_Actor**) malloc(aData.myNbFrames * sizeof(VISU_Actor*)); + aData.myActors.resize(aData.myNbFrames,NULL); for (long j = 0; j < aData.myNbFrames; j++) { VISU_Actor* aActor = NULL; try{ + aData.myPrs[j]->SetOffset(aData.myOffset); aActor = aData.myPrs[j]->CreateActor(); myView->AddActor(aActor); if(j == 0) aActor->VisibilityOn(); else aActor->VisibilityOff(); - }catch(std::runtime_error& exc){ + }catch(...){ //catch(std::runtime_error& exc){ aNoError = false; myLastError += QString("%1 ").arg(aData.myTiming[j]); } @@ -277,36 +364,33 @@ CORBA::Boolean VISU_TimeAnimation::generateFrames() { return aNoError; } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::clearView() { if (!myView) { - MESSAGE("Viewer is nod defined for animation"); + MESSAGE("Viewer is not defined for animation"); return; } - VISU::Mutex mt(myMutex,qApp,MYDELAY); vtkRenderer* aRen = myView->getRenderer(); for (int i = 0; i < getNbFields(); i++) { FieldData& aData = myFieldsLst[i]; - if (aData.myActors) { - for (int i = 0; i < aData.myNbFrames; i++) { + if (!aData.myActors.empty()) { + for (int i = 0, iEnd = aData.myActors.size(); i < iEnd; i++) { if (aData.myActors[i] != 0) { aData.myActors[i]->RemoveFromRender(aRen); - aData.myActors[i]->Delete(); } - } - free(aData.myActors); - aData.myActors = 0; + } + aData.myActors.clear(); } } - myView->update(); + VISU::RepaintView(myView); } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::stopAnimation() { myIsActive = false; } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::startAnimation() { if (!myIsActive) { myIsActive = true; @@ -314,137 +398,164 @@ void VISU_TimeAnimation::startAnimation() { } } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::nextFrame() { + if (!myView) { + MESSAGE("Viewer is not defined for animation"); + return; + } stopAnimation(); if (myFrame < (myFieldsLst[0].myNbFrames-1)) { int i; - for (i = 0; i < getNbFields(); i++) + for (i = 0; i < getNbFields(); i++) if (myFieldsLst[i].myActors[myFrame] != 0) myFieldsLst[i].myActors[myFrame]->VisibilityOff(); + myFrame++; - for (i = 0; i < getNbFields(); i++) + for (i = 0; i < getNbFields(); i++) if (myFieldsLst[i].myActors[myFrame] != 0) - myFieldsLst[i].myActors[myFrame]->VisibilityOn(); + myFieldsLst[i].myActors[myFrame]->VisibilityOn(); emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]); myView->Repaint(); } } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::prevFrame() { + if (!myView) { + MESSAGE("Viewer is not defined for animation"); + return; + } stopAnimation(); if (myFrame > 0) { int i; - for (i = 0; i < getNbFields(); i++) + for (i = 0; i < getNbFields(); i++) if (myFieldsLst[i].myActors[myFrame] != 0) myFieldsLst[i].myActors[myFrame]->VisibilityOff(); + myFrame--; - for (i = 0; i < getNbFields(); i++) + for (i = 0; i < getNbFields(); i++) if (myFieldsLst[i].myActors[myFrame] != 0) - myFieldsLst[i].myActors[myFrame]->VisibilityOn(); + myFieldsLst[i].myActors[myFrame]->VisibilityOn(); emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]); myView->Repaint(); } } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::firstFrame() { + if (!myView) { + MESSAGE("Viewer is not defined for animation"); + return; + } stopAnimation(); int i; - for (i = 0; i < getNbFields(); i++) - if (myFieldsLst[i].myActors[myFrame] != 0) - myFieldsLst[i].myActors[myFrame]->VisibilityOff(); + for (i = 0; i < getNbFields(); i++) + if(!myFieldsLst[i].myActors.empty()) + if (myFieldsLst[i].myActors[myFrame] != 0) + myFieldsLst[i].myActors[myFrame]->VisibilityOff(); myFrame = 0; - for (i = 0; i < getNbFields(); i++) - if (myFieldsLst[i].myActors[myFrame] != 0) - myFieldsLst[i].myActors[myFrame]->VisibilityOn(); - - emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]); - myView->Repaint(); + for (i = 0; i < getNbFields(); i++) + if(!myFieldsLst[i].myActors.empty()) + if (myFieldsLst[i].myActors[myFrame] != 0) + myFieldsLst[i].myActors[myFrame]->VisibilityOn(); + if(!myFieldsLst[0].myTiming.empty()){ + emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]); + myView->Repaint(); + } } -//************************************************************************ +//------------------------------------------------------------------------ void VISU_TimeAnimation::lastFrame() { + if (!myView) { + MESSAGE("Viewer is not defined for animation"); + return; + } stopAnimation(); int i; - for (i = 0; i < getNbFields(); i++) - if (myFieldsLst[i].myActors[myFrame] != 0) + for (i = 0; i < getNbFields(); i++) + if (myFieldsLst[i].myActors[myFrame] != 0) myFieldsLst[i].myActors[myFrame]->VisibilityOff(); + myFrame = myFieldsLst[0].myNbFrames-1; - for (i = 0; i < getNbFields(); i++) + for (i = 0; i < getNbFields(); i++) if (myFieldsLst[i].myActors[myFrame] != 0) myFieldsLst[i].myActors[myFrame]->VisibilityOn(); - + emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]); myView->Repaint(); } -//************************************************************************ +//------------------------------------------------------------------------ // For Batchmode using void VISU_TimeAnimation::gotoFrame(CORBA::Long theFrame) { - if ((theFrame < 0) || (theFrame > (getNbFrames()-1))) + if (!myView) { + MESSAGE("Viewer is not defined for animation"); + return; + } + if ((theFrame < 0) || (theFrame > (getNbFrames()-1))) return; stopAnimation(); qApp->lock(); qApp->syncX(); int i; - for (i = 0; i < getNbFields(); i++) + for (i = 0; i < getNbFields(); i++) if (myFieldsLst[i].myActors[myFrame] != 0) myFieldsLst[i].myActors[myFrame]->VisibilityOff(); + myFrame = theFrame; - for (i = 0; i < getNbFields(); i++) + for (i = 0; i < getNbFields(); i++) if (myFieldsLst[i].myActors[myFrame] != 0) myFieldsLst[i].myActors[myFrame]->VisibilityOn(); + emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]); myView->Repaint(); - qApp->flushX(); + qApp->flushX(); qApp->processEvents(3); qApp->unlock(); } -//************************************************************************ -VISU::ScalarMap_ptr VISU_TimeAnimation::getPresentation(CORBA::Long theField, CORBA::Long theFrame) { +//------------------------------------------------------------------------ +VISU::ColoredPrs3d_ptr VISU_TimeAnimation::getPresentation(CORBA::Long theField, CORBA::Long theFrame) { if ((theField > getNbFields()) || (theField < 0)) - return VISU::ScalarMap::_nil(); + return VISU::ColoredPrs3d::_nil(); if ((theFrame < 0) || (theFrame > (myFieldsLst[theField].myNbFrames - 1))) - return VISU::ScalarMap::_nil(); + return VISU::ColoredPrs3d::_nil(); return myFieldsLst[theField].myPrs[theFrame]->_this(); } -//************************************************************************ -CORBA::Long VISU_TimeAnimation::getNbFrames() { +//------------------------------------------------------------------------ +CORBA::Long VISU_TimeAnimation::getNbFrames() { return (getNbFields() > 0)? myFieldsLst[0].myNbFrames : 0; } -//************************************************************************ -void VISU_TimeAnimation::run() { +//------------------------------------------------------------------------ +void VISU_TimeAnimation::run() +{ if (!myView) { - MESSAGE("Viewer is nod defined for animation"); + MESSAGE("Viewer is not defined for animation"); return; } - - double k=1; - double aOneVal; - bool isDumping = !myDumpPath.isEmpty(); - aOneVal = (myFieldsLst[0].myNbFrames > 2) ? - myFieldsLst[0].myTiming[1] - myFieldsLst[0].myTiming[0] : 1; - - qApp->lock(); + double k = 1; + bool isDumping = !myDumpPath.isEmpty(); + double aOneVal = 1; + if (myFieldsLst[0].myNbFrames > 2) + aOneVal = myFieldsLst[0].myTiming[1] - myFieldsLst[0].myTiming[0]; + qApp->lock(); while (myIsActive) { emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]); for (int i = 0; i < getNbFields(); i++) { FieldData& aData = myFieldsLst[i]; if (myFrame > 0) { - if (aData.myActors[myFrame-1] != 0) + if (aData.myActors[myFrame-1] != 0) aData.myActors[myFrame-1]->VisibilityOff(); - } else { + } else { if (aData.myActors[aData.myNbFrames-1] != 0) aData.myActors[aData.myNbFrames-1]->VisibilityOff(); } @@ -453,44 +564,48 @@ void VISU_TimeAnimation::run() { } } myView->Repaint(false); + + k = 1; + if (myProportional) { + switch (myFrame) { + case 0: + break; + case 1: + if (myFieldsLst[0].myNbFrames > 2) + k = (myFieldsLst[0].myTiming[myFrame+1] - + myFieldsLst[0].myTiming[myFrame]) / aOneVal; + break; + default: + if (myFrame < (myFieldsLst[0].myNbFrames - 1)) + k = (myFieldsLst[0].myTiming[myFrame+1] - + myFieldsLst[0].myTiming[myFrame]) / aOneVal; + } + } + int delay = (int)(1000. * k / mySpeed); + if (delay < 1 && isDumping) { + // We must unlock mutex for some time before grabbing to allow view updating + delay = 1; + } + qApp->unlock(); + msleep(delay); + qApp->lock(); + if (isDumping) { - QPixmap px = QPixmap::grabWindow(myView->getViewWidget()->winId()); + // We must unlock mutex for some time before grabbing to allow view updating + qApp->unlock(); + msleep(100); + qApp->lock(); QString aFile(myDumpPath); QString aName = QString("%1").arg(myFieldsLst[0].myTiming[myFrame]); int aPos = -1; while ((aPos = aName.find(".")) > -1 ) aName.replace(aPos, 1, "_"); aFile += aName; - aFile += ".jpeg"; - px.save(aFile, "JPEG"); - } - if (!isDumping) { - if (myProportional) { - switch (myFrame) { - case 0: - k=1; - break; - case 1: - if (myFieldsLst[0].myNbFrames > 2) - k = (myFieldsLst[0].myTiming[myFrame+1] - myFieldsLst[0].myTiming[myFrame])/aOneVal; - else - k = 1; - break; - default: - k = (myFrame < (myFieldsLst[0].myNbFrames-1))? - (myFieldsLst[0].myTiming[myFrame+1] - myFieldsLst[0].myTiming[myFrame])/aOneVal : 1; - } - } else - k = 1; - - qApp->unlock(); - msleep((int)(1000.*k/mySpeed)); - qApp->lock(); - } else { - qApp->unlock(); - msleep(100); - qApp->lock(); + aFile += "."; + aFile += myDumpFormat.lower(); + myView->dumpViewToFormat(aFile,myDumpFormat); } + if (!myIsActive) break; myFrame++; @@ -508,43 +623,551 @@ void VISU_TimeAnimation::run() { QThread::exit(); } -//************************************************************************ -VISU::Result_i* VISU_TimeAnimation::createPresent(SALOMEDS::SObject_var theField) { - SALOMEDS::SObject_var aSObj = theField->GetFather(); +//------------------------------------------------------------------------ +VISU::Result_i* VISU_TimeAnimation::createPresent (_PTR(SObject) theField) +{ + _PTR(SObject) aSObj = theField->GetFather(); aSObj = aSObj->GetFather(); aSObj = aSObj->GetFather(); - CORBA::Object_var anObject = VISU::SObjectToObject(aSObj); - if(CORBA::is_nil(anObject)) return NULL; + CORBA::Object_var anObject = VISU::ClientSObjectToObject(aSObj); + if (CORBA::is_nil(anObject)) return NULL; return dynamic_cast(VISU::GetServant(anObject).in()); } - -//************************************************************************ -VISU::Storable::TRestoringMap VISU_TimeAnimation::getMapOfValue(SALOMEDS::SObject_var theSObject) { +//------------------------------------------------------------------------ +VISU::Storable::TRestoringMap VISU_TimeAnimation::getMapOfValue (_PTR(SObject) theSObject) +{ VISU::Storable::TRestoringMap aMap; - if(!theSObject->_is_nil()){ - SALOMEDS::GenericAttribute_var anAttr; + if (theSObject) { + _PTR(GenericAttribute) anAttr; if (theSObject->FindAttribute(anAttr, "AttributeComment")) { - SALOMEDS::AttributeComment_var aComment = SALOMEDS::AttributeComment::_narrow(anAttr); - CORBA::String_var aString = aComment->Value(); - QString strIn(aString.in()); - VISU::Storable::StrToMap(strIn,aMap); + _PTR(AttributeComment) aComment (anAttr); + std::string aString = aComment->Value(); + QString strIn (aString.c_str()); + VISU::Storable::StrToMap(strIn, aMap); } } return aMap; } -//************************************************************************ -double VISU_TimeAnimation::getTimeValue(SALOMEDS::SObject_var theTimeStamp) { - SALOMEDS::GenericAttribute_var anAttr; - if(theTimeStamp->FindAttribute(anAttr, "AttributeName")) { - SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr); - QString aNameString(aName->Value()); - return aNameString.toDouble(); +//------------------------------------------------------------------------ +double VISU_TimeAnimation::getTimeValue (_PTR(SObject) theTimeStamp) +{ + _PTR(GenericAttribute) anAttr; + if (theTimeStamp->FindAttribute(anAttr, "AttributeName")) { + _PTR(AttributeName) aName (anAttr); + QString aNameString (aName->Value().c_str()); + int time_len = aNameString.find(','); + if (time_len > -1) + return aNameString.left(time_len).toDouble(); + else + return aNameString.toDouble(); } + return -1.0; } - + +//------------------------------------------------------------------------ +void VISU_TimeAnimation::setSpeed(CORBA::Long theSpeed) +{ + mySpeed = (theSpeed<1)? 1 : theSpeed; +} + +std::string VISU_TimeAnimation::setDumpFormat(const char* theFormat) +{ + myDumpFormat = theFormat; + QStrList aDumpFormats = QImageIO::outputFormats(); + if (myDumpFormat.isEmpty() || aDumpFormats.find(theFormat) < 0) { + if (aDumpFormats.find("JPEG")) + myDumpFormat = "JPEG"; + else + myDumpFormat = aDumpFormats.at(0); + } + return myDumpFormat.latin1(); +} + //************************************************************************ -void VISU_TimeAnimation::setSpeed(CORBA::Long theSpeed) { - mySpeed = (theSpeed<1)? 1 : theSpeed; +int VISU_TimeAnimation::myNBAnimations = 0; +QString VISU_TimeAnimation::GenerateName() +{ + return VISU::GenerateName("Animation", myNBAnimations++); +} + +//------------------------------------------------------------------------ +std::string GetPresentationComment (VISU::VISUType thePrsType) +{ + std::string aPrsCmt; + switch (thePrsType) { + case VISU::TSCALARMAP: + aPrsCmt = VISU::ScalarMap_i::myComment; + break; + case VISU::TISOSURFACE: + aPrsCmt = VISU::IsoSurfaces_i::myComment; + break; + case VISU::TCUTPLANES: + aPrsCmt = VISU::CutPlanes_i::myComment; + break; + case VISU::TCUTLINES: + aPrsCmt = VISU::CutLines_i::myComment; + break; + case VISU::TPLOT3D: + aPrsCmt = VISU::Plot3D_i::myComment; + break; + case VISU::TDEFORMEDSHAPE: + aPrsCmt = VISU::DeformedShape_i::myComment; + break; + case VISU::TVECTORS: + aPrsCmt = VISU::Vectors_i::myComment; + break; + case VISU::TSTREAMLINES: + aPrsCmt = VISU::StreamLines_i::myComment; + break; + case VISU::TGAUSSPOINTS: + aPrsCmt = VISU::GaussPoints_i::myComment; + break; + case VISU::TSCALARMAPONDEFORMEDSHAPE: + aPrsCmt = VISU::ScalarMapOnDeformedShape_i::myComment; + break; + default: + aPrsCmt = "Unknown presentation"; + break; + } + return aPrsCmt; +} + +//------------------------------------------------------------------------ +SALOMEDS::SObject_ptr VISU_TimeAnimation::publishInStudy() +{ + if (myStudy->GetProperties()->IsLocked()) + return SALOMEDS::SObject::_nil(); + + _PTR(StudyBuilder) aStudyBuilder = myStudy->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + _PTR(SComponent) aSComponent = VISU::ClientFindOrCreateVisuComponent(myStudy); + std::string aSComponentEntry = aSComponent->GetID(); + + QString aComment; + aComment.sprintf("myComment=ANIMATION;myType=%d;myTimeMinVal=%g;myTimeMaxVal=%g", + VISU::TANIMATION,myTimeMinVal,myTimeMaxVal); + + string anEntry = VISU::CreateAttributes(myStudy,aSComponentEntry.c_str(),"","", + GenerateName(),"",aComment,true); + myAnimEntry = anEntry.c_str(); + _PTR(SObject) aAnimSObject = myStudy->FindObjectID(anEntry.c_str()); + + for (int i = 0; i < getNbFields(); i++) { + FieldData& aData = myFieldsLst[i]; + + _PTR(SObject) newObj = aStudyBuilder->NewObject(aAnimSObject); + aStudyBuilder->Addreference(newObj, aData.myField); + + if (aData.myPrs.empty()) { + generatePresentations(i); + } + ostringstream strOut; + aData.myPrs[0]->ToStream(strOut); + string aPrsComment = strOut.str(); + VISU::CreateAttributes(myStudy, newObj->GetID().c_str(),"","", + aData.myPrs[0]->GetComment(),"",aPrsComment.c_str(),true); + } + aStudyBuilder->CommitCommand(); + + return VISU::GetSObject(aAnimSObject); +} + +//------------------------------------------------------------------------ +void VISU_TimeAnimation::saveAnimation() +{ + if (myStudy->GetProperties()->IsLocked()) return; + if (myAnimEntry.isEmpty()) return; + + _PTR(SObject) aAnimSObject = myStudy->FindObjectID(myAnimEntry.latin1()); + if (!aAnimSObject) return; + + _PTR(StudyBuilder) aStudyBuilder = myStudy->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + _PTR(SComponent) aSComponent = VISU::ClientFindOrCreateVisuComponent(myStudy); + std::string aSComponentEntry = aSComponent->GetID(); + + QString aComment; + aComment.sprintf("myComment=ANIMATION;myType=%d;myTimeMinVal=%g;myTimeMaxVal=%g", + VISU::TANIMATION,myTimeMinVal,myTimeMaxVal); + + _PTR(GenericAttribute) anAttr; + anAttr = aStudyBuilder->FindOrCreateAttribute(aAnimSObject, "AttributeComment"); + _PTR(AttributeComment) aCmnt (anAttr); + aCmnt->SetValue(aComment.latin1()); + + _PTR(ChildIterator) anIter = myStudy->NewChildIterator(aAnimSObject); + int i = 0, nbf = getNbFields(); + for (anIter->Init(); anIter->More(); anIter->Next(), i++) { + if (i >= nbf) break; // it must not be + FieldData& aData = myFieldsLst[i]; + + // Get presentation name and comment + if (aData.myPrs.empty()) { + generatePresentations(i); + } + ostringstream strOut; + aData.myPrs[0]->ToStream(strOut); + string aPrsComment = strOut.str(); + string aPrsNameTxt = aData.myPrs[0]->GetComment(); + + // Save in study + _PTR(SObject) aRefObj = anIter->Value(); + _PTR(ChildIterator) anPrsIter = myStudy->NewChildIterator(aRefObj); + anPrsIter->Init(); + + if (anPrsIter->More()) { + _PTR(SObject) aPrsObj = anPrsIter->Value(); + anAttr = aStudyBuilder->FindOrCreateAttribute(aPrsObj, "AttributeComment"); + aCmnt = _PTR(AttributeComment)(anAttr); + aCmnt->SetValue(aPrsComment.c_str()); + + anAttr = aStudyBuilder->FindOrCreateAttribute(aPrsObj, "AttributeName"); + _PTR(AttributeName) aPrsName (anAttr); + aPrsName->SetValue(aPrsNameTxt); + + } else { + VISU::CreateAttributes(myStudy, aRefObj->GetID().c_str(),"","", + aPrsNameTxt.c_str(),"",aPrsComment.c_str(),true); + } + } + aStudyBuilder->CommitCommand(); +} + +//------------------------------------------------------------------------ +void VISU_TimeAnimation::restoreFromStudy(SALOMEDS::SObject_ptr theField) +{ + _PTR(SObject) aAnimSObject = VISU::GetClientSObject(theField, myStudy); + restoreFromStudy(aAnimSObject); +} + +void VISU_TimeAnimation::restoreFromStudy(_PTR(SObject) theField) +{ + _PTR(SObject) aAnimSObject = theField; + + VISU::Storable::TRestoringMap aMap; + _PTR(GenericAttribute) anAttr; + if (!aAnimSObject->FindAttribute(anAttr, "AttributeComment")) return; + + _PTR(AttributeComment) aComment (anAttr); + string aComm = aComment->Value(); + QString strIn (aComm.c_str()); + VISU::Storable::StrToMap(strIn,aMap); + bool isExist; + + myTimeMinVal = VISU::Storable::FindValue(aMap,"myTimeMinVal",&isExist).toDouble(); + myTimeMaxVal = VISU::Storable::FindValue(aMap,"myTimeMaxVal",&isExist).toDouble(); + + _PTR(ChildIterator) anIter = myStudy->NewChildIterator(aAnimSObject); + for (anIter->Init(); anIter->More(); anIter->Next()) { + _PTR(SObject) aRefObj = anIter->Value(); + _PTR(SObject) aFieldObj; + if (!aRefObj->ReferencedObject(aFieldObj) ) continue; + addField(aFieldObj); + FieldData& aData = getFieldData(getNbFields()-1); + + // Get Presentation object + _PTR(ChildIterator) anPrsIter = myStudy->NewChildIterator(aRefObj); + anPrsIter->Init(); + if (!anPrsIter->More()) continue; + _PTR(SObject) aPrsObj = anPrsIter->Value(); + if (!aPrsObj->FindAttribute(anAttr, "AttributeName")) continue; + _PTR(AttributeName) aName (anAttr); + string aStr = aName->Value(); + QString strName (aStr.c_str()); + + if (strName == VISU::ScalarMap_i::myComment.c_str()) + aData.myPrsType = VISU::TSCALARMAP; + else if (strName == VISU::IsoSurfaces_i::myComment.c_str()) + aData.myPrsType = VISU::TISOSURFACE; + else if (strName == VISU::CutPlanes_i::myComment.c_str()) + aData.myPrsType = VISU::TCUTPLANES; + else if (strName == VISU::CutLines_i::myComment.c_str()) + aData.myPrsType = VISU::TCUTLINES; + else if (strName == VISU::Plot3D_i::myComment.c_str()) + aData.myPrsType = VISU::TPLOT3D; + else if (strName == VISU::DeformedShape_i::myComment.c_str()) + aData.myPrsType = VISU::TDEFORMEDSHAPE; + else if (strName == VISU::Vectors_i::myComment.c_str()) + aData.myPrsType = VISU::TVECTORS; + else if (strName == VISU::StreamLines_i::myComment.c_str()) + aData.myPrsType = VISU::TSTREAMLINES; + else if (strName == VISU::GaussPoints_i::myComment.c_str()) + aData.myPrsType = VISU::TGAUSSPOINTS; + else if (strName == VISU::ScalarMapOnDeformedShape_i::myComment.c_str()) + aData.myPrsType = VISU::TSCALARMAPONDEFORMEDSHAPE; + else + continue; + generatePresentations(getNbFields()-1); + + if (!aPrsObj->FindAttribute(anAttr, "AttributeComment")) continue; + _PTR(AttributeComment) aPrsComment (anAttr); + string aPrsComm = aPrsComment->Value(); + if (aPrsComm.length() > 0) { + QString strPrsIn (aPrsComm.c_str()); + VISU::Storable::TRestoringMap aPrsMap; + VISU::Storable::StrToMap(strPrsIn,aPrsMap); + + aData.myPrs[0]->Restore(aPrsMap); + } + aData.myPrs[0]->GetOffset(aData.myOffset); + for (int i = 1; i < aData.myNbFrames; i++) { + //jfa 03.08.2005:aData.myPrs[i]->SameAs(aData.myPrs[0]); + aData.myPrs[i]->SameAsParams(aData.myPrs[0]);//jfa 03.08.2005 + } + } + string aStr = aAnimSObject->GetID(); + myAnimEntry = aStr.c_str(); +} + +void VISU_TimeAnimation::onViewDeleted() +{ + myView = 0; +} + + +//======================================================================== +//======================================================================== +//======================================================================== +struct TNewAnimationEvent: public SALOME_Event +{ + std::string myStudyName; + VISU::View3D_ptr myView3D; + + typedef VISU_TimeAnimation* TResult; + TResult myResult; + + TNewAnimationEvent (std::string theStudyName, VISU::View3D_ptr theView3D): + myStudyName(theStudyName), + myView3D(VISU::View3D::_duplicate(theView3D)), + myResult(NULL) + {} + + virtual + void + Execute() + { + SUIT_Session* aSession = SUIT_Session::session(); + QPtrList anApplications = aSession->applications(); + QPtrListIterator anIter (anApplications); + while (SUIT_Application* anApp = anIter.current()) { + ++anIter; + if (SUIT_Study* aSStudy = anApp->activeStudy()) { + if (SalomeApp_Study* aStudy = dynamic_cast(aSStudy)) { + if (_PTR(Study) aCStudy = aStudy->studyDS()) { + if (myStudyName == aCStudy->Name()) { + myResult = new VISU_TimeAnimation (aCStudy, myView3D); + break; + } + } + } + } + } + } +}; + +VISU_TimeAnimation_i::VISU_TimeAnimation_i (SALOMEDS::Study_ptr theStudy, + VISU::View3D_ptr theView3D) +{ + std::string aStudyName = theStudy->Name(); + myAnim = ProcessEvent(new TNewAnimationEvent (aStudyName, theView3D)); +} + +VISU_TimeAnimation_i::~VISU_TimeAnimation_i() +{ + delete myAnim; +} + +void VISU_TimeAnimation_i::addField (SALOMEDS::SObject_ptr theField) +{ + myAnim->addField(theField); +} + +CORBA::Boolean VISU_TimeAnimation_i::generateFrames() +{ + return ProcessEvent(new TMemFunEvent + (myAnim,&VISU_TimeAnimation::generateFrames)); +} + +void VISU_TimeAnimation_i::generatePresentations (CORBA::Long theFieldNum) +{ + myAnim->generatePresentations(theFieldNum); +} + +void VISU_TimeAnimation_i::clearView() +{ + ProcessVoidEvent(new TVoidMemFunEvent + (myAnim,&VISU_TimeAnimation::clearView)); +} + +void VISU_TimeAnimation_i::stopAnimation() +{ + ProcessVoidEvent(new TVoidMemFunEvent + (myAnim,&VISU_TimeAnimation::stopAnimation)); +} + +void VISU_TimeAnimation_i::startAnimation() +{ + ProcessVoidEvent(new TVoidMemFunEvent + (myAnim,&VISU_TimeAnimation::startAnimation)); +} + +void VISU_TimeAnimation_i::nextFrame() +{ + ProcessVoidEvent(new TVoidMemFunEvent + (myAnim,&VISU_TimeAnimation::nextFrame)); +} + +void VISU_TimeAnimation_i::prevFrame() +{ + ProcessVoidEvent(new TVoidMemFunEvent + (myAnim,&VISU_TimeAnimation::prevFrame)); +} + +void VISU_TimeAnimation_i::firstFrame() +{ + ProcessVoidEvent(new TVoidMemFunEvent + (myAnim,&VISU_TimeAnimation::firstFrame)); +} + +void VISU_TimeAnimation_i::lastFrame() +{ + ProcessVoidEvent(new TVoidMemFunEvent + (myAnim,&VISU_TimeAnimation::lastFrame)); +} + +void VISU_TimeAnimation_i::gotoFrame(CORBA::Long theFrame) +{ + ProcessVoidEvent(new TVoidMemFun1ArgEvent + (myAnim,&VISU_TimeAnimation::gotoFrame,theFrame)); +} + +CORBA::Long VISU_TimeAnimation_i::getNbFields() +{ + return myAnim->getNbFields(); +} + +CORBA::Long VISU_TimeAnimation_i::getNbFrames() +{ + return myAnim->getNbFrames(); +} + +CORBA::Boolean VISU_TimeAnimation_i::isRunning() +{ + return myAnim->isRunning(); +} + +CORBA::Long VISU_TimeAnimation_i::getCurrentFrame() +{ + return myAnim->getCurrentFrame(); +} + +VISU::ColoredPrs3d_ptr VISU_TimeAnimation_i::getPresentation + (CORBA::Long theField, CORBA::Long theFrame) +{ + return myAnim->getPresentation(theField,theFrame); +} + +void VISU_TimeAnimation_i::setPresentationType (CORBA::Long theFieldNum, + VISU::VISUType theType) +{ + myAnim->setPresentationType(theFieldNum,theType); +} + +VISU::VISUType VISU_TimeAnimation_i::getPresentationType (CORBA::Long theFieldNum) +{ + return myAnim->getPresentationType(theFieldNum); +} + +void VISU_TimeAnimation_i::setSpeed(CORBA::Long theSpeed) +{ + myAnim->setSpeed(theSpeed); +} + +CORBA::Long VISU_TimeAnimation_i::getSpeed() +{ + return myAnim->getSpeed(); +} + +CORBA::Boolean VISU_TimeAnimation_i::isProportional() +{ + return myAnim->isProportional(); +} + +void VISU_TimeAnimation_i::setAnimationRange (CORBA::Double theMin, + CORBA::Double theMax) +{ + myAnim->setAnimationRange(theMin,theMax); +} + +CORBA::Double VISU_TimeAnimation_i::getMinRange() +{ + return myAnim->getMinRange(); +} + +CORBA::Double VISU_TimeAnimation_i::getMaxRange() +{ + return myAnim->getMaxRange(); +} + +CORBA::Boolean VISU_TimeAnimation_i::isRangeDefined() +{ + return myAnim->isRangeDefined(); +} + +void VISU_TimeAnimation_i::dumpTo (const char* thePath) +{ + myAnim->dumpTo(thePath); +} + +char* VISU_TimeAnimation_i::setDumpFormat (const char* theFormat) +{ + string aDumpFormat = myAnim->setDumpFormat(theFormat); + return CORBA::string_dup(aDumpFormat.c_str()); +} + +CORBA::Boolean VISU_TimeAnimation_i::isCycling() +{ + return myAnim->isCycling(); +} + +CORBA::Double VISU_TimeAnimation_i::getMinTime() +{ + return myAnim->getMinTime(); +} + +CORBA::Double VISU_TimeAnimation_i::getMaxTime() +{ + return myAnim->getMaxTime(); +} + +void VISU_TimeAnimation_i::setProportional (CORBA::Boolean theProp) +{ + myAnim->setProportional(theProp); +} + +void VISU_TimeAnimation_i::setCycling (CORBA::Boolean theCycle) +{ + myAnim->setCycling(theCycle); +} + +SALOMEDS::SObject_ptr VISU_TimeAnimation_i::publishInStudy() +{ + return myAnim->publishInStudy(); +} + +void VISU_TimeAnimation_i::restoreFromStudy(SALOMEDS::SObject_ptr theObj) +{ + myAnim->restoreFromStudy(theObj); +} + +CORBA::Boolean VISU_TimeAnimation_i::isSavedInStudy() +{ + return myAnim->isSavedInStudy(); +} + +void VISU_TimeAnimation_i::saveAnimation() +{ + myAnim->saveAnimation(); }