/// <summary> /// Construir plano /// </summary> public override void doCreation() { var input = Control.creator.Input; //Si hacen clic con el mouse, ver si hay colision con el suelo if (input.buttonDown(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Obtener altura en Y segun movimient en Y del mouse var heightY = creatingInitMouseY - input.Ypos; var adjustedHeightY = MeshCreatorUtils.getMouseIncrementHeightSpeed(Control.Camera, BoundingBox, heightY); //Determinar posicion Z segun la colision con el grid var collisionPoint = Control.Grid.getPicking(); var extensionPoint = new TGCVector3(initSelectionPoint.X, initSelectionPoint.Y + adjustedHeightY, collisionPoint.Z); //Obtener maximo y minimo var min = TGCVector3.Minimize(initSelectionPoint, extensionPoint); var max = TGCVector3.Maximize(initSelectionPoint, extensionPoint); min.X = initSelectionPoint.X; max.X = initSelectionPoint.X + 1; //Configurar plano mesh.setExtremes(min, max); mesh.updateValues(); } //Solto el clic del mouse, generar plano definitivo else if (input.buttonUp(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Tiene el tamaño minimo tolerado var size = mesh.BoundingBox.calculateSize(); if (size.Y > 1 && size.Z > 1) { //Guardar size original del plano para hacer Scaling originalSize = mesh.Size; //Dejar cargado para que se pueda crear un nuevo plano Control.CurrentState = MeshCreatorModifier.State.CreatePrimitiveSelected; Control.CreatingPrimitive = new PlaneYZPrimitive(Control); //Agregar plano a la lista de modelos Control.AddMesh(this); //Seleccionar plano Control.SelectionRectangle.clearSelection(); Control.SelectionRectangle.selectObject(this); Control.UpdateModifyPanel(); } //Sino, descartar else { Control.CurrentState = MeshCreatorModifier.State.CreatePrimitiveSelected; mesh.Dispose(); mesh = null; } } }
/// <summary> /// Construir plano /// </summary> public override void doCreation() { var input = Control.creator.Input; //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 var collisionPoint = Control.Grid.getPicking(); //Obtener extremos del rectángulo de selección var min = TGCVector3.Minimize(initSelectionPoint, collisionPoint); var max = TGCVector3.Maximize(initSelectionPoint, collisionPoint); min.Y = 0; max.Y = 1; //Configurar plano mesh.setExtremes(min, max); mesh.updateValues(); } //Solto el clic del mouse, generar plano definitivo else if (input.buttonUp(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Tiene el tamaño minimo tolerado var size = mesh.BoundingBox.calculateSize(); if (size.X > 1 && size.Z > 1) { //Guardar size original del plano para hacer Scaling originalSize = mesh.Size; //Dejar cargado para que se pueda crear un nuevo plano Control.CurrentState = MeshCreatorModifier.State.CreatePrimitiveSelected; Control.CreatingPrimitive = new TGCPlaneXZPrimitive(Control); //Agregar plano a la lista de modelos Control.AddMesh(this); //Seleccionar plano Control.SelectionRectangle.clearSelection(); Control.SelectionRectangle.selectObject(this); Control.UpdateModifyPanel(); } //Sino, descartar else { Control.CurrentState = MeshCreatorModifier.State.CreatePrimitiveSelected; mesh.Dispose(); mesh = null; } } }