/// <summary> /// Centrar la camara sobre un objeto seleccionado /// </summary> public void zoomObject() { var aabb = MeshCreatorUtils.getSelectionBoundingBox(control.SelectionList); if (aabb != null) { control.Camera.CameraCenter = aabb.calculateBoxCenter(); } }
/// <summary> /// Poner la camara en front view respecto de un objeto seleccionado /// </summary> public void setFrontView() { var aabb = MeshCreatorUtils.getSelectionBoundingBox(control.SelectionList); TGCVector3 lookAt; if (aabb != null) { lookAt = aabb.calculateBoxCenter(); } else { lookAt = TGCVector3.Empty; } control.Camera.setFixedView(lookAt, 0, 0, control.Camera.CameraDistance); }
/// <summary> /// Actualizar y dibujar seleccion /// </summary> public void render() { var input = control.creator.Input; //Mantiene el mouse apretado if (input.buttonDown(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Definir recuadro var mousePos = new TGCVector2(input.Xpos, input.Ypos); var min = TGCVector2.Minimize(initMousePos, mousePos); var max = TGCVector2.Maximize(initMousePos, mousePos); rectMesh.updateMesh(min, max); } //Solo el mouse else if (input.buttonUp(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Definir recuadro var mousePos = new TGCVector2(input.Xpos, input.Ypos); var min = TGCVector2.Minimize(initMousePos, mousePos); var max = TGCVector2.Maximize(initMousePos, mousePos); var r = new Rectangle((int)min.X, (int)min.Y, (int)(max.X - min.X), (int)(max.Y - min.Y)); //Usar recuadro de seleccion solo si tiene un tamaño minimo if (r.Width > 1 && r.Height > 1) { //Limpiar seleccionar anterior si no estamos agregando en forma aditiva if (!selectiveObjectsAdditive) { clearSelection(); } //Buscar que objetos del escenario caen dentro de la seleccion y elegirlos foreach (var p in control.Meshes) { //Solo los visibles if (p.Visible) { //Ver si hay colision contra la proyeccion del AABB del mesh //Rectangle primRect = MeshCreatorUtils.projectAABB(p.BoundingBox); Rectangle primRect; if (MeshCreatorUtils.projectBoundingBox(p.BoundingBox, out primRect)) { if (r.IntersectsWith(primRect)) { //Agregar el objeto en forma aditiva if (selectiveObjectsAdditive) { selectOrRemoveObjectIfPresent(p); } //Agregar el objeto en forma simple else { selectObject(p); } } } } } } //Si el recuadro no tiene tamaño suficiente, hacer seleccion directa else { doDirectSelection(selectiveObjectsAdditive); } control.CurrentState = MeshCreatorModifier.State.SelectObject; //Si quedo algo seleccionado activar gizmo if (control.SelectionList.Count > 0) { activateCurrentGizmo(); } //Actualizar panel de Modify con lo que se haya seleccionado, o lo que no control.UpdateModifyPanel(); } //Dibujar recuadro rectMesh.render(); }
/// <summary> /// Obtener pivote central para efectuar la rotacion. /// Se busca el centro de todos los AABB /// </summary> public TGCVector3 getRotationPivot() { var aabb = MeshCreatorUtils.getSelectionBoundingBox(control.SelectionList); return(aabb.calculateBoxCenter()); }