Line

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

Línea de lectura y escritura. Añade a ReadOnlyLine los constructores y los miembros que modifican los vértices.

public class Line : ReadOnlyLine, IDesplazable, IDirectionable

Herencia: Object → Entity → ReadOnlyLine → Line

Implementa: IDesplazable, IDirectionable, y las interfaces de ReadOnlyLine.

Una Line recién creada no tiene vértices ni coordenadas mínimas y máximas. Los vértices se añaden con Points.

Al añadir la línea a un archivo de dibujo, la línea pasa a pertenecer al archivo (Owner) y es de solo lectura: los miembros de esta página que la modifican lanzan InvalidOperationException. Lo mismo ocurre con una Line que forma parte de un polígono de un archivo (un hueco).

Los miembros de ReadOnlyLine y de Entity se describen en sus páginas.

Constructores

Constructor Descripción
Line(Code code) Línea sin vértices con un código.
Line(IEnumerable<Code> codes) Línea sin vértices con varios códigos.

Propiedades

Propiedad Descripción
Point3DCollection Points { get; } Vértices de la línea, de lectura y escritura. Oculta ReadOnlyLine.Points.

Métodos

Método Descripción
void Close() Cierra la línea añadiendo una copia del primer vértice.
void ChangeDirection() Invierte el orden de los vértices.
void Offset(Point2D offset) Suma offset.X y offset.Y a todos los vértices.
void Offset(Point3D offset) Suma offset a todos los vértices.
void Offset(double x, double y) Suma x e y a todos los vértices.
void Offset(double x, double y, double z) Suma x, y y z a todos los vértices.

Los métodos Offset recalculan las coordenadas mínimas y máximas de la línea después de desplazarla, y también las de cada entidad que la contiene: el complejo del que forma parte o el polígono del que es un hueco. La caja de un polígono solo depende de su contorno exterior, así que desplazar un hueco no la cambia.

Excepciones de Close, ChangeDirection y Offset:

Excepción Cuándo
InvalidOperationException La línea es de solo lectura.

Ejemplo

Este programa crea una línea, la cierra, calcula su área y su perímetro, cambia su sentido, la desplaza y la escribe en un archivo .bind:

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

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

var parcela = new Line(new Code("080100"));
parcela.Points.Add(new[]
{
    new Point3D(0, 0, 10),
    new Point3D(0, 20, 10),
    new Point3D(30, 20, 12),
    new Point3D(30, 0, 12),
});

Console.WriteLine(parcela.Closed);     // False
parcela.Close();                        // Añade una copia del primer vértice.
Console.WriteLine(parcela.Closed);     // True
Console.WriteLine(parcela.Points.Count); // 5

// Vértices en sentido horario: Area es positiva.
Console.WriteLine(parcela.Area);       // 600
Console.WriteLine(parcela.Perimeter);  // 100

parcela.ChangeDirection();
Console.WriteLine(parcela.Area);       // -600

Console.WriteLine(parcela.AnalyzePointPosition(new Point3D(15, 10, 0))); // Interior

parcela.Offset(100, 0);
Console.WriteLine(parcela.FirstVertex); // Primer vértice desplazado 100 en X.

using var archivo = new BinDouble(args[0]);
archivo.Add(parcela);
return 0;