public void SetScalingWidget(ScalingWidget sWidget) { this.sWidget = sWidget; }
bool IntersectsArrow(ScalingWidget sWidget, Ray r, out IRenderable result) { result = sWidget.FindIntersection(r); if (result == null) return false; else return true; }
public override void Init() { clock = new Timer() { Interval = 1000 }; stopwatch = new Stopwatch(); clock.Elapsed += delegate { lCountDown.Content = (--countdown).ToString(); if (countdown == 0) { BoxRenderer boxR = new BoxRenderer(Game.Context); Global.Window.Dispatcher.BeginInvoke(new Action(delegate { Game.ChangeRenderer(boxR);boxR.StartNew(); })); clock.Stop(); } }; //Camera.LookAt(new Vector3(3,0f, 3), new Vector3(-6.5f, 5.55f, -6.5f)); int[] condition = conditions[Test.BoxIndex % conditions.Count]; bool[] arrowCondition = arrowConditions[condition[1]]; boxSize = new float[] { arrowCondition[0] ? 1.5f : 4.5f, arrowCondition[1] ? 1.5f : 4.5f, arrowCondition[2] ? 1.5f : 4.5f }; box = new Box(1, 1, 1); box.ScalingValues = new Vector3(boxSize[0], boxSize[1], boxSize[2]); sWidget = new ScalingWidget(box); RenderableNode rNodeBox = new RenderableNode(box) { Label = "RBox" }; float[] axis = axes[condition[2]]; FixedNode fNodeFrame = new FixedNode { Label = "fGrid", Position = Vector3.Zero, Rotation = Quaternion.RotationYawPitchRoll(MathHelper.DegreesToRadians(axis[0]), MathHelper.DegreesToRadians(axis[1]), MathHelper.DegreesToRadians(axis[2])) }; fNodeBox = new FixedNode { Label = "fBox", }; NewSession(); CameraAnchorNode coNode = new CameraAnchorNode(); Scene.Tree.RootNode.AppendChild(fNodeFrame); Scene.Tree.RootNode.AppendChild(coNode); fNodeBox.AppendChild(rNodeBox); fNodeFrame.AppendChild(bbox.ToBranch()); fNodeFrame.AppendChild(fNodeBox); FixedNode nWidget = sWidget.ToBranch(); fNodeBox.AppendChild(nWidget); DeviceContext.Immediate.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; Hud = Hud.FromDescription(Game.Context.Device, new HudDescription( width: Game.Context.Settings.ScreenWidth, height: Game.Context.Settings.ScreenHeight, zNear: Game.CurrentRenderer.Camera.NearClip, zFar: Game.CurrentRenderer.Camera.FarClip, cameraEnabled: true, multithreaded: true )); OdysseyUI.CurrentHud = Hud; Hud.BeginDesign(); bNew = new Button() { Size = new System.Drawing.Size(120, 60), Content = "New Session", Position = new Vector2(1760, 0) }; Button bSession = new Button() { Size = new System.Drawing.Size(120, 30), Content = "Next", Position = new Vector2(1760, 40) }; bSession.MouseClick += (sender, e) => { //Test.BoxIndex++; Test.Count= (Test.Count + 1) % conditions.Count; BoxRenderer boxR = new BoxRenderer(Game.Context); Global.Window.Dispatcher.BeginInvoke(new Action(delegate { Game.ChangeRenderer(boxR); boxR.StartNew(); })); }; Button bStop = new Button { Size = new System.Drawing.Size(120, 60), Content = "Stop", Position = new Vector2(0, 1020) }; bStop.TouchUp += (sender, e) => { stopwatch.Stop(); Stop(new BoxEventArgs(startTime,DateTime.Now, true)); }; lCountDown = new Label() { Content = "3", Position = new Vector2(800, 300), IsVisible = false, TextDescriptionClass = "Huge" }; rp = new TouchRayPanel { Size = Hud.Size, };//Camera = this.Camera }; rp.SetScalingWidget(sWidget); rp.SetBox(box); rp.SetFrame((IBox)bbox); rp.SetArrowConditions(arrowCondition); rp.SetAxis(axis); Hud.Add(rp); //rp.Add(bSession); //rp.Add(bConnect); //rp.Add(bTracking); // rp.Add(bStop); rp.Add(bNew); rp.Completed += (sender, e) => ((BoxRenderer)Game.CurrentRenderer).Stop(e); bNew.MouseUp += delegate { if (startingNewSession) return; startingNewSession = true; Hud.BeginDesign(); lCountDown.IsVisible = true; Hud.Controls.Add(lCountDown); Hud.EndDesign(); clock.Start(); }; Hud.Init(); Hud.EndDesign(); Scene.BuildRenderScene(); Hud.AddToScene(this, Scene); IsInited = true; }