Partage
  • Partager sur Facebook
  • Partager sur Twitter

QT Widget et connection aevc VTK

    11 avril 2021 à 10:57:36

    Bonjour,

    Je travaille actuellement sur la conversion d'un projet initialement fait sous python, permettant de de modifier la visualisation d'un ficher .vtk à l'aide d'une interface Qt essentiellement constituée de sliders. Le projet sous python est fonctionnel et consultable ici : 

    https://github.com/sebgra/VTK_modelisation/blob/master/Projet_Modelisation_Bovio_Gradit.py

    Je bloque sur la connexion des sliders au renderer de vtk, en utilisant une fonction "personnelle". Sous python la connection se fait simplement à l'aide de :

    def modif1():
    		contour_bone.SetValue(0, Slider_1.value())
    		iren.ReInitialize()
    
    Slider_1 = QSlider(QtCore.Qt.Horizontal)
    	Slider_1.setMinimum(0)
    	Slider_1.setMaximum(200)
    	Slider_1.setValue(90)
    	Slider_1.valueChanged.connect(Display_1.display)
    	Slider_1.valueChanged.connect(modif1)
    
    # avec iren défini comme
    
    mapper_bone=vtk.vtkPolyDataMapper() 
    	mapper_bone.SetInputConnection(contour_bone.GetOutputPort())   
    	mapper_bone.SetLookupTable(lut_bone)
    
    	mapper_skin=vtk.vtkPolyDataMapper() 
    	mapper_skin.SetInputConnection(contour_skin.GetOutputPort())
    	mapper_skin.SetLookupTable(lut_skin)
    
    	actor_bone=vtk.vtkActor() 
    	actor_bone.SetMapper(mapper_bone)
    
    	actor_skin=vtk.vtkActor()
    	actor_skin.SetMapper(mapper_skin)
    
    	ren = vtk.vtkRenderer()
    	vtkWidget.GetRenderWindow().AddRenderer(ren)
    
    	iren = vtkWidget.GetRenderWindow().GetInteractor()
    
    
    
    	ren.AddActor(actor_bone)
    	ren.AddActor(actor_skin)
    	ren.ResetCamera()
    	frame.setLayout(vl)
    	#setCentralWidget(self.frame)
    	#show()
    	iren.Initialize()
    	iren.Start()
    	iren.ReInitialize()

    L'équivalent C++ est disponible sur ce repo : 

    https://github.com/sebgra/VTK_Modelisation_CPP/blob/master/src/StructuredPointsReader.cxx

    Avec la définition de modif_1 hors du main par :

    void modif_1(QSlider *m_Slider, vtkSmartPointer<vtkContourFilter> m_ContourFilter, vtkRenderWindowInteractor* m_iren  ){
    
      // m_ContourFilter -> setValue(0,m_Slider -> value());
      // m_iren -> ReInitialize();
      std::cout << "done" << endl;
    }
    Et le reste du code comme étant : 
    QSlider *Slider_1 = new QSlider(Qt::Horizontal, 0);
    
    vtkSmartPointer<vtkStructuredPointsReader> reader =
        vtkSmartPointer<vtkStructuredPointsReader>::New();
      reader->SetFileName(inputFilename.c_str());
      reader->Update();
    
    vtkSmartPointer<vtkContourFilter> contour_skin =
        vtkSmartPointer<vtkContourFilter>::New();
    
      contour_skin -> SetInputConnection(reader -> GetOutputPort());
      contour_skin -> SetNumberOfContours(1);
      contour_skin -> SetValue(0,50.0);
    
    
    vtkSmartPointer<vtkPolyDataMapper> mapper_skin =
      vtkSmartPointer<vtkPolyDataMapper>::New();
    
      mapper_skin -> SetInputConnection(contour_skin -> GetOutputPort());
      mapper_skin -> SetLookupTable(lut_skin);
    
    vtkSmartPointer<vtkActor> actor_skin =
      vtkSmartPointer<vtkActor>::New();
    
      actor_skin -> SetMapper(mapper_skin);
    
    vtkSmartPointer<vtkRenderer> renderer =
      vtkSmartPointer<vtkRenderer>::New();
    
      widget -> GetRenderWindow() -> AddRenderer(renderer);
    
    
    vtkRenderWindowInteractor* iren = widget->GetRenderWindow()->GetInteractor();// Get interactor
    
      iren -> Initialize();
      iren -> Start();
    
    
      QObject::connect(Slider_1, SIGNAL(valueChanged(int)), Display_1,SLOT(display(int)));
      QObject::connect(Slider_1, SIGNAL(valueChanged(int)), iren, SLOT(modif_1(&Slider_1, &contour_bone, &iren))); 
    
     iren -> ReInitialize();
     J'obtiens une erreur de fonction connect de qt non définie "no matching function for call to ‘QObject::connect(QSlider*&, const char [19], vtkRenderWindowInteractor*&, const char [42])"

     Une idée ?

    Merci par avance



    • Partager sur Facebook
    • Partager sur Twitter

    QT Widget et connection aevc VTK

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown