Exemplo n.º 1
0
        /// <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;
                }
            }
        }
Exemplo n.º 2
0
        /// <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;
                }
            }
        }