SegmentPointer
Espacio de nombres: Digi21.DigiNG.Entities
Ensamblado: Digi21.DigiNG
Identifica un segmento de una ReadOnlyLine por la línea y los índices de sus dos vértices.
public struct SegmentPointer
Herencia: Object → ValueType → SegmentPointer
La estructura solo guarda los tres valores que recibe el constructor: no comprueba que line no sea null ni que los índices estén dentro de line.Points, y no se actualiza si la línea cambia. default(SegmentPointer) tiene Line a null y los dos índices a 0.
El método DetectIntersections de la clase IntersectionDetector del paquete Digi21.DigiNG.Topology agrupa por coordenada los SegmentPointer de los segmentos que se cortan.
Constructores
| Miembro | Descripción |
|---|---|
SegmentPointer(ReadOnlyLine line, int firstVertex, int secondVertex) |
Crea el puntero al segmento de line que une los vértices firstVertex y secondVertex. |
Propiedades
| Miembro | Descripción |
|---|---|
int FirstVertex { get; } |
Índice del primer vértice del segmento en Line.Points. |
ReadOnlyLine Line { get; } |
Línea a la que pertenece el segmento. |
int SecondVertex { get; } |
Índice del segundo vértice del segmento en Line.Points. |
Ejemplo
Este programa guarda una línea en un archivo .bind y crea un VertexPointer por cada vértice y un SegmentPointer por cada segmento:
using Digi21.DigiNG.Entities;
using Digi21.DigiNG.IO.BinDouble;
using Digi21.Math;
if (args.Length != 1)
{
Console.WriteLine("Uso: Punteros <salida.bind>");
return 1;
}
using var archivo = new BinDouble(args[0]);
var línea = new Line(new Code("040101"));
línea.Points.Add(new Point3D(0.0, 0.0, 0.0));
línea.Points.Add(new Point3D(100.0, 0.0, 0.0));
línea.Points.Add(new Point3D(100.0, 100.0, 0.0));
ReadOnlyLine guardada = archivo.Add(línea);
// Un VertexPointer por vértice y un SegmentPointer por segmento de la línea guardada.
var vértices = Enumerable.Range(0, guardada.Points.Count)
.Select(i => new VertexPointer(guardada, i))
.ToList();
var segmentos = Enumerable.Range(0, guardada.Points.Count - 1)
.Select(i => new SegmentPointer(guardada, i, i + 1))
.ToList();
foreach (var v in vértices)
Console.WriteLine($"Vértice {v.Vertex}: {v.Line.Points[v.Vertex]}");
foreach (var s in segmentos)
Console.WriteLine($"Segmento {s.FirstVertex}-{s.SecondVertex}: de {s.Line.Points[s.FirstVertex]} a {s.Line.Points[s.SecondVertex]}");
return 0;