[vtkusers] Actors2D not magnified by vtkWindowToImageFilter->SetMagnification()
Mathieu Malaterre
mathieu.malaterre at kitware.com
Tue Sep 19 20:13:30 EDT 2006
Christopher,
I am sorry what is the issue with the vtkRibbonFilter ? Was it reported
in the bug tracker ?
If vtkWindowToImageFilter did not work for you, I would also try:
vtkRenderLargeImage. BTW you did not specify which VTK version you are
using.
HTH
Mathieu
Christopher Bruns wrote:
>
> As usual vtk does just about everything I need. And I am extremely
> grateful for the patch to correct vtkRibbonFilter that I got via this
> board a few months ago. But I have encountered one more problem.
>
> I want to save an image file of my vtk render window. I want the image
> to be of higher resolution than that shown in the vtk render window.
> The recommended way to save such an enchanced resolution image is to set
> vtkWindowToImageFilter->SetMagnification() to a value larger that one.
>
> This methods works fine for the rendered 3D objects, but my Actor2D
> objects are either not scaled (text and polydata), or scaled but
> bizarrely placed and tiled (images). I have included an example test
> C++ program to demonstrate the problem, in case there is anyone who has
> the time and knowledge to suggest a workaround. Thanks in advance.
>
> -Christopher Bruns
>
> // Example program to demonstrate non-magnification of Actor2Ds
> // TextActor and polydata are not magnified,
> // while image is magnified, but is also wrongly duplicated and tiled
> across the screen
>
> #include "vtkActor2D.h"
> #include "vtkRenderer.h"
> #include "vtkRenderWindow.h"
> #include "vtkImageData.h"
> #include "vtkTextMapper.h"
> #include "vtkRenderWindowInteractor.h"
> #include "vtkInteractorStyleSwitch.h"
> #include "vtkTextProperty.h"
> #include "vtkWindowToImageFilter.h"
> #include "vtkPNGWriter.h"
> #include "vtkPoints.h"
> #include "vtkCellArray.h"
> #include "vtkPolyDataMapper2D.h"
> #include "vtkPolyData.h"
> #include "vtkProperty2D.h"
> #include "vtkImageMapper.h"
> #include "vtkConeSource.h"
> #include "vtkActor.h"
> #include "vtkPolyDataMapper.h";
>
> int main() {
> // 3D cone
> vtkConeSource * coneSource = vtkConeSource::New();
> vtkPolyDataMapper * coneMapper = vtkPolyDataMapper::New();
> coneMapper->SetInput(coneSource->GetOutput());
> vtkActor * coneActor = vtkActor::New();
> coneActor->SetMapper(coneMapper);
>
> // Create small 2D image
> vtkImageData * imageData = vtkImageData::New();
> int w = 10;
> int h = 10;
> imageData->SetDimensions(w,h,1);
> imageData->SetScalarTypeToUnsignedChar();
> imageData->SetNumberOfScalarComponents(4);
> imageData->AllocateScalars();
> for (int x = 0; x < w; ++x)
> for (int y = 0; y < h; ++y) {
> imageData->SetScalarComponentFromDouble(x, y, 0, 3, 127);
> // alpha
> imageData->SetScalarComponentFromDouble(x, y, 0, 0, 0);
> // red
> imageData->SetScalarComponentFromDouble(x, y, 0, 1, 255);
> // green
> imageData->SetScalarComponentFromDouble(x, y, 0, 2, 0);
> // blue
> }
> vtkImageMapper * imageMapper = vtkImageMapper::New();
> imageMapper->SetInput(imageData);
> imageMapper->SetColorWindow(255.0);
> imageMapper->SetColorLevel(127.5);
> imageMapper->SetRenderToRectangle(1);
> vtkActor2D * imageActor = vtkActor2D::New();
> imageActor->SetMapper(imageMapper);
> imageActor->SetPosition(10,50);
> imageActor->SetPosition2(0.3,0.3);
>
> // Create Line Segment
> vtkPoints * points = vtkPoints::New();
> points->InsertNextPoint(10, 30, 0);
> points->InsertNextPoint(60, 40, 0);
> vtkCellArray * cells = vtkCellArray::New();
> cells->InsertNextCell(points->GetNumberOfPoints());
> for (int i = 0; i < points->GetNumberOfPoints(); i ++)
> cells->InsertCellPoint(i);
>
> vtkPolyData * polyData = vtkPolyData::New();
> polyData->SetPoints(points);
> polyData->SetLines(cells);
> vtkPolyDataMapper2D * mapper = vtkPolyDataMapper2D::New();
> mapper->SetInput(polyData);
> vtkActor2D * lineActor = vtkActor2D::New();
> lineActor->SetMapper(mapper);
> lineActor->GetProperty()->SetColor(1.0, 0.0, 0.0);
> lineActor->GetProperty()->SetOpacity(1.0);
> lineActor->GetProperty()->SetLineWidth(3.0);
> lineActor->SetVisibility(1);
> vtkTextMapper * textMapper = vtkTextMapper::New();
> textMapper->SetInput("Test String");
> textMapper->GetTextProperty()->SetColor(0, 0, 0);
>
> vtkActor2D * textActor = vtkActor2D::New();
> textActor->SetMapper(textMapper);
> textActor->SetPosition(10,10);
>
> // Renderer
> vtkRenderer *ren1 = vtkRenderer::New();
> vtkRenderWindow *renWin = vtkRenderWindow::New();
> renWin->AddRenderer(ren1);
>
> // Trackball interaction by default
> vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
> vtkInteractorStyleSwitch *trackBall = vtkInteractorStyleSwitch::New();
> trackBall->SetCurrentStyleToTrackballCamera();
> iren->SetInteractorStyle(trackBall);
>
> // Window
> iren->SetRenderWindow(renWin);
> ren1->SetBackground(1.0,1.0,1.0); // white background
>
> ren1->AddActor(coneActor); // magnifies perfectly
> ren1->AddActor(textActor); // no magification
> ren1->AddActor(lineActor); // no magification
> ren1->AddActor(imageActor); // magnified, but misplaced, duplicated,
> and tiled
>
> renWin->SetSize(100, 100);
> renWin->Render();
>
> // write normal sized image
> vtkWindowToImageFilter * wti = vtkWindowToImageFilter::New();
> wti->SetInput(renWin);
> wti->SetMagnification(1);
> wti->Update();
>
> vtkPNGWriter * pngWriter = vtkPNGWriter::New();
> pngWriter->SetFileName("normalSize.png");
> pngWriter->SetInput(wti->GetOutput());
> pngWriter->Write();
>
> // write magnified image
> vtkWindowToImageFilter * wti2 = vtkWindowToImageFilter::New();
> wti2->SetInput(renWin);
> wti2->SetMagnification(2);
> wti2->Update();
>
> vtkPNGWriter * pngWriter2 = vtkPNGWriter::New();
> pngWriter2->SetFileName("doubleSize.png");
> pngWriter2->SetInput(wti2->GetOutput());
> pngWriter2->Write();
>
> iren->Start();
>
> // Clean up data structures -- TODO - incomplete
> ren1->Delete();
> renWin->Delete();
> pngWriter->Delete();
> pngWriter2->Delete();
> wti->Delete();
> wti2->Delete();
> iren->Delete();
> trackBall->Delete();
> textActor->Delete();
> textMapper->Delete();
> lineActor->Delete();
> mapper->Delete();
> polyData->Delete();
> cells->Delete();
> points->Delete();
> imageActor->Delete();
> imageMapper->Delete();
> imageData->Delete();
>
> return 0;
> }
>
>
> _______________________________________________
> This is the private VTK discussion list. Please keep messages on-topic.
> Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
More information about the vtkusers
mailing list