This reference page is linked to from the following overview topics: Lesson 5: Geometric Objects, Porting Object Plug-ins to Nitrous, Incremental Improvements, Modeling, Modifier Channels, Meshes, Mesh Related Classes, Mesh Edges, MNMesh Edges, Vertex Color Information, Mesh Stripping, Hardware Mesh Support, Shape and Spline Principal Classes, Principal Classes, Creating a Patch, Mapping Type (Mapping Group), Mapping Channels, Texture Coordinates, Creating the Mesh, MNMesh Note on Debugging.
The Mesh class is provided for use by plug-ins and is used by the system.
It is the data structure for meshes in the system and maintains pointers to the vertices, faces, texture vertices, etc. It provides methods to handle most of the functionality that procedural objects must implement. All methods of this class are implemented by the system. See the page Working with Meshes. Note: There is a set of classes for working with parts of a mesh such as its face structure, element structure, and cluster structure. For details see: Class AdjEdgeList, Class AdjFaceList, Class FaceElementList, Class FaceClusterList.
#include <mesh.h>
Public Member Functions |
|
void | BuildGFXNormals () |
DllExport | Mesh () |
Constructor. |
|
DllExport | Mesh (const Mesh &fromMesh) |
Constructor. |
|
DllExport | ~Mesh () |
Destructor. |
|
DllExport void | Init () |
DllExport void | DeleteThis () |
This method deletes this mesh. |
|
DllExport Mesh & | operator= (const Mesh &fromMesh) |
Assignment operator. |
|
DllExport BOOL | setNumVerts (int ct, BOOL keep=FALSE, BOOL synchSel=TRUE) |
Sets the number of geometric vertices in the
mesh. |
|
int | getNumVerts (void) const |
Returns the number of vertices. |
|
DllExport BOOL | setNumFaces (int ct, BOOL keep=FALSE, BOOL synchSel=TRUE) |
Sets the number of faces in the mesh.
|
|
int | getNumFaces (void) const |
Returns the number of faces in the mesh.
|
|
DllExport BOOL | setNumTVerts (int ct, BOOL keep=FALSE) |
Sets the number of texture vertices (in
mapping channel 1). |
|
int | getNumTVerts (void) const |
Returns the number of texture vertices (in
mapping channel 1). |
|
DllExport BOOL | setNumTVFaces (int ct, BOOL keep=FALSE, int oldCt=0) |
Sets the number of TVFaces. |
|
DllExport BOOL | setNumVertCol (int ct, BOOL keep=FALSE) |
Sets the number of color per vertex
vertices. |
|
int | getNumVertCol () const |
Returns the number of color per vertex
vertices. |
|
DllExport BOOL | setNumVCFaces (int ct, BOOL keep=FALSE, int oldCt=0) |
Sets the number of color per vertex faces.
|
|
DllExport void | setVCDisplayData (int mapChan=0, VertColor *VCArray=NULL, TVFace *VCf=NULL) |
This method would typically be called right
before display, as with a node display callback, or through an
extension object. |
|
DllExport void | setNumMaps (int ct, BOOL keep=FALSE) |
Set the number of texture maps used by this
Mesh. |
|
int | getNumMaps () const |
Returns the number of mapping channels in
use. |
|
DllExport BOOL | mapSupport (int mp) const |
Returns TRUE if the specified mapping
channel is supported; otherwise FALSE. |
|
DllExport void | setMapSupport (int mp, BOOL support=TRUE) |
Sets whether the specified mapping channels
is supported or not. |
|
DllExport void | setNumMapVerts (int mp, int ct, BOOL keep=FALSE) |
Sets the number of texture or vertex color
vertices for the specified mapping channel of this mesh. |
|
DllExport int | getNumMapVerts (int mp) const |
Returns the number of texture or vertex
color vertices for the specified channel of this mesh. |
|
DllExport void | setNumMapFaces (int mp, int ct, BOOL keep=FALSE, int oldCt=0) |
Sets the number of texture or vertex color
faces for the specified channel of this mesh. |
|
DllExport UVVert * | mapVerts (int mp) const |
Returns a pointer to the list of UVVerts for
the specified channel of this mesh. |
|
DllExport TVFace * | mapFaces (int mp) const |
Returns a pointer to the list of TVFaces for
the specified channel of this mesh. |
|
void | setMapVert (int mp, int i, const UVVert &xyz) |
Sets a single texture or vertex color value
for the specified channel of this mesh. |
|
DllExport void | MakeMapPlanar (int mp) |
Applies a simple planar mapping to the
specified channel. |
|
DllExport BitArray | GetIsoMapVerts (int mp) |
Returns a BitArray with a bit set for each
isolated vertex (un-referenced by any face) for the specified
channel. |
|
DllExport void | DeleteMapVertSet (int mp, BitArray set, BitArray *fdel=NULL) |
Deletes the map vertices indicated. |
|
DllExport void | DeleteIsoMapVerts () |
This method deletes each isolated vertex
(un-referenced by any face) for the all active maps. |
|
DllExport void | DeleteIsoMapVerts (int mp) |
This method deletes each isolated vertex
(un-referenced by any face) for the specified channel. |
|
DllExport void | freeMapVerts (int mp) |
Deallocates the texture or vertex color
vertices for the specified channel of this mesh. |
|
DllExport void | freeMapFaces (int mp) |
Deallocates the texture or vertex color
faces for the specified channel of this mesh. |
|
MeshMap & | Map (int mp) |
This method returns the map for the
specified map channel. |
|
DllExport void | setNumVData (int ct, BOOL keep=FALSE) |
Sets the number of channels of vertex data
used by the mesh. |
|
int | getNumVData () const |
Returns the number of vertex data channels
maintained by this mesh. |
|
DllExport BOOL | vDataSupport (int vd) const |
Returns TRUE if the specified channel of
vertex data is available for this mesh; otherwise FALSE. |
|
DllExport void | setVDataSupport (int vd, BOOL support=TRUE) |
Sets if the specified channel of vertex data
is supported by this mesh. |
|
void * | vertexData (int vd) const |
Returns a pointer to the vertex data for the
specified channel or NULL if the channel is not supported. |
|
float * | vertexFloat (int vd) const |
Returns a pointer to the floating point
vertex data for the specified channel of this mesh or NULL if the
channel is not supported. |
|
DllExport void | freeVData (int vd) |
Deallocates the vertex data for the
specified chanel. |
|
DllExport void | freeAllVData () |
Deallocates the vertex data from all the
channels and sets the number of supported channels to 0. |
|
float * | getVertexWeights () |
Returns a pointer to the floating point
vertex weight data. |
|
void | SupportVertexWeights () |
Sets the channel support for the vertex
weights channel (VDATA_WEIGHT). |
|
void | ClearVertexWeights () |
Clears (deallocates) the vertex weights
channel data. |
|
void | freeVertexWeights () |
Deallocates the vertex weights channel data
(same as ClearVertexWeights()
above). |
|
float * | getVSelectionWeights () |
Returns a pointer to the floating point
vertex selection weights data. |
|
void | SupportVSelectionWeights () |
Sets the channel support for the vertex
weights channel (VDATA_SELECT). |
|
void | ClearVSelectionWeights () |
Clears (deallocates) the vertex selection
weights channel data. |
|
void | freeVSelectionWeights () |
Deallocates the vertex selection weights
channel data (same as ClearVSelectionWeights()
above). |
|
DllExport void | setSmoothFlags (int f) |
This method should be called when the user
has clicked on the 'Smooth' check box in a procedural object.
|
|
DllExport int | getSmoothFlags () |
Returns the state of the smooth flags.
|
|
void | setVert (int i, const Point3 &xyz) |
Sets a single vertex in the verts array.
|
|
void | setVert (int i, float x, float y, float z) |
Sets a single vertex in the verts array.
|
|
void | setTVert (int i, const UVVert &xyz) |
Sets a single texture vertex in the tVerts
array. |
|
void | setTVert (int i, float x, float y, float z) |
Sets a single texture vertex in the tVerts
array. |
|
DllExport void | setNormal (int i, const Point3 &xyz) |
Sets a single 'rendered' normal in the
rVerts array of RVertex instances. |
|
DllExport Point3 & | getNormal (int i) const |
Returns the 'i-th' 'rendered' normal from
the rVerts array. |
|
void | setFaceNormal (int i, const Point3 &xyz) |
Sets the 'i-th' face normal. |
|
Point3 & | getFaceNormal (int i) |
Returns the 'i-th' face normal. |
|
Point3 & | getVert (int i) |
Returns the 'i-th' vertex. |
|
Point3 * | getVertPtr (int i) |
Returns a pointer to the 'i-th' vertex.
|
|
UVVert & | getTVert (int i) |
Returns the 'i-th' texture vertex. |
|
UVVert * | getTVertPtr (int i) |
Returns a pointer to the 'i-th' texture
vertex. |
|
RVertex & | getRVert (int i) |
This method returns the 'i-th' RVertex. |
|
RVertex * | getRVertPtr (int i) |
This method returns a pointer to the 'i-th'
RVertex. |
|
void | setMtlIndex (MtlID i) |
MtlID | getMtlIndex (void) |
DllExport MtlID | getFaceMtlIndex (int i) |
Retrieves the zero based material index of
the 'i-th' face. |
|
DllExport void | setFaceMtlIndex (int i, MtlID id) |
Sets the material index of the 'i-th' face.
|
|
DllExport void | buildNormals () |
This method resolves the normals on the
RVertex array.
|
|
DllExport void | buildRenderNormals () |
This method is similar to buildNormals()
above, but ignores the material index (mtlIndex). |
|
DllExport void | checkNormals (BOOL illum) |
This method can be used to build the normals
and allocate RVert space only if necessary. |
|
DllExport void | render (GraphicsWindow *gw, Material *ma, RECT *rp, int compFlags, int numMat=1, InterfaceServer *pi=NULL) |
Renders this
Mesh using the specified graphics window and array of
materials. |
|
DllExport BOOL | select (GraphicsWindow *gw, Material *ma, HitRegion *hr, int abortOnHit=FALSE, int numMat=1) |
Checks the given
HitRecord hr to see if it intersects this
Mesh object. |
|
DllExport void | snap (GraphicsWindow *gw, SnapInfo *snap, IPoint2 *p, Matrix3 &tm) |
Checks to see if there is a snap point near
the given mouse point. |
|
DllExport BOOL | SubObjectHitTest (GraphicsWindow *gw, Material *ma, HitRegion *hr, DWORD flags, SubObjHitList &hitList, int numMat=1) |
This method may be called to perform
sub-object hit testing on this mesh. |
|
void | displayNormals (int b, float sc) |
Note that there may be more than one normal
per vertex if faces that share the vertex are in non-overlapping
smoothing groups. |
|
void | displayAllEdges (int b) |
Controls the display of hidden edges of this
mesh object. |
|
DllExport void | buildBoundingBox (void) |
Computes the bounding box of the
Mesh. |
|
DllExport Box3 | getBoundingBox (Matrix3 *tm=NULL) |
Retrieves the bounding box of the mesh
object. |
|
DllExport void | InvalidateGeomCache () |
Call this method after the geometry of this
Mesh has changed. |
|
DllExport void | InvalidateTopologyCache () |
Call this method after you alter vertex or
face lists or revise edge visibility flags. |
|
DllExport void | FreeAll () |
Cleans up the allocated arrays. |
|
DllExport void | ZeroTopologyCache () |
DllExport void | EnableEdgeList (int e) |
DllExport void | BuildVisEdgeList () |
DllExport void | DrawVisEdgeList (GraphicsWindow *gw, DWORD flags) |
DllExport void | Draw3DVisEdgeList (GraphicsWindow *gw, DWORD flags) |
DllExport void | HitTestVisEdgeList (GraphicsWindow *gw, int abortOnHit) |
DllExport void | InvalidateEdgeList () |
DllExport BOOL | BuildStrips () |
It builds the strips database inside the
mesh. |
|
DllExport void | Stripify (Strip *s, StripData *sd, int vtx) |
DllExport void | Stripify (Strip *s, StripData *sd, int vtx, DWTab &v, DWTab &n, DWTab &tv) |
DllExport void | getStripVertColor (GraphicsWindow *gw, int cv, int flipped, MtlID mID, DWORD smGroup, Point3 &rgb) |
DllExport void | getStripNormal (int cv, MtlID mID, DWORD smGroup, Point3 &nor) |
DllExport int | getStripNormalIndex (int cv, MtlID mID, DWORD smGroup) |
DllExport BOOL | getStripTVert (GraphicsWindow *gw, int cv, int ctv, Point3 &uvw, int texNum=0) |
DllExport void | DrawStrips (GraphicsWindow *gw, Material *ma, int numMat) |
DllExport void | Draw3DStrips (GraphicsWindow *gw, Material *ma, int numMat) |
DllExport void | Draw3DWireStrips (GraphicsWindow *gw, Material *ma, int numMat) |
DllExport void | InvalidateStrips () |
This method invalidates the strips database.
|
|
DllExport void | BuildStripsAndEdges () |
This method builds the strips and edges
database inside the mesh. |
|
DllExport void | ShallowCopy (Mesh *amesh, ChannelMask channels) |
Makes a copy of the specified channels of
the specified
Mesh object's data structures (but not all the data in these
structures) into this
Mesh. |
|
DllExport void | DeepCopy (Mesh *amesh, ChannelMask channels) |
Makes a complete copy of the specified
channels of the specified
Mesh object (its data structures and all the data in these
structures) into this
Mesh. |
|
DllExport void | NewAndCopyChannels (ChannelMask channels) |
This method replaces the specified channels
with newly allocated copies. |
|
DllExport void | FreeChannels (ChannelMask channels, int zeroOthers=1) |
Release the memory associated with the
specified channels. |
|
void | SetFlag (DWORD f) |
Sets the state of the mesh flags. |
|
DWORD | GetFlag (DWORD f) |
Returns the state of the specified mesh
flags. |
|
void | ClearFlag (DWORD f) |
Sets the state of the specified mesh flags
to 0. |
|
void | SetDispFlag (DWORD f) |
Sets the state of the display flags.
|
|
DWORD | GetDispFlag (DWORD f) |
Returns the state of the specified display
flags. |
|
void | ClearDispFlag (DWORD f) |
Sets the state of the specified display
flags to 0. |
|
BitArray & | VertSel () |
Retrieves the bits representing the vertex
selection status. |
|
BitArray & | FaceSel () |
Retrieves the bits representing the face
selection status. |
|
DllExport BitArray | VertexTempSel () |
Constructs a vertex selection list based on
the current selection level. |
|
DllExport IOResult | Save (ISave *isave) |
DllExport IOResult | Load (ILoad *iload) |
DllExport int | IntersectRay (Ray &ray, float &at, Point3 &norm) |
Calculates the intersection of the specified
ray with this mesh object. |
|
DllExport int | IntersectRay (Ray &ray, float &at, Point3 &norm, DWORD &fi, Point3 &bary) |
Calculates the intersection of the specified
ray with this mesh object. |
|
DllExport Mesh | operator+ (Mesh &mesh) |
Performs a boolean union operation. |
|
DllExport Mesh | operator- (Mesh &mesh) |
Performs a boolean difference operation.
|
|
DllExport Mesh | operator* (Mesh &mesh) |
Performs a boolean intersection operation.
|
|
DllExport void | MyDebugPrint () |
DllExport void | WeldCollinear (BitArray &set) |
DllExport void | Optimize (float normThresh, float edgeThresh, float bias, float maxEdge, DWORD flags, MeshOpProgress *prog=NULL) |
Allows this
Mesh to be reduced in complexity by reducing the number of
faces based on a surface normal threshold. |
|
DllExport void | ApplyUVWMap (int type, float utile, float vtile, float wtile, int uflip, int vflip, int wflip, int cap, const Matrix3 &tm, int channel=1) |
This method may be called to map this
Mesh with UVW mapping coordinates. |
|
DllExport void | ApplyMapper (UVWMapper &map, int channel=1) |
DllExport void | FlipNormal (int i) |
Flips the surface normal of the 'i-th' face
(this just rearranges the indices for the face structure). |
|
DllExport void | UnifyNormals (BOOL selOnly) |
Unifies the surfaces normals of this
Mesh. |
|
DllExport void | AutoSmooth (float angle, BOOL useSel, BOOL preventIndirectSmoothing=FALSE) |
Performs an auto smooth on the mesh, setting
the smoothing groups based on the surface normals. |
|
DllExport Edge * | MakeEdgeList (int *edgeCount, int flagdbls=0) |
DllExport int | DeleteFlaggedFaces () |
This method removes faces from the face list
with the FACE_WORK flag set. |
|
DllExport void | DeleteSelected () |
Deletes all selected elements of the current
selection level. |
|
DllExport void | DeleteVertSet (BitArray set) |
Deletes the vertices as specified by the
BitArray. |
|
DllExport void | DeleteFaceSet (BitArray set, BitArray *isoVert=NULL) |
Deletes faces as specified by the BitArray. |
|
DllExport BOOL | DoesFaceExist (DWORD v0, DWORD v1, DWORD v2) |
This method may be called to determine if an
equivalent face already exists. |
|
DllExport BOOL | RemoveDegenerateFaces () |
Removes faces that have two or more equal
indices. |
|
DllExport BOOL | RemoveIllegalFaces () |
Removes faces that have indices that are out
of range. |
|
DllExport Point3 | FaceNormal (DWORD fi, BOOL nrmlize=FALSE) |
This method returns the normal of the
specified face. |
|
DllExport Point3 | FaceCenter (DWORD fi) |
This method returns the center of the
specified face. |
|
DllExport float | AngleBetweenFaces (DWORD f0, DWORD f1) |
Returns the angle between two face surface
normals in radians. |
|
DllExport Point3 | BaryCoords (DWORD face, Point3 p) |
Computes and returns the barycentric
coordinates of a point in the plane of a face relative to that
face. |
|
DllExport void | DivideEdge (DWORD edge, float prop=.5f, bool visDiag1=TRUE, bool fixNeighbors=TRUE, bool visDiag2=TRUE) |
Divides the edge, creating a new point.
|
|
DllExport void | DivideFace (DWORD face, DWORD e1, DWORD e2, float prop1=.5f, float prop2=.5f, bool fixNeighbors=TRUE, bool split=FALSE) |
Cuts a face into three faces, arranged as a
quad and a triangle, by slicing from a point on one edge to a point
on another. |
|
DllExport void | TurnEdge (DWORD edge, DWORD *otherEdge=NULL) |
Turns an edge. |
|
DllExport void | FaceCenterTessellate (BOOL ignoreSel=FALSE, MeshOpProgress *mop=NULL) |
Tessellates the mesh (or only the selected
faces) using the face/center method. |
|
DllExport void | EdgeTessellate (float tens, BOOL ignoreSel=FALSE, MeshOpProgress *mop=NULL) |
Edge tessellates the mesh using the
specified tension parameter. |
|
DllExport void | ExtrudeFaces (BOOL doFace=TRUE) |
Extrudes the selected faces. |
|
DllExport void | IndentSelFaces (float amount) |
Indents the selected faces, in a manner
consistent with the outlining used in Bevel. |
|
DllExport void | BreakVerts (BitArray set) |
Splits the vertices specified in the
BitArray so that they
are only used by a single face. |
|
DllExport BitArray | GetIsoVerts () |
This method returns a BitArray (of size numVerts), where
isolated verts are selected. |
|
DllExport void | DeleteIsoVerts () |
Deletes the vertices that aren't used by any
faces. |
|
DllExport void | CloneFaces (BitArray fset) |
Creates a copy of the faces and verts used
by those faces as specified by the BitArray passed. |
|
DllExport void | PolyFromFace (DWORD f, BitArray &set, float thresh, BOOL ignoreVisEdges, AdjFaceList *af=NULL) |
Sets bits for all faces in the same polygon
with face f. |
|
DllExport void | ElementFromFace (DWORD f, BitArray &set, AdjFaceList *af=NULL) |
This method sets bits for all faces in the
same "element", or connected component, with face f. |
|
DllExport void | FindVertsUsedOnlyByFaces (BitArray &fset, BitArray &vset) |
When faces are deleted in Edit or Editable
Mesh, we often want to be able to delete the verts that are
isolated by this action. |
|
DllExport void | FindOpenEdges (BitArray &edges) |
This method fills in a BitArray with the edges in the mesh that
are "open" or "one-sided". |
|
DllExport void | FindVertexAngles (float *vang, BitArray *set=NULL) |
This method calculates, for each vertex, the
sum of the angles of this vertex's corner in each face it's on.
|
|
void | SetRenderData (MeshRenderData *p) |
Sets the mesh render data hung off this
Mesh. |
|
MeshRenderData * | GetRenderData () |
Returns the mesh render data hung off this
Mesh. |
|
DllExport void | ClearSpecifiedNormals () |
DllExport MeshNormalSpec * | GetSpecifiedNormals () |
DllExport void | SpecifyNormals () |
DllExport void | CopyBasics (const Mesh &from) |
DllExport BaseInterface * | GetInterface (Interface_ID id) |
DllExport bool | isFaceCacheInvalid (int faceIndex) |
The function first checks if the whole mesh
or the face have been flagged as cache invalid (MESH_CACHEINVALID).
|
|
DllExport void | InvalidateVertexCache (int vertex) |
The function flags the specified vertex with
the MESH_CACHEINVALID flag, telling the rebuild functions that this
vertex, the faces surrounding it and the other vertices of those
faces need to have their normals recomputed. |
|
DllExport void | SetStaticMesh (bool staticMesh) |
This will set the mesh or as static or not.
|
|
DllExport void | ReduceDisplayCaches () |
This will force all the derived data used to
display the mesh to be deleted. |
|
DllExport bool | NeedGWCacheRebuilt (GraphicsWindow *gw, Material *ma, int numMat) |
This returns whether the Graphics Cache for
this object needs to be rebuilt. |
|
DllExport void | BuildGWCache (GraphicsWindow *gw, Material *ma, int numMat, BOOL threaded) |
This builds the graphics window cached mesh.
|
|
Public Attributes |
|
int | numVerts |
Number of vertices. |
|
int | numFaces |
Number of faces. |
|
Face * | faces |
Number of faces. |
|
Point3 * | verts |
Array of vertex coordinates. |
|
int | numTVerts |
Number of texture vertices. |
|
UVVert * | tVerts |
The array of texture vertices. |
|
TVFace * | tvFace |
The array of texture faces. |
|
int | numCVerts |
Number of color vertices. |
|
VertColor * | vertCol |
Array of color vertices. |
|
TVFace * | vcFace |
Array of color per vertex faces. |
|
int | curVCChan |
Storage for the current mapping channel to
use for vertex colors (default = 0). |
|
VertColor * | curVCArray |
Points to storage for a possible external
color array (default = NULL). |
|
TVFace * | curVCFace |
possible external face array (default =
NULL) |
|
VertColor * | vertColArray |
When 3ds Max is rendering the color values
come from this variable. |
|
TVFace * | vcFaceData |
When 3ds Max is rendering the vertex color
lookup comes from this structure. |
|
int | numMaps |
The number of maps supported by the mesh.
|
|
MeshMap * | maps |
When the number of mapping channels is set
to a value greater than 1 then an instance of this class is
allocated for each channel up to numMaps. |
|
BitArray | vdSupport |
This bit array indicates if a particular
vertex data channel is supported in this mesh. |
|
PerData * | vData |
The array of
PerData objects which maintain and provide access to the
floating point vertex data. |
|
MtlID | mtlIndex |
object material |
|
BitArray | vertSel |
Indicates the selected vertices. |
|
BitArray | faceSel |
Indicates the selected faces. |
|
BitArray | edgeSel |
Indicates the selected edges. |
|
BitArray | vertHide |
Hidden flags for vertices. |
|
DWORD | dispFlags |
Display attribute flags. |
|
DWORD | selLevel |
Selection level flags. |
|
int | normalsBuilt |
Nonzero if normals have been built for the
current mesh; 0 otherwise. |
|
MeshRenderData * | renderData |
Points to the render data used by the
renderer. |
|
StripTab * | stab |
depends on topo |
|
DWTab | norInd |
indirection array for fast normal lookup
|
|
int | normalCount |
total number of normals |
|
Point3 * | gfxNormals |
flattened list of normals pointers back in
the rverts data. |
|
int | numTexCoords [GFX_MAX_TEXTURES] |
Derived arrays to contain generated texture
coordinates. |
|
Point3 * | texCoords [GFX_MAX_TEXTURES] |
Derived arrays to contain generated texture
coordinates. |
|
Tab< TriStrip * > * | tstab |
Derived table of TriStrips, depends on
topology. |
|
long * | vFlags |
Holds flags specific to the corresponding
vertex in the verts array. |
|
Friends |
|
class | Face |
class | MeshAccess |
class | HardwareMesh |
class | MaxGraphics::IMeshInternal |
void | gfxCleanup (void *data) |
DllExport Mesh | ( | ) |
Constructor.
Initializes the mesh object. The mesh counts are set to 0 and its pointers are set to NULL.
DllExport ~Mesh | ( | ) |
Destructor.
Frees any allocated arrays (faces, verts, tverts, tvfaces).
void BuildGFXNormals | ( | ) |
DllExport void Init | ( | ) |
Initializes the mesh object. The mesh counts are set to 0 and its pointers are set to NULL. Note: This method is not intended to be called by developers. It is used internally.
DllExport void DeleteThis | ( | ) |
This method deletes this mesh.
Assignment operator.
Note: This operator does not copy the rVerts array. This means that developers who have specified normals will have to explicitly copy them after a mesh assignment is done using this operator. This is because rVerts are instance-specific. In general, normals are computed from smoothing groups, and hence are "generated data". In the case where normals are specified, 3ds Max stores the data in the rVerts array so as to not waste space. The way 3ds Max uses the mesh = operator assumes that the rVerts are not copied, and thus developers must do the copying themselves.
fromMesh | Specifies the mesh to copy. |
DllExport BOOL setNumVerts | ( | int | ct, |
BOOL | keep = FALSE , |
||
BOOL | synchSel =
TRUE |
||
) |
Sets the number of geometric vertices in the mesh.
ct | Specifies the number of vertices. |
keep | Specifies if the previous vertices should be kept. If TRUE the previous vertices are kept; otherwise they are discarded. Defaults to FALSE. |
synchSel | This parameter is available in release 2.0 and later only. If TRUE the selection set BitArrays are resized to fit the number of vertices; otherwise they are left unaltered. Defaults to TRUE. |
int getNumVerts | ( | void | ) | const [inline] |
DllExport BOOL setNumFaces | ( | int | ct, |
BOOL | keep = FALSE , |
||
BOOL | synchSel =
TRUE |
||
) |
Sets the number of faces in the mesh.
ct | Specifies the number of faces. |
keep | Specifies if the previous faces should be kept. If TRUE the previous faces are kept; otherwise they are discarded. Defaults to FALSE. |
synchSel | If TRUE the selection set BitArrays are resized to fit the number of faces; otherwise they are left unaltered. Defaults to TRUE. |
int getNumFaces | ( | void | ) | const [inline] |
DllExport BOOL setNumTVerts | ( | int | ct, |
BOOL | keep = FALSE |
||
) |
Sets the number of texture vertices (in mapping channel 1).
ct | Specifies the number of texture vertices. |
keep | Specifies if the previous texture vertices should be kept. If TRUE the previous texture vertices are kept; otherwise they are discarded. Defaults to FALSE. |
int getNumTVerts | ( | void | ) | const [inline] |
Returns the number of texture vertices (in mapping channel 1).
{ return numTVerts; }
DllExport BOOL setNumTVFaces | ( | int | ct, |
BOOL | keep = FALSE , |
||
int | oldCt = 0 |
||
) |
Sets the number of TVFaces.
This method is automatically called if you set the number of faces to keep these two in sync (because the number of TVFaces should be the same as the number of faces). The following rules apply: If you have no TVFaces and keep is TRUE then the TVFaces array stays empty. If you have no TVFaces and keep is FALSE they are allocated. If you have TVFaces and ct = 0 then the TVFaces are freed.
ct | The number of TVFaces. |
BOOL | keep Specifies if the old faces should be kept. |
oldCt | The length of the existing TVFaces array. |
DllExport BOOL setNumVertCol | ( | int | ct, |
BOOL | keep = FALSE |
||
) |
Sets the number of color per vertex vertices.
ct | The number of color vertices to set. |
keep | If TRUE previous values are kept; otherwise they are discarded. |
int getNumVertCol | ( | ) | const [inline] |
DllExport BOOL setNumVCFaces | ( | int | ct, |
BOOL | keep = FALSE , |
||
int | oldCt = 0 |
||
) |
Sets the number of color per vertex faces.
ct | The number of color per vertex faces to set. |
keep | Specifies if the old faces should be kept if the array is being resized. If FALSE they are freed. |
oldCt | The length of the existing VCFaces array. |
DllExport void setVCDisplayData | ( | int | mapChan = 0 , |
VertColor * | VCArray = NULL , |
||
TVFace * | VCf = NULL |
||
) |
This method would typically be called right before display, as with a node display callback, or through an extension object.
If mapChan parameter is set to MESH_USE_EXT_CVARRAY then the data in VCArray and TVFace is stored for internal use and consequent drawing. If the arrays are NULL then the internal source is used.
mapChan | the mapping channel to use. |
VCArray | An external array hosting the vertex colors |
VCF | An external array of TVFace indexing into the color array |
DllExport void setNumMaps | ( | int | ct, |
BOOL | keep = FALSE |
||
) |
Set the number of texture maps used by this Mesh.
Note that this call is made automatically if Mesh::setMapSupport() is called.
ct | The number of texture maps to use. This is a value between 2 and MAX_MESHMAPS-1. |
keep | TRUE to keep the old mapping information after the resize; FALSE to discard it. |
int getNumMaps | ( | ) | const [inline] |
DllExport BOOL mapSupport | ( | int | mp | ) | const |
Returns TRUE if the specified mapping channel is supported; otherwise FALSE.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
DllExport void setMapSupport | ( | int | mp, |
BOOL | support =
TRUE |
||
) |
Sets whether the specified mapping channels is supported or not.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
support | TRUE to indicate the channel is supported; otherwise FALSE. |
DllExport void setNumMapVerts | ( | int | mp, |
int | ct, | ||
BOOL | keep = FALSE |
||
) |
Sets the number of texture or vertex color vertices for the specified mapping channel of this mesh.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
ct | The number of vertices to allocate. |
keep | If TRUE previous values are kept; otherwise they are discarded. |
DllExport int getNumMapVerts | ( | int | mp | ) | const |
Returns the number of texture or vertex color vertices for the specified channel of this mesh.
mp | Specifies the channel. See "List of Mapping Channel Index Values". |
DllExport void setNumMapFaces | ( | int | mp, |
int | ct, | ||
BOOL | keep = FALSE , |
||
int | oldCt = 0 |
||
) |
Sets the number of texture or vertex color faces for the specified channel of this mesh.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
ct | The number of faces to allocate. |
keep | If TRUE previous values are kept; otherwise they are discarded. |
DllExport UVVert* mapVerts | ( | int | mp | ) | const |
Returns a pointer to the list of UVVerts for the specified channel of this mesh.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
DllExport TVFace* mapFaces | ( | int | mp | ) | const |
Returns a pointer to the list of TVFaces for the specified channel of this mesh.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
void setMapVert | ( | int | mp, |
int | i, | ||
const UVVert & | xyz | ||
) | [inline] |
Sets a single texture or vertex color value for the specified channel of this mesh.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
i | The zero based index of the vertex to set. |
xyz | The value to set. |
DllExport void MakeMapPlanar | ( | int | mp | ) |
Applies a simple planar mapping to the specified channel.
This is done by copying the mesh topology and vertex locations into the map.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
DllExport BitArray GetIsoMapVerts | ( | int | mp | ) |
Returns a BitArray with a bit set for each isolated vertex (un-referenced by any face) for the specified channel.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
Deletes the map vertices indicated.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
set | Indicates which map verts should be deleted. set.GetSize() should equal this mesh's getNumMapVerts(mp). |
fdel | If non-NULL, this points to a BitArray that will be filled in with the faces that will need to be deleted or have new map verts assigned because they used a map vert that was deleted. (The size will be set to this mesh's numFaces.) |
DllExport void DeleteIsoMapVerts | ( | ) |
This method deletes each isolated vertex (un-referenced by any face) for the all active maps.
DllExport void DeleteIsoMapVerts | ( | int | mp | ) |
This method deletes each isolated vertex (un-referenced by any face) for the specified channel.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". The default value of -1 indicates to do all active maps. |
DllExport void freeMapVerts | ( | int | mp | ) |
Deallocates the texture or vertex color vertices for the specified channel of this mesh.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
DllExport void freeMapFaces | ( | int | mp | ) |
Deallocates the texture or vertex color faces for the specified channel of this mesh.
mp | Specifies the channel. See the page "List of Mapping Channel Index Values". |
MeshMap& Map | ( | int | mp | ) | [inline] |
This method returns the map for the specified map channel.
mp | The map channel. |
{ return (mp<0) ? hmaps[-1-mp] : maps[mp]; }
DllExport void setNumVData | ( | int | ct, |
BOOL | keep = FALSE |
||
) |
Sets the number of channels of vertex data used by the mesh.
ct | The number of elements of vertex data to set. |
keep | If TRUE any old vertex data is kept; otherwise it is discarded. |
int getNumVData | ( | ) | const [inline] |
Returns the number of vertex data channels maintained by this mesh.
DllExport BOOL vDataSupport | ( | int | vd | ) | const |
Returns TRUE if the specified channel of vertex data is available for this mesh; otherwise FALSE.
vd | The vertex data channel. See the page "List of Vertex Data Index Options". |
DllExport void setVDataSupport | ( | int | vd, |
BOOL | support =
TRUE |
||
) |
Sets if the specified channel of vertex data is supported by this mesh.
vd | The vertex data channel. See the page "List of Vertex Data Index Options". |
support | TRUE to indicate the channel is supported; FALSE to indicate it's not. If TRUE is specified then numVerts elements are allocated (if needed). If FALSE is specified the data for the channel is freed. |
void* vertexData | ( | int | vd | ) | const [inline] |
Returns a pointer to the vertex data for the specified channel or NULL if the channel is not supported.
If supported then the size of this array is numVerts.
vd | The vertex data channel. See the page "List of Vertex Data Index Options". |
{ return vDataSupport(vd) ? vData[vd].data : NULL; }
float* vertexFloat | ( | int | vd | ) | const [inline] |
Returns a pointer to the floating point vertex data for the specified channel of this mesh or NULL if the channel is not supported.
If supported then the size of this array is numVerts.
vd | The vertex data channel. See the page "List of Vertex Data Index Options". |
{ return (float *) vertexData (vd); }
DllExport void freeVData | ( | int | vd | ) |
Deallocates the vertex data for the specified chanel.
vd | The vertex data channel. See the page "List of Vertex Data Index Options". |
DllExport void freeAllVData | ( | ) |
Deallocates the vertex data from all the channels and sets the number of supported channels to 0.
float* getVertexWeights | ( | ) | [inline] |
Returns a pointer to the floating point vertex weight data.
{ return vertexFloat(VDATA_WEIGHT); }
void SupportVertexWeights | ( | ) | [inline] |
Sets the channel support for the vertex weights channel (VDATA_WEIGHT).
{ setVDataSupport (VDATA_WEIGHT); }
void ClearVertexWeights | ( | ) | [inline] |
Clears (deallocates) the vertex weights channel data.
{ setVDataSupport (VDATA_WEIGHT, FALSE); }
void freeVertexWeights | ( | ) | [inline] |
Deallocates the vertex weights channel data (same as ClearVertexWeights() above).
{ freeVData (VDATA_WEIGHT); }
float* getVSelectionWeights | ( | ) | [inline] |
Returns a pointer to the floating point vertex selection weights data.
{ return vertexFloat(VDATA_SELECT); }
void SupportVSelectionWeights | ( | ) | [inline] |
Sets the channel support for the vertex weights channel (VDATA_SELECT).
{ setVDataSupport (VDATA_SELECT); }
void ClearVSelectionWeights | ( | ) | [inline] |
Clears (deallocates) the vertex selection weights channel data.
{ setVDataSupport (VDATA_SELECT, FALSE); }
void freeVSelectionWeights | ( | ) | [inline] |
Deallocates the vertex selection weights channel data (same as ClearVSelectionWeights() above).
{ freeVData (VDATA_SELECT); }
DllExport void setSmoothFlags | ( | int | f | ) |
This method should be called when the user has clicked on the 'Smooth' check box in a procedural object.
It invalidates the appropriate caches of the mesh so the display is updated properly. If this method is not called, the internal topology cache might prevent the mesh from appearing changed.
f | Nonzero indicates smoothed; zero unsmoothed. |
DllExport int getSmoothFlags | ( | ) |
void setVert | ( | int | i, |
const Point3 & | xyz | ||
) | [inline] |
Sets a single vertex in the verts array.
i | A zero based index into the verts array of the vertex to store. |
xyz | Specifies the coordinate of the vertex. |
{ verts[i] = xyz; }
void setVert | ( | int | i, |
float | x, | ||
float | y, | ||
float | z | ||
) | [inline] |
Sets a single vertex in the verts array.
i | A zero based index into the verts array of the vertex to store. |
x | Specifies the X coordinate of the vertex. |
y | Specifies the Y coordinate of the vertex. |
z | Specifies the Z coordinate of the vertex. |
void setTVert | ( | int | i, |
const UVVert & | xyz | ||
) | [inline] |
Sets a single texture vertex in the tVerts array.
i | A zero based index into the tVerts array of the texture vertex to store. |
xyz | Specifies the coordinate of the vertex. |
{ tVerts[i] = xyz; }
void setTVert | ( | int | i, |
float | x, | ||
float | y, | ||
float | z | ||
) | [inline] |
Sets a single texture vertex in the tVerts array.
i | A zero based index into the tVerts array of the texture vertex to store. |
x | Specifies the X coordinate of the texture vertex. |
y | Specifies the Y coordinate of the texture vertex. |
z | Specifies the Z coordinate of the texture vertex. |
DllExport void setNormal | ( | int | i, |
const Point3 & | xyz | ||
) |
Sets a single 'rendered' normal in the rVerts array of RVertex instances.
i | A zero based index into the rVerts array of the normal to store. |
xyz | The normal to store in device coordinates. This should be a unit vector. |
DllExport Point3& getNormal | ( | int | i | ) | const |
Returns the 'i-th' 'rendered' normal from the rVerts array.
i | A zero based index into the rVerts array of the normal to get. |
void setFaceNormal | ( | int | i, |
const Point3 & | xyz | ||
) | [inline] |
Sets the 'i-th' face normal.
i | A zero based index into the face normal array of the normal to store. |
xyz | The face normal to store. This should be a unit vector. |
{ faceNormal[i] = xyz; }
Point3& getFaceNormal | ( | int | i | ) | [inline] |
Returns the 'i-th' face normal.
i | Specifies the index of the face normal to retrieve. |
{ return faceNormal[i]; }
Point3& getVert | ( | int | i | ) | [inline] |
Returns the 'i-th' vertex.
i | Specifies the index of the vertex to retrieve. |
{ return verts[i]; }
Point3* getVertPtr | ( | int | i | ) | [inline] |
Returns a pointer to the 'i-th' vertex.
i | Specifies the index of the vertex address to retrieve. |
{ return verts+i; }
UVVert& getTVert | ( | int | i | ) | [inline] |
Returns the 'i-th' texture vertex.
i | Specifies the index of the texture vertex to retrieve. |
{ return tVerts[i]; }
UVVert* getTVertPtr | ( | int | i | ) | [inline] |
Returns a pointer to the 'i-th' texture vertex.
i | Specifies the index of the texture vertex address to retrieve. |
{ return tVerts+i; }
RVertex& getRVert | ( | int | i | ) | [inline] |
RVertex* getRVertPtr | ( | int | i | ) | [inline] |
void setMtlIndex | ( | MtlID | i | ) | [inline] |
MtlID getMtlIndex | ( | void | ) | [inline] |
DllExport MtlID getFaceMtlIndex | ( | int | i | ) |
Retrieves the zero based material index of the 'i-th' face.
i | Specifies the face index. This is the zero based index into the faces array. |
DllExport void setFaceMtlIndex | ( | int | i, |
MtlID | id | ||
) |
Sets the material index of the 'i-th' face.
i | Specifies the face index. This is the zero based index into the faces array. |
id | The material index for the 'i-th' face. |
DllExport void buildNormals | ( | ) |
This method resolves the normals on the RVertex array.
If the Mesh already has normals at each vertex, the normal is just moved to the RVertex array. See Class RVertex and Class RNormal. If you are creating a Mesh by hand, after you are done specifying all the vertices and faces, this method should be called. This allocates the RVertex and RNormal database for the Mesh. This will allow you to query the Mesh and ask about normals on the vertices. Also, if you deform a Mesh (i.e. take one of the vertices and move it), you should call this method again. Actually, if you are only moving one normal you only need to smooth the polygons that share the vertex. However, there is no method to smooth a subset of a Mesh, you either have to do it by hand or call this method to smooth the entire Mesh. This method also builds the face normals for the mesh.
DllExport void buildRenderNormals | ( | ) |
This method is similar to buildNormals() above, but ignores the material index (mtlIndex).
In other words, the difference between this and buildNormals() is that it doesn't look at the mtlIndex of the faces: normals of faces with the same smoothing group are averaged regardless.
DllExport void checkNormals | ( | BOOL | illum | ) |
This method can be used to build the normals and allocate RVert space only if necessary.
This is a very inexpensive call if the normals are already calculated. When illum is FALSE, only the RVerts allocation is checked (since normals aren't needed for non-illum rendering). When illum is TRUE, normals will also be built, if they aren't already. So, to make sure normals are built, call this with illum=TRUE.
illum | If TRUE then normals are built. If FALSE then only the RVert array is allocated. |
DllExport void render | ( | GraphicsWindow * | gw, |
Material * | ma, | ||
RECT * | rp, | ||
int | compFlags, | ||
int | numMat = 1 , |
||
InterfaceServer * | pi = NULL |
||
) |
Renders this Mesh using the specified graphics window and array of materials.
Note: If a display routine makes multiple calls to this method you need to have called: gw->setMaterial(inode->Mtls()[0]); before calling Mesh::render(). If you don't then you may get the wrong material for material ID 0.
gw | Points to the graphics window to render to. |
ma | The list of materials to use to render the mesh. See Class Material and the topic "Class INode - Material methods". |
rp | Specifies the rectangular region to render. If the mesh should be rendered to the entire viewport pass NULL. |
compFlags | One or more of the following flags:
|
numMat | The number of materials for the mesh. mpi This pointer to an InterfaceServer can be used to get hold of the IXTCAccess pointer. And IXTCAccess interface can also be obtained from the object by calling Object::GetInterface (IXTCACCESS_INTERFACE_ID). |
int SimpleObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags) { if (!OKtoDisplay(t)) return 0; GraphicsWindow *gw = vpt->getGW(); Matrix3 mat = inode->GetObjectTM(t); UpdateMesh(t); // UpdateMesh() just calls BuildMesh() gw->setTransform(mat); mesh.render(gw, inode->Mtls(), (flags&USE_DAMAGE_RECT) ? &vpt->GetDammageRect() : NULL, COMP_ALL, inode->NumMtls()); return(0); }
DllExport BOOL select | ( | GraphicsWindow * | gw, |
Material * | ma, | ||
HitRegion * | hr, | ||
int | abortOnHit =
FALSE , |
||
int | numMat = 1 |
||
) |
Checks the given HitRecord hr to see if it intersects this Mesh object.
gw | Points to the graphics window to check. |
ma | The list of materials for the mesh. |
hr | This describes the properties of a region used for the hit testing. See Class HitRegion. |
abortOnHit | If nonzero, the hit testing is complete after any hit; otherwise all hits are checked. |
numMat | The number of materials for the mesh. |
DllExport void snap | ( | GraphicsWindow * | gw, |
SnapInfo * | snap, | ||
IPoint2 * | p, | ||
Matrix3 & | tm | ||
) |
Checks to see if there is a snap point near the given mouse point.
gw | The graphics window in which to check. |
snap | This structure describes the snap settings used, and the results of the snap test. See the title "Structure SnapInfo". |
p | The mouse point to check. |
tm | The object transformation matrix. This is the transformation to place the object into the world coordinate system. |
void TestObject::Snap(TimeValue t, INode* inode, SnapInfo *snap, IPoint2 *p, ViewExp *vpt) { // Grab the object TM Matrix3 tm = inode->GetObjectTM(t); // Grab the graphics window GraphicsWindow *gw = vpt->getGW(); // Make sure our mesh is up to date UpdateMesh(t); // UpdateMesh() just calls BuildMesh() // Set the transform in the GW gw->setTransform(tm); // Let the mesh do the work... mesh.snap( gw, snap, p, tm ); }
DllExport BOOL SubObjectHitTest | ( | GraphicsWindow * | gw, |
Material * | ma, | ||
HitRegion * | hr, | ||
DWORD | flags, | ||
SubObjHitList & | hitList, | ||
int | numMat = 1 |
||
) |
This method may be called to perform sub-object hit testing on this mesh.
gw | The graphics window associated with the viewport the mesh is being hit tested in. |
ma | The list of materials for the mesh. See Class Material and the topic "Class INode - Material methods". |
hr | This describes the properties of a region used for the hit testing. See Class HitRegion. |
flags | Flags for sub object hit testing. One or more of the flags in Flags for Sub Object Hit Test |
hitList | The results are stored here. See Class SubObjHitList. |
numMat | The number of materials for the mesh. |
void displayNormals | ( | int | b, |
float | sc | ||
) | [inline] |
Note that there may be more than one normal per vertex if faces that share the vertex are in non-overlapping smoothing groups.
In this case, all normals associated with the given vertex are drawn.
b | Nonzero to display the normals; zero to turn off normals display. This can be a combination of MESH_DISP_FACE_NORMALS and MESH_DISP_VERTEX_NORMALS. (The arguments may be or'ed together to display both.) For backwards compatibility, MESH_DISP_FACE_NORMALS is defined to be 1, so sending in TRUE will turn on display of face normals, as before. |
sc | This specifies the length that should be used (in world units) to display the normals. Since all normals start out with length equal to 1 they probably would be too small to see unless they were scaled |
void displayAllEdges | ( | int | b | ) | [inline] |
Controls the display of hidden edges of this mesh object.
This just sets the Boolean in the mesh that controls whether "hidden" edges (for instance the diagonals on the sides of a cube) are displayed.
b | Nonzero to display all the hidden edges; otherwise zero. |
DllExport void buildBoundingBox | ( | void | ) |
Computes the bounding box of the Mesh.
If surface normals are displayed, they are taken into account in the computation of the box. The bounding box is stored with the Mesh object, use getBoundingBox() to retrieve it.
Retrieves the bounding box of the mesh object.
tm | The optional TM allows the box to be calculated in any space. NOTE: This computation will be slower because all the points must be transformed. |
DllExport void InvalidateGeomCache | ( | ) |
Call this method after the geometry of this Mesh has changed.
It invalidates the bounding box, and tosses out the cached normals and edge list.
DllExport void InvalidateTopologyCache | ( | ) |
Call this method after you alter vertex or face lists or revise edge visibility flags.
It will invalidate the edge and strip database maintained by the mesh.
DllExport void FreeAll | ( | ) |
Cleans up the allocated arrays.
This frees the Faces, Verts, TVerts, TVFaces, FaceMtlIndexList and invalidates the geometry cache.
DllExport void ZeroTopologyCache | ( | ) |
DllExport void EnableEdgeList | ( | int | e | ) |
This method is used internally.
DllExport void BuildVisEdgeList | ( | ) |
This method is used internally.
DllExport void DrawVisEdgeList | ( | GraphicsWindow * | gw, |
DWORD | flags | ||
) |
This is used internally.
DllExport void Draw3DVisEdgeList | ( | GraphicsWindow * | gw, |
DWORD | flags | ||
) |
DllExport void HitTestVisEdgeList | ( | GraphicsWindow * | gw, |
int | abortOnHit | ||
) |
This is used internally.
DllExport void InvalidateEdgeList | ( | ) |
This is used internally.
DllExport BOOL BuildStrips | ( | ) |
It builds the strips database inside the mesh.
See the method BuildStripsAndEdges() below.
This method is used internally.
DllExport void getStripVertColor | ( | GraphicsWindow * | gw, |
int | cv, | ||
int | flipped, | ||
MtlID | mID, | ||
DWORD | smGroup, | ||
Point3 & | rgb | ||
) |
This method is used internally.
DllExport void getStripNormal | ( | int | cv, |
MtlID | mID, | ||
DWORD | smGroup, | ||
Point3 & | nor | ||
) |
This method is used internally.
DllExport int getStripNormalIndex | ( | int | cv, |
MtlID | mID, | ||
DWORD | smGroup | ||
) |
DllExport BOOL getStripTVert | ( | GraphicsWindow * | gw, |
int | cv, | ||
int | ctv, | ||
Point3 & | uvw, | ||
int | texNum = 0 |
||
) |
This method is used internally.
DllExport void DrawStrips | ( | GraphicsWindow * | gw, |
Material * | ma, | ||
int | numMat | ||
) |
This method is used internally.
DllExport void Draw3DStrips | ( | GraphicsWindow * | gw, |
Material * | ma, | ||
int | numMat | ||
) |
This method is used internally.
DllExport void Draw3DWireStrips | ( | GraphicsWindow * | gw, |
Material * | ma, | ||
int | numMat | ||
) |
DllExport void InvalidateStrips | ( | ) |
This method invalidates the strips database.
DllExport void BuildStripsAndEdges | ( | ) |
This method builds the strips and edges database inside the mesh.
When developers create a new mesh for display then this method should be called. See the section on Stripping in the Advanced Topics section "Working with Meshes" for details on this method.
DllExport void ShallowCopy | ( | Mesh * | amesh, |
ChannelMask | channels | ||
) |
Makes a copy of the specified channels of the specified Mesh object's data structures (but not all the data in these structures) into this Mesh.
For example the verts, tVerts, tvFaces, ... are not copied.
amesh | Specifies the source Mesh to copy. |
channels | Specifies the channels to copy. See Object Channels. |
DllExport void DeepCopy | ( | Mesh * | amesh, |
ChannelMask | channels | ||
) |
Makes a complete copy of the specified channels of the specified Mesh object (its data structures and all the data in these structures) into this Mesh.
amesh | Specifies the source Mesh to copy. |
channels | Specifies the channels to copy. See Object Channels. |
DllExport void NewAndCopyChannels | ( | ChannelMask | channels | ) |
This method replaces the specified channels with newly allocated copies.
channels | Specifies the channels to copy. See Object Channels. |
DllExport void FreeChannels | ( | ChannelMask | channels, |
int | zeroOthers =
1 |
||
) |
Release the memory associated with the specified channels.
For example if the TOPO_CHANNEL is specified the faces are freed, if the GEOM_CHANNEL is specified the vertices are freed, etc.
channels | Specifies the channels to free. Channels not specified are left intact. See Object Channels. |
zeroOthers | If nonzero then the various pointers are set to NULL and their counts are zeroed. For example faces, verts, tVerts, and tvFace are set to NULL and numFaces, numVerts and numTVerts are set to 0. If this is passed as 0, these pointers and counts are left unaltered. |
void SetFlag | ( | DWORD | f | ) | [inline] |
Sets the state of the mesh flags.
f | Specifies the flags to set. See Mesh, Vertex and Face Flags |
{ flags |= f; }
DWORD GetFlag | ( | DWORD | f | ) | [inline] |
Returns the state of the specified mesh flags.
See Data Members: above for a list of the mesh flags.
f | Specifies the flags to retrieve. See Mesh, Vertex and Face Flags |
{ return flags & f; }
void ClearFlag | ( | DWORD | f | ) | [inline] |
Sets the state of the specified mesh flags to 0.
f | Specifies the flags to clear. See Mesh, Vertex and Face Flags |
{ flags &= ~f; }
void SetDispFlag | ( | DWORD | f | ) | [inline] |
Sets the state of the display flags.
See Data Members: above for a list of the display flags.
f | Specifies the flags to set. |
{ dispFlags |= f; }
DWORD GetDispFlag | ( | DWORD | f | ) | [inline] |
Returns the state of the specified display flags.
See Data Members: above for a list of the display flags.
f | Specifies the flags to retrieve. |
{ return dispFlags & f; }
void ClearDispFlag | ( | DWORD | f | ) | [inline] |
Sets the state of the specified display flags to 0.
f | Specifies the flags to clear. |
{ dispFlags &= ~f; }
BitArray& VertSel | ( | ) | [inline] |
Retrieves the bits representing the vertex selection status.
See Data Members: above.
{ return vertSel; }
BitArray& FaceSel | ( | ) | [inline] |
Retrieves the bits representing the face selection status.
{ return faceSel; }
DllExport BitArray VertexTempSel | ( | ) |
Constructs a vertex selection list based on the current selection level.
For example if the selection level is at object level all the bits are set (vertices, faces and edges). If the selection level is at vertex level only the selected vertex bits are set.
BitArray sel = mesh->VertexTempSel(); for ( int i = 0; i < mesh->getNumVerts(); i++ ) { if ( sel[i] ) { ... } }
Calculates the intersection of the specified ray with this mesh object.
This allows Mesh objects to easily implement the Object::IntersectRay() method.
ray | Specifies the origin and direction of the ray to intersect with the mesh. See Class Ray. |
at | The computed point of intersection on the surface of the mesh. |
norm | The face normal at the point of intersection (at). |
Calculates the intersection of the specified ray with this mesh object.
This new version also returns the face index that was intersected and the barycentric coordinates of that face. Barycentric coordinates are the coordinates relative to the triangular face. The barycentric coordinates of a point p relative to a triangle describe that point as a weighted sum of the vertices of the triangle. If the barycentric coordinates are b0, b1, and b2, then: p = b0*p0 + b1*p1 + b2*p2; where p0, p1, and p2 are the vertices of the triangle. The Point3 returned by this method has the barycentric coordinates stored in its three coordinates. These coordinates are relative to the triangular face that was intersected. These barycentric coordinates can be used to interpolate any quantity whose value is known at the vertices of the triangle.
ray | Specifies the origin and direction of the ray to intersect with the mesh. See Class Ray. |
at | The computed point of intersection on the surface of the mesh. |
norm | The face normal at the point of intersection (at). |
fi | The face index of the face that was intersected is returned here. |
bary | The barycentric coordinates of the face that was hit. |
DllExport void MyDebugPrint | ( | ) |
DllExport void WeldCollinear | ( | BitArray & | set | ) |
This method is used internally.
DllExport void Optimize | ( | float | normThresh, |
float | edgeThresh, | ||
float | bias, | ||
float | maxEdge, | ||
DWORD | flags, | ||
MeshOpProgress * | prog = NULL |
||
) |
Allows this Mesh to be reduced in complexity by reducing the number of faces based on a surface normal threshold.
Adjacent faces whose difference in surface normal angle falls below the specified threshold will be collapsed into a single triangle. The Mesh may also have its edge visibility set based on a surface normal threshold.
normThresh | When the angle between adjacent surface normals is less than this value the optimization is performed. This angle is specified in radians. |
edgeThresh | When the angle between adjacent surface normals is less than this value the auto edge is performed (if the OPTIMIZE_AUTOEDGE flag is set). This angle is specified in radians. |
bias | When optimizing mesh objects, as the optimization increases, you can get lots of long skinny 'degenerate' triangles (that cause rendering artifacts). Increasing the bias parameter keeps triangles from becoming degenerate. The range of values is from 0 to 1 (where 0 turns bias off). Values close to 1 reduce the amount of optimization in favor of maintaining equilateral triangles. |
maxEdge | This parameter is available in release 2.0 and later only. This will prevent the optimize function from creating edges longer than this value. If this parameter is <=0 no limit is placed on the length of the edges. |
flags | These flags control the optimization. Specify zero or more of the Optimization Flags |
prog | A callback used for lengthy optimize operations. See Class MeshOpProgress. |
DllExport void ApplyUVWMap | ( | int | type, |
float | utile, | ||
float | vtile, | ||
float | wtile, | ||
int | uflip, | ||
int | vflip, | ||
int | wflip, | ||
int | cap, | ||
const Matrix3 & | tm, | ||
int | channel = 1 |
||
) |
This method may be called to map this Mesh with UVW mapping coordinates.
type | The mapping type. One of the following values:
|
utile | Number of tiles in the U direction. |
vtile | Number of tiles in the V direction. |
wtile | Number of tiles in the W direction. |
uflip | If nonzero the U values are mirrored. |
vflip | If nonzero the V values are mirrored. |
wflip | If nonzero the W values are mirrored. |
cap | This is used with MAP_CYLINDRICAL. If nonzero, then any face normal that is pointing more vertically than horizontally will be mapped using planar coordinates. |
tm | This defines the mapping space. As each point is mapped, it is multiplied by this matrix, and then it is mapped. |
channel | This parameter is available in release 2.0 and later only. This indicates which channel the mapping is applied to -- channel==1 corresponds to the original texture mapping channel. |
DllExport void ApplyMapper | ( | UVWMapper & | map, |
int | channel = 1 |
||
) |
DllExport void FlipNormal | ( | int | i | ) |
Flips the surface normal of the 'i-th' face (this just rearranges the indices for the face structure).
This also makes sure the edge flags are rearranged as well. If there are UV coordinates they are rearranged appropriately.
i | The index of the face to flip. |
DllExport void UnifyNormals | ( | BOOL | selOnly | ) |
Unifies the surfaces normals of this Mesh.
This may be for selected faces, or the entire mesh.
selOnly | If TRUE only the selected faces are unified. |
DllExport void AutoSmooth | ( | float | angle, |
BOOL | useSel, | ||
BOOL | preventIndirectSmoothing =
FALSE |
||
) |
Performs an auto smooth on the mesh, setting the smoothing groups based on the surface normals.
angle | The minimum angle between surface normals for smoothing to be applied, in radians. |
useSel | If TRUE only the selected faces are smoothed. |
preventIndirectSmoothing | This parameter is available in release 2.0 and later only. TRUE to turn on; FALSE to leave off. This matches the option in the Smooth Modifier UI -- use this to prevent smoothing 'leaks" when using this method. If you use this method, and portions of the mesh that should not be smoothed become smoothed, then try this option to see if it will correct the problem. Note that the problem it corrects is rare, and that checking this slows the Auto Smooth process. |
DllExport Edge* MakeEdgeList | ( | int * | edgeCount, |
int | flagdbls = 0 |
||
) |
This method is used internally.
DllExport int DeleteFlaggedFaces | ( | ) |
This method removes faces from the face list with the FACE_WORK flag set.
DllExport void DeleteSelected | ( | ) |
Deletes all selected elements of the current selection level.
DllExport void DeleteVertSet | ( | BitArray | set | ) |
Deletes the vertices as specified by the BitArray.
set | Set of bits to indicate the vertices to delete. |
Deletes faces as specified by the BitArray.
set | Set of bits to indicate the faces to delete. |
isoVert | If non NULL then this method will be setup to flag vertices that were isolated by the face deletion. This set can then be passed to DeleteVertSet() to delete isolated vertices. |
DllExport BOOL DoesFaceExist | ( | DWORD | v0, |
DWORD | v1, | ||
DWORD | v2 | ||
) |
This method may be called to determine if an equivalent face already exists.
v0 | Index of the first vertex. |
v1 | Index of the second vertex. |
v2 | Index of the third vertex. |
DllExport BOOL RemoveDegenerateFaces | ( | ) |
Removes faces that have two or more equal indices.
DllExport BOOL RemoveIllegalFaces | ( | ) |
Removes faces that have indices that are out of range.
DllExport Point3 FaceNormal | ( | DWORD | fi, |
BOOL | nrmlize =
FALSE |
||
) |
This method returns the normal of the specified face.
If nrmlize is TRUE, it makes this normal unit length. Otherwise, it's the edge cross-product length, which is actually 2 times the area of the face.
fi | Specifies the face whose normal is returned. |
nrmlize | Use TRUE to make the normal unit length. |
DllExport Point3 FaceCenter | ( | DWORD | fi | ) |
This method returns the center of the specified face.
fi | Specifies the face whose center is returned. |
DllExport float AngleBetweenFaces | ( | DWORD | f0, |
DWORD | f1 | ||
) |
Returns the angle between two face surface normals in radians.
f0 | Index of the first face. |
f1 | Index of the second face. |
Computes and returns the barycentric coordinates of a point in the plane of a face relative to that face.
face | The index of the face to check. |
p | The input point. |
DllExport void DivideEdge | ( | DWORD | edge, |
float | prop = .5f , |
||
bool | visDiag1 = TRUE , |
||
bool | fixNeighbors =
TRUE , |
||
bool | visDiag2 =
TRUE |
||
) |
Divides the edge, creating a new point.
The face directly using this edge (face edge/3) is also divided in two, and other faces using the edge may optionally be split to use the split edges.
edge | The edge to divide. |
prop | The proportion along the edge to make the division. An edge can be expressed as ff*3+ee, where ff is a face using this edge and ee represents which pair of vertices the edge is between, faces[ff]->v[ee] and faces[ff]->v[(ee+1)3]. The new point is created at (1-prop) times the first vertex plus prop times the second. prop may vary from 0 to 1. prop=.5 gives the same result that DivideEdge (DWORD edge) would generate. |
visDiag1 | Indicates whether the "diagonal" used to split the primary face this edge is on (edge/3) is visible or not. |
fixNeighbors | Indicates whether other faces using this edge should also be split to use the two new edges, or if they should be left as they were. In a typical mesh, there is one other face using this edge, the face on the "other side" of the edge. If fixNeighbors is FALSE, the "other side" in this case would still use the original edge, while the face on this side would be split to use the two new edges. This would create a "hole" in the mesh. |
visDiag2 | Indicates whether the "diagonals" used to split other faces using this edge are visible or not. This argument is not used if fixneighbors is FALSE. |
DllExport void DivideFace | ( | DWORD | face, |
DWORD | e1, | ||
DWORD | e2, | ||
float | prop1 = .5f , |
||
float | prop2 = .5f , |
||
bool | fixNeighbors =
TRUE , |
||
bool | split =
FALSE |
||
) |
Cuts a face into three faces, arranged as a quad and a triangle, by slicing from a point on one edge to a point on another.
face | The face to be divided. |
e1,e2 | The index of edges to be cut. For instance, if you wanted to cut from the edge between v[0] and v[1], to the edge between v[2] and v[0], you would use e1=0 and e2=2. |
prop1 | The proportion along edge e1 to start cutting. |
prop2 | The proportion along edge e2 to stop cutting. |
fixNeighbors | Indicates whether faces also using the cut edges should be split to use the new, subdivided edges. bool split=FALSE Indicates that the triangle and quad created by this action should use different vertices. If TRUE, the vertices created by the cut are duplicated, with one set being used for faces on one side and the other set being used by faces on the other side. |
DllExport void TurnEdge | ( | DWORD | edge, |
DWORD * | otherEdge =
NULL |
||
) |
Turns an edge.
The quadrilateral formed by the triangles on either side of this edge essentially has its diagonal switched.
edge | The edge to be turned. |
otherEdge | If non-NULL, this should point to a variable in which the index of the "other side" of this edge should be stored. In essence, the two sides of an edge used by two faces, f1 and f2, are stored in two different locations, f1*3+e1 and f2*3+e2, where e1, e2 are 0, 1, or 2. This argument is provided so you have easy access to the other side of the edge, if desired, to make easy selection or visibility changes to the edge or other changes to the faces on both sides. |
DllExport void FaceCenterTessellate | ( | BOOL | ignoreSel = FALSE , |
MeshOpProgress * | mop = NULL |
||
) |
Tessellates the mesh (or only the selected faces) using the face/center method.
This means each face is subdivided by lines from a new vertex at the center to the original vertices.
ignoreSel | If TRUE the entire mesh is tesselated; otherwise only the selected faces. |
DllExport void EdgeTessellate | ( | float | tens, |
BOOL | ignoreSel = FALSE , |
||
MeshOpProgress * | mop = NULL |
||
) |
Edge tessellates the mesh using the specified tension parameter.
This method can operate on the entire mesh or only the selection set. Edge tessellation means that faces are internally subdivided, with additional faces generated from a new vertex in the middle of each face edge.
tens | The tension setting. This value can range from -100.0 to 100.0. This value matches the parameter in the Editable Mesh user interface when tessellating faces. |
ignoreSel | If TRUE the entire mesh is tesselated; otherwise only the selected faces. |
DllExport void ExtrudeFaces | ( | BOOL | doFace = TRUE |
) |
Extrudes the selected faces.
Note that this is just a topological change. The new extruded faces do not change position but are left on top of the original faces.
doFace | If TRUE the faces are extruded. If FALSE then the selected edges are extruded. |
DllExport void IndentSelFaces | ( | float | amount | ) |
Indents the selected faces, in a manner consistent with the outlining used in Bevel.
amount | The amount to indent. |
DllExport void BreakVerts | ( | BitArray | set | ) |
Splits the vertices specified in the BitArray so that they are only used by a single face.
set | This array of bits, one per vertex in the mesh. If the bit is set, the corresponding vertex in the mesh is copied as required so it is only used by a single face. If the bit is not set the vertex is ignored. |
DllExport BitArray GetIsoVerts | ( | ) |
This method returns a BitArray (of size numVerts), where isolated verts are selected.
DllExport void DeleteIsoVerts | ( | ) |
Deletes the vertices that aren't used by any faces.
DllExport void CloneFaces | ( | BitArray | fset | ) |
Creates a copy of the faces and verts used by those faces as specified by the BitArray passed.
If texture faces and vertex color faces are present they are cloned as well.
fset | There is one bit in this array for each face in the mesh. If the bit is set, the corresponding face in the mesh is cloned. If the bit is zero the face is not cloned. |
DllExport void PolyFromFace | ( | DWORD | f, |
BitArray & | set, | ||
float | thresh, | ||
BOOL | ignoreVisEdges, | ||
AdjFaceList * | af = NULL |
||
) |
Sets bits for all faces in the same polygon with face f.
Faces already selected in set will not be processed -- so if f is "set", nothing happens. The definition of a polygon is all faces sharing invisible edges with edge angles below "thresh".
f | Specifies which face to evaluate -- the zero based index into the faces array. |
set | Specifies which faces are not processed. One bit for each face with set bits not considered. |
thresh | The angle in radians which is the threshold for defining a polygon. A polygon is all faces sharing invisible edges with edge angles below this angle. |
ignoreVisEdges | If TRUE, the edge visibility is ignored but the threshhold is still relevant. |
af | This adjacent face list can be passed if there's one handy; otherwise a new one will be computed by the method. |
DllExport void ElementFromFace | ( | DWORD | f, |
BitArray & | set, | ||
AdjFaceList * | af = NULL |
||
) |
This method sets bits for all faces in the same "element", or connected component, with face f.
Faces already selected in set will be considered "walls" for this processing and will not be evaluated.
f | Specifies which face to evaluate -- the zero based index into the faces array. |
set | Specifies which faces are considered as barriers to the element and are not processed. One bit for each face with set bits not considered. |
af | This adjacent face list can be passed if there's one handy; otherwise a new one will be computed by the method. |
When faces are deleted in Edit or Editable Mesh, we often want to be able to delete the verts that are isolated by this action.
This method generates the list of verts that are used only by the specified set of faces.
DllExport void FindOpenEdges | ( | BitArray & | edges | ) |
DllExport void FindVertexAngles | ( | float * | vang, |
BitArray * | set = NULL |
||
) |
This method calculates, for each vertex, the sum of the angles of this vertex's corner in each face it's on.
So for instance, a point lying in the middle of a grid would always have vertex angle 2*PI, whereas a corner of a box would only have 3*PI/2.
vang | This should be a pointer to an array of size numVerts. The vertex angle for each vertex is put in this array (in radians). |
set | If non-NULL, this points to a BitArray describing which vertices to find angles of. If only some bits are set, some computation time is saved. If NULL, all vertices' angles are found. |
void SetRenderData | ( | MeshRenderData * | p | ) | [inline] |
Sets the mesh render data hung off this Mesh.
This method and GetRenderData() allow the renderer to 'hang' data on a mesh. This data can be anything the renderer wants. The data will automatically be deleted when the mesh is deleted via the DeleteThis() method.
p |
{renderData = p; }
MeshRenderData* GetRenderData | ( | ) | [inline] |
Returns the mesh render data hung off this Mesh.
See Class MeshRenderData. This method and SetRenderData() allow the renderer to 'hang' data on a mesh. This data can be anything the renderer wants. The data will automatically be deleted when the mesh is deleted via DeleteThis() .
{ return renderData; }
DllExport void ClearSpecifiedNormals | ( | ) |
DllExport MeshNormalSpec* GetSpecifiedNormals | ( | ) |
DllExport void SpecifyNormals | ( | ) |
DllExport void CopyBasics | ( | const Mesh & | from | ) |
DllExport BaseInterface* GetInterface | ( | Interface_ID | id | ) | [virtual] |
Reimplemented from BaseInterfaceServer.
DllExport bool isFaceCacheInvalid | ( | int | faceIndex | ) |
The function first checks if the whole mesh or the face have been flagged as cache invalid (MESH_CACHEINVALID).
If none of these is true, it then cycles through the face's vertices and returns true as soon as it finds a vertex flagged with MESH_CACHEINVALID.
faceIndex | The index of the face for which you want to determine cache validity |
DllExport void InvalidateVertexCache | ( | int | vertex | ) |
The function flags the specified vertex with the MESH_CACHEINVALID flag, telling the rebuild functions that this vertex, the faces surrounding it and the other vertices of those faces need to have their normals recomputed.
It also sets normalsBuilt to 0 to trigger normals' rebuild. This function should be called when one to several vertices have been modified. If all or almost all vertices of the mesh have been invalidated, it's more efficient to call InvalidateGeomCache() instead.
vertex | The index of the vertex that needs to be invalidated. |
DllExport void SetStaticMesh | ( | bool | staticMesh | ) |
This will set the mesh or as static or not.
As static mesh has no animated channels. This allows use to certain display optimization since we know the mesh is not changing.
staticMesh | Whether the mesh is to tagged static or not. |
DllExport void ReduceDisplayCaches | ( | ) |
This will force all the derived data used to display the mesh to be deleted.
This data can be things like the gfx normals, the direct x mesh cache, tri stripping data etc.
DllExport bool NeedGWCacheRebuilt | ( | GraphicsWindow * | gw, |
Material * | ma, | ||
int | numMat | ||
) |
This returns whether the Graphics Cache for this object needs to be rebuilt.
gw | the active graphics window |
ma | the material aray assigned to the mesh |
numMat | the number of materials in the material array |
DllExport void BuildGWCache | ( | GraphicsWindow * | gw, |
Material * | ma, | ||
int | numMat, | ||
BOOL | threaded | ||
) |
This builds the graphics window cached mesh.
gw | the active graphics window |
ma | the material aray assigned to the mesh |
numMat | the number of materials in the material array |
threaded | whether when building the cache it can use additional threads.
This is needed since the system may be creating many meshes at the
same time |
friend class Face [friend] |
friend class MeshAccess [friend] |
friend class HardwareMesh
[friend] |
friend class MaxGraphics::IMeshInternal
[friend] |
void gfxCleanup | ( | void * | data | ) | [friend] |
int numVerts |
Number of vertices.
int numFaces |
Number of faces.
Number of faces.
Array of vertex coordinates.
int numTVerts |
Number of texture vertices.
The array of texture vertices.
This stores the UVW coordinates. For a 2D mapping only two of them are used, i.e. UV, VW, or WU. This just provides greater flexibility so the user can choose to use UV, VW, or WU. Note: typedef Point3 UVVert;
The array of texture faces.
There needs to be one TVFace for every face, but there can be three indices into the UVVert array that are any UVs. Each face of the object can have its own mapping.
int numCVerts |
Number of color vertices.
Array of color vertices.
Array of color per vertex faces.
int curVCChan |
Storage for the current mapping channel to use for vertex colors (default = 0).
Points to storage for a possible external color array (default = NULL).
This can be either an external array or one of the mapping channels. See the method Mesh::setVCDisplayData();
possible external face array (default = NULL)
When 3ds Max is rendering the color values come from this variable.
This array defaults to the internal vertCol but can be set to an external array, or a map channel. See the method Mesh::setVCDisplayData();
When 3ds Max is rendering the vertex color lookup comes from this structure.
This defaults to the vcFace data but if a mapping channel is used for color lookup, its TVFace structure is used.
int numMaps |
The number of maps supported by the mesh.
By default this is 2 but may be changed with the multiple map functions in this class.
When the number of mapping channels is set to a value greater than 1 then an instance of this class is allocated for each channel up to numMaps.
An instance maintains the mapping information for a single channel.
This bit array indicates if a particular vertex data channel is supported in this mesh.
If the bit is set the channel is supported.
MtlID mtlIndex |
object material
Indicates the selected vertices.
There is one bit for each vertex. Bits that are 1 indicate the vertex is selected.
Indicates the selected faces.
There is one bit for each face. Bits that are 1 indicate the face is selected.
Indicates the selected edges.
There is one bit for each edge of each face. Bits that are 1 indicate the edge is selected. The edge is identified by 3*faceIndex + edgeIndex.
Hidden flags for vertices.
DWORD dispFlags |
Display attribute flags.
They control various aspect of the Mesh objects display and may be one or more of the following values:
DWORD selLevel |
Selection level flags.
This is the current level of selection. When all the bits are 0, the object is at object level selection. The selection level bits are:
int normalsBuilt |
Nonzero if normals have been built for the current mesh; 0 otherwise.
Points to the render data used by the renderer.
depends on topo
indirection array for fast normal lookup
int normalCount |
total number of normals
flattened list of normals pointers back in the rverts data.
We need to get rid of this or something this is big memory eater
int numTexCoords[GFX_MAX_TEXTURES] |
Derived arrays to contain generated texture coordinates.
Derived arrays to contain generated texture coordinates.
Derived table of TriStrips, depends on topology.
long* vFlags |
Holds flags specific to the corresponding vertex in the verts array.