VTK: come posso aggiungere una barra di scorrimento per il mio progetto?

StackOverflow https://stackoverflow.com/questions/3900253

  •  29-09-2019
  •  | 
  •  

Domanda

Qual è il modo più semplice per aggiungere una barra di scorrimento al mio progetto VTK?

grazie

Aggiorna

def vtkSliderCallback2(obj, event):
    sliderRepres = obj.GetRepresentation()
    pos = sliderRepres.GetValue()
    contourFilter.SetValue(0, pos)

SliderRepres = vtk.vtkSliderRepresentation2D()
min = 0 #ImageViewer.GetSliceMin()
max = 256 #ImageViewer.GetSliceMax()
SliderRepres.SetMinimumValue(min)
SliderRepres.SetMaximumValue(max)
SliderRepres.SetValue((min + max) / 2)
SliderRepres.SetTitleText("Slice")
SliderRepres.GetPoint1Coordinate().SetCoordinateSystemToNormalizedDisplay()
SliderRepres.GetPoint1Coordinate().SetValue(0.2, 0.6)
SliderRepres.GetPoint2Coordinate().SetCoordinateSystemToNormalizedDisplay()
SliderRepres.GetPoint2Coordinate().SetValue(0.4, 0.6)

SliderRepres.SetSliderLength(0.02)
SliderRepres.SetSliderWidth(0.03)
SliderRepres.SetEndCapLength(0.01)
SliderRepres.SetEndCapWidth(0.03)
SliderRepres.SetTubeWidth(0.005)
SliderRepres.SetLabelFormat("%3.0lf")
SliderRepres.SetTitleHeight(0.02)
SliderRepres.SetLabelHeight(0.02)

SliderWidget = vtk.vtkSliderWidget()
SliderWidget.SetInteractor(iren)
SliderWidget.SetRepresentation(SliderRepres)
SliderWidget.KeyPressActivationOff()
SliderWidget.SetAnimationModeToAnimate()
SliderWidget.SetEnabled(True)
SliderWidget.AddObserver("InteractionEvent", vtkSliderCallback2)
È stato utile?

Soluzione

Giusto per essere completo e per gli altri utenti cosa googling.

vtkSliderWidget farà quello che vuoi, se ne avete bisogno per impostare un valore.

// Modifica basa sulla tua modifica Se si desidera ottenere il valore, è necessario collegare un evento al cursore che viene licenziato quando il valore viene modificato. Di recuperare questo valore e aggiornare di conseguenza. Un esempio in C ++ si trova qui

// Io in realtà che il mio problema è che la funzione di callback viene richiamata per ogni posizione del pollice quando farlo scorrere. Come si può evitare questo? In altre parole, voglio solo l'ultima posizione per attivare la funzione di callback ...

Prova di collegamento al EndInteractionEvent anziché al InteractionEvent.

SliderWidget.AddObserver("EndInteractionEvent", vtkSliderCallback2)

// roba

A proposito, se si utilizza Python e VTK e la GUI necessità, vi consiglio di utilizzare il pitone QT e QT pitone widget che alleggerire un sacco di questa roba. Alcuni codice di uno dei miei vecchi progetti che utilizzano QT + Python + VTK per cose python GUI +:

self.verticalSlider = QtGui.QSlider(self.centralwidget)
self.verticalSlider.setOrientation(QtCore.Qt.Vertical)
self.verticalSlider.setObjectName("verticalSlider")
self.horizontalLayout.addWidget(self.verticalSlider)

// connect slider to a method onValueChange
QObject.connect(self.verticalSlider, SIGNAL("valueChanged(int)"), 
self.setFibreVolumeOpacity)

def setFibreVolumeOpacity(self, value):
    // do stuff here with slider value.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top