UtilidadesSecuenciaEntity

Espacio de nombres: Digi21.Utilities
Ensamblado: Digi21.Utilities

Métodos de extensión de IEnumerable<Entity> que filtran o transforman una secuencia de entidades, como un archivo de dibujo o el resultado de otro filtro.

public static class UtilidadesSecuenciaEntity

Todos los métodos devuelven una secuencia que se evalúa al recorrerla, como los operadores de LINQ: el archivo de dibujo se lee al recorrer el resultado, no al llamar al método. Los métodos genéricos <T> exigen T : Entity (salvo ExplotaAReadOnlyLine<T>) y devuelven las entidades con el mismo tipo T que la secuencia de entrada, así que se pueden encadenar.

Métodos estáticos

Copia

Método Descripción
IEnumerable<Entity> SecuenciaDeClones(this IEnumerable<Entity> secuenciaOriginal) Devuelve el resultado de Clone() de cada entidad. Las copias no pertenecen a ningún archivo de dibujo, así que se pueden añadir a otro archivo.

Filtros por tipo

Estos cinco métodos están marcados [Obsolete("Utilizar mejor OfType<T>")]: el compilador emite el aviso CS0618. OfType<ReadOnlyLine>() de LINQ devuelve lo mismo.

Método Descripción
IEnumerable<ReadOnlyLine> SoloLíneas(this IEnumerable<Entity> secuenciaOriginal) Entidades que son ReadOnlyLine (incluye Line).
IEnumerable<ReadOnlyPoint> SoloPuntos(this IEnumerable<Entity> secuenciaOriginal) Entidades que son ReadOnlyPoint.
IEnumerable<ReadOnlyText> SoloTextos(this IEnumerable<Entity> secuenciaOriginal) Entidades que son ReadOnlyText.
IEnumerable<ReadOnlyPolygon> SoloPolígonos(this IEnumerable<Entity> secuenciaOriginal) Entidades que son ReadOnlyPolygon.
IEnumerable<ReadOnlyComplex> SoloComplejos(this IEnumerable<Entity> secuenciaOriginal) Entidades que son ReadOnlyComplex.

Filtros por ventana

Método Descripción
IEnumerable<T> QueSolapanCon<T>(this IEnumerable<T> secuenciaOriginal, IWindow2D wnd) Entidades cuya caja (las coordenadas mínimas y máximas en X e Y) se cruza con la ventana wnd o la toca. Usa Window2D.Intersects. Al recorrer el resultado, lanza InvalidOperationException si wnd o una entidad no tienen coordenadas (Xmin vale null).

Filtros por código

Los métodos llaman a los de UtilidadesEntity, donde están las reglas de los comodines.

Método Descripción
IEnumerable<T> QueTenganElCódigo<T>(this IEnumerable<T> secuenciaOriginal, string código) Entidades con algún código que se llama exactamente código.
IEnumerable<T> QueNoTenganElCódigo<T>(this IEnumerable<T> secuenciaOriginal, string código) Entidades sin ningún código que se llame exactamente código.
IEnumerable<T> QueTenganElCódigoConComodín<T>(this IEnumerable<T> secuenciaOriginal, string código) Entidades con algún código que coincide con código, con comodines.
IEnumerable<T> QueTenganAlgúnCódigo<T>(this IEnumerable<T> secuenciaOriginal, IEnumerable<string> códigos) Entidades con algún código que se llama exactamente como alguno de códigos.
IEnumerable<T> QueNoTenganAlgúnCódigo<T>(this IEnumerable<T> secuenciaOriginal, IEnumerable<string> códigos) Entidades sin ningún código que se llame como alguno de códigos.
IEnumerable<T> QueTenganAlgúnCódigoConComodín<T>(this IEnumerable<T> secuenciaOriginal, IEnumerable<string> códigos) Entidades con algún código que coincide con alguno de códigos, con comodines.

Filtros por estado

Método Descripción
IEnumerable<T> Eliminadas<T>(this IEnumerable<T> secuenciaOriginal) Entidades con Deleted a true.
IEnumerable<T> NoEliminadas<T>(this IEnumerable<T> secuenciaOriginal) Entidades con Deleted a false.
IEnumerable<T> Visibles<T>(this IEnumerable<T> secuenciaOriginal) Entidades con algún código cuya propiedad Visible es distinta de 0, según AlgúnCódigoVisible. No se consulta la propiedad Hidden de la entidad.

Conversión a líneas

Método Descripción
IEnumerable<ReadOnlyLine> ExplotaAReadOnlyLine<T>(this IEnumerable<T> secuenciaOriginal) Concatena el resultado de convertir cada entidad en líneas, con las mismas reglas que UtilidadesEntity.ExplotaAReadOnlyLine. T no tiene restricción: los elementos que no son líneas, polígonos ni complejos se ignoran.

Ejemplo

Este programa lee un archivo .bin y muestra cuántas entidades no eliminadas de los códigos 02* hay dentro de una ventana, y la longitud total de las líneas que se obtienen al convertirlas en líneas:

using Digi21.DigiNG.IO.Bin;
using Digi21.Math;
using Digi21.Utilities;

if (args.Length != 1)
{
    Console.WriteLine("Uso: Altimetría <archivo.bin>");
    return 1;
}

using var archivo = new Bin(args[0], 2, new Point3D(0, 0, 0), true);
var ventana = new Window2D(440000, 4470000, 441000, 4471000);

var seleccionadas = archivo
    .NoEliminadas()
    .QueTenganElCódigoConComodín("02*")
    .QueSolapanCon(ventana)
    .ToList();

var longitud = seleccionadas.ExplotaAReadOnlyLine().Sum(línea => línea.Perimeter);

Console.WriteLine($"{seleccionadas.Count} entidades, {longitud:F2} m de líneas.");
return 0;