Camera

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

Clase base de las cámaras de la ventana de dibujo: nombre, posición, giros y planos de recorte.

public abstract class Camera

Tipos derivados: ConicCamera y OrthographicCamera.

La clase no tiene constructores públicos: se crea una ConicCamera o una OrthographicCamera.

Una Camera es un objeto de datos: cambiar sus propiedades no cambia la ventana de dibujo. La propiedad estática Camera de la clase DigiNG devuelve en cada lectura un objeto nuevo con la cámara de la ventana de dibujo activa (una ConicCamera o una OrthographicCamera), y la asignación aplica la cámara a esa ventana. Para modificar la cámara de la ventana, lee la propiedad, cambia el objeto y vuelve a asignarlo.

Los tres giros están en grados sexagesimales. Con los tres a 0, la cámara mira en la dirección −Z con el eje +Y hacia arriba de la pantalla (vista cenital con el norte arriba). La ventana de dibujo aplica los giros en este orden: primero Pitch sobre el eje X, después Roll sobre el eje Y y por último Yaw sobre el eje Z.

Propiedades

Propiedad Descripción
string Name Nombre de la cámara.
Point3D Position Posición de la cámara, en coordenadas del archivo de dibujo.
float Pitch Giro sobre el eje X, en grados sexagesimales.
float Yaw Giro sobre el eje Z, en grados sexagesimales.
float Roll Giro sobre el eje Y, en grados sexagesimales.
double Near Plano de recorte cercano.
double Far Plano de recorte lejano.

Métodos

Método Descripción
Point3D WorldToViewport(Point3D world) Proyecta un punto del archivo de dibujo a coordenadas de la ventana OpenGL.
Point3D ViewportToWorld(Point3D viewport) Convierte un punto de la ventana OpenGL a coordenadas del archivo de dibujo.
string ToString() Devuelve Name.

Ejemplo

Esta orden muestra en la ventana de resultados la cámara de la ventana de dibujo activa:

using Digi21.Digi3D;
using Digi21.DigiNG.Cameras;
using Digi21.DigiNG.Plugin.Command;

namespace Ejemplos;

[Command(Name = "INFO_CAMARA")]
public class InfoCamara : Command
{
    public InfoCamara()
    {
        Initialize += (sender, e) =>
        {
            var cámara = Digi21.DigiNG.DigiNG.Camera;

            Digi3D.OutputWindow.Show();
            Digi3D.OutputWindow.WriteLine($"Posición: {cámara.Position}");
            Digi3D.OutputWindow.WriteLine($"Pitch: {cámara.Pitch}, Yaw: {cámara.Yaw}, Roll: {cámara.Roll} (grados sexagesimales)");

            switch (cámara)
            {
                case OrthographicCamera ortográfica:
                    Digi3D.OutputWindow.WriteLine($"Ortográfica de {ortográfica.Right - ortográfica.Left} x {ortográfica.Top - ortográfica.Bottom}");
                    break;
                case ConicCamera cónica:
                    Digi3D.OutputWindow.WriteLine($"Cónica con campo de visión de {cónica.FieldOfView} grados");
                    break;
            }

            Dispose();
        };
    }
}