W dzisiejszym wpisie zostanie pokazane jak zmienić przykład "Generowanie powierzchni z wykorzystaniem algorytmu Marching Cube w VTK" tak, aby był bardziej interakcyjny i pozwalał na zmianę parametrów w trakcie wykonania programu.
Przykład
W tym przykładzie zostaną użyte dwie kontrolki typu suwak. Jedna do zmiany wartości progowej dla konturu, a druga do zmiany stopnia przezroczystości. W tym celu skorzystamy z następujących klas:
- vtkSliderRepresentation2D - definiuje parametry wyświetlania komponentu,
- vtkSliderWidget - odpowiada za narysowanie obiektu suwak na scenie.
Podany kod źródłowy można przetestować dodając go na końcu skryptu z poprzedniego wpisu.
vtkSliderRepresentation2D sliderIsoValueRep
sliderIsoValueRep SetValue 127
sliderIsoValueRep SetMinimumValue 0
sliderIsoValueRep SetMaximumValue 255
sliderIsoValueRep SetTitleText "Iso Contour Value"
eval [sliderIsoValueRep GetPoint1Coordinate] SetCoordinateSystemToNormalizedDisplay
eval [sliderIsoValueRep GetPoint1Coordinate] SetValue 0.2 0.2
eval [sliderIsoValueRep GetPoint2Coordinate] SetCoordinateSystemToNormalizedDisplay
eval [sliderIsoValueRep GetPoint2Coordinate] SetValue 0.8 0.2
sliderIsoValueRep SetSliderLength 0.02
sliderIsoValueRep SetSliderWidth 0.03
sliderIsoValueRep SetEndCapLength 0.01
sliderIsoValueRep SetEndCapWidth 0.03
sliderIsoValueRep SetTubeWidth 0.005
vtkSliderRepresentation2D sliderOpacityRep
sliderOpacityRep SetValue 0.5
sliderOpacityRep SetMinimumValue 0
sliderOpacityRep SetMaximumValue 1
sliderOpacityRep SetTitleText "Opacity Value"
eval [sliderOpacityRep GetPoint1Coordinate] SetCoordinateSystemToNormalizedDisplay
eval [sliderOpacityRep GetPoint1Coordinate] SetValue 0.2 0.1
eval [sliderOpacityRep GetPoint2Coordinate] SetCoordinateSystemToNormalizedDisplay
eval [sliderOpacityRep GetPoint2Coordinate] SetValue 0.8 0.1
sliderOpacityRep SetSliderLength 0.02
sliderOpacityRep SetSliderWidth 0.03
sliderOpacityRep SetEndCapLength 0.01
sliderOpacityRep SetEndCapWidth 0.03
sliderOpacityRep SetTubeWidth 0.005
vtkSliderWidget sliderIsoValueWidget
sliderIsoValueWidget SetInteractor iren
sliderIsoValueWidget SetRepresentation sliderIsoValueRep
sliderIsoValueWidget SetAnimationModeToAnimate
sliderIsoValueWidget AddObserver InteractionEvent changeIsoValueCallback
sliderIsoValueWidget On
vtkSliderWidget sliderOpacityWidget
sliderOpacityWidget SetInteractor iren
sliderOpacityWidget SetRepresentation sliderOpacityRep
sliderOpacityWidget SetAnimationModeToAnimate
sliderOpacityWidget AddObserver InteractionEvent changeOpacityCallback
sliderOpacityWidget On
proc changeIsoValueCallback {} {
iso SetValue 0 [sliderIsoValueRep GetValue]
}
proc changeOpacityCallback {} {
eval [isoActor GetProperty] SetOpacity [sliderOpacityRep GetValue]
}
Wyniki działania programu dla różnych wartości konturu można prześledzić na poniższej animacji:
Wykorzystanie graficznych kontrolek w VTK może znacznie ułatwić poszukiwanie odpowiednich parametrów wizualizacji, a sama aplikacja jest zdecydowanie łatwiejsza w obsłudze dla typowego użytkownika.
0 komentarze:
Prześlij komentarz