[vtkusers] Problem getting vtkActor2D and vtkActor to render simultaneously

Dominic domaniak at gmail.com
Fri Feb 1 08:53:23 EST 2013


Hi Bill,

Thanks for the reply.

This example don't reproduce my bug, but if I add a vtkTexture to 
superquadricActor and I add a vtkActor2D to the sceneRenderer, the 
vtkActor2D doesn't display correctly.

you can check my precedent simple example if you want with this

CMakeLists.txt:

    cmake_minimum_required(VERSION 2.8)

    PROJECT(ImageMapper)

    # This project uses Qt4
    find_package(Qt4 REQUIRED)
    add_definitions(${QT_DEFINITIONS})
    include(${QT_USE_FILE})

    # VTK
    find_package(VTK REQUIRED)
    include(${VTK_USE_FILE})

    add_executable(ImageMapper ImageMapper)

    target_link_libraries(ImageMapper ${VTK_LIBRARIES} ${QT_LIBRARIES})


Thanks
Dominic Plourde

On 13-01-31 08:37 AM, Bill Lorensen wrote:
> See if this example helps:
> http://vtk.org/Wiki/VTK/Examples/Cxx/Images/BackgroundImage
>
>
> On Tue, Jan 29, 2013 at 10:57 AM, Dominic <domaniak at gmail.com> wrote:
>> On 13-01-18 10:45 AM, Dominic Plourde wrote:
>>
>> I have a similar problem. I'm using VTK 5.10.1 on Ubuntu 11.10 The
>> vtkActor2D disappear when I moving other 3D actors outside the viewport. If
>> I remove the vtkAxesActor, my vtkActor2D is not visible. My test code:
>>
>> #include <vtkVersion.h>
>> #include <vtkImageData.h>
>> #include <vtkSmartPointer.h>
>> #include <vtkRenderWindow.h>
>> #include <vtkRenderWindowInteractor.h>
>> #include <vtkInteractorStyleImage.h>
>> #include <vtkRenderer.h>
>> #include <vtkImageMapper.h>
>> #include <vtkActor2D.h>
>>
>>
>> #include <vtkPolygon.h>
>> #include <vtkPolyData.h>
>> #include <vtkProperty.h>
>> #include <vtkPolyDataMapper.h>
>> #include <vtkCellData.h>
>> #include <vtkCellArray.h>
>>
>> #include <vtkTexture.h>
>> #include <vtkImageData.h>
>> #include <vtkFloatArray.h>
>> #include <vtkPointData.h>
>> #include <vtkQImageToImageSource.h>
>> #include <vtkAxesActor.h>
>> #include <vtkVersion.h>
>>
>> #include <QImage>
>> #include <QApplication>
>>
>> static void CreateColorImage(vtkImageData*);
>>
>> int main(int i, char** c)
>> {
>>    QApplication qapp(i, c);
>>
>>    vtkSmartPointer<vtkImageData> colorImage =
>> vtkSmartPointer<vtkImageData>::New();
>>    CreateColorImage(colorImage);
>>
>>    vtkSmartPointer<vtkImageMapper> imageMapper =
>> vtkSmartPointer<vtkImageMapper>::New();
>>    imageMapper->SetInputConnection(colorImage->GetProducerPort());
>>    imageMapper->SetColorWindow(255);
>>    imageMapper->SetColorLevel(127.5);
>>
>>    vtkSmartPointer<vtkActor2D> imageActor =
>> vtkSmartPointer<vtkActor2D>::New();
>>    imageActor->SetMapper(imageMapper);
>>    imageActor->SetPosition(0, 0);
>>
>>    // Create a vtkPoints object and store the points in it
>>    vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
>>
>>    // Create a cell array to store the polygon in and add the polygon to it
>>    vtkSmartPointer<vtkCellArray> polygons =
>> vtkSmartPointer<vtkCellArray>::New();
>>
>>    // Read the image which will be the texture
>>    QImage* qimage = new QImage("logo.png");
>>
>>    vtkSmartPointer<vtkQImageToImageSource> qImageToVtk =
>> vtkSmartPointer<vtkQImageToImageSource>::New();
>>    qImageToVtk->SetQImage(qimage);
>>
>>    vtkSmartPointer<vtkTexture> texture = vtkSmartPointer<vtkTexture>::New();
>>    texture->SetInputConnection(qImageToVtk->GetOutputPort());
>>
>>    vtkSmartPointer<vtkFloatArray> textureCoordinates =
>> vtkSmartPointer<vtkFloatArray>::New();
>>    textureCoordinates->SetNumberOfComponents(3);
>>    textureCoordinates->SetName("TextureCoordinates");
>>
>>    // Create a polydata to store everything in
>>    vtkSmartPointer<vtkPolyData> polygonPolyData =
>> vtkSmartPointer<vtkPolyData>::New();
>>
>>    float tuple[3] = {0.0, 0.0, 0.0};
>>    textureCoordinates->InsertNextTuple(tuple);
>>    tuple[0] = 1.0; tuple[1] = 0.0; tuple[2] = 0.0;
>>    textureCoordinates->InsertNextTuple(tuple);
>>    tuple[0] = 1.0; tuple[1] = 1.0; tuple[2] = 0.0;
>>    textureCoordinates->InsertNextTuple(tuple);
>>    tuple[0] = 0.0; tuple[1] = 1.0; tuple[2] = 0.0;
>>    textureCoordinates->InsertNextTuple(tuple);
>>
>>    // Add the points to the dataset
>>    polygonPolyData->SetPoints(points);
>>    polygonPolyData->SetPolys(polygons);
>>    polygonPolyData->GetPointData()->SetTCoords(textureCoordinates);
>>
>>    // Setup actor and mapper
>>    vtkSmartPointer<vtkPolyDataMapper> mapper =
>> vtkSmartPointer<vtkPolyDataMapper>::New();
>>    mapper->SetInput(polygonPolyData);
>>
>>    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
>>    actor->SetMapper(mapper);
>>    actor->SetTexture(texture);
>>    actor->GetProperty()->SetColor(0.0, 0.62, 0.85);
>>
>>    points->SetNumberOfPoints(4);
>>    points->SetPoint(0, 0, 0, 0);
>>    points->SetPoint(1, 10, 0, 0);
>>    points->SetPoint(2, 10, 10, 0);
>>    points->SetPoint(3, 0, 10, 0);
>>
>>    vtkSmartPointer<vtkPolygon> top = vtkSmartPointer<vtkPolygon>::New();
>>    top->GetPointIds()->SetNumberOfIds(4);
>>    top->GetPointIds()->SetId(3, 0);
>>    top->GetPointIds()->SetId(2, 1);
>>    top->GetPointIds()->SetId(1, 2);
>>    top->GetPointIds()->SetId(0, 3);
>>
>>    polygons->InsertNextCell(top);
>>
>>    vtkSmartPointer<vtkAxesActor> axes = vtkSmartPointer<vtkAxesActor>::New();
>>
>>    vtkSmartPointer<vtkRenderer> renderer =
>> vtkSmartPointer<vtkRenderer>::New();
>>    vtkSmartPointer<vtkRenderWindow> renderWindow =
>> vtkSmartPointer<vtkRenderWindow>::New();
>>    renderWindow->AddRenderer(renderer);
>>
>>    // Setup render window interactor
>>    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
>> vtkSmartPointer<vtkRenderWindowInteractor>::New();
>>    vtkSmartPointer<vtkInteractorStyleImage> style =
>> vtkSmartPointer<vtkInteractorStyleImage>::New();
>>    renderWindowInteractor->SetInteractorStyle(style);
>>
>>    // Render and start interaction
>>    renderWindowInteractor->SetRenderWindow(renderWindow);
>>
>>    renderer->AddActor(actor);
>>    renderer->AddActor(axes);
>>    renderer->AddActor2D(imageActor);
>>
>>    renderWindow->Render();
>>    renderWindowInteractor->Start();
>>
>>    return EXIT_SUCCESS;
>> }
>>
>> void CreateColorImage(vtkImageData* image)
>> {
>>    unsigned int dim = 50;
>>
>>    image->SetDimensions(dim, dim, 1);
>> #if VTK_MAJOR_VERSION <= 5
>>    image->SetNumberOfScalarComponents(3);
>>    image->SetScalarTypeToUnsignedChar();
>>    image->AllocateScalars();
>> #else
>>    image->AllocateScalars(VTK_UNSIGNED_CHAR,3);
>> #endif
>>    for(unsigned int x = 0; x < dim; x++)
>>    {
>>       for(unsigned int y = 0; y < dim; y++)
>>       {
>>          unsigned char* pixel = static_cast<unsigned
>> char*>(image->GetScalarPointer(x,y,0));
>>          if(x < dim/2)
>> 	{
>>             pixel[0] = 255;
>>             pixel[1] = 0;
>> 	}
>>          else
>> 	{
>>             pixel[0] = 0;
>>             pixel[1] = 255;
>> 	}
>>
>>          pixel[2] = 0;
>>       }
>>    }
>>    image->Modified();
>> }
>>
>> Elvis Dowson wrote
>> Hi, In the following code, I cannot get both vtkActor2D and vtkActor to
>> display simultaneously. If I enable 2D map source and text source, it
>> displays the map and the text. If I enable the 3D cylinder source, the 3D
>> cylinder doesnt get displayed. However, if I disable the 2D map source, the
>> cylinder and the text message appears. How can I get the 2D map to display
>> below, and the 3D cylinder to appear to hover above the 2D map ? Am I mixing
>> things here? Should I be using vtkImageActor instead of vtkActor2D, so that
>> there is a 3D image plane and then display the 3D source? I really dont want
>> to do that at the moment. Please help! :-) Best regards, Elvis Dowson
>>
>> #include "qapplication.h"
>> #include <QtGui>
>>
>> #include <vtkActor.h>
>> #include <vtkActor2D.h>
>> #include <vtkImageActor.h>
>> #include <vtkTextActor.h>
>> #include <vtkJPEGReader.h>
>> #include <vtkRenderer.h>
>> #include <vtkRenderWindow.h>
>> #include <vtkRenderWindowInteractor.h>
>> #include <vtkImageMapper.h>
>> #include <vtkPolyDataMapper.h>
>> #include <vtkCylinderSource.h>
>>
>>
>> #if QT_VERSION >= 0x040000
>> # include "ui_GUI4.h"
>> #endif
>>
>> #define PROTOTYPE_2D_MAP_SOURCE
>> #define PROTOTYPE_2D_TEXT_SOURCE
>> #define PROTOTYPE_3D_CYLINDER_SOURCE
>>
>>
>> int main(int argc, char** argv)
>> {
>>     QApplication app(argc, argv);
>> 	
>> #if QT_VERSION >= 0x040000
>> 	Ui::Dialog ui;
>> 	QDialog dialog;
>> #endif
>> 	
>> 	ui.setupUi(&dialog);
>> 	dialog.setAttribute(Qt::WA_QuitOnClose);
>> 	
>> 	// Qt vtk integration
>> 	vtkRenderer* ren = NULL;
>> 	ren = vtkRenderer::New();
>> 		ui.qvtkWidget->GetRenderWindow()->AddRenderer(ren);
>> 	
>> 	// Prototype: 2D Map Source
>> 	// ----------------------------
>> 	#ifdef PROTOTYPE_2D_MAP_SOURCE
>>    	{
>> 	// Declare object instance variables
>> 	vtkJPEGReader* imageReader	= NULL;
>> 	vtkImageMapper* imageMapper = NULL;
>> 	vtkActor2D* mapActor		= NULL;			
>> 			
>> 	// Read 2D image file
>> 	imageReader = vtkJPEGReader::New();
>> 		imageReader->SetFileName("/Users/elvis/Image/sample.jpg");
>> 		imageReader->Update();
>> 	
>> 	// Map 2D image file
>> 	imageMapper = vtkImageMapper::New();
>> 		imageMapper->SetInput(imageReader->GetOutput());
>> 		imageMapper->SetColorWindow(255);
>> 		imageMapper->SetColorLevel(127.5);
>> 		
>> 	// Actor in scene
>> 	mapActor = vtkActor2D::New();
>> 		mapActor->SetMapper(imageMapper);	
>>
>> 	// Actor in scene
>> 	mapActor = vtkActor2D::New();
>> 		//mapActor->SetLayerNumber(0);
>> 		mapActor->SetMapper(imageMapper);			
>>
>> 	// Add Actor to renderer
>> 	ren->AddActor2D(mapActor);
>> 	}
>> 	#endif
>>
>> 	// Prototype: 2D Text Source
>> 	// -----------------------------
>> 	#ifdef PROTOTYPE_2D_TEXT_SOURCE
>> 	{
>> 		// Declare object instance variables
>> 		vtkTextActor* textActor;
>> 		
>> 		// Initialize objects
>> 		textActor = NULL;
>> 		
>> 		// Actor in scene
>> 		textActor = vtkTextActor::New();
>> 		textActor->SetTextScaleMode(vtkTextActor::TEXT_SCALE_MODE_NONE);
>> 		textActor->SetInput("This is a text message!");
>> 		
>> 		// Add Actor to renderer
>> 		ren->AddActor2D(textActor);
>> 	}
>> 	#endif
>> 	
>>
>> 	// Prototype: 3D Cyclinder Source
>> 	// ----------------------------------
>> 	#ifdef PROTOTYPE_3D_CYLINDER_SOURCE	
>> 	{
>> 	// Declare object instance variables
>> 	vtkCylinderSource* source;
>> 	vtkPolyDataMapper* mapper;
>> 	vtkActor* actor;
>>
>> 	// Initialize objects
>> 	source = NULL;
>> 	mapper = NULL;
>> 	actor = NULL;
>> 	
>> 	// Geometry
>> 	source = vtkCylinderSource::New();
>> 	
>> 	// Mapper
>> 	mapper = vtkPolyDataMapper::New();
>> 	mapper->ImmediateModeRenderingOn();
>> 	mapper->SetInputConnection(source->GetOutputPort());
>> 	
>> 	// Actor in scene
>> 	actor = vtkActor::New();
>> 	actor->SetMapper(mapper);
>> 	
>> 	// Add Actor to renderer
>> 	ren->AddActor(actor);
>> 	}
>> 	#endif
>> 	
>> 	// Reset camera
>> 	ren->ResetCamera();
>> 	
>> 	// Render the scene
>> 	ren->GetRenderWindow()->Render();
>> 	
>> 	// Display the dialog window
>> 	dialog.show();
>>
>>     return app.exec();
>> }
>>
>> _______________________________________________ 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
>>
>>
>> ________________________________
>> View this message in context: Re: Problem getting vtkActor2D and vtkActor to
>> render simultaneously
>> Sent from the VTK - Users mailing list archive at Nabble.com.
>>
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the VTK FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>>
>>
>> Has anyone encountered this?
>>
>> Thanks,
>> Dominic
>>
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the VTK FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130201/05bf521e/attachment.htm>


More information about the vtkusers mailing list