mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-11-23 02:40:26 +01:00
229 lines
9.0 KiB
C
229 lines
9.0 KiB
C
|
/*
|
||
|
* LWSDK Header File
|
||
|
* Copyright 1999, NewTek, Inc.
|
||
|
*
|
||
|
* LWMESHES.H -- LightWave Geometry Services
|
||
|
*
|
||
|
* This header contains the declarations for globals for accessing
|
||
|
* common geometric information.
|
||
|
*/
|
||
|
#ifndef LWSDK_MESHES_H
|
||
|
#define LWSDK_MESHES_H
|
||
|
|
||
|
#include <lwtypes.h>
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Meshes are composed of points and polygons given by their internal
|
||
|
* ID reference.
|
||
|
*/
|
||
|
typedef struct st_GCoreVertex * LWPntID;
|
||
|
typedef struct st_GCorePolygon * LWPolID;
|
||
|
|
||
|
/*
|
||
|
* Polygon types are an extensible set of ID codes. Some common ones
|
||
|
* are included here.
|
||
|
*/
|
||
|
#define LWPOLTYPE_FACE LWID_('F','A','C','E')
|
||
|
#define LWPOLTYPE_CURV LWID_('C','U','R','V')
|
||
|
#define LWPOLTYPE_PTCH LWID_('P','T','C','H')
|
||
|
#define LWPOLTYPE_MBAL LWID_('M','B','A','L')
|
||
|
#define LWPOLTYPE_BONE LWID_('B','O','N','E')
|
||
|
|
||
|
/*
|
||
|
* Polygon tags are indexed by an extensible set of ID codes. Some
|
||
|
* common ones are included here.
|
||
|
*/
|
||
|
#define LWPTAG_SURF LWID_('S','U','R','F')
|
||
|
#define LWPTAG_PART LWID_('P','A','R','T')
|
||
|
#define LWPTAG_TXUV LWID_('T','X','U','V')
|
||
|
|
||
|
/*
|
||
|
* VMAPs are identifed by an extensible set of ID codes. Some common
|
||
|
* ones are included here.
|
||
|
*/
|
||
|
#define LWVMAP_PICK LWID_('P','I','C','K')
|
||
|
#define LWVMAP_WGHT LWID_('W','G','H','T')
|
||
|
#define LWVMAP_MNVW LWID_('M','N','V','W')
|
||
|
#define LWVMAP_TXUV LWID_('T','X','U','V')
|
||
|
#define LWVMAP_MORF LWID_('M','O','R','F')
|
||
|
#define LWVMAP_SPOT LWID_('S','P','O','T')
|
||
|
#define LWVMAP_RGB LWID_('R','G','B',' ')
|
||
|
#define LWVMAP_RGBA LWID_('R','G','B','A')
|
||
|
|
||
|
/*
|
||
|
* Scan callbacks allow the client to traverse the elements of the
|
||
|
* mesh and get information about each one.
|
||
|
*/
|
||
|
typedef int LWPntScanFunc (void *, LWPntID);
|
||
|
typedef int LWPolScanFunc (void *, LWPolID);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* A LWMeshInfo is an allocated object that allows a mesh to be examined
|
||
|
* through a set of query callbacks.
|
||
|
*
|
||
|
* priv private data for the mesh info implementation. Hands off!
|
||
|
*
|
||
|
* destroy destroy the mesh when done. A mesh should only be freed
|
||
|
* by the client that created it.
|
||
|
*
|
||
|
* numPoints these functions return the size of the mesh as a count of
|
||
|
* numPolygons its points and polygons.
|
||
|
*
|
||
|
* scanPoints iterate through elements in the mesh. The scan function
|
||
|
* scanPolygons callback is called for each element in the mesh. If the
|
||
|
* callback returns non-zero, the iteration stops and the
|
||
|
* value is returned.
|
||
|
*
|
||
|
* pntBasePos return the base position of a point. This is the position
|
||
|
* of the point at rest in the basic object coordinate system.
|
||
|
*
|
||
|
* pntOtherPos return an alternate position for the point. This many be
|
||
|
* the same as the base position or it may be the position of
|
||
|
* the point after some transformation. The nature of the
|
||
|
* alternate position depends on how the mesh info was created.
|
||
|
*
|
||
|
* pntVLookup selects a vmap for reading vectors. The vmap is given by
|
||
|
* an ID code for the type and a name string. The function
|
||
|
* returns a pointer that may be used to select this same vmap
|
||
|
* again quickly, or null for none.
|
||
|
*
|
||
|
* pntVSelect selects a vmap for reading vectors. The vmap is given by
|
||
|
* the pointer returned from pntVLookup above. The function
|
||
|
* returns the dimension of the vmap.
|
||
|
*
|
||
|
* pntVGet reads the vector value of the selected vmap for the given
|
||
|
* point. The vmap can be set using either of the two
|
||
|
* functions above. The vector must at least be as large as
|
||
|
* the dimension of the vmap. The function returns true if
|
||
|
* the point is mapped.
|
||
|
*
|
||
|
* pntVPGet just like the above, but reads the vector value of the
|
||
|
* selected vmap for the given point and polygon.
|
||
|
*
|
||
|
* polType returns the type of a polygon as an LWPOLTYPE_* code.
|
||
|
*
|
||
|
* polSize returns the number of vertices that the polygon has.
|
||
|
*
|
||
|
* polVertex returns the point ID for the given vertex of the polygon.
|
||
|
* Vertices are indexed starting from zero.
|
||
|
*
|
||
|
* polTag returns the tag string of the given type associated with the
|
||
|
* polygon. A null string pointer means that the polygon does
|
||
|
* not have a tag of that type.
|
||
|
*
|
||
|
* polFlags returns the polygon flags, matching those used by the MeshEdit
|
||
|
* polygin info structure in modeler.
|
||
|
|
||
|
*/
|
||
|
typedef struct st_LWMeshInfo * LWMeshInfoID;
|
||
|
|
||
|
typedef struct st_LWMeshInfo {
|
||
|
void *priv;
|
||
|
void (*destroy) (LWMeshInfoID);
|
||
|
|
||
|
int (*numPoints) (LWMeshInfoID);
|
||
|
int (*numPolygons) (LWMeshInfoID);
|
||
|
int (*scanPoints) (LWMeshInfoID, LWPntScanFunc *, void *);
|
||
|
int (*scanPolys) (LWMeshInfoID, LWPolScanFunc *, void *);
|
||
|
|
||
|
void (*pntBasePos) (LWMeshInfoID, LWPntID, LWFVector pos);
|
||
|
void (*pntOtherPos) (LWMeshInfoID, LWPntID, LWFVector pos);
|
||
|
void * (*pntVLookup) (LWMeshInfoID, LWID, const char *);
|
||
|
int (*pntVSelect) (LWMeshInfoID, void *);
|
||
|
int (*pntVGet) (LWMeshInfoID, LWPntID, float *vector);
|
||
|
|
||
|
LWID (*polType) (LWMeshInfoID, LWPolID);
|
||
|
int (*polSize) (LWMeshInfoID, LWPolID);
|
||
|
LWPntID (*polVertex) (LWMeshInfoID, LWPolID, int);
|
||
|
const char * (*polTag) (LWMeshInfoID, LWPolID, LWID);
|
||
|
|
||
|
int (*pntVPGet) (LWMeshInfoID, LWPntID, LWPolID, float *vector);
|
||
|
unsigned int (*polFlags) (LWMeshInfoID, LWPolID);
|
||
|
|
||
|
int (*pntVIDGet) (LWMeshInfoID, LWPntID, float *vector, void *);
|
||
|
int (*pntVPIDGet) (LWMeshInfoID, LWPntID, LWPolID, float *vector, void *);
|
||
|
} LWMeshInfo;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* LightWave maintains a database which is essentially an image of
|
||
|
* all the LWO2 object files loaded into the application. Each object
|
||
|
* contains some number of layers which can be scanned. The functions
|
||
|
* for accessing this information is the "Scene Objects" global.
|
||
|
*
|
||
|
* numObjects returns the total number of objects in the scene.
|
||
|
* These are the unique object files which are loaded,
|
||
|
* which may have nothing to do with the animatable
|
||
|
* items in the scene.
|
||
|
*
|
||
|
* filename returns the name of the source object file. Objects
|
||
|
* are indexed from 0 to numObjects - 1.
|
||
|
*
|
||
|
* userName returns the name of the object as seen by the user.
|
||
|
* This is typically the base filename without path or
|
||
|
* extension, or "Unnamed N" for unsaved objects. These
|
||
|
* are not guaranteed to be unique.
|
||
|
*
|
||
|
* refName returns an internal reference name for this object.
|
||
|
* The reference name is guaranteed to be unique and
|
||
|
* unchanging for the lifetime of the object. This
|
||
|
* string contains control characters so it cannot be
|
||
|
* confused with a filename.
|
||
|
*
|
||
|
* maxLayers returns a value one greater than the largest index of
|
||
|
* any existing layer.
|
||
|
*
|
||
|
* layerExists returns true if the layer with the given index exists.
|
||
|
* Layers are indexed from 0 to maxLayers - 1.
|
||
|
*
|
||
|
* pivotPoint fills in the postion vector with the pivot point for
|
||
|
* the given layer.
|
||
|
*
|
||
|
* layerMesh returns a mesh info structure for the given layer. The
|
||
|
* mesh will reference vertices in their rest positions.
|
||
|
*
|
||
|
* layerName returns the name string assigned to the layer, or null
|
||
|
* if none.
|
||
|
*
|
||
|
* layerVis returns true if the layer is marked as visible.
|
||
|
*
|
||
|
* numVMaps returns the total number of vmaps in the scene with the
|
||
|
* given type code. A code of zero selects all vmaps of
|
||
|
* every type.
|
||
|
*
|
||
|
* vmapName returns the name of the vmap with the given index, from
|
||
|
* 0 to numVMaps - 1.
|
||
|
*
|
||
|
* vmapDim returns the dimension of the vmap vector.
|
||
|
*
|
||
|
* vmapType returns the type code of the vmap. The index is into the
|
||
|
* list of all vmaps given by numVMap with type code zero.
|
||
|
*/
|
||
|
#define LWOBJECTFUNCS_GLOBAL "Scene Objects 4"
|
||
|
|
||
|
typedef struct st_LWObjectFuncs {
|
||
|
int (*numObjects) (void);
|
||
|
const char * (*filename) (int obj);
|
||
|
int (*maxLayers) (int obj);
|
||
|
int (*layerExists) (int obj, int lnum);
|
||
|
void (*pivotPoint) (int obj, int lnum, LWFVector pos);
|
||
|
LWMeshInfo * (*layerMesh) (int obj, int lnum);
|
||
|
|
||
|
int (*numVMaps) (LWID);
|
||
|
const char * (*vmapName) (LWID, int index);
|
||
|
int (*vmapDim) (LWID, int index);
|
||
|
LWID (*vmapType) (int index);
|
||
|
|
||
|
const char * (*layerName) (int obj, int lnum);
|
||
|
int (*layerVis) (int obj, int lnum);
|
||
|
|
||
|
const char * (*userName) (int obj);
|
||
|
const char * (*refName) (int obj);
|
||
|
} LWObjectFuncs;
|
||
|
|
||
|
|
||
|
#endif
|
||
|
|