Exemplo n.º 1
0
        private void EditarToolStripButton_Click(object sender, EventArgs e)
        {
            if (PuntosDataGridView.SelectedRows.Count == 0)
            {
                return;
            }

            var         r             = PuntosDataGridView.SelectedRows[0];
            Punto       punto         = (Punto)r.Tag;
            Punto       puntoAuxiliar = (Punto)punto.Clone();
            FrmPuntosAE frm           = new FrmPuntosAE {
                Text = "Edición de un Punto"
            };

            frm.SetPunto(puntoAuxiliar);
            DialogResult dr = frm.ShowDialog(this);

            if (dr == DialogResult.OK)
            {
                puntoAuxiliar = frm.GetPunto();

                if (!_repositorio.ExistePunto(puntoAuxiliar))
                {
                    _repositorio.Modificar(punto, puntoAuxiliar);
                    SetearFila(r, puntoAuxiliar);
                    _repositorio.EstaModificado = true;
                    MessageBox.Show("Registro Editado", "Mensaje",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
                else
                {
                    SetearFila(r, punto);
                    MessageBox.Show("Registro Repetido", "Error",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                }
            }
        }
Exemplo n.º 2
0
        private Punto[][] generarMatrizVertices(Punto[] curva, double gradosRevolucion, int cantidadCaras)
        {
            double anguloRotacionRadianes      = MathUtils.DegreeToRadian(gradosRevolucion / cantidadCaras);
            CurvaBzierSegmentosCubicos curvaBS = new CurvaBzierSegmentosCubicos(curva);
            IList <Punto> curvaDiscretizada1   = curvaBS.GetPuntosDiscretos(PASO_BEZIER);

            curvaDiscretizada1.RemoveAt(curvaDiscretizada1.Count - 2);
            Punto[] curvaDiscretizada = curvaDiscretizada1.ToArray <Punto>();

            Punto[] normales = this.ObtenerNormalesCurva2D(curvaDiscretizada);

            Punto[][] matriz = new Punto[cantidadCaras + 2][];

            for (int iteradorRotacion = 0; iteradorRotacion < cantidadCaras; ++iteradorRotacion)
            {
                matriz[iteradorRotacion] = new Punto[curvaDiscretizada.Length];
                for (int iteradorBezier = 0; iteradorBezier < curvaDiscretizada.Length; ++iteradorBezier)
                {
                    Punto puntoCurva = curvaDiscretizada[iteradorBezier];
                    matriz[iteradorRotacion][iteradorBezier] = puntoCurva.Clone();

                    // roto, al mismo tiempo, los puntos de la curva alrededor del eje Y
                    Punto puntoCurvaBack = puntoCurva.Clone();
                    puntoCurva.X = puntoCurvaBack.X * Math.Cos(anguloRotacionRadianes) + puntoCurvaBack.Z * Math.Sin(anguloRotacionRadianes);
                    puntoCurva.Z = puntoCurvaBack.Z * Math.Cos(anguloRotacionRadianes) - puntoCurvaBack.X * Math.Sin(anguloRotacionRadianes);

                    curvaDiscretizada[iteradorBezier] = puntoCurva;


                    // roto, al mismo tiempo, los puntos de la normal alrededor del eje Y
                    Punto puntoNormal = normales[iteradorBezier];
                    matriz[iteradorRotacion][iteradorBezier].NormalX = puntoNormal.X;
                    matriz[iteradorRotacion][iteradorBezier].NormalY = puntoNormal.Y;
                    matriz[iteradorRotacion][iteradorBezier].NormalZ = puntoNormal.Z;

                    Punto puntoNormalBack = puntoNormal.Clone();
                    puntoNormal.X = puntoNormalBack.X * Math.Cos(anguloRotacionRadianes) + puntoNormalBack.Z * Math.Sin(anguloRotacionRadianes);
                    puntoNormal.Z = puntoNormalBack.Z * Math.Cos(anguloRotacionRadianes) - puntoNormalBack.X * Math.Sin(anguloRotacionRadianes);

                    normales[iteradorBezier] = puntoNormal;
                }
            }

            matriz[cantidadCaras]     = matriz[0];
            matriz[cantidadCaras + 1] = matriz[1]; // OJO solo si los grados son 360


            /*
             * // calculo las normales en toda la matriz
             * Boolean invertirNormal = true;
             * Punto puntoNorte = null;
             * Punto puntoSur = null;
             * Punto puntoEste = null;
             * Punto puntoOeste = null;
             * Punto puntoCentro = null;
             * int cantidadPixelesAlto = curvaDiscretizada.Length;
             * int cantidadPixelesAncho = matriz.Length;
             *
             * for (int indiceFila = 0; indiceFila < cantidadPixelesAncho; ++indiceFila)
             * {
             *  for (int indiceColumna = 0; indiceColumna < cantidadPixelesAlto; ++indiceColumna)
             *  {
             *      puntoCentro = matriz[indiceFila][indiceColumna];
             *
             *      if (indiceFila + 1 < cantidadPixelesAncho - 1) // Hay punto norte
             *          puntoNorte = matriz[indiceFila + 1][indiceColumna];
             *      else puntoNorte = null;
             *
             *      if (indiceFila - 1 >= 0) // Hay punto sur
             *          puntoSur = matriz[indiceFila - 1][indiceColumna];
             *      else puntoSur = null;
             *
             *      if (indiceColumna - 1 >= 0) // Hay punto este
             *          puntoOeste = matriz[indiceFila][indiceColumna - 1];
             *      else puntoOeste = null;
             *
             *      if (indiceColumna + 1 < cantidadPixelesAlto - 1) // Hay punto oeste
             *          puntoEste = matriz[indiceFila][indiceColumna + 1];
             *      else puntoEste = null;
             *
             *      Punto normal = Punto.CalcularNormal(puntoCentro, puntoNorte, puntoEste, puntoSur, puntoOeste, invertirNormal);
             *      matriz[indiceFila][indiceColumna].NormalX = normal.X;
             *      matriz[indiceFila][indiceColumna].NormalY = normal.Y;
             *      matriz[indiceFila][indiceColumna].NormalZ = normal.Z;
             *  }
             * }
             */
            return(matriz);
        }