[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