IWindow3D

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

Ventana tridimensional (caja alineada con los ejes): coordenadas mínimas y máximas, dimensiones, centro y puntos cardinales. Las entidades y los archivos de dibujo implementan esta interfaz para exponer la caja que ocupan.

public interface IWindow3D

Tipos que implementan la interfaz:

Una ventana no inicializada tiene Xmin a null. Window3D lanza InvalidOperationException al leer Width, Height, Depth, Center o uno de los ocho puntos cardinales de una ventana no inicializada. Comprueba Valid antes de leerlos.

Propiedades

Propiedad Descripción
double? Xmin Coordenada X mínima, o null si la ventana no está inicializada.
double Ymin Coordenada Y mínima.
double Zmin Coordenada Z mínima.
double Xmax Coordenada X máxima.
double Ymax Coordenada Y máxima.
double Zmax Coordenada Z máxima.
bool Valid En Window3D, true si Xmin no es null y cada mínimo es menor o igual que su máximo.
double Width Xmax - Xmin.
double Height Ymax - Ymin.
double Depth Zmax - Zmin.
Point3D Center Centro de la caja.
Point3D NW Esquina noroeste: (Xmin, Ymax, Zmin).
Point3D N Punto medio del lado norte.
Point3D NE Esquina noreste: (Xmax, Ymax, Zmin).
Point3D E Punto medio del lado este.
Point3D SE Esquina sureste: (Xmax, Ymin, Zmin).
Point3D S Punto medio del lado sur.
Point3D SW Esquina suroeste: (Xmin, Ymin, Zmin).
Point3D W Punto medio del lado oeste.

Ejemplo

El método Muestra recibe cualquier IWindow3D (una Window3D, una entidad o un archivo de dibujo) y solo lee las dimensiones si la ventana es válida:

using Digi21.Math;

Point3D[] puntos =
{
    new Point3D(440000, 4470000, 612.4),
    new Point3D(440250, 4470100, 655.0),
    new Point3D(440120, 4469900, 630.8),
};

// Una Window3D creada con new Window3D() no está inicializada: Xmin es null.
var caja = new Window3D();
foreach (var punto in puntos)
    caja.Union(punto);

Muestra(caja);

// Contains(Point3D) compara X, Y y Z; Intersect2D compara solo X e Y.
var fueraDeCota = new Point3D(440100, 4470000, 700);
Console.WriteLine(caja.Contains(fueraDeCota));      // False
Console.WriteLine(caja.Intersect2D(fueraDeCota));   // True

var otra = new Window3D(440200, 4470050, 600, 440400, 4470300, 640);
Console.WriteLine(caja.Intersect(otra));            // True

var total = Window3D.Union(caja, otra);
Muestra(total);

// La conversión a Window2D descarta Zmin y Zmax.
var plano = (Window2D)total;
Console.WriteLine($"{plano.Width} x {plano.Height}");

static void Muestra(IWindow3D ventana)
{
    if (!ventana.Valid)
    {
        Console.WriteLine("Ventana no válida");
        return;
    }

    Console.WriteLine($"X: {ventana.Xmin} a {ventana.Xmax}, Y: {ventana.Ymin} a {ventana.Ymax}, Z: {ventana.Zmin} a {ventana.Zmax}");
    Console.WriteLine($"{ventana.Width} x {ventana.Height} x {ventana.Depth}, centro {ventana.Center}");
}