210 likes | 480 Views
V TK Interaktyvumas. Vizualizavimo Sistemos. Paruošė: IG-08 grupės studentas Andrius Mikalajūnas. VTK: Command/Observer modelis. VTK da žnai naudojama interaktyvioms programoms kurti, todėl reikalinga sąsaja su vartotojo programomis ar kitomis sistemomis: Sąsaja su GUI,
E N D
VTK Interaktyvumas Vizualizavimo Sistemos Paruošė: IG-08 grupės studentas Andrius Mikalajūnas
VTK: Command/Observer modelis VTK dažnainaudojama interaktyvioms programoms kurti, todėl reikalinga sąsaja su vartotojo programomis ar kitomis sistemomis: • Sąsaja su GUI, • Bendra sąsaja su kita programine įranga, • Vykdant operaciją, pateikti objektų statusą. Realizuotas atgalinių kvietimų (callbacks) mechanizmas: • Command/Observer modelis, • Kiekvienas VTK objektas palaiko AddObserver() metodą, • Stebėtojai išvedami iš vtkCommand klasės, • Privaloma įdiegti virtualų vtkCommand klasės Execute() metodą, kuriame realizuojama reikiama “komanda”. AddObserver() metodas turi du pagrindinius argumentus: • Įvykį (Event), kurį reikia užfiksuoti, • Komandą (Command), kuri kviečiama įvykiui įvykus. Dažniausiai naudojama interaktyvumui, GUI palaikymui ir “widgets”. VTK objektai tampa nepriklausomais nuo konkretaus GUI.
VTK: Command/Observer modelis Pagrįstas įvykiais (Events), kurie signalizuoja įvykus svarbiai operacijai: • Vartotojui atvaizdavimo lange paspaudus kairįjį pelės klavišą, VTK fiksuoja LeftbuttonPressEvent įvykį, • Dauguma filtrų palaiko įvykius StartEvent/ProgressEvent/EndEvent, • vtkRenderWindow palaiko AbortCheckEvent įvykį. Stebėtojų (Observers) objektai registruoja įvykius ir į juos reaguoja: • vtkRenderWindow užfiksuojamas langų sistemos įvykis, • Įvykis paverčiamas VTK įvykiu ir perduodamas registruotam stebėtojui, • Stebėtojas reaguoja į įvykį atlikdamas apibrėžtus veiksmus ir gali: • Permesti įvykį pagal prioritetą sekančiam stebėtojui, • Panaikinti tolimesnį įvykio apdorojimą (neperduoti jo kitiems stebėtojams). Daug stebėtojų objektų gali laukti to paties įvykio: • Didelis Command/Observer modelio privalumas, • Paprastai pelės klavišo paspaudimą gali apdoroti vtkInteractorStyle, vtk3DWidget ar bet kuris kiras stebėtojas.
VTK: Interaktyvumas vtkRenderWindowInteractor – užtikrina sąveika su vartotoju. Atlieka vaizdo lange valdymą: • e ar q – išeiti, • r – keičia kameros parametrus. Palaiko įvairius įtaisus: • j – “joystick” režimas, • t – “trackball” režimas. Pagrindiniai reprezentacijos modeliai: • w – “wireframe” modelis, • s – “solid” modelis. Pagrindinės “Viewer” funkcijos, t.y. transformacijos: • but1 – posūkis, • but2 – poslinkis, • but3 – mastelis.
VTK: vtkRenderWindowInteractor vtkRenderWindowInteractor: • Atvaizdavimo lange vtkRenderWindow užfiksuoja įvyki, • Paverčia specifinį langų sistemos įvykį VTK įvykiu, • Persiunčia VTK įvykį vtkInteractorStyle arba vtk3DWidget klasės objektui. vtkRenderWindowInteractor realizuojamas konkrečiomis klasėmis: • vtkWin32RenderWindowInteractorWindows OS, • vtkWin32RenderWindowInteractorX windows Unix OS, • Inicializuojamas Initialize() metodu, • Įvykiai pradedami fiksuoti (EventLoop) po metodo Start() kvietimo. vtkInteractorStyle klasės objektų pavyzdžiai: • vtkInteractorStyleTrackBallCamera manipuliuoja kamera “trackball” stiliuje, • vtkInteractorStyleJoysticCamera manipuliuoja kamera “joystick” stiliuje, • vtkInteractorStyleJoysticCamera gali perjungti tarp“trackball” ir “joystick” stilių bei kameros ir aktoriaus manipuyliacijos, • vtkInteractorStylerubberBandZoom “zoomina” objektąpiešiant lange kvadratą.
VTK: Įvykiai (Events) Visi filtrai (išvesti iš vtkAlgorithm) palaiko įvykius: • StartEvent signalizuoja, kad filtras pradėtas vykdyti, • ProgressEvent parodo kiek darbo atlikta (palaikomas ne visuose filtruose), • EndEvent signalizuoja, kad filtras baigtas vykdyti, • vtkDemandDrivenPipeline įvykdo StartEvent/EndEvent įvykius visuose filtruose, • Labai patogu GUI parodyti naudotojui vykdymo eigą. Visos vtkInteractorStyle ir vtk3DWidget poklasės palaiko įvykius: • StartInteractionEvent fiksuojamas nuspaudus pelės butoną (pvz), • InteractionEvent fiksuojamas judinant pelę ir reikalauja veiksmo (pvz),, • EndInteractionEvent fiksuojamas atleidus pelės butoną (pvz). vtkRenderWindow atvaizdavimo metu palaiko įvykį: • AbortCheckEvent, kuris leidžia naudotojui nutraukti atvaizdavimą.
VTK: Įvykiai (Events) vtkRenderWindowInteractor palaiko įvykius: • StartPickEvent signalizuoja, apie pelės spragtelėjimą, • UserEvent fiksuoja klavišo “u” paspaudimą atvaizdavimo lange, • EndPickEvent signalizuoja, apie pelės spragtelėjimo pabaigą, • UserEvent fiksuoja klavišo “e” paspaudimą atvaizdavimo lange. VTK sąsajos su Tcl/Tk iliustracija: • Atvaizdavimo lange paspaudus “u” fiksuojamas įvykis UserEvent, • Reaguojant kviečiamas Tk GUI “widgetas” vtkInteractor, • Pastarasis leidžiantis įvedinėti Tcl komandas, o rezultatą matyti VTK lange.
VTK: Sąveika ir GUI sąsajos Įvairios programinės įrangos sistemos turi daug įrankių GUI kurti, todėl sąsajos mechanizmas yra labai naudingas: • Interpretacinė kalba Tcl pateikia populiarius ir patogius Tk “widgetus”, o vtkRenderWindow tiesiogiai “įdedamas” į Tk programos aplinką. • Java kalba turi galingą JavaSwing GUI kurti ir nuotolinio darbo įrankius, o VTK pateikia Java AWT terpės atvaizdavimo langą vtkPanel.
VTK: Sąveika ir GUI sąsajos Didžiausi darbo su Java privalumai: • Nuotolinio darbo įrankiai, • Integruota aplinka NetBeans IDE, • GUI kuriami galingu JavaSwing.
VTK: Sąveika ir GUI sąsajos VTK atvaizdavimo langas tiesiogiai įterpiamas į įvairių terpių GUI: • MFC (Microsoft Foundation Classes) – gali valdyti daug langų vienu metu, • Qt pagrįstas vizualizavimo paketo ParaView dizainas.
VTK: Sąveika ir GUI sąsajos VTK atvaizdavimo langas tiesiogiai įterpiamas į įvairių terpių GUI: • wxWindows, • Pavyzdys darytas su Python.
VTK: Widgets vtk3Dwidget–aukšto lygio interaktyvaus VTK vizualizavimo įrankiai: • Pozicionuoja objektus atvaizdavimo lange: taškus, linijas, plokštumas, kubus, sferas, skaliarų spalvines legendas, • Manipuliuoja splainais, ortogonaliomis plokštumomis tūriuose.
VTK: Widgets vtk3Dwidget pateikia: • Pozicijos ir transformacijų informaciją, • Neišreikštines funkcijas (pjūviams, karpymui, pašalinimui), • Primityvus: taškus ir linijas (srovės funkcijoms, zondavimui).
VTK: Widgets vtk3Dwidget turi reprezentacija atvaizdavimo lange: • Reprezentaciją sudaro “widget” geometrija (pvz. tiesė, plokštuma, sfera), • Reprezentaciją papildo specialios sferos, skirtos interaktyviai transformuoti geometriją (pvz. sferos atkarpos galuose vtkLineWidget), • Reprezentacijos valdymas pasižymi intuityvumu, specialiomis detalėmis.
VTK: vtk3DWidgets vtk3DWidgets išvedami iš klasės vtkInteractorObserver: • vtk3DWidgets stebi įvykius lange vtkRenderWindow, kuriuos užfiksuoja vtkRenderWindowInteractor, • vtkInteractorStyle išvedami iš tos pačios klasės, bet jie neturi reprezentacijos atvaizdavimo lange, • vtkInteractorEventRecorder registruoja įvykius ir perduoda juos sekančiam stebėtojui, kurių gali būti ne vienas.
VTK: vtk3DWidgets Bendra vtk3DWidgets panaudojimo procedūra: • Sukuriamas “widgeto” objektas: • vtkBoxWidget *boxWidget = vtkBoxWidget::New(); • Susiejamas su fiksuojančiu įvykius vtkRenderWindowInteractor; • boxWidget->SetInteractor(iren); • Kuriamas stebėtojas reaguojantis į nurodytą įvykį(pagrindiniai įvykiaiStartInteractionEvent, StartInteractionEvent, EndInteractionEvent) • vtkMyCallback *callback = vtkMyCallback::New(); • boxWidget->AddObserver(vtkCommand::InteractionEvent, callback); • “Widgetas” susiejamas su objektais: • Su vtkDataSet metodu SetInput(), • Su vtkProp3D metodu boxWidget->SetProp3D(coneActor); • “Widgetas” pozicionuojamas scenoje: • Jei susietas su objektu, tai boxWidget->PlaceWidget(); • Kitaip, boxWidget->PlaceWidget(double bounds[6]); • “Widgetas” įjungiamas: • Klavišo “i” nuspaudimu, • boxWidget->On();
VTK: Widgets realizacija vtk3Dwidget realizavimas išskaidytas į dvi bazines klases: • vtkAbstractWidgetapdoroja įvykius (events), • vtkWidgetRepresentation apibrėžia “widget” geometrine reprezentaciją, • Reprezentacija pilnai atskirta nuo įvykių apdorojimo. vtkAbstractWidget atlieka: • Prideda stebėtojus (observers), • Apdoroja įvykius (events), • Atlieka atgalinius kvietimus (callbacks) ir t.t vtkWidgetRepresentation sudaro: • Pagrindas vtkProp (gali būtu sudaryta iš kelių vtkProp), • API komunikacijai su “widget”, • Metodai interaktyviam reprezentacijos pasirinkimui ir manipuliavimui, • Reprezentacija nieko nežino jos “widget”.
VTK: Įvykių sąsajos (customization) Įvykių sąsajų pritaikymas individualiems poreikiams: • VTK įvykiai (VTK Event), • “Widgetų” įvykiai (WidgetEvent), • Metodų kvietimai (Method invocation), • Pokyčiai žemame lygyje.
VTK: Įvykių sąsajos (customization) Aparatinės įrangos įvykiai lanksčiai siejami su veiksmais: • VTK įvykiai (VTK Event) atskirti nuo “widgetų” įvykių (WidgetEvent), • “Widget” įvykiai siejami su metodų kvietimais (Method invocation), • LankstusvtkWidgetEventTranslatoržemėlapis veikia EventId pagrindu, bet atrenkant iš sąrašo EventList įvertinami ir kiti vtkEvent kvalifikatoriai.
VTK: vtk3DWidgets vtkBoxWidget reprezentuojamas stačiakampe dėže: • Manipuliuoja transformacijų matrica, • Gali pateikti neišreikštinę funkciją pašalinimui, karpymui.
VTK: vtk3DWidgets vtkImagePlaneWidget vizualizuoja 3D duomenis 3 plokštumomis: • Gaunami vaizdai yra 2D, bet plokštumos interaktyviai stumdomos.