Contourf plot with dynamic resize

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Contourf plot with dynamic resize

VTK - Users mailing list
Hi to all, this is my first post in the mailing list. I'm trying to develop a plot application thant is able to create the controuf similar to matlab https://it.mathworks.com/help/matlab/ref/contourf.html

I succeed in creating something like it but my actual issues are place the plot in the center and resize dynamically with the window. This is the code that I'm using so far:


void CreateBaseData(vtkImageData* image)

{



    datastructure * dataInput = new datastructure(FILEPATH);



    image->SetDimensions(dataInput->shape()->Xsize, dataInput->shape()->Ysize, 1);

//    image->SetSpacing(dataInput->shape()->Xres,dataInput->shape()->Yres,0);



//    image->SetOrigin(dataInput->shape()->Xmin,dataInput->shape()->Ymin,0);



    image->AllocateScalars(VTK_DOUBLE,1);



    for(unsigned int x = 0; x <  dataInput->shape()->Xsize; x++)

    {

        for(unsigned int y = 0; y < dataInput->shape()->Ysize; y++)

        {

            double* pixel = static_cast<double *>(image->GetScalarPointer(x,y,0));

            pixel[0] = dataInput->z[y][x];

        }

    }

    delete dataInput;



    //image->Modified();

}



void RenderWindowUISingleInheritance::ModifiedHandler()

{

    ui->qvtkWidget->GetRenderWindow()->Render();

}





// Constructor

RenderWindowUISingleInheritance::RenderWindowUISingleInheritance(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::RenderWindowUISingleInheritanceUI)

{

    ui->setupUi(this);



    vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();



    ui->qvtkWidget->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style);



    int numberOfContours = 15;



    double scalarRange[2];



    float levels[] = { 0.4, 1.0, 2.0, 4, 10.0, 20.0, 40, 100, 200, 400, 1000, 2000, 4000, 10000, 20000, 40000 };



    vtkSmartPointer<vtkImageData> colorImage = vtkSmartPointer<vtkImageData>::New();

    vtkSmartPointer<vtkLookupTable> lut = vtkSmartPointer<vtkLookupTable>::New();

    vtkSmartPointer<vtkImageDataGeometryFilter> convert = vtkSmartPointer<vtkImageDataGeometryFilter>::New();

    vtkSmartPointer<vtkBandedPolyDataContourFilter> bf = vtkSmartPointer<vtkBandedPolyDataContourFilter>::New();

    vtkSmartPointer<vtkPolyDataMapper2D> filledContourMapper = vtkSmartPointer<vtkPolyDataMapper2D>::New();

    vtkSmartPointer<vtkPolyDataMapper2D> contourLineMapperer =vtkSmartPointer<vtkPolyDataMapper2D>::New();



    vtkSmartPointer<vtkRenderer> ren1 = vtkSmartPointer<vtkRenderer>::New();



    vtkSmartPointer<vtkActor2D> filledContourActor =vtkSmartPointer<vtkActor2D>::New();

    vtkSmartPointer<vtkActor2D> contourLineActor = vtkSmartPointer<vtkActor2D>::New();

    vtkSmartPointer<vtkCubeAxesActor> cubeAxesActor = vtkSmartPointer<vtkCubeAxesActor>::New();

    vtkSmartPointer<vtkScalarBarActor> scalarBarActor =vtkSmartPointer<vtkScalarBarActor>::New();

    CreateBaseData(colorImage);



    colorImage->GetScalarRange(scalarRange);



    int l_min;

    int l_max;

    for (l_min=numberOfContours-1;l_min>=0;l_min--) {

        if (levels[l_min] <= scalarRange[0]) break;

    }



    for (l_max=0;l_max<numberOfContours;l_max++) {



        if (levels[l_max] > scalarRange[1]) break;

    }

    numberOfContours = l_max - l_min;



