Entity

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

Clase base abstracta de todas las entidades: códigos, colores, atributos, archivo de dibujo al que pertenece y coordenadas mínimas y máximas.

public abstract class Entity : IWindow3D, ICloneable

Implementa: IWindow3D, ICloneable. El ensamblado instalado implementa además IDisposable; el paquete de referencia no lo declara.

Tipos derivados: ReadOnlyLine, ReadOnlyPoint, ReadOnlyText, ReadOnlyPolygon y ReadOnlyComplex.

La clase no tiene constructores públicos. Las entidades se crean con los constructores de Line, Point, Text, Polygon y Complex, o se leen de un archivo de dibujo.

Entidades de solo lectura

Una entidad es de solo lectura (ReadOnly es true) cuando pertenece a un archivo de dibujo: las entidades que devuelve el archivo al recorrerlo y las que se le añaden con Add. En una entidad de solo lectura, los descriptores set de Color, Weight y FillColor, los métodos que modifican Codes y los miembros de modificación de las clases derivadas lanzan InvalidOperationException. Hidden, Attributes y UserData se pueden asignar también en una entidad de solo lectura.

Para modificar una entidad de un archivo, modifica la copia que devuelve Clone y añádela al archivo.

Coordenadas mínimas y máximas

Las propiedades de IWindow3D describen la caja que contiene las coordenadas de la entidad. Una entidad recién creada no tiene caja: Valid vale false hasta que la entidad tiene coordenadas. Las colecciones Points de Line y Polygon actualizan la caja en cada cambio. Asignar Coordinate en un Point o un Text no la actualiza.

Mientras Valid es false:

  • Xmin vale null, y Ymin, Zmin, Xmax, Ymax y Zmax devuelven los valores de una caja vacía (double.MaxValue en los mínimos y -double.MaxValue en los máximos);
  • Width, Height, Depth, Center, NW, N, NE, E, SE, S, SW y W lanzan InvalidOperationException;
  • los descriptores get de Color, Weight y FillColor lanzan InvalidOperationException.

Propiedades

Propiedad Descripción
IDictionary<string, object> Attributes { get; set; } Atributos de la entidad: nombre y valor.
IList<Code> Codes { get; } Códigos de la entidad.
int? Color { get; set; } Color propio de la entidad, o null si usa el de la tabla de códigos.
DateTime CreationTime { get; } Fecha y hora de creación de la entidad.
bool Deleted { get; } true si la entidad está marcada como eliminada.
string FilePointer { get; } Identificador de la entidad en su archivo de dibujo.
int? FillColor { get; set; } Color de relleno propio, o null si usa el de la tabla de códigos.
bool Hidden { get; set; } true para ocultar la entidad.
IDrawingFile Owner { get; } Archivo de dibujo al que pertenece la entidad, o null.
bool ReadOnly { get; } true si Owner no es null.
object UserData { get; set; } Objeto del programador asociado a la entidad.
bool Visible { get; } true si la entidad se muestra en la ventana de dibujo.
int? Weight { get; set; } Grosor propio, o null si usa el de la tabla de códigos.
double? Xmin { get; } Coordenada X mínima, o null si Valid es false.
double Ymin { get; }, Zmin, Xmax, Ymax, Zmax Resto de coordenadas mínimas y máximas. El ensamblado instalado declara además un descriptor set en las seis propiedades (Xmin incluida), que lanza InvalidOperationException.
bool Valid { get; } true si la caja es válida: cada mínimo es menor o igual que su máximo.
double Width { get; }, Height, Depth Xmax - Xmin, Ymax - Ymin y Zmax - Zmin.
Point3D Center { get; } Centro de la caja. No es necesariamente un punto de la entidad; para obtener un punto en el interior de un recinto, usa ICloseable.InteriorPoint.
Point3D NW, N, NE, E, SE, S, SW, W Esquinas y puntos medios de los lados de la caja en el plano X, Y. La Z de los ocho puntos es Zmin.

Métodos

Método Descripción
Entity Clone() Copia de la entidad que no pertenece a ningún archivo de dibujo.
string ToString() Texto localizado con el tipo de entidad, las coordenadas mínimas y máximas, los códigos y los datos propios de cada tipo (vértices, coordenada, texto).
void Dispose() Libera la entidad nativa. Solo en el ensamblado instalado: el paquete de referencia no declara IDisposable, así que el código compilado con el paquete no puede llamarlo ni usar using con una entidad. Las entidades que forman parte de otra (huecos de un polígono, entidades de un complejo) no liberan nada. Después de Dispose, la entidad no se puede usar.

Ejemplo

Este programa asigna colores a una línea, comprueba que la línea pasa a ser de solo lectura al añadirla a un archivo .bind y añade una copia desplazada:

using Digi21.DigiNG.Entities;
using Digi21.DigiNG.IO.BinDouble;
using Digi21.Math;

if (args.Length != 1)
{
    Console.WriteLine("Uso: PropiedadesEntidad <salida.bind>");
    return 1;
}

var línea = new Line(new Code("050100"));
línea.Points.Add(new Point3D(0, 0, 0));
línea.Points.Add(new Point3D(10, 5, 2));

// Color, Weight y FillColor se leen cuando la entidad ya tiene coordenadas (Valid es true).
línea.Color = 3;
línea.Weight = 2;
Console.WriteLine($"{línea.Color} {línea.Weight} {línea.FillColor?.ToString() ?? "null"}"); // 3 2 null
Console.WriteLine($"{línea.Width} {línea.Height} {línea.Depth}");                         // 10 5 2
Console.WriteLine(línea.ReadOnly);                                                        // False

using var archivo = new BinDouble(args[0]);
archivo.Add(línea);

// La entidad pertenece ahora al archivo y es de solo lectura.
Console.WriteLine(línea.ReadOnly);                          // True
Console.WriteLine(ReferenceEquals(línea.Owner, archivo));   // True

try
{
    línea.Color = 5;
}
catch (InvalidOperationException e)
{
    Console.WriteLine(e.Message);
}

// Clone devuelve una copia que no pertenece a ningún archivo.
var copia = línea.Clone();
copia.Color = 5;
copia.Offset(0, 10);
archivo.Add(copia);
return 0;