programming the pip hannes kaufmann institute of software technology and interactive systems vienna...
TRANSCRIPT
Programming the PIP
Hannes Kaufmann
Institute of Software Technology and Interactive Systems
Vienna University of Technology
Studierstube Day 2003
Overview
• Types of widgets
• New widgets
• PIP sheets
• Speech enabled widgets
• Skins
• Limits and design issues
Types of widgets
SoButtonKit:• SoPushButton• SoRadioButton• SoToggleButton
SoDraggerKit:• SoSlider • SoDial
New Old
SoBase3DButton:• So3DButton• So3DRadioButton• So3DCheckBox
SoBase3DSlider:• So3DSlider
SoBase3DDial:• So3DDial
New widgets
2 fields:• SoSFBool highlighted• SoSFBool on
4 states (parts):• onGeometry• offGeometry• highlightedOnGeometry• highlightedOffGeometry
New widgets – simple examplesDEF RESET_BUTTON SoPushButton{
width 5 depth 5 height 2 }
DEF TOGGLE_BUTTON SoToggleButton{
hysteresisBoxScale 2.0 width 5 depth 5 height 2 }
DEF LIGHT_DIAL SoDial{
minValue 0maxValue 1
width 5 depth 5 height 7}
PIP sheets
templatePipSheet SoPipSheetKit {pipParts (PIP_BODY | SHEET | SHEET_TABS |
SYSTEM_TABS)autoScaling FALSEsheetsRoot So3DSeparator {
boundingBoxCheck FALSE eventMask BM_ALL_EVENTS }
Elements of a PIPDefault Skin (…workspace\graphix\skinWs1.iv)
User-defined Skin(…workspace\graphix\skinWin.iv)
Sheet BarWindow BarSystem Bar
In addition: Task Bar
PIP sheets
templatePipSheet SoPipSheetKit {pipParts (PIP_BODY | SHEET | SHEET_TABS | SYSTEM_TABS)autoScaling FALSEsheetsRoot So3DSeparator {
boundingBoxCheck FALSE eventMask BM_ALL_EVENTS }
sheets DEF AllSwitch Switch { DEF MainSeparator Separator {
# new PIPsheet requires new rotation RotationXYZ {axis X angle 1.57 }
Translation { translation 0 0.0101 0 }
PIP sheets
DEF MainSheet Separator { Translation { translation 0.13 0 -0.05 }
DEF Point SoToggleButton{…..
tabTextures [Texture2 { filename "../apps/construct3d/mainmenu.gif"},…. ]
clonePipSheet TRUE}
Speech enabled widgetsDEF Plane SoPushButton{
actionEnterGestures[
SoEnterGesture{ stations [ 6 ] blocked TRUE }]actionExitGestures[
SoExitGesture{ stations [ 6 ] blocked TRUE }]actionStartGestures[
SoSpeechGesture { stations [ 6 ] blocked FALSE SpeechCommands [ "new plane" ] actionBeginSpeech TRUE },
SoButtonPressGesture{ buttonNumber 0 stations [ 6 ] blocked TRUE }
]actionEndGestures[
SoSpeechGesture { stations [ 6 ] blocked FALSE SpeechCommands [ "new plane" ] actionBeginSpeech FALSE },
SoButtonReleaseGesture{ buttonNumber 0 stations [ 6 ] blocked TRUE }
]
Speech enabled widgetsonGeometry Separator
{USE PUSHBUTTON_ON_SETDEF PLANE_ICON Group {
Separator {USE ICON_PROPERTIESCoordinate3 {
point [ -0.02 -0.0052 0.0,0.02 0.0102 0.0,-0.02 0.009 -0.02]
}FaceSet { numVertices 3 }
}}Texture2 { filename "../apps/construct3d/plane.gif" }USE PUSHBUTTON_TEXTURE_GEOMETRY
}
Speech enabled widgetsoffGeometry Separator{
USE PUSHBUTTON_OFF_SETUSE PLANE_ICONTexture2 { filename "../apps/construct3d/plane.gif" }USE PUSHBUTTON_TEXTURE_GEOMETRY
}highlightedOnGeometry Separator{
USE PUSHBUTTON_HIGHLIGHTEDON_SETUSE PLANE_ICONTexture2 { filename "../apps/construct3d/plane.gif" }USE PUSHBUTTON_TEXTURE_GEOMETRY
}highlightedOffGeometry Separator{
USE PUSHBUTTON_HIGHLIGHTEDOFF_SETUSE PLANE_ICONTexture2 { filename "../apps/construct3d/plane.gif" }USE PUSHBUTTON_TEXTURE_GEOMETRY
}}
Speech enabled widgets - SliderDEF SurfaceXSlider SoSpeechSlider{
width 0.03 height 0.02 depth 0.06
minValue 2 maxValue 8minVector 0 0 -0.03maxVector 0 0 0.03alpha 1
actionUpGestures[
SoSpeechGesture{ stations [ 6 ] blocked FALSE
SpeechCommands [ "surface X up"] },]actionDownGestures[
SoSpeechGesture{ stations [ 6 ] blocked FALSE
SpeechCommands [ "surface X down"] },]step 0.166666666666666666
}
PIP config in the UserKitpip PipKit{
station 1
geometry File {name "./graphix/DefaultPip.iv"}pipSize 0.3 0.2 0.01
offset Transform {translation 0 0 0 rotation 1 0 0 -1.57 }
sheetAreaUpperLeft 0.0 0.0sheetAreaLowerRight 1.0 1.0
skinFileName "skinWS1.iv"skinDirectory "./graphix/"
}
SkinsDefault Skin (…workspace\graphix\skinWs1.iv)
User-defined Skin(…workspace\graphix\skinWin.iv)
Sheet BarWindow BarSystem Bar
In addition: Task Bar
Design issues
• Design of widgets
• PIP should fit FOV of the HMD
• Catch events in the „surrounding area“
• Labelling of widgets (esp. buttons, sliders)
Limitations
• „Traditional“ authoring is very time consuming
• Dynamic addition/removal or reconfiguration of widgets/sheets is difficult (hack)
• No standard support of usual 2D widget features such as – Text labels on „mouse-over“– Switching through (sheet)menus with forward
(>), backward (<) buttons