Point

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

Punto de lectura y escritura: una coordenada de inserción y una rotación.

public class Point : ReadOnlyPoint, IDesplazable

Herencia: Object → Entity → ReadOnlyPoint → Point

Implementa: IDesplazable y, por herencia, ISnapable, IWindow3D, ICloneable e IDisposable.

Un Point creado con sus constructores no pertenece a ningún archivo de dibujo (Owner es null) y se puede modificar. Al añadirlo a un archivo de dibujo con IDrawingFile.Add, Owner pasa a ser ese archivo y la entidad pasa a ser de solo lectura: los descriptores set y los métodos Offset lanzan InvalidOperationException. Para modificar un punto guardado, modifica la copia que devuelve Clone.

Un Point nuevo tiene la coordenada (0, 0, 0) y la rotación 0, y sus coordenadas mínimas y máximas (IWindow3D) están sin calcular: Valid vale false, Xmin vale null, y Width, Center, Color, Weight y FillColor lanzan InvalidOperationException. Asignar Coordinate y llamar a cualquiera de los métodos Offset recalculan las coordenadas mínimas y máximas. Offset recalcula además las de cada entidad que contiene el punto, por ejemplo el complejo del que forma parte.

El resto de miembros (códigos, colores, atributos, Clone, Dispose…) se heredan de Entity y de ReadOnlyPoint.

Constructores

Miembro Descripción
Point(Code code) Crea un punto con un código.
Point(IEnumerable<Code> codes) Crea un punto con varios códigos, en el orden de la enumeración.

Propiedades

Miembro Descripción
Point3D Coordinate { get; set; } Coordenada de inserción.
double Rotation { get; set; } Rotación del símbolo, en radianes.

Métodos

Miembro Descripción
void Offset(Point2D offset) Suma offset.X y offset.Y a la coordenada. La Z no cambia.
void Offset(Point3D offset) Suma offset a la coordenada.
void Offset(double x, double y) Suma x e y a la coordenada. La Z no cambia.
void Offset(double x, double y, double z) Suma x, y y z a la coordenada.

Los cuatro métodos Offset lanzan InvalidOperationException si el punto es de solo lectura (ReadOnly es true).

Ejemplo

Este programa crea un punto con rotación, lo guarda en un archivo .bind y guarda una copia desplazada 10 unidades en X:

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

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

using var archivo = new BinDouble(args[0]);

var vértice = new Point(new Code("030101"))
{
    Coordinate = new Point3D(450000.0, 4480000.0, 650.0),
    Rotation = Math.PI / 4, // 45 grados, en radianes
};

// Add devuelve la misma instancia como ReadOnlyPoint: a partir de aquí es de solo lectura.
ReadOnlyPoint guardado = archivo.Add(vértice);
Console.WriteLine($"{guardado.Coordinate} rotación {guardado.Rotation} rad, ReadOnly = {guardado.ReadOnly}");

// Para modificar un punto guardado se trabaja sobre una copia.
Point copia = guardado.Clone();
copia.Offset(10.0, 0.0);
archivo.Add(copia);

return 0;