Point3DCollection

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

Lista modificable de los vértices de una entidad. La devuelve la propiedad Points de Line y de Polygon.

public class Point3DCollection : IList<Point3D>, IReadOnlyList<Point3D>

Implementa: IList<Point3D> e IReadOnlyList<Point3D>.

La clase no tiene constructores públicos. La colección no copia los vértices: lee y modifica directamente los vértices de la entidad. Cada cambio actualiza las coordenadas mínimas y máximas de la entidad (Xmin, Xmax, Ymin, …).

Si la entidad pertenece a un archivo de dibujo (su propiedad Owner no es null), los métodos que modifican la colección lanzan InvalidOperationException. IsReadOnly devuelve false también en ese caso.

Contains, IndexOf y Remove comparan los vértices con la tolerancia Precision.Epsilon, como el operador == de Point3D.

Propiedades

Propiedad Descripción
int Count { get; } Número de vértices.
bool IsReadOnly { get; } Siempre false.
Point3D this[int index] { get; set; } Vértice de la posición index. Lanza ArgumentOutOfRangeException si index es negativo o mayor o igual que Count. El set lanza InvalidOperationException si la entidad pertenece a un archivo de dibujo.

Métodos

Método Descripción
void Add(Point3D item) Añade el vértice al final.
void Add(IEnumerable<Point3D> points) Llama a Add(Point3D) con cada punto, en el orden de la enumeración. Lanza NullReferenceException si points es null. El paquete NuGet Digi21.DigiNG no declara esta sobrecarga: solo se puede llamar compilando con el ensamblado instalado con Digi3D.AI.
void Insert(int index, Point3D item) Inserta el vértice en la posición index. Con index igual a Count, añade el vértice al final. Lanza ArgumentOutOfRangeException si index es negativo o mayor que Count.
bool Remove(Point3D item) Elimina el primer vértice igual a item. Devuelve false si no hay ninguno.
void RemoveAt(int index) Elimina el vértice de la posición index. Lanza ArgumentOutOfRangeException si index es negativo o mayor o igual que Count.
void Clear() Elimina todos los vértices.
bool Contains(Point3D vertex) true si algún vértice es igual a vertex.
int IndexOf(Point3D item) Posición del primer vértice igual a item, o -1.
void CopyTo(Point3D[] array, int arrayIndex) Copia los vértices en array a partir de arrayIndex. Lanza ArgumentNullException si array es null, ArgumentOutOfRangeException si arrayIndex es negativo e IndexOutOfRangeException si los vértices no caben en array.
IEnumerator<Point3D> GetEnumerator() Enumerador de los vértices. MoveNext lanza InvalidOperationException si el número de vértices cambia durante el recorrido.

Add, Insert, Remove, RemoveAt, Clear y el set del indexador lanzan InvalidOperationException si la entidad pertenece a un archivo de dibujo. Para modificar los vértices de una entidad leída de un archivo, modifica la copia que devuelve Clone().

Ejemplo

Este programa crea una línea y modifica sus vértices:

using Digi21.DigiNG.Entities;
using Digi21.Math;

var línea = new Line(new Code("020101"));
Point3DCollection vértices = línea.Points;

vértices.Add(new Point3D(0.0, 0.0, 0.0));
vértices.Add(new Point3D(10.0, 0.0, 0.0));
vértices.Add(new Point3D(10.0, 10.0, 0.0));

// Inserta el vértice en la posición 1; con el índice Count lo añadiría al final.
vértices.Insert(1, new Point3D(5.0, -1.0, 0.0));

// Contains, IndexOf y Remove comparan con Precision.Epsilon.
Precision.Epsilon = 0.001;
Console.WriteLine(vértices.IndexOf(new Point3D(10.0, 0.0004, 0.0))); // 2

vértices[0] = new Point3D(0.0, 0.0, 5.0);
vértices.RemoveAt(vértices.Count - 1);

foreach (var vértice in vértices)
    Console.WriteLine(vértice);

// La ventana de la línea se actualiza con cada cambio de los vértices.
Console.WriteLine($"{línea.Xmin} {línea.Xmax} {línea.Zmax}"); // 0 10 5