Created
November 14, 2013 09:59
-
-
Save suplo/7464304 to your computer and use it in GitHub Desktop.
VTK Multiple viewports
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <vtkSphereSource.h> | |
#include <vtkProperty.h> | |
#include <vtkPolyData.h> | |
#include <vtkSmartPointer.h> | |
#include <vtkPolyDataMapper.h> | |
#include <vtkActor.h> | |
#include <vtkRenderWindow.h> | |
#include <vtkRenderer.h> | |
#include <vtkRenderWindowInteractor.h> | |
#include <vtkButtonWidget.h> | |
#include <vtkTexturedButtonRepresentation2D.h> | |
#include <vtkImageActor.h> | |
#include <vtkPNGReader.h> | |
#include <vtkImageData.h> | |
#include <vtksys/ios/sstream> | |
void SetupButton(vtkSmartPointer<vtkRenderWindowInteractor> iren, | |
vtkSmartPointer<vtkRenderer> &renderer, | |
vtkSmartPointer<vtkButtonWidget> &button, | |
const char* image_path, | |
double xmin, double xmax, double ymin, double ymax); | |
int main(int, char *[]) | |
{ | |
vtkSmartPointer<vtkRenderWindow> renderWindow = | |
vtkSmartPointer<vtkRenderWindow>::New(); | |
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = | |
vtkSmartPointer<vtkRenderWindowInteractor>::New(); | |
renderWindowInteractor->SetRenderWindow(renderWindow); | |
// Define viewport ranges | |
double xmins[4] = {0,.5,0,.5}; | |
double xmaxs[4] = {0.5,1,0.5,1}; | |
double ymins[4] = {0,0,.5,.5}; | |
double ymaxs[4]= {0.5,0.5,1,1}; | |
for(unsigned i = 0; i < 4; i++) | |
{ | |
vtkSmartPointer<vtkRenderer> renderer = | |
vtkSmartPointer<vtkRenderer>::New(); | |
renderWindow->AddRenderer(renderer); | |
renderer->SetViewport(xmins[i],ymins[i],xmaxs[i],ymaxs[i]); | |
// Create a sphere | |
vtkSmartPointer<vtkSphereSource> sphereSource = | |
vtkSmartPointer<vtkSphereSource>::New(); | |
sphereSource->SetCenter(0.0, 0.0, 0.0); | |
sphereSource->SetRadius(5); | |
sphereSource->Update(); | |
// Create a mapper and actor | |
vtkSmartPointer<vtkPolyDataMapper> mapper = | |
vtkSmartPointer<vtkPolyDataMapper>::New(); | |
mapper->SetInputConnection(sphereSource->GetOutputPort()); | |
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); | |
actor->SetMapper(mapper); | |
renderer->AddActor(actor); | |
renderer->ResetCamera(); | |
vtkSmartPointer<vtkButtonWidget> button; | |
SetupButton(renderWindowInteractor, | |
renderer, button, "plus.png", 0, 0.3, 0, 0.3); | |
renderWindow->Render(); | |
renderWindow->SetWindowName("Multiple ViewPorts"); | |
} | |
renderWindowInteractor->Start(); | |
return EXIT_SUCCESS; | |
} | |
void SetupButton(vtkSmartPointer<vtkRenderWindowInteractor> iren, | |
vtkSmartPointer<vtkRenderer> &renderer, | |
vtkSmartPointer<vtkButtonWidget> &button, | |
const char* image_path, | |
double xmin, double xmax, double ymin, double ymax) | |
{ | |
button = vtkSmartPointer<vtkButtonWidget>::New(); | |
vtkSmartPointer<vtkTexturedButtonRepresentation2D> buttonRepresent = vtkSmartPointer<vtkTexturedButtonRepresentation2D>::New(); | |
vtkSmartPointer<vtkPNGReader> pngReader = vtkSmartPointer<vtkPNGReader>::New(); | |
vtkSmartPointer<vtkImageData> image = vtkSmartPointer<vtkImageData>::New(); | |
pngReader->SetFileName(image_path); | |
pngReader->Update(); | |
image = pngReader->GetOutput(); | |
buttonRepresent->SetNumberOfStates(1); | |
buttonRepresent->SetButtonTexture(0, image); | |
button->SetInteractor(iren); | |
button->SetRepresentation(buttonRepresent); | |
// Setup bounding box | |
double bound1[6]; | |
bound1[0] = xmin; | |
bound1[1] = xmax; | |
bound1[2] = ymin; | |
bound1[3] = ymax; | |
bound1[4] = bound1[5] = 0.0; | |
buttonRepresent->SetPlaceFactor(1); | |
buttonRepresent->PlaceWidget(bound1); | |
button->SetCurrentRenderer(renderer); | |
button->EnabledOn(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment