DropPrimitiveButton add_primitive_button(Cockpit cockpit, string sName, float fHUDRadius, float dx, float dy, PrimitiveType primType, SOType soType, float fPrimRadiusScale, Material bgMaterial, Material primMaterial, Func <SceneObject> CreatePrimitiveF, IGameObjectGenerator customGenerator = null ) { float fButtonRadius = 0.08f; DropPrimitiveButton button = new DropPrimitiveButton() { TargetScene = cockpit.Scene, CreatePrimitive = CreatePrimitiveF }; button.Create(fButtonRadius, bgMaterial); var gen = (customGenerator != null) ? customGenerator : new primitiveIconGenerator() { PrimType = primType, PrimMaterial = primMaterial, PrimSize = fButtonRadius * fPrimRadiusScale }; button.AddVisualElements(gen.Generate(), true); HUDUtil.PlaceInSphere(button, fHUDRadius, dx, dy); button.Name = sName; button.OnClicked += (s, e) => { cockpit.Scene.DefaultPrimitiveType = soType; }; button.OnDoubleClicked += (s, e) => { // [TODO] could have a lighter record here because we can easily recreate primitive... cockpit.Scene.History.PushChange( new AddSOChange() { scene = cockpit.Scene, so = CreatePrimitiveF() }); cockpit.Scene.History.PushInteractionCheckpoint(); }; return(button); }
public void Initialize(Cockpit cockpit) { cockpit.Name = "photoCockpit"; // Configure how the cockpit moves cockpit.PositionMode = Cockpit.MovementMode.TrackPosition; // [RMS] use orientation mode to make cockpit follow view orientation. // (however default widgets below are off-screen!) //cockpit.PositionMode = Cockpit.MovementMode.TrackOrientation; // Add some UI elements to the cockpit // - cylinder & box buttons - double-click or drag/drop into scene // - button to start and cancel draw-primitives tool float fHUDRadius = 1.0f; Color bgColor = new Color(0.7f, 0.7f, 1.0f, 0.7f); Material bgMaterial = (bgColor.a == 1.0f) ? MaterialUtil.CreateStandardMaterial(bgColor) : MaterialUtil.CreateTransparentMaterial(bgColor); Material primMaterial = MaterialUtil.CreateStandardMaterial(Color.yellow); float fButtonsY = -50.0f; // degrees float fButtonsSpacing = 15.0f; float fPrimitivesX = -35.0f; DropPrimitiveButton cylinderButton = add_primitive_button(cockpit, "create_cylinder", fHUDRadius, fPrimitivesX, fButtonsY, PrimitiveType.Cylinder, SOTypes.Cylinder, 0.7f, bgMaterial, primMaterial, () => { return(new CylinderSO().Create(cockpit.Scene.DefaultSOMaterial)); }); cockpit.AddUIElement(cylinderButton); DropPrimitiveButton boxButton = add_primitive_button(cockpit, "create_box", fHUDRadius, fPrimitivesX + fButtonsSpacing, fButtonsY, PrimitiveType.Cube, SOTypes.Box, 0.8f, bgMaterial, primMaterial, () => { return(new BoxSO().Create(cockpit.Scene.DefaultSOMaterial)); }); cockpit.AddUIElement(boxButton); float fToolsX = 35.0f; float fToolButtonRadius = 0.08f; // buttons for draw-primitive tool and cancel-tool button ActivateToolButton drawPrimButton = add_tool_button(cockpit, DrawSurfaceCurveTool.Identifier, fHUDRadius, fToolsX - fButtonsSpacing, fButtonsY, fToolButtonRadius, bgMaterial, primMaterial, new toolInfo() { identifier = DrawSurfaceCurveTool.Identifier, sMeshPath = "draw_primitive", fMeshScaleFudge = 1.2f }); cockpit.AddUIElement(drawPrimButton); ActivateToolButton cancelButton = add_tool_button(cockpit, "cancel", fHUDRadius, fToolsX, fButtonsY, fToolButtonRadius, bgMaterial, primMaterial, new toolInfo() { identifier = "cancel", sMeshPath = "cancel", fMeshScaleFudge = 1.2f }); cockpit.AddUIElement(cancelButton); // Configure interaction behaviors // - below we add behaviors for mouse, gamepad, and spatial devices (oculus touch, etc) // - keep in mind that Tool objects will register their own behaviors when active // setup key handlers (need to move to behavior...) cockpit.AddKeyHandler(new SampleKeyHandler(cockpit.Context)); // these behaviors let us interact with UIElements (ie left-click/trigger, or either triggers for Touch) cockpit.InputBehaviors.Add(new VRMouseUIBehavior(cockpit.Context) { Priority = 0 }); cockpit.InputBehaviors.Add(new VRGamepadUIBehavior(cockpit.Context) { Priority = 0 }); cockpit.InputBehaviors.Add(new VRSpatialDeviceUIBehavior(cockpit.Context) { Priority = 0 }); // spatial device does camera manipulation via Behavior // (mouse/gamepad currently do not, but will in future!) cockpit.InputBehaviors.Add(new SpatialDeviceViewManipBehavior(cockpit) { Priority = 2 }); SpatialDeviceGrabBehavior grab = new SpatialDeviceGrabBehavior(cockpit) { StickMoveSpeed = 0.03f, Priority = 3 }; grab.OnBeginGrab += (sender, target) => { cockpit.Scene.Select(target, true); }; grab.OnEndGrab += (sender, target) => { cockpit.Scene.ClearSelection(); }; cockpit.InputBehaviors.Add(grab); // selection / multi-selection behaviors cockpit.InputBehaviors.Add(new MouseMultiSelectBehavior(cockpit.Context) { Priority = 10 }); cockpit.InputBehaviors.Add(new GamepadMultiSelectBehavior(cockpit.Context) { Priority = 10 }); cockpit.InputBehaviors.Add(new SpatialDeviceMultiSelectBehavior(cockpit.Context) { Priority = 10 }); // de-selection behaviors cockpit.InputBehaviors.Add(new MouseDeselectBehavior(cockpit.Context) { Priority = 999 }); cockpit.InputBehaviors.Add(new GamepadDeselectBehavior(cockpit.Context) { Priority = 999 }); cockpit.InputBehaviors.Add(new SpatialDeviceDeselectBehavior(cockpit.Context) { Priority = 999 }); cockpit.InputBehaviors.Add(new UndoShortcutBehavior(cockpit.Context) { Priority = 999 }); // screencap to your dropbox cockpit.OverrideBehaviors.Add(new ScreenCaptureBehavior() { Priority = 0, ScreenshotPath = Environment.GetEnvironmentVariable("homepath") + "\\DropBox\\ScreenShots\\" }); }
public void Initialize(Cockpit cockpit) { cockpit.Name = "sampleCockpit"; // Configure how the cockpit moves cockpit.PositionMode = Cockpit.MovementMode.TrackPosition; // initialize layout BoxContainer screenContainer = new BoxContainer(new Cockpit2DContainerProvider(cockpit)); PinnedBoxes2DLayoutSolver screenLayout = new PinnedBoxes2DLayoutSolver(screenContainer); PinnedBoxesLayout layout = new PinnedBoxesLayout(cockpit, screenLayout) { StandardDepth = 1.0f }; cockpit.AddLayout(layout, "2D", true); float pixelScale = cockpit.GetPixelScale(); float buttonDiam = 150 * pixelScale; HUDElementList primitives_list = new HUDElementList() { Width = 5 * buttonDiam, Height = buttonDiam, Spacing = 25 * pixelScale, Direction = HUDElementList.ListDirection.Horizontal }; // Add some UI elements to the cockpit // - cylinder & box buttons - double-click or drag/drop into scene // - button to start and cancel draw-primitives tool Color bgColor = new Color(0.7f, 0.7f, 1.0f, 0.7f); Material bgMaterial = (bgColor.a == 1.0f) ? MaterialUtil.CreateStandardMaterial(bgColor) : MaterialUtil.CreateTransparentMaterial(bgColor); Material primMaterial = MaterialUtil.CreateStandardMaterial(Color.yellow); DropPrimitiveButton cylinderButton = create_primitive_button(cockpit, "create_cylinder", buttonDiam / 2, PrimitiveType.Cylinder, SOTypes.Cylinder, 0.7f, bgMaterial, primMaterial, () => { return(new CylinderSO().Create(cockpit.Scene.DefaultSOMaterial)); }); primitives_list.AddListItem(cylinderButton); DropPrimitiveButton boxButton = create_primitive_button(cockpit, "create_box", buttonDiam / 2, PrimitiveType.Cube, SOTypes.Box, 0.8f, bgMaterial, primMaterial, () => { return(new BoxSO().Create(cockpit.Scene.DefaultSOMaterial)); }); primitives_list.AddListItem(boxButton); primitives_list.Create(); primitives_list.Name = "button_bar"; // align primitives_list to bottom-left layout.Add(primitives_list, new LayoutOptions() { Flags = LayoutFlags.None, PinSourcePoint2D = LayoutUtil.BoxPointF(primitives_list, BoxPosition.BottomLeft), PinTargetPoint2D = LayoutUtil.BoxPointF(screenContainer, BoxPosition.BottomLeft, 25 * pixelScale * Vector2f.One) }); //float fToolsX = 35.0f; //float fToolButtonRadius = 0.08f; // buttons for draw-primitive tool and cancel-tool button //ActivateToolButton drawPrimButton = add_tool_button(cockpit, DrawPrimitivesTool.Identifier, fHUDRadius, // fToolsX - fButtonsSpacing, fButtonsY, fToolButtonRadius, bgMaterial, primMaterial, // new toolInfo() { identifier = DrawPrimitivesTool.Identifier, sMeshPath = "draw_primitive", fMeshScaleFudge = 1.2f }); //cockpit.AddUIElement(drawPrimButton); //ActivateToolButton cancelButton = add_tool_button(cockpit, "cancel", fHUDRadius, // fToolsX, fButtonsY, fToolButtonRadius, bgMaterial, primMaterial, // new toolInfo() { identifier = "cancel", sMeshPath = "cancel", fMeshScaleFudge = 1.2f }); //cockpit.AddUIElement(cancelButton); // Configure interaction behaviors // - below we add behaviors for mouse, gamepad, and spatial devices (oculus touch, etc) // - keep in mind that Tool objects will register their own behaviors when active // setup key handlers (need to move to behavior...) cockpit.AddKeyHandler(new BasicShapesDemo_KeyHandler(cockpit.Context)); // these behaviors let us interact with UIElements (ie left-click/trigger, or either triggers for Touch) cockpit.InputBehaviors.Add(new Mouse2DCockpitUIBehavior(cockpit.Context) { Priority = 0 }); cockpit.InputBehaviors.Add(new VRMouseUIBehavior(cockpit.Context) { Priority = 1 }); // selection / multi-selection behaviors cockpit.InputBehaviors.Add(new MouseMultiSelectBehavior(cockpit.Context) { Priority = 10 }); cockpit.InputBehaviors.Add(new GamepadMultiSelectBehavior(cockpit.Context) { Priority = 10 }); // left click-drag to tumble, and left click-release to de-select cockpit.InputBehaviors.Add(new MouseClickDragSuperBehavior() { Priority = 100, DragBehavior = new MouseViewRotateBehavior(cockpit.Context) { Priority = 100, RotateSpeed = 3.0f }, ClickBehavior = new MouseDeselectBehavior(cockpit.Context) { Priority = 999 } }); // also right-click-drag to tumble cockpit.InputBehaviors.Add(new MouseViewRotateBehavior(cockpit.Context) { Priority = 100, RotateSpeed = 3.0f, ActivateF = MouseBehaviors.RightButtonPressedF, ContinueF = MouseBehaviors.RightButtonDownF }); // middle-click-drag to pan cockpit.InputBehaviors.Add(new MouseViewPanBehavior(cockpit.Context) { Priority = 100, PanSpeed = 1.0f, ActivateF = MouseBehaviors.MiddleButtonPressedF, ContinueF = MouseBehaviors.MiddleButtonDownF }); cockpit.OverrideBehaviors.Add(new MouseWheelZoomBehavior(cockpit) { Priority = 100, ZoomScale = 10.0f }); // touch input cockpit.InputBehaviors.Add(new TouchUIBehavior(cockpit.Context) { Priority = 1 }); cockpit.InputBehaviors.Add(new Touch2DCockpitUIBehavior(cockpit.Context) { Priority = 0 }); cockpit.InputBehaviors.Add(new TouchViewManipBehavior(cockpit.Context) { Priority = 999, TouchZoomSpeed = 0.1f, TouchPanSpeed = 0.03f }); }