3 #include <vtkTextProperty.h> 4 #include <vtkPropCollection.h> 6 #include <vtkRenderWindow.h> 47 case 1: ncol=1; nrow=1;
break;
48 case 2: ncol=2; nrow=1;
break;
49 case 3: ncol=3; nrow=1;
break;
50 case 4: ncol=2; nrow=2;
break;
51 case 5: ncol=3; nrow=2;
break;
52 case 6: ncol=3; nrow=2;
break;
53 case 7: ncol=3; nrow=3;
break;
54 case 8: ncol=3; nrow=3;
break;
55 case 9: ncol=3; nrow=3;
break;
56 case 10: ncol=4; nrow=3;
break;
57 case 11: ncol=4; nrow=3;
break;
58 case 12: ncol=4; nrow=3;
break;
59 case 13: ncol=4; nrow=4;
break;
60 case 14: ncol=4; nrow=4;
break;
61 case 15: ncol=4; nrow=4;
break;
62 case 16: ncol=4; nrow=4;
break;
64 throw std::runtime_error(
"Currently not more than 16 subframes in frame");
66 assert(nfig<=ncol*nrow);
111 parameter.camera_focal_point[1]=y+this->default_camera_focal_point[1];
112 parameter.camera_focal_point[2]=z+this->default_camera_focal_point[2];
122 parameter.camera_position[1]=y+this->default_camera_position[1];
123 parameter.camera_position[2]=z+this->default_camera_position[2];
226 this->
title_actor= vtkSmartPointer<vtkCornerAnnotation>::New();
227 auto textprop=this->
title_actor->GetTextProperty();
228 textprop->ItalicOff();
230 textprop->SetFontSize(10);
231 textprop->SetFontFamilyToCourier();
232 textprop->SetColor(0,0,0);
277 double dy= 0.925/(double)xnvpy;
278 double dx= 1.0/(double)xnvpx;
291 subframe.viewport[0]=x;
292 subframe.viewport[1]=y;
293 subframe.viewport[2]=x+dx;
294 subframe.viewport[3]=y+dy;
307 subframe.viewport[0]=0;
308 subframe.viewport[1]=0;
309 subframe.viewport[2]=1;
310 subframe.viewport[3]=0.925;
312 subframe.hidden=
false;
314 subframe.hidden=
true;
326 subframe.
renderer->GetActiveCamera()->OrthogonalizeViewUp();
327 subframe.
renderer->GetActiveCamera()->SetRoll(0);
335 subframe.
renderer->GetActiveCamera()->SetViewAngle(a);
340 subframe.
renderer->GetActiveCamera()->SetFocalPoint(a);
345 subframe.
renderer->GetActiveCamera()->SetPosition(a);
362 if (subframe.renderer)
364 subframe.renderer->Clear();
365 if (!subframe.hidden)
366 this->
window->RemoveRenderer(subframe.renderer);
370 subframe.renderer = vtkSmartPointer<vtkRenderer>::New();
371 subframe.renderer->SetBackground(1., 1., 1.);
374 subframe.renderer->SetViewport(subframe.viewport);
375 this->
window->AddRenderer(subframe.renderer);
377 this->
window->RemoveRenderer(subframe.renderer);
388 for (
int i=0;i<this->
subframes.size();i++)
395 for (
int i=0;i<this->
subframes.size();i++)
406 auto &renderer=subframe.renderer;
410 && renderer->GetActors()->GetNumberOfItems()>0
414 for (
auto & actor: figure->
actors)
415 renderer->RemoveActor(actor);
418 renderer->RemoveActor(actor);
420 for (
auto & actor: figure->
actors2d)
421 renderer->RemoveActor(actor);
430 for (
auto & figure: this->
figures)
432 if (!this->
subframes[figure->framepos].hidden)
434 auto &renderer=this->
subframes[figure->framepos].renderer;
438 || renderer->GetActors()->GetNumberOfItems()==0
441 figure->RTBuildAllVTKPipelines(renderer);
443 for (
auto & actor: figure->actors)
444 renderer->AddActor(actor);
446 for (
auto & actor: figure->ctxactors)
447 renderer->AddActor(actor);
449 for (
auto & actor: figure->actors2d)
450 renderer->AddActor(actor);
454 figure->RTPreRender();
455 figure->RTUpdateActors();
457 renderer->SetBackground(figure->bgcolor[0],
void RTSetSingleView(bool single_viewport)
void WritePNG(std::string fname)
Write png image of frame content.
void SetActiveSubFrameCameraFocalPoint(double x, double y, double z)
Set focal point for camera in active frame relative to default.
void RTSetLayout(int nvpx, int nvpy)
Set subframe layout.
int nvpx
Number of viewports in x direction.
static MainThread * CreateMainThread()
Start thread.
const double default_camera_focal_point[3]
Default camera data.
internals::MainThread * mainthread
The spinning main thread.
void RTSetActiveSubFrame(int isub, bool hide_old)
Set visible subframe.
void SetWindowTitle(const std::string title)
Set window title.
void Show()
Show all frames aka nonblocking event loop.
void StopVideo()
Stop video recording.
vtkSmartPointer< vtkRenderWindow > window
Window vontaining frame.
Data structure decribing subframe Each subframe can hold several figures.
vtkSmartPointer< vtkRenderer > renderer
vtkRenderer
void SetLayout(int nvpx, int nvpy)
Set layout of subframes.
const double default_camera_view_angle
void RTSetActiveSubFrameCameraPosition(SubFrame &sf, double a[3])
int pos(const int ivpx, const int ivpy)
Subframe position algebra.
void SetAutoLayout(int nfig)
int nvpy
Number of viewports in y direction.
struct vtkfig::Frame::@2 parameter
Parameters to be passed between threads.
void RTResetRenderers(bool from_scratch)
reset all renderers
void SetActiveSubFrameCameraViewAngle(double angle)
Set view angle for camera in active frame relative to default.
void RTCalculateViewports(int nx, int ny)
Calculate viewports for multi subframe view.
int number_in_frame_list
Number of this frame in global frame list.
void Interact()
Show frame content and wait for interaction.
void Interact()
Blocking event loop demanding user interaction unblocked by space key.
void RemoveFigure(Figure *figure)
Remove figure.
void RTSetActiveSubFrameCameraFocalPoint(SubFrame &sf, double a[3])
void LinkCamera(int ivp, Frame &frame, int livp)
Link camera to other camera.
void AddFrame(Frame *frame)
Add frame to be handeled by thread.
void SetPosition(int x, int y)
Set frame position on screen.
void RTHideSubframe(SubFrame &subframe)
Hide subframe.
void RTRemoveFigure(Figure *figure)
void RemoveFrame(Frame *frame)
Remove frame from thread.
Provide a framework wrapping window+interactor+renderers from vtk.
vtkSmartPointer< vtkRenderer > GetRenderer(Figure &fig)
void RTResetCamera(SubFrame &sf)
reset camera to default position
void SendCommand(int iframe, const std::string from, Communicator::Command cmd)
Communication with render thread.
void AddFigure(Figure *figure)
Add figure at position (0)
std::set< Figure * > figures
List of all figures in frame.
std::vector< SubFrame > subframes
List of subframes.
vtkSmartPointer< vtkCornerAnnotation > title_actor
Actor for frame title annotation.
void RTSetSingleViewport(int nx, int ny)
Calculate viewports for single subframe view.
void SendCommand(std::string source, internals::Communicator::Command cmd)
Blocking send of commands to main thread.
void SetActiveSubFrame(int iframe)
Set active subframe number for editing, single/multiview etc.
void SetSingleSubFrameView(bool b)
Toggle single/multi view for frame with mutiple figures.
void RTInit()
Init title actor.
Define Frame class providing a window for rendering.
void StartVideo(std::string fname)
Start video recording.
double viewport[4]
Viewport within frame.
void Show()
Show frame content and continue.
void RTUnHideSubframe(SubFrame &subframe)
Unhide subframe.
const double default_camera_position[3]
void SetFrameTitle(const std::string title)
Set Frame title.
void SetActiveSubFrameCameraPosition(double x, double y, double z)
Set view position for camera in active frame relative to default.
void SetSize(int x, int y)
Set frame size in pixels.
void RTSetActiveSubFrameCameraViewAngle(SubFrame &sf, double a)
bool single_subframe_view