static Entity Transforma(ConicSensor sensorOriginal, ConicSensor sensorNuevo, Entity entidad, out double paralajeMáximo) { if (entidad is ReadOnlyLine) { ReadOnlyLine línea = entidad as ReadOnlyLine; Line nueva = línea.Clone(); paralajeMáximo = double.MinValue; for (int i = 0; i < nueva.Points.Count; i++) { Point2D[] coordenadas = sensorOriginal.ModelToPixel(nueva.Points[i]); ModelParalax modelo = sensorNuevo.PixelToModel(coordenadas); paralajeMáximo = Math.Max(paralajeMáximo, modelo.Paralax); nueva.Points[i] = modelo.Model; } return nueva; } if (entidad is ReadOnlyPoint) { ReadOnlyPoint punto = entidad as ReadOnlyPoint; Point nuevo = punto.Clone(); Point2D[] coordenadas = sensorOriginal.ModelToPixel(punto.Coordinate); ModelParalax modelo = sensorOriginal.PixelToModel(coordenadas); nuevo.Coordinate = modelo.Model; paralajeMáximo = modelo.Paralax; return nuevo; } if (entidad is ReadOnlyText) { ReadOnlyText texto = entidad as ReadOnlyText; Text nuevo = texto.Clone(); Point2D[] coordenadas = sensorOriginal.ModelToPixel(texto.Coordinate); ModelParalax modelo = sensorOriginal.PixelToModel(coordenadas); nuevo.Coordinate = modelo.Model; paralajeMáximo = modelo.Paralax; return nuevo; } throw new ArgumentException(string.Format("No se pueden transformar entidades de tipo {0}", entidad.GetType().ToString())); }
private static void TransformaArchivo(string[] args) { try { ConicSensor sensorOriginal = new ConicSensor(); sensorOriginal.Load(args[0], args[2], false); ConicSensor sensorNuevo = new ConicSensor(); sensorNuevo.Load(args[1], args[2], false); double paralajeAlarma = double.Parse(args[5]); using (BinDouble archivoOriginal = new BinDouble(args[3])) { using (BinDouble archivoNuevo = new BinDouble(args[4], 0, true, true)) { int índiceEntidad = 0; foreach (var entidad in archivoOriginal) { double paralajeEntidad; var entidadTransformada = Transforma(sensorOriginal, sensorNuevo, entidad, out paralajeEntidad); archivoNuevo.Add(entidadTransformada); if (Math.Abs(paralajeEntidad) >= paralajeAlarma) { Console.WriteLine(string.Format("{0}\t{1}"), índiceEntidad, paralajeEntidad); } } } } Console.ReadLine(); } catch (Exception e) { Console.WriteLine(e.Message); } }