1 // Copyright (C) 2003 CEA/DEN, EDF R&D
5 // File : VISU_TimeAnimation.cxx
6 // Author : Vitaly SMETANNIKOV
9 #include "VISU_TimeAnimation.h"
10 #include "VISU_Result_i.hh"
11 #include "VISU_Prs3d_i.hh"
12 #include "VISU_Mesh_i.hh"
13 #include "VISU_ScalarMap_i.hh"
14 #include "VISU_IsoSurfaces_i.hh"
15 #include "VISU_DeformedShape_i.hh"
16 #include "VISU_CutPlanes_i.hh"
17 #include "VISU_CutLines_i.hh"
18 #include "VISU_Vectors_i.hh"
19 #include "VISU_StreamLines_i.hh"
20 #include "VISU_ViewManager_i.hh"
21 #include "VISU_ScalarBarActor.hxx"
22 #include "VISU_Actor.h"
24 #include "SALOME_Event.hxx"
26 #include "VTKViewer_ViewFrame.h"
28 #include "QAD_Config.h"
32 //QWaitCondition myCondition;
33 static int MYDELAY = 1;
35 //************************************************************************
36 VISU_TimeAnimation::VISU_TimeAnimation(SALOMEDS::Study_ptr theStudy, VISU::View3D_ptr theView3D) {
41 myProportional = false;
44 if(!CORBA::is_nil(theView3D)){
45 VISU::View3D_i* pView = dynamic_cast<VISU::View3D_i*>(GetServant(theView3D).in());
46 QAD_StudyFrame* aStudyFrame = pView->GetStudyFrame();
47 myView = VISU::GetViewFrame(aStudyFrame);
59 //************************************************************************
60 VISU_TimeAnimation::~VISU_TimeAnimation() {
61 for (int i = 0; i < getNbFields(); i++) {
62 clearData(myFieldsLst[i]);
67 //************************************************************************
68 void VISU_TimeAnimation::addField(SALOMEDS::SObject_ptr theField) {
70 aNewData.myField = SALOMEDS::SObject::_duplicate(theField);
71 aNewData.myNbFrames = 0;
72 aNewData.myPrsType = VISU::TSCALARMAP;
73 VISU::Storable::TRestoringMap aMap = getMapOfValue(aNewData.myField);
74 aNewData.myNbTimes = VISU::Storable::FindValue(aMap,"myNbTimeStamps").toLong();
75 myFieldsLst.append(aNewData);
77 //find Min/Max timestamps
78 if ((myTimeMin == 0) && (myTimeMax == 0)) {
79 SALOMEDS::ChildIterator_var anIter = myStudy->NewChildIterator(theField);
80 SALOMEDS::SObject_var aTimeStamp;
81 anIter->Next(); // First is reference on support
82 myTimeMin = getTimeValue(anIter->Value());
83 for(; anIter->More(); anIter->Next()) {
84 myTimeMax = getTimeValue(anIter->Value());
90 //************************************************************************
91 void VISU_TimeAnimation::clearData(FieldData& theData) {
92 theData.myTiming.clear();
93 vtkRenderer* aRen = myView->getRenderer();
94 if (!theData.myActors.empty()) {
95 for (int i = 0, iEnd = theData.myActors.size(); i < iEnd; i++) {
96 //_CS_PhB if (theData.myActors.at(i) != 0) {
97 //_CS_PhB theData.myActors.at(i)->RemoveFromRender(aRen);
98 //_CS_PhB theData.myActors.at(i)->Delete();
100 if (theData.myActors[i] != 0) {
101 theData.myActors[i]->RemoveFromRender(aRen);
102 theData.myActors[i]->Delete();
105 theData.myActors.clear();
107 if (!theData.myPrs.empty()) {
108 for (int i = 0, iEnd = theData.myPrs.size(); i < iEnd; i++)
109 //_CS_PhB if (theData.myPrs.at(i) != 0) {
110 //_CS_PhB theData.myPrs.at(i)->_remove_ref();
112 if (theData.myPrs[i] != 0) {
113 theData.myPrs[i]->_remove_ref();
115 theData.myPrs.clear();
117 theData.myNbFrames = 0;
122 //************************************************************************
123 void VISU_TimeAnimation::generatePresentations(CORBA::Long theFieldNum) {
124 FieldData& aData = myFieldsLst[theFieldNum];
126 // Delete previous presentations
129 VISU::Result_i* pResult = createPresent(aData.myField);
130 VISU::Storable::TRestoringMap aMap = getMapOfValue(aData.myField);
131 aData.myNbFrames = aData.myNbTimes;
132 //VISU::Storable::FindValue(aMap,"myNbTimeStamps").toLong();
134 aData.myPrs.resize(aData.myNbTimes,NULL);
135 aData.myTiming.resize(aData.myNbTimes);
137 SALOMEDS::ChildIterator_var anIter = myStudy->NewChildIterator(aData.myField);
138 SALOMEDS::SObject_var aTimeStamp;
139 anIter->Next(); // First is reference on support
141 double aMin = VTK_LARGE_FLOAT, aMax = -VTK_LARGE_FLOAT;
142 for(;anIter->More();anIter->Next()) {
143 if (i == aData.myNbTimes) {
144 MESSAGE("There are extra timestamps in field");
147 aTimeStamp = anIter->Value();
148 if (aTimeStamp->_is_nil()) continue;
150 //_CS_PhB aData.myTiming.at(i) = getTimeValue(aTimeStamp);
151 //_CS_PhB if (isRangeDefined()) {
152 //_CS_PhB if (aData.myTiming.at(i) < myMinVal) continue;
153 //_CS_PhB if (aData.myTiming.at(i) > myMaxVal) break;
155 aData.myTiming[i] = getTimeValue(aTimeStamp);
156 if (isRangeDefined()) {
157 if (aData.myTiming[i] < myMinVal) continue;
158 if (aData.myTiming[i] > myMaxVal) break;
161 VISU::Storable::TRestoringMap aTimeMap = getMapOfValue(aTimeStamp);
162 QString aMeshName = VISU::Storable::FindValue(aTimeMap,"myMeshName");
163 VISU::Entity anEntity = (VISU::Entity) VISU::Storable::FindValue(aTimeMap,"myEntityId").toInt();
164 QString aFieldName = VISU::Storable::FindValue(aTimeMap,"myFieldName");
165 int aTimeStampId = VISU::Storable::FindValue(aTimeMap,"myTimeStampId").toInt();
167 switch (aData.myPrsType) {
168 case VISU::TSCALARMAP: // ScalarMap
170 VISU::ScalarMap_i* aPresent = new VISU::ScalarMap_i(pResult, false);
171 aPresent->Create(aMeshName.latin1(), anEntity,
172 aFieldName.latin1(), aTimeStampId);
173 //VISU::ScalarMap_var aTmp = aPresent->_this();
174 //aPresent->_remove_ref();
175 //_CS_PhB aData.myPrs.at(i) = aPresent;
176 aData.myPrs[i] = aPresent;
180 case VISU::TISOSURFACE: // Iso Surfaces
182 VISU::IsoSurfaces_i* aPresent = new VISU::IsoSurfaces_i(pResult, false);
183 aPresent->Create(aMeshName.latin1(), anEntity,
184 aFieldName.latin1(), aTimeStampId);
185 //VISU::IsoSurfaces_var aTmp = aPresent->_this();
186 //aPresent->_remove_ref();
187 //_CS_PhB aData.myPrs.at(i) = aPresent;
188 aData.myPrs[i] = aPresent;
192 case VISU::TCUTPLANES: // Cut Planes
194 VISU::CutPlanes_i* aPresent = new VISU::CutPlanes_i(pResult, false);
195 aPresent->Create(aMeshName.latin1(), anEntity,
196 aFieldName.latin1(), aTimeStampId);
197 //VISU::CutPlanes_var aTmp = aPresent->_this();
198 //aPresent->_remove_ref();
199 //_CS_PhB aData.myPrs.at(i) = aPresent;
200 aData.myPrs[i] = aPresent;
204 case VISU::TDEFORMEDSHAPE: // Deformed Shape
206 VISU::DeformedShape_i* aPresent = new VISU::DeformedShape_i(pResult, false);
207 aPresent->Create(aMeshName.latin1(), anEntity,
208 aFieldName.latin1(), aTimeStampId);
209 //VISU::DeformedShape_var aTmp = aPresent->_this();
210 //aPresent->_remove_ref();
211 //_CS_PhB aData.myPrs.at(i) = aPresent;
212 aData.myPrs[i] = aPresent;
216 case VISU::TVECTORS: // Vectors
218 VISU::Vectors_i* aPresent = new VISU::Vectors_i(pResult, false);
219 aPresent->Create(aMeshName.latin1(), anEntity,
220 aFieldName.latin1(), aTimeStampId);
221 //VISU::Vectors_var aTmp = aPresent->_this();
222 //aPresent->_remove_ref();
223 //_CS_PhB aData.myPrs.at(i) = aPresent;
224 aData.myPrs[i] = aPresent;
228 case VISU::TSTREAMLINES: // Stream Lines
230 VISU::StreamLines_i* aPresent = new VISU::StreamLines_i(pResult, false);
231 aPresent->Create(aMeshName.latin1(), anEntity,
232 aFieldName.latin1(), aTimeStampId);
233 //VISU::StreamLines_var aTmp = aPresent->_this();
234 //aPresent->_remove_ref();
235 //_CS_PhB aData.myPrs.at(i) = aPresent;
236 aData.myPrs[i] = aPresent;
240 //_CS_PhB if (aData.myPrs.at(i)->GetMin() < aMin) aMin = aData.myPrs.at(i)->GetMin();
241 //_CS_PhB if (aData.myPrs.at(i)->GetMax() > aMax) aMax = aData.myPrs.at(i)->GetMax();
242 if (aData.myPrs[i]->GetMin() < aMin) aMin = aData.myPrs[i]->GetMin();
243 if (aData.myPrs[i]->GetMax() > aMax) aMax = aData.myPrs[i]->GetMax();
246 aData.myNbFrames = i;
247 QString aFixRange = QAD_CONFIG->getSetting("Visu:SBImposeRange");
248 if (aFixRange.compare("true") != 0) {
249 for (i = 0; i < aData.myNbFrames; i++)
250 //_CS_PhB aData.myPrs.at(i)->SetRange(aMin, aMax);
251 aData.myPrs[i]->SetRange(aMin, aMax);
252 if(aData.myPrsType == VISU::TISOSURFACE)
253 for (i = 0; i < aData.myNbFrames; i++)
254 //_CS_PhB if(VISU::IsoSurfaces_i* aPrs = dynamic_cast<VISU::IsoSurfaces_i*>(aData.myPrs.at(i)))
255 if(VISU::IsoSurfaces_i* aPrs = dynamic_cast<VISU::IsoSurfaces_i*>(aData.myPrs[i]))
256 aPrs->SetSubRange(aMin, aMax);
261 //************************************************************************
262 CORBA::Boolean VISU_TimeAnimation::generateFrames() {
264 MESSAGE("Viewer is nod defined for animation");
268 myLastError = QString("Frame(s) for ");
269 bool aNoError = true;
272 vtkRenderer* aRen = myView->getRenderer();
274 for (int i = 0; i < getNbFields(); i++) {
275 FieldData& aData = myFieldsLst[i];
276 aData.myActors.resize(aData.myNbFrames,NULL);
277 for (long j = 0; j < aData.myNbFrames; j++) {
278 VISU_Actor* aActor = NULL;
280 //_CS_PhB aActor = aData.myPrs.at(j)->CreateActor();
281 aActor = aData.myPrs[j]->CreateActor();
282 myView->AddActor(aActor);
284 aActor->VisibilityOn();
286 aActor->VisibilityOff();
287 }catch(...){ //catch(std::runtime_error& exc){
289 //_CS_PhB myLastError += QString("%1 ").arg(aData.myTiming.at(j));
290 myLastError += QString("%1 ").arg(aData.myTiming[j]);
292 //_CS_PhB aData.myActors.at(j) = aActor;
293 aData.myActors[j] = aActor;
297 myLastError += QString(" timestamp(s) cannot /local/salome/SALOME2/VISU/V1_4_1a/VISU_SRC/src/VISU_I/VISU_TimeAnimation.cxxbe created.");
298 //_CS_PhB emit frameChanged(myFrame, myFieldsLst[0].myTiming.at(myFrame));
299 emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]);
304 //************************************************************************
305 void VISU_TimeAnimation::clearView() {
307 MESSAGE("Viewer is nod defined for animation");
310 //_CS_PhB : "mt" ne sert pas dans cette methode VISU::Mutex mt(myMutex,qApp,MYDELAY);
311 vtkRenderer* aRen = myView->getRenderer();
312 for (int i = 0; i < getNbFields(); i++) {
313 FieldData& aData = myFieldsLst[i];
314 if (!aData.myActors.empty()) {
315 for (int i = 0, iEnd = aData.myActors.size(); i < iEnd; i++) {
316 //_CS_PhB if (aData.myActors.at(i) != 0) {
317 //_CS_PhB aData.myActors.at(i)->RemoveFromRender(aRen);
318 //_CS_PhB aData.myActors.at(i)->Delete();
320 if (aData.myActors[i] != 0) {
321 aData.myActors[i]->RemoveFromRender(aRen);
322 aData.myActors[i]->Delete();
325 aData.myActors.clear();
328 myView->getRW()->getRenderWindow()->Render();
332 //************************************************************************
333 void VISU_TimeAnimation::stopAnimation() {
337 //************************************************************************
338 void VISU_TimeAnimation::startAnimation() {
345 //************************************************************************
346 void VISU_TimeAnimation::nextFrame() {
348 if (myFrame < (myFieldsLst[0].myNbFrames-1)) {
350 for (i = 0; i < getNbFields(); i++)
352 //_CS_PhB if (myFieldsLst[i].myActors.at(myFrame) != 0)
353 //_CS_PhB myFieldsLst[i].myActors.at(myFrame)->VisibilityOff();
354 if (myFieldsLst[i].myActors[myFrame] != 0)
355 myFieldsLst[i].myActors[myFrame]->VisibilityOff();
357 for (i = 0; i < getNbFields(); i++)
358 //_CS_PhB if (myFieldsLst[i].myActors.at(myFrame) != 0)
359 //_CS_PhB myFieldsLst[i].myActors.at(myFrame)->VisibilityOn();
360 if (myFieldsLst[i].myActors[myFrame] != 0)
361 myFieldsLst[i].myActors[myFrame]->VisibilityOn();
363 //_CS_PhB emit frameChanged(myFrame, myFieldsLst[0].myTiming.at(myFrame));
364 emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]);
369 //************************************************************************
370 void VISU_TimeAnimation::prevFrame() {
374 for (i = 0; i < getNbFields(); i++)
375 //_CS_PhB if (myFieldsLst[i].myActors.at(myFrame) != 0)
376 //_CS_PhB myFieldsLst[i].myActors.at(myFrame)->VisibilityOff();
377 if (myFieldsLst[i].myActors[myFrame] != 0)
378 myFieldsLst[i].myActors[myFrame]->VisibilityOff();
381 for (i = 0; i < getNbFields(); i++)
382 //_CS_PhB if (myFieldsLst[i].myActors.at(myFrame) != 0)
383 //_CS_PhB myFieldsLst[i].myActors.at(myFrame)->VisibilityOn();
384 if (myFieldsLst[i].myActors[myFrame] != 0)
385 myFieldsLst[i].myActors[myFrame]->VisibilityOn();
387 //_CS_PhB emit frameChanged(myFrame, myFieldsLst[0].myTiming.at(myFrame));
388 emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]);
393 //************************************************************************
394 void VISU_TimeAnimation::firstFrame() {
397 for (i = 0; i < getNbFields(); i++)
398 if(!myFieldsLst[i].myActors.empty())
399 //_CS_PhB if (myFieldsLst[i].myActors.at(myFrame) != 0)
400 //_CS_PhB myFieldsLst[i].myActors.at(myFrame)->VisibilityOff();
401 if (myFieldsLst[i].myActors[myFrame] != 0)
402 myFieldsLst[i].myActors[myFrame]->VisibilityOff();
404 for (i = 0; i < getNbFields(); i++)
405 if(!myFieldsLst[i].myActors.empty())
406 //_CS_PhB if (myFieldsLst[i].myActors.at(myFrame) != 0)
407 //_CS_PhB myFieldsLst[i].myActors.at(myFrame)->VisibilityOn();
408 if (myFieldsLst[i].myActors[myFrame] != 0)
409 myFieldsLst[i].myActors[myFrame]->VisibilityOn();
410 if(!myFieldsLst[0].myTiming.empty()){
411 //_CS_PhB emit frameChanged(myFrame, myFieldsLst[0].myTiming.at(myFrame));
412 emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]);
417 //************************************************************************
418 void VISU_TimeAnimation::lastFrame() {
421 for (i = 0; i < getNbFields(); i++)
422 //_CS_PhB if (myFieldsLst[i].myActors.at(myFrame) != 0)
423 //_CS_PhB myFieldsLst[i].myActors.at(myFrame)->VisibilityOff();
424 if (myFieldsLst[i].myActors[myFrame] != 0)
425 myFieldsLst[i].myActors[myFrame]->VisibilityOff();
426 myFrame = myFieldsLst[0].myNbFrames-1;
427 for (i = 0; i < getNbFields(); i++)
428 //_CS_PhB if (myFieldsLst[i].myActors.at(myFrame) != 0)
429 //_CS_PhB myFieldsLst[i].myActors.at(myFrame)->VisibilityOn();
430 if (myFieldsLst[i].myActors[myFrame] != 0)
431 myFieldsLst[i].myActors[myFrame]->VisibilityOn();
433 //_CS_PhB emit frameChanged(myFrame, myFieldsLst[0].myTiming.at(myFrame));
434 emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]);
439 //************************************************************************
440 // For Batchmode using
441 void VISU_TimeAnimation::gotoFrame(CORBA::Long theFrame) {
442 if ((theFrame < 0) || (theFrame > (getNbFrames()-1)))
448 for (i = 0; i < getNbFields(); i++)
449 //_CS_PhB if (myFieldsLst[i].myActors.at(myFrame) != 0)
450 //_CS_PhB myFieldsLst[i].myActors.at(myFrame)->VisibilityOff();
451 if (myFieldsLst[i].myActors[myFrame] != 0)
452 myFieldsLst[i].myActors[myFrame]->VisibilityOff();
455 for (i = 0; i < getNbFields(); i++)
456 //_CS_PhB if (myFieldsLst[i].myActors.at(myFrame) != 0)
457 //_CS_PhB myFieldsLst[i].myActors.at(myFrame)->VisibilityOn();
458 if (myFieldsLst[i].myActors[myFrame] != 0)
459 myFieldsLst[i].myActors[myFrame]->VisibilityOn();
461 //_CS_PhB emit frameChanged(myFrame, myFieldsLst[0].myTiming.at(myFrame));
462 emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]);
465 qApp->processEvents(3);
470 //************************************************************************
471 VISU::ScalarMap_ptr VISU_TimeAnimation::getPresentation(CORBA::Long theField, CORBA::Long theFrame) {
472 if ((theField > getNbFields()) || (theField < 0))
473 return VISU::ScalarMap::_nil();
474 if ((theFrame < 0) || (theFrame > (myFieldsLst[theField].myNbFrames - 1)))
475 return VISU::ScalarMap::_nil();
476 //_CS_PhB return myFieldsLst[theField].myPrs.at(theFrame)->_this();
477 return myFieldsLst[theField].myPrs[theFrame]->_this();
481 //************************************************************************
482 CORBA::Long VISU_TimeAnimation::getNbFrames() {
483 return (getNbFields() > 0)? myFieldsLst[0].myNbFrames : 0;
487 //************************************************************************
488 void VISU_TimeAnimation::run() {
490 MESSAGE("Viewer is nod defined for animation");
495 bool isDumping = !myDumpPath.isEmpty();
496 aOneVal = (myFieldsLst[0].myNbFrames > 2) ?
497 //_CS_PhB myFieldsLst[0].myTiming.at(1) - myFieldsLst[0].myTiming.at(0) : 1;
498 myFieldsLst[0].myTiming[1] - myFieldsLst[0].myTiming[0] : 1;
501 //_CS_PhB emit frameChanged(myFrame, myFieldsLst[0].myTiming.at(myFrame));
502 emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]);
503 for (int i = 0; i < getNbFields(); i++) {
504 FieldData& aData = myFieldsLst[i];
506 //_CS_PhB if (aData.myActors.at(myFrame-1) != 0)
507 //_CS_PhB aData.myActors.at(myFrame-1)->VisibilityOff();
508 if (aData.myActors[myFrame-1] != 0)
509 aData.myActors[myFrame-1]->VisibilityOff();
511 //_CS_PhB if (aData.myActors.at(aData.myNbFrames-1) != 0)
512 //_CS_PhB aData.myActors.at(aData.myNbFrames-1)->VisibilityOff();
513 if (aData.myActors[aData.myNbFrames-1] != 0)
514 aData.myActors[aData.myNbFrames-1]->VisibilityOff();
516 //_CS_PhB if (aData.myActors.at(myFrame) != 0) {
517 //_CS_PhB aData.myActors.at(myFrame)->VisibilityOn();
518 if (aData.myActors[myFrame] != 0) {
519 aData.myActors[myFrame]->VisibilityOn();
522 myView->Repaint(false);
524 QPixmap px = QPixmap::grabWindow(myView->getViewWidget()->winId());
525 QString aFile(myDumpPath);
526 //_CS_PhB QString aName = QString("%1").arg(myFieldsLst[0].myTiming.at(myFrame));
527 QString aName = QString("%1").arg(myFieldsLst[0].myTiming[myFrame]);
529 while ((aPos = aName.find(".")) > -1 )
530 aName.replace(aPos, 1, "_");
533 px.save(aFile, "JPEG");
536 if (myProportional) {
542 if (myFieldsLst[0].myNbFrames > 2)
543 //_CS_PhB k = (myFieldsLst[0].myTiming.at(myFrame+1) - myFieldsLst[0].myTiming.at(myFrame))/aOneVal;
544 k = (myFieldsLst[0].myTiming[myFrame+1] - myFieldsLst[0].myTiming[myFrame])/aOneVal;
549 k = (myFrame < (myFieldsLst[0].myNbFrames-1))?
550 //_CS_PhB (myFieldsLst[0].myTiming.at(myFrame+1) - myFieldsLst[0].myTiming.at(myFrame))/aOneVal : 1;
551 (myFieldsLst[0].myTiming[myFrame+1] - myFieldsLst[0].myTiming[myFrame])/aOneVal : 1;
556 msleep((int)(1000.*k/mySpeed));
563 if (!myIsActive) break;
566 if (myFrame == myFieldsLst[0].myNbFrames) {
580 //************************************************************************
581 VISU::Result_i* VISU_TimeAnimation::createPresent(SALOMEDS::SObject_var theField) {
582 SALOMEDS::SObject_var aSObj = theField->GetFather();
583 aSObj = aSObj->GetFather();
584 aSObj = aSObj->GetFather();
585 CORBA::Object_var anObject = VISU::SObjectToObject(aSObj);
586 if(CORBA::is_nil(anObject)) return NULL;
587 return dynamic_cast<VISU::Result_i*>(VISU::GetServant(anObject).in());
591 //************************************************************************
592 VISU::Storable::TRestoringMap VISU_TimeAnimation::getMapOfValue(SALOMEDS::SObject_var theSObject) {
593 VISU::Storable::TRestoringMap aMap;
594 if(!theSObject->_is_nil()){
595 SALOMEDS::GenericAttribute_var anAttr;
596 if (theSObject->FindAttribute(anAttr, "AttributeComment")) {
597 SALOMEDS::AttributeComment_var aComment = SALOMEDS::AttributeComment::_narrow(anAttr);
598 CORBA::String_var aString = aComment->Value();
599 QString strIn(aString.in());
600 VISU::Storable::StrToMap(strIn,aMap);
606 //************************************************************************
607 double VISU_TimeAnimation::getTimeValue(SALOMEDS::SObject_var theTimeStamp) {
608 SALOMEDS::GenericAttribute_var anAttr;
609 if(theTimeStamp->FindAttribute(anAttr, "AttributeName")) {
610 SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
611 QString aNameString(aName->Value());
612 return aNameString.toDouble();
616 //************************************************************************
617 void VISU_TimeAnimation::setSpeed(CORBA::Long theSpeed) {
618 mySpeed = (theSpeed<1)? 1 : theSpeed;
622 //========================================================================
623 VISU_TimeAnimation_i::VISU_TimeAnimation_i(SALOMEDS::Study_ptr theStudy, VISU::View3D_ptr theView3D){
624 myAnim = new VISU_TimeAnimation(theStudy,theView3D);
628 VISU_TimeAnimation_i::~VISU_TimeAnimation_i(){
633 void VISU_TimeAnimation_i::addField(SALOMEDS::SObject_ptr theField){
634 myAnim->addField(theField);
638 CORBA::Boolean VISU_TimeAnimation_i::generateFrames(){
639 return ProcessEvent(new TMemFunEvent<VISU_TimeAnimation,bool>(myAnim,&VISU_TimeAnimation::generateFrames));
643 void VISU_TimeAnimation_i::generatePresentations(CORBA::Long theFieldNum){
644 myAnim->generatePresentations(theFieldNum);
648 void VISU_TimeAnimation_i::clearView(){
649 ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::clearView));
653 void VISU_TimeAnimation_i::stopAnimation(){
654 ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::stopAnimation));
658 void VISU_TimeAnimation_i::startAnimation(){
659 ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::startAnimation));
663 void VISU_TimeAnimation_i::nextFrame(){
664 ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::nextFrame));
668 void VISU_TimeAnimation_i::prevFrame(){
669 ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::prevFrame));
673 void VISU_TimeAnimation_i::firstFrame(){
674 ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::firstFrame));
678 void VISU_TimeAnimation_i::lastFrame(){
679 ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::lastFrame));
683 void VISU_TimeAnimation_i::gotoFrame(CORBA::Long theFrame){
684 ProcessVoidEvent(new TVoidMemFun1ArgEvent<VISU_TimeAnimation,CORBA::Long>(myAnim,&VISU_TimeAnimation::gotoFrame,theFrame));
688 CORBA::Long VISU_TimeAnimation_i::getNbFields(){
689 return myAnim->getNbFields();
693 CORBA::Long VISU_TimeAnimation_i::getNbFrames(){
694 return myAnim->getNbFrames();
698 CORBA::Boolean VISU_TimeAnimation_i::isRunning(){
699 return myAnim->isRunning();
703 CORBA::Long VISU_TimeAnimation_i::getCurrentFrame(){
704 return myAnim->getCurrentFrame();
708 VISU::ScalarMap_ptr VISU_TimeAnimation_i::getPresentation(CORBA::Long theField, CORBA::Long theFrame){
709 return myAnim->getPresentation(theField,theFrame);
713 void VISU_TimeAnimation_i::setPresentationType(CORBA::Long theFieldNum, VISU::VISUType theType){
714 myAnim->setPresentationType(theFieldNum,theType);
718 VISU::VISUType VISU_TimeAnimation_i::getPresentationType(CORBA::Long theFieldNum){
719 return myAnim->getPresentationType(theFieldNum);
723 void VISU_TimeAnimation_i::setSpeed(CORBA::Long theSpeed){
724 myAnim->setSpeed(theSpeed);
728 CORBA::Long VISU_TimeAnimation_i::getSpeed(){
729 return myAnim->getSpeed();
733 CORBA::Boolean VISU_TimeAnimation_i::isProportional(){
734 return myAnim->isProportional();
738 void VISU_TimeAnimation_i::setAnimationRange(CORBA::Double theMin, CORBA::Double theMax){
739 myAnim->setAnimationRange(theMin,theMax);
743 CORBA::Double VISU_TimeAnimation_i::getMinRange(){
744 return myAnim->getMinRange();
748 CORBA::Double VISU_TimeAnimation_i::getMaxRange(){
749 return myAnim->getMaxRange();
753 CORBA::Boolean VISU_TimeAnimation_i::isRangeDefined(){
754 return myAnim->isRangeDefined();
758 void VISU_TimeAnimation_i::dumpTo(const char* thePath){
759 myAnim->dumpTo(thePath);
763 CORBA::Boolean VISU_TimeAnimation_i::isCycling(){
764 return myAnim->isCycling();
768 CORBA::Double VISU_TimeAnimation_i::getMinTime(){
769 return myAnim->getMinTime();
773 CORBA::Double VISU_TimeAnimation_i::getMaxTime(){
774 return myAnim->getMaxTime();
778 void VISU_TimeAnimation_i::setProportional(CORBA::Boolean theProp){
779 myAnim->setProportional(theProp);
783 void VISU_TimeAnimation_i::setCycling(CORBA::Boolean theCycle){
784 myAnim->setCycling(theCycle);