# Configura los eventos para interactuar # con la escena # # proc Eventos {} { global izquierdo; set izquierdo 0 global derecho; set derecho 0 global cam; set cam 1 global IzqTool; set IzqTool 0 global DchaTool; set DchaTool 0 global ActiveTool; set ActiveTool 0 global Opened0; set Opened0 0 global Opened1; set Opened1 0 set iren [renWin GetInteractor] $iren SetInteractorStyle "" # # Add the observers to watch for particular events. These invoke # Tcl procedures. # $iren AddObserver LeftButtonPressEvent {global izquierdo; set izquierdo 1} $iren AddObserver LeftButtonReleaseEvent {global izquierdo; set izquierdo 0} $iren AddObserver RightButtonPressEvent {global derecho; set derecho 1} $iren AddObserver RightButtonReleaseEvent {global derecho; set derecho 0} $iren AddObserver KeyPressEvent Keypress $iren AddObserver MouseMoveEvent MoverCosa $iren Initialize #------------------------------------------------- } proc Simulacion {} { Simulation SimulationStep renWin Render } proc MoverCosa {} { set iren [renWin GetInteractor] global cam izquierdo derecho ActiveTool DefModels cajas set lastX [lindex [$iren GetLastEventPosition] 0] set lastY [lindex [$iren GetLastEventPosition] 1] set x [lindex [$iren GetEventPosition] 0] set y [lindex [$iren GetEventPosition] 1] if {[expr $izquierdo | $derecho] } { if {$cam} { MueveCamara $izquierdo $derecho $x $y $lastX $lastY } else { MueveHerramienta $ActiveTool $izquierdo $derecho $x $y $lastX $lastY } } } proc MueveCamara {izquierdo derecho x y lastX lastY} { if { $izquierdo } { MovLateralcam ren1 [ren1 GetActiveCamera] $x $y $lastX $lastY } elseif { $derecho } { MovProfundocam ren1 [ren1 GetActiveCamera] $x $y $lastX $lastY } } proc MueveHerramienta {ActiveTool izquierdo derecho x y lastX lastY } { if { $izquierdo } { MovLateralTool ren1 [Herramientas GetToolOnPosition $ActiveTool] $x $y $lastX $lastY } elseif { $derecho } { MovProfundoTool ren1 [Herramientas GetToolOnPosition $ActiveTool] $x $y $lastX $lastY } } proc MovLateralcam {render camara x y ultimox ultimoy} { set izquierdo [expr [expr $ultimox - $x] * 0.015] set derecho [expr [expr $ultimoy - $y ] * 0.015] set posicion [$camara GetPosition] $camara Yaw $izquierdo $camara Pitch $derecho renWin Render } proc MovProfundocam {render camara x y ultimox ultimoy} { if {[expr $ultimoy - $y ] < 0} { $camara Dolly 0.995 } else { $camara Dolly 1.005 } renWin Render } proc MovLateralTool {render Tool x y ultimox ultimoy} { set izquierdo [expr [expr $ultimox - $x] * 0.01] set derecho [expr [expr $y - $ultimoy] * 0.01] [$Tool GetColeccionDeModelos] RotateX $derecho [$Tool GetColeccionDeModelos] RotateY $izquierdo renWin Render } proc MovProfundoTool {render Tool x y ultimox ultimoy} { global ActiveTool global Opened0 global Opened1 set expr "set ToolState \$Opened$ActiveTool" eval $expr SetToolApertureState 0 set derecho [expr [expr $ultimoy - $y ] * 0.05] $Tool SetToolDepthPosition $derecho if {$ToolState} { SetToolApertureState 1 } renWin Render } proc SetToolApertureState {State} { global cam global ActiveTool global Opened0 global Opened1 set expr "set ToolState \$Opened$ActiveTool" eval $expr if {(!$cam) && ($ToolState != $State)} { set tool [Herramientas GetToolOnPosition $ActiveTool] if {$ToolState} { $tool SetToolAperture -25 set Opened$ActiveTool 0 } else { $tool SetToolAperture 25 set Opened$ActiveTool 1 } } } proc Keypress {} { set iren [renWin GetInteractor] set tecla [$iren GetKeySym] global cam ActiveTool Opened0 Opened1 switch $tecla { "c" { global cam if {$cam} { set cam 0 } else { set cam 1 } } "i" { #avanza herramienta de la derecha Simulation SetActiveTool 1; set ActiveTool 1 } "x" { #moviento izquierdo derecho de la herramienta de la derecha set expr "set ToolState \$Opened$ActiveTool" eval $expr if {!$cam} { SetToolApertureState 0 set tool [Herramientas GetToolOnPosition $ActiveTool] $tool SetToolRotation -1 if {$ToolState} { SetToolApertureState 1 } renWin Render } } "z" { #moviento izquierdo derecho de la herramienta de la derecha set expr "set ToolState \$Opened$ActiveTool" eval $expr if {!$cam} { SetToolApertureState 0 set tool [Herramientas GetToolOnPosition $ActiveTool] $tool SetToolRotation 1 if {$ToolState} { SetToolApertureState 1 } renWin Render } } "a" { SetToolApertureState 1 renWin Render } "s" { SetToolApertureState 0 renWin Render #moviento izquierdo izquierdo de la herramienta de la izquierda } "d" { #moviento izquierdo derecho de la herramienta de la izquierda Simulation SetActiveTool 0; set ActiveTool 0 } "u" { wm deiconify .vtkInteract } "q" {::vtk::cb_exit exit} } }