DigiTab

Espacio de nombres: Digi21.DigiNG.DigiTab
Ensamblado: Digi21.DigiNG

Tabla de códigos en memoria.

public sealed class DigiTab : IDisposable

Implementa: IDisposable.

La clase no tiene constructores públicos. Una DigiTab se obtiene de dos formas:

Origen Modificable
DigiTab.Load, que carga un archivo de tabla de códigos. Sí.
La propiedad estática DigiTab de la clase DigiNG, que devuelve la tabla de códigos de la ventana de dibujo activa. No.

En una tabla de códigos no modificable, AddCode y las asignaciones a las propiedades de sus NodeDigiTab lanzan InvalidOperationException.

Los cambios se hacen en memoria. Para guardarlos, llama a Write.

Dispose libera la tabla de códigos nativa. Después de Dispose, la instancia no se puede usar: sus miembros no comprueban si la instancia está liberada y no lanzan ObjectDisposedException.

Propiedades

Propiedad Descripción
string Path Ruta del archivo del que se cargó la tabla de códigos.
IEnumerable<NodeDigiTab> Codes Códigos de la tabla.
NodeDigiTab this[string name] Código con el nombre o el alias indicado. Lanza ArgumentOutOfRangeException si no existe.
IDictionary<string, IList<Tuple<string, Type>>> Tables Tablas de base de datos que define la tabla de códigos, con sus campos.

Métodos estáticos

Método Descripción
DigiTab Load(string path) Carga una tabla de códigos de un archivo.

Métodos

Método Descripción
bool HasCode(string name) Indica si la tabla tiene un código o un alias con ese nombre exacto.
bool HasCode(string name, bool allowWildcards) Igual, con comodines * y ? si allowWildcards es true.
void AddCode(NodeDigiTab code) Añade un código a la tabla.
void Write(string path) Guarda la tabla de códigos en un archivo. Lanza InvalidOperationException si la tabla está cifrada e IOException si no se puede escribir.
void Dispose() Libera la tabla de códigos nativa.

Ejemplo

Este programa muestra el nombre, el tipo de geometría y la descripción de cada código de una tabla de códigos, las tablas de base de datos con sus campos, y si algún código empieza por 0204:

using Digi21.DigiNG.DigiTab;

if (args.Length != 1)
{
    Console.WriteLine("Uso: ListaCodigos <tabla.tab.xml>");
    return 1;
}

using var tabla = DigiTab.Load(args[0]);

foreach (var código in tabla.Codes)
{
    // Type.ToString() devuelve el nombre del valor que tiene el ensamblado instalado.
    Console.WriteLine($"{código.Name}\t{código.Type.ToString()}\t{código.Description}");
}

foreach (var (nombreTabla, campos) in tabla.Tables)
    Console.WriteLine($"{nombreTabla}: {string.Join(", ", campos.Select(c => $"{c.Item1} ({c.Item2?.Name})"))}");

Console.WriteLine(tabla.HasCode("0204*", true)
    ? "Hay códigos que empiezan por 0204."
    : "Ningún código empieza por 0204.");
return 0;

El motivo de usar Type.ToString() se explica en GeometryType.