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