/// <summary> /// Iniciar la creacion /// </summary> public override void initCreation(Vector3 gridPoint) { initSelectionPoint = gridPoint; currentCreatingState = CreatingBoxState.DraggingSize; //Crear caja inicial TgcTexture boxTexture = TgcTexture.createTexture(Control.getCreationTexturePath()); mesh = TgcBox.fromExtremes(initSelectionPoint, initSelectionPoint, boxTexture); mesh.BoundingBox.setRenderColor(MeshCreatorUtils.UNSELECTED_OBJECT_COLOR); this.Layer = Control.CurrentLayer; }
/// <summary> /// Construir caja /// </summary> public override void doCreation() { TgcD3dInput input = GuiController.Instance.D3dInput; switch (currentCreatingState) { case CreatingBoxState.DraggingSize: //Si hacen clic con el mouse, ver si hay colision con el suelo if (input.buttonDown(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Determinar el size en XZ del box Vector3 collisionPoint = Control.Grid.getPicking(); //Obtener extremos del rectángulo de selección Vector3 min = Vector3.Minimize(initSelectionPoint, collisionPoint); Vector3 max = Vector3.Maximize(initSelectionPoint, collisionPoint); min.Y = initSelectionPoint.Y; max.Y = initSelectionPoint.Y + 0.2f; //Configurar BOX mesh.setExtremes(min, max); mesh.updateValues(); } //Solto el clic del mouse, pasar a configurar el Height del box else if (input.buttonUp(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Tiene el tamaño minimo tolerado Vector3 size = mesh.BoundingBox.calculateSize(); if (size.X > 1 && size.Z > 1) { currentCreatingState = CreatingBoxState.DraggingHeight; creatingBoxInitMouseY = input.Ypos; } //Sino, descartar else { Control.CurrentState = MeshCreatorControl.State.CreatePrimitiveSelected; mesh.dispose(); mesh = null; } } break; case CreatingBoxState.DraggingHeight: //Si presiona clic, terminar de configurar la altura y generar box definitivo if (input.buttonPressed(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Guardar size original del Box para hacer Scaling originalSize = mesh.BoundingBox.calculateSize(); //Dejar cargado para que se pueda crear un nuevo box Control.CurrentState = MeshCreatorControl.State.CreatePrimitiveSelected; Control.CreatingPrimitive = new BoxPrimitive(Control); //Agregar box a la lista de modelos Control.addMesh(this); //Seleccionar Box Control.SelectionRectangle.clearSelection(); Control.SelectionRectangle.selectObject(this); Control.updateModifyPanel(); } //Determinar altura en base a la posicion Y del mouse else { float heightY = creatingBoxInitMouseY - input.Ypos; float adjustedHeightY = MeshCreatorUtils.getMouseIncrementHeightSpeed(Control.Camera, this.BoundingBox, heightY); Vector3 min = mesh.BoundingBox.PMin; min.Y = initSelectionPoint.Y; Vector3 max = mesh.BoundingBox.PMax; max.Y = initSelectionPoint.Y + adjustedHeightY; //Configurar BOX mesh.setExtremes(min, max); mesh.updateValues(); } break; } }