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); } } }
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); }