VTKFIG  0.20.20181114
Easy VTK based in situ visualization
virtual void vtkfig::internals::MyInteractorStyle::OnChar ( )
inlinevirtual

Overwrite keyboard callback.

Create list of currently edited figures. These are those the same subframe which means that they have the same renderer

Pass key to edited figures

Definition at line 367 of file vtkfigMainThread.cxx.

368  {
369  // Get the key pressed
370  std::string key = this->Interactor->GetKeySym();
371 
372  //cout << key << endl;
373 
374  // disable some standard vtk keys
375  if(key== "f") {}
376 
377  // q -> exit
378  else if(key == "q")
379  {
380  exit(0);
381  }
382 
383  // Reset Camera
384  else if(key == "r")
385  {
386  for (auto & subframe: this->frame->subframes)
387  {
388  if (subframe.renderer==this->CurrentRenderer)
389  {
390  frame->RTResetCamera(subframe);
391  }
392  }
393  this->Interactor->Render();
394  }
395 
396  // Toggle wireframe
397  else if(key == "w")
398  {
399  for (auto &figure: this->frame->figures)
400  if (this->frame->subframes[figure->framepos].renderer==this->CurrentRenderer)
401  {
402  figure->state.wireframe=!figure->state.wireframe;
403  if (figure->state.wireframe)
404  for (auto & actor: figure->actors) actor->GetProperty()->SetRepresentationToWireframe();
405  else
406  for (auto& actor: figure->actors) actor->GetProperty()->SetRepresentationToSurface();
407  this->Interactor->Render();
408  }
409 
410  }
411 
412  // Write output to png
413  else if (key=="p")
414  {
415 
416  // Generate file name using current time
417  auto now = std::chrono::system_clock::now();
418  auto time = std::chrono::system_clock::to_time_t(now);
419  std::tm * ttm = localtime(&time);
420  char time_str[] = "yyyy-mm-ddTHH:MM:SS ";
421  strftime(time_str, strlen(time_str), "%Y-%m-%dT%H:%M:%S", ttm);
422  auto fname=frame->parameter.wintitle+"-"+time_str+".png";
423 
424  auto imgfilter = vtkSmartPointer<vtkWindowToImageFilter>::New();
425  imgfilter->SetInput(frame->window);
426  imgfilter->Update();
427 
428  auto pngwriter = vtkSmartPointer<vtkPNGWriter>::New();
429  pngwriter->SetInputConnection(imgfilter->GetOutputPort());
430  pngwriter->SetFileName(fname.c_str());
431 
432  this->Interactor->Render();
433  pngwriter->Write();
434 
435  cout << "Frame written to "<< fname << endl;
436  }
437 
438  // Keys which toggle editing
439  else if (key == "x" || key== "y" || key== "z" || key== "l" || key== "a")
440  {
441  if (!this->edit_mode)
442  {
443 
444  this->edit_mode=true;
448  for (auto &figure: frame->figures)
449  {
450 
451  if (
452  frame->subframes[figure->framepos].renderer==this->CurrentRenderer
453  // &&(
454  // (key=="a" && figure->SubClassName()=="Quiver")
455  // ||
456  // (key=="x" && figure->SubClassName()=="SurfaceContour")
457  // ||
458  // (key=="y" && figure->SubClassName()=="SurfaceContour")
459  // ||
460  // (key=="z" && figure->SubClassName()=="SurfaceContour")
461  // ||
462  // (key=="l" && figure->SubClassName()=="SurfaceContour")
463  // )
464  )
465  this->edited_figures.push_back(figure);
466  }
467  }
468 
470  for (auto figure : this->edited_figures)
471  figure->RTProcessKey(key);
472  this->Interactor->Render();
473  }
474 
475 
476  // Emulate mouse move for all edited figures
477  else if(key == "Left" || key== "Down")
478  {
479  if (this->edit_mode)
480  {
481  for (auto figure : this->edited_figures)
482  figure->RTProcessMove(-1,-1);
483  this->Interactor->Render();
484  }
485  }
486 
487  // Emulate mouse move for all edited figures
488  else if(key == "Right" || key== "Up")
489  {
490  if (this->edit_mode)
491  {
492  for (auto figure : this->edited_figures)
493  figure->RTProcessMove(1,1);
494  this->Interactor->Render();
495  }
496  }
497 
498  // These are interaction keys in edit mode
499  else if(key == "Return" || key=="Delete")
500  {
501  if (this->edit_mode)
502  {
503  for (auto figure : this->edited_figures)
504  figure->RTProcessKey(key);
505  this->Interactor->Render();
506  }
507  }
508 
509  // Escape ends edit mode
510  else if(key == "Escape")
511  {
512  this->edit_mode=false;
513  for (auto figure : this->edited_figures)
514  {
515  figure->RTProcessKey(key);
516  figure->RTMessage("");
517  }
518  this->Interactor->Render();
519  this->edited_figures.resize(0);
520  this->Interactor->Render();
521  }
522 
523  // Toggle some states independent of edit mode
524  else if(key == "I" || key== "L" || key == "E" || key == "S" || key == "slash" || key == "B" || key == "C" || key == "O"|| key == "A")
525  {
526  for (auto &figure: frame->figures)
527  if (frame->subframes[figure->framepos].renderer==this->CurrentRenderer)
528  figure->RTProcessKey(key);
529 
530  this->Interactor->Render();
531  }
532 
533  // Block/unblock calculation
534  else if (key=="space")
535  {
538  frame->title_actor->SetText(6,"-|-");
539  else
540  frame->title_actor->SetText(6,"---");
541  frame->title_actor->Modified();
542  frame->window->Render();
543  }
544 
545  // Block/unblock calculation
546  else if (key=="BackSpace")
547  {
550  frame->step_number=std::max(frame->step_number-2,0);
551 
552  }
553 
554  else if (key=="asterisk")
555  {
557  for(int i=0;i<this->frame->subframes.size();i++)
558  {
559  if (this->frame->subframes[i].renderer==this->CurrentRenderer)
560  this->frame->active_subframe=i;
561  }
562 
565  this->Interactor->Render();
566  }
567 
568 
569  else if (frame->single_subframe_view && key=="Next")
570  {
572  this->Interactor->Render();
573  }
574 
575  else if (frame->single_subframe_view && key=="Prior")
576  {
578  this->Interactor->Render();
579  }
580 
581 
582 
583  // Print help string
584  else if(key == "h" or key == "question")
585  {
586  cout << Frame::KeyboardHelp;
587  }
588 
589  // Pass other keys to base
590  else
591  {
592  vtkInteractorStyleTrackballCamera::OnChar();
593  }
594  }
void RTSetSingleView(bool single_viewport)
bool communication_blocked
space down state ?
internals::MainThread * mainthread
The spinning main thread.
Definition: vtkfigFrame.h:408
void RTSetActiveSubFrame(int isub, bool hide_old)
Set visible subframe.
vtkSmartPointer< vtkRenderWindow > window
Window vontaining frame.
Definition: vtkfigFrame.h:414
struct vtkfig::Frame::@2 parameter
Parameters to be passed between threads.
std::string wintitle
Definition: vtkfigFrame.h:381
void RTResetCamera(SubFrame &sf)
reset camera to default position
std::set< Figure * > figures
List of all figures in frame.
Definition: vtkfigFrame.h:310
std::vector< SubFrame > subframes
List of subframes.
Definition: vtkfigFrame.h:361
vtkSmartPointer< vtkCornerAnnotation > title_actor
Actor for frame title annotation.
Definition: vtkfigFrame.h:417
std::vector< Figure * > edited_figures
List of currently edited figures.
static constexpr const char * KeyboardHelp
Help string printed when pressing "h"/"?".
Definition: vtkfigFrame.h:256
bool single_subframe_view
Definition: vtkfigFrame.h:357