DuplicityDetector
Espacio de nombres: Digi21.DigiNG.Topology
Ensamblado: Digi21.DigiNG.Topology
Detecta las entidades duplicadas de una secuencia: entidades del mismo tipo con los mismos vértices en el plano XY.
public static class DuplicityDetector
Métodos estáticos
DetectDuplicity
public static IList<IList<Entity>> DetectDuplicity(this IEnumerable<Entity> entities)
Devuelve una lista de grupos. Cada grupo es una lista con una entidad y todas las que la duplican; tiene al menos dos entidades. Una entidad aparece como mucho en un grupo. Si no hay duplicados, devuelve una lista vacía. Las entidades de los grupos son las mismas instancias de entities.
Dos entidades son duplicadas si se cumplen todas estas condiciones, comparando con la tolerancia de Precision.Epsilon:
- Son del mismo tipo (línea, punto, texto, polígono o complejo).
- Tienen iguales la X mínima, la X máxima y la Y mínima.
- Tienen el mismo número de vértices. Un texto cuenta como un vértice: su punto de inserción.
- Cada vértice
kde una coincide en X e Y con el vérticeko con el vérticen − 1 − kde la otra, siendonel número de vértices. Así, una línea y la misma línea digitalizada al revés son duplicadas.
No se comparan la Z, los códigos, los atributos, el texto de los textos ni el estado de eliminación: las entidades eliminadas también se analizan. Si no quieres incluirlas, fíltralas antes.
El orden de los grupos y el de las entidades dentro de cada grupo no es el de entities: el método ordena las entidades por su Y mínima.
Ejemplo
Este programa busca las entidades duplicadas no eliminadas de un archivo .bin:
using Digi21.DigiNG.IO.Bin;
using Digi21.DigiNG.Topology;
using Digi21.Math;
if (args.Length != 1)
{
Console.WriteLine("Uso: Duplicadas <archivo.bin>");
return 1;
}
using var archivo = new Bin(args[0], 2, new Point3D(0, 0, 0), true);
var grupos = archivo.Where(entidad => !entidad.Deleted).DetectDuplicity();
foreach (var grupo in grupos)
Console.WriteLine($"{grupo.Count} entidades iguales: {string.Join(" | ", grupo)}");
Console.WriteLine($"{grupos.Count} grupos de entidades duplicadas.");
return 0;