/// <summary> /// Destroys resources and removes movable object tools, call when tools are removed. /// </summary> /// <param name="tools"></param> private void toolsRemoved(MovableObjectTools tools) { if (drawingSurface != null) { tools.destroyToolDrawings(drawingSurface); } movableObjects.Remove(tools); }
public void addMovableObject(String name, MovableObject movable) { MovableObjectTools tools = new MovableObjectTools(name, movable, toolSize); movableObjects.Add(tools); tools.MoveToolVisible = showMoveTools; tools.RotateToolVisible = showRotateTools; }
public void removeMovableObject(MovableObject movable) { MovableObjectTools tools = null; foreach (MovableObjectTools currentTools in movableObjects) { if (currentTools.Movable == movable) { tools = currentTools; break; } } if (tools != null) { toolsRemoved(tools); } }
void events_OnUpdate(EventLayer eventLayer) { Ray3 spaceRay = new Ray3(); Vector3 cameraPos = Vector3.Zero; SceneViewWindow activeWindow = sceneViewController.ActiveWindow; if (activeWindow != null) { IntVector3 mouseLoc = events.Mouse.AbsolutePosition; spaceRay = activeWindow.getCameraToViewportRayScreen(mouseLoc.x, mouseLoc.y); cameraPos = activeWindow.Translation; } //Check collisions and draw shapes if (!PickEvent.HeldDown) { float closestDistance = float.MaxValue; MovableObjectTools closestTools = null; foreach (MovableObjectTools tools in movableObjects) { if (tools.checkBoundingBoxCollision(ref spaceRay)) { if (tools.processAxes(ref spaceRay)) { float distance = (tools.Movable.ToolTranslation - cameraPos).length2(); if (distance < closestDistance) { //If we had a previous closer tool clear its selection. if (closestTools != null) { closestTools.clearSelection(); } closestTools = tools; closestDistance = distance; } //If this tool was not closer clear its selection. else { tools.clearSelection(); } } else { tools.clearSelection(); } } else { tools.clearSelection(); } } if (PickEvent.FirstFrameDown) { currentTools = closestTools; if (closestTools != null) { closestTools.pickStarted(events, ref cameraPos, ref spaceRay); events.alertEventsHandled(); } } else if (PickEvent.FirstFrameUp) { if (currentTools != null) { events.alertEventsHandled(); } currentTools = null; } } else { if (currentTools != null) { currentTools.pickHeld(events, ref cameraPos, ref spaceRay); events.alertEventsHandled(); } } foreach (MovableObjectTools tools in movableObjects) { tools.drawTools(drawingSurface); } }