Viewport Info
Availability LightWave® 7.5
Component Layout
Header lwrender.h
The viewport info global returns information about the state of Layout's OpenGL
viewports. The data is readonly, but you can set the parameters using
navigation and display
commands.
Global Call
LWViewportInfo *vpinfo;
vpinfo = global( LWVIEWPORTINFO_GLOBAL, GFUSE_TRANSIENT );
The global function returns a pointer to an LWViewportInfo.
typedef struct st_LWViewportInfo {
int numViewports;
int (*type) (int);
unsigned int (*flags) (int);
void (*pos) (int, LWDVector);
void (*xfrm) (int, double mat[9]);
void (*clip) (int, double *hither, double *yon);
void (*rect) (int, int *left, int *top, int *width, int *height);
int (*viewLevel) (int);
int (*projection) (int, LWDMatrix4 projection, LWDMatrix4 inverse_projection);
int (*modelview) (int, LWDMatrix4 modelview, LWDMatrix4 inverse_modelview);
int (*project) (int, LWDVector world, double *winx, double *winy, double *winz);
int (*unproject) (int, double winx, double winy, double winz, LWDVector world);
double (*pixelSize) (int, double pixels, LWDVector refpos);
int (*handleSize) (int);
double (*gridSize) (int);
LWItemID (*viewItem) (int);
} LWViewportInfo;
 numViewports

The number of viewports visible in the Layout interface.
view = type( i )

The type of view in the i^{th} viewport. It will be one of the
following:

LVVIEWT_NONE

LVVIEWT_TOP

LVVIEWT_BOTTOM

LVVIEWT_BACK

LVVIEWT_FRONT

LVVIEWT_RIGHT

LVVIEWT_LEFT

LVVIEWT_PERSPECTIVE

LVVIEWT_LIGHT

LVVIEWT_CAMERA

LVVIEWT_SCHEMATIC
flags = flags( i )

Returns a set of bit flags for the i^{th} viewport. These can be
any combination of the following.
LWVIEWF_CENTER
LWVIEWF_WEIGHTSHADE
LWVIEWF_XRAY
 pos(i, spot)

Fills the spot vector with the viewing position of the i^{th}
viewport.

 xfrm( i, mat[9] )

Fills mat with a 3x3 transformation from viewport coordinates to world
coordinates for the i^{th} viewport. Note that from LW9.0, the
vpinfo>projection() and vpinfo>modelview() functions should be preferred,
as the vpinfo>xfrm() function may not produce correct results for nonperspective
camera views.

clip( i, &hither, &yon )

Fills hither and yon with the near and far Z clipping
distances for the i^{th} viewport.
rect( i, &left, &top, &width, &height )

Fills left, top, width and height with pixel coordinates of
the i^{th} viewport.

level = viewLevel( i )

Returns the view level for the i^{th} viewport. The returned
value is one of the LWOVIS_* values.

result = projection( i, projection, inverse_projection )

Fills the matrices with the projection matrix and the inverse of
the projection matrix for the i^{th} viewport. It is safe to
pass in NULL for either of the matrices. The matrices follow the
OpenGL convention of m[column][row] with column vectors. Returns 1
if the asked for matrices were retrieved, 0 on failure which usually means that an inverse
matrix was asked for for a matrix that could not be inverted.

result = modelview( i, modelview, inverse_modelview )

Fills the matrices with the modelview matrix and the inverse of
the modelview matrix for the i^{th} viewport. It is safe to
pass in NULL for either of the matrices. The matrices follow the
OpenGL convention of m[column][row] with column vectors. Returns 1
if the asked for matrices were retrieved, 0 on failure which usually means that an inverse
matrix was asked for for a matrix that could not be inverted.

result = project( i, world, &winx, &winy, &winz )

Computes the projected position of the given world coordinates for the i^{th}
viewport. The computed winx and winy position is in pixels, relative to
the upperleft corner of the viewport.
Returns 1 if the projection was successful, 0 otherwise. Note that the resulting
coordinates may fall outside of the viewport.

result = unproject( i, winx, winy, winz, world )

Computes the world coordinates of a given pixel position of the i^{th}
viewport. The winz value ranges from 0 for a spot on the near clipping plane,
to 1 for a spot on the far clipping plane. Note that drawing on the near or far clipping
plane may cause flickering due to floating point imprecision causing random clipping.
Returns 1 if the projection was successful, 0 otherwise. Failure is typically caused by
the viewport having a noninvertible modelview or projection matrix.

size = pixelSize( i, pixels, refpos )

Returns the world size of the given number of pixels at the reference position in world for
the i^{th} viewport.
A sphere with a diameter of the returned size, placed at the reference position, will have
a diameter of approximately the given number of pixels when projected.

size = handleSize( i )

Returns the standard handle size for the i^{th} viewport, in pixels.
This is the size used for example for drawing the translation and rotation tool handles.
size = gridSize( i )

Returns the size of the grid spacing for the i^{th} viewport, in metres.

item = viewItem( i )

For viewports which have a view through a scene item (LWVIEWT_LIGHT and LWVIEWT_CAMERA)
the ID of the item is returned. Otherwise LWITEM_NULL is returned.