//    colormap::setColorMap(lut,1,1);



    char label[10];

    for (vtkIdType i = l_min; i < numberOfContours+1; ++i)

    {

        //std::cout << lut->GetAnnotatedValue(i).ToString() << std::endl;



        sprintf(label,"%4.2f",levels[i]);

        lut->SetAnnotation(i, label);

    }



    convert->SetInputData(colorImage);

    bf->SetInputConnection(convert->GetOutputPort());

    bf->SetNumberOfContours(numberOfContours);

    for (int i=l_min;i<l_max;i++){



        bf->SetValue(i,levels[i]);

    }



    bf->GenerateContourEdgesOn();



    filledContourMapper->SetInputConnection(bf->GetOutputPort());

    filledContourMapper->SetScalarModeToUseCellData();

    //    filledContourMapper->SetColorModeToMapScalars();

    filledContourMapper->SetScalarRange(0,numberOfContours);

    filledContourMapper->SetLookupTable(lut);



    filledContourActor->SetMapper(filledContourMapper);



    filledContourActor->PickableOn();



    filledContourActor->GetPosition2Coordinate()->SetValue(0.17, 0.8);

    filledContourActor->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport();

    filledContourActor->GetPositionCoordinate()->SetValue(0.82, 0.1);





    filledContourActor->SetWidth( 0.7 );

    filledContourActor->SetHeight( 0.1 );

     filledContourActor->SetPosition( 0.1, 0.01 );












    contourLineMapperer->SetInputData(bf->GetContourEdgesOutput());


    contourLineMapperer->ScalarVisibilityOn();


    contourLineActor->SetMapper(contourLineMapperer);

    contourLineActor->GetProperty()->SetLineWidth(0.5);

    contourLineActor->GetProperty()->SetColor(0., 0., 0.);


    scalarBarActor->SetLookupTable(filledContourMapper->GetLookupTable());

    scalarBarActor->SetNumberOfLabels(numberOfContours);

    scalarBarActor->SetOrientationToHorizontal();

    scalarBarActor->SetPosition(0.05,0.2);

    scalarBarActor->SetWidth(0.9);

    scalarBarActor->SetHeight(0.05);



    scalarBarActor->SetDrawTickLabels(0);

    scalarBarActor->SetDrawAnnotations(1);

    scalarBarActor->GetAnnotationTextProperty()->SetFontFamilyToCourier();

    //scalarBar->GetAnnotationTextProperty()->SetVerticalJustificationToCentered();

    scalarBarActor->GetAnnotationTextProperty()->BoldOff();

    scalarBarActor->GetAnnotationTextProperty()->ItalicOff();

    scalarBarActor->GetAnnotationTextProperty()->ShadowOff() ;

    scalarBarActor->GetAnnotationTextProperty()->SetColor(0, 0, 0);

    scalarBarActor->GetAnnotationTextProperty()->SetJustificationToRight();


    scalarBarActor->SetUseBounds(true);


//    cubeAxesActor->SetBounds(filledContourMapper->GetBounds());

    cubeAxesActor->SetCamera(ren1->GetActiveCamera());

    cubeAxesActor->GetTitleTextProperty(0)->SetColor(0.0, 0.0, 0.0);

    cubeAxesActor->GetLabelTextProperty(0)->SetColor(0.0, 0.0, 0.0);



    cubeAxesActor->GetTitleTextProperty(1)->SetColor(0.0, 0.0, 0.0);

    cubeAxesActor->GetLabelTextProperty(1)->SetColor(0.0, 0.0, 0.0);



    cubeAxesActor->DrawXGridlinesOn();

    cubeAxesActor->DrawYGridlinesOn();

    cubeAxesActor->DrawZGridlinesOff();









    cubeAxesActor->GetXAxesLinesProperty()->SetColor(0.0, 0.0,0.0);

    cubeAxesActor->GetYAxesLinesProperty()->SetColor(0.0, 0.0,0.0);





    cubeAxesActor->GetYAxesGridlinesProperty ()->SetColor(0,0,0);

    cubeAxesActor->GetXAxesGridlinesProperty ()->SetColor(0,0,0);



    cubeAxesActor->SetTickLocationToOutside();



    //    cubeAxesActor->SetGridLineLocation(cubeAxesActor->VTK_GRID_LINES_CLOSEST);





    ren1->SetBackground(1, 1, 1);





    // Add the actors

    ren1->AddActor(filledContourActor);





    ren1->AddActor(contourLineActor);



    ren1->AddActor(scalarBarActor);

//    ren1->AddActor(cubeAxesActor);



    ren1->ResetCamera();





    // VTK/Qt wedded

    ui->qvtkWidget->GetRenderWindow()->AddRenderer(ren1);





    ui->qvtkWidget->GetRenderWindow()->AddObserver(vtkCommand::ModifiedEvent,this,&RenderWindowUISingleInheritance::ModifiedHandler);





    // Set up action signals and slots

    connect(ui->actionExit, SIGNAL(triggered()), this, SLOT(slotExit()));





}



void RenderWindowUISingleInheritance::slotExit() 

{

    qApp->exit();

}



RenderWindowUISingleInheritance::~RenderWindowUISingleInheritance() {

    delete ui;

};

Do you have any suggestion?

Thanks

Mattia


_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers
Loading...