public void NewPlaceAction() { if (IsPlacing) { PlacingID++; PlacingID %= RenderableList.Count; IRenderable CreatedRenderable; CreatedRenderable = System.Activator.CreateInstance(RenderableList[PlacingID]) as IRenderable; CreateObject.Undo(); OutsideSimulatorApp.GetInstance().ObjectPicker.ClickedNode = LastPickedObject; Cameras.Camera SceneCamera = OutsideSimulatorApp.GetInstance().SceneCamera; Vector3 lav = (SceneCamera.LookAt - SceneCamera.Position); lav.Normalize(); CreateObject = new CreateObject( CreatedRenderable, Matrix.Translation(SceneCamera.Position + lav * ObjectMover.frontDist)); CreateObject.Redo(); OutsideSimulatorApp.GetInstance().ObjectPicker.ClickedNode = CreateObject.ParentNode.Children[CreateObject.ChildName]; } else { IsPlacing = true; PlacingID = 0; IRenderable CreatedRenderable; CreatedRenderable = System.Activator.CreateInstance(RenderableList[PlacingID]) as IRenderable; Cameras.Camera SceneCamera = OutsideSimulatorApp.GetInstance().SceneCamera; Vector3 lav = (SceneCamera.LookAt - SceneCamera.Position); lav.Normalize(); LastPickedObject = OutsideSimulatorApp.GetInstance().ObjectPicker.ClickedNode; CreateObject = new CreateObject( CreatedRenderable, Matrix.Translation(SceneCamera.Position + lav * ObjectMover.frontDist)); CreateObject.Redo(); OutsideSimulatorApp.GetInstance().ObjectPicker.ClickedNode = CreateObject.ParentNode.Children[CreateObject.ChildName]; } }
protected void PlaceObject() { // // Create a new CreateObject, for the newest location // var coToSave = new CreateObject(CreateObject.ParentNode.Children[CreateObject.ChildName].Renderable, CreateObject.ParentNode.Children[CreateObject.ChildName].Transform); CreateObject.Undo(); CreateObject = coToSave; CreateObject.Redo(); // // Place // OutsideSimulatorApp.GetInstance().CommandStack.Push(CreateObject); IsPlacing = false; // Place new object (undo-able action) in our scene, // at its current location (15 units in front of camera, axis-aligned to world) OutsideSimulatorApp.GetInstance().ObjectPicker.ClickedNode = null; }