added everything
This commit is contained in:
231
lib/maxsdk70/include/ObjectWrapper.h
Executable file
231
lib/maxsdk70/include/ObjectWrapper.h
Executable file
@@ -0,0 +1,231 @@
|
||||
/**********************************************************************
|
||||
*<
|
||||
FILE: ObjectWrapper.h
|
||||
DESCRIPTION: Geometry object abstraction layer
|
||||
CREATED BY: Michaelson Britt
|
||||
HISTORY: Created Friday, April 18, 2003
|
||||
|
||||
*> Copyright (c) 2003, All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
#ifndef __OBJECTWRAPPER__H
|
||||
#define __OBJECTWRAPPER__H
|
||||
|
||||
#include "triobj.h"
|
||||
#include "polyobj.h"
|
||||
#include "meshadj.h"
|
||||
#include "patchobj.h"
|
||||
|
||||
class HitListWrapper;
|
||||
|
||||
typedef Tab<float> FloatTab;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// struct GenFace
|
||||
// Represents a "face" for any type of object
|
||||
|
||||
typedef struct GenFace_tag {
|
||||
unsigned short numVerts;
|
||||
DWORD* verts;
|
||||
} GenFace;
|
||||
|
||||
typedef struct GenEdge_tag {
|
||||
DWORD f[2];
|
||||
DWORD v[2];
|
||||
} GenEdge;
|
||||
|
||||
typedef struct GenSoftSelData_tag {
|
||||
BOOL useSoftSel; //whether soft selection is active
|
||||
BOOL useEdgeDist;
|
||||
int edgeIts;
|
||||
BOOL ignoreBack;
|
||||
float falloff, pinch, bubble;
|
||||
//float* weights; //the soft selection values
|
||||
CoreExport GenSoftSelData_tag(); //a struct with a constructor :)
|
||||
} GenSoftSelData;
|
||||
BOOL operator==(GenSoftSelData& a, GenSoftSelData& b);
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class ObjectWrapper
|
||||
|
||||
class ObjectWrapper {
|
||||
protected:
|
||||
TimeValue t;
|
||||
|
||||
//FIXME: change the objectWrapper to store both the mesh and the object
|
||||
union {
|
||||
Mesh* mesh;
|
||||
MNMesh* poly;
|
||||
PatchMesh* patch;
|
||||
};
|
||||
union {
|
||||
MeshTempData* meshTempData;
|
||||
MNTempData* polyTempData;
|
||||
};
|
||||
BOOL isCopy;
|
||||
|
||||
Point3* verts;
|
||||
GenFace* faces;
|
||||
GenEdge* edges;
|
||||
GeomObject* collapsedObj;
|
||||
|
||||
BitArray faceSel, vertSel;
|
||||
GenSoftSelData softSelData;
|
||||
|
||||
int invalidMask;
|
||||
|
||||
public:
|
||||
enum { empty=0, triObject, polyObject, patchObject } type;
|
||||
enum { noneEnable=0, triEnable=1, polyEnable=2, patchEnable=4, allEnable=0x7 };
|
||||
|
||||
CoreExport ObjectWrapper();
|
||||
CoreExport ~ObjectWrapper() {Release();}
|
||||
CoreExport void Zero();
|
||||
|
||||
// The 'enable' parameter will determine the valid object types for ObjectWrapper.
|
||||
// If the object is not valid (or not supported), it will be converted to the 'nativeType'
|
||||
CoreExport BOOL Init( TimeValue t, ObjectState& os, BOOL copy=FALSE, int enable=allEnable, int nativeType=polyObject );
|
||||
CoreExport void Release(); //frees the collapsed object, if any
|
||||
|
||||
CoreExport BOOL IsEmpty() {return type==empty;}
|
||||
|
||||
CoreExport int Type() {return type;}
|
||||
CoreExport Mesh* GetTriMesh() {return type==triObject? mesh:NULL;}
|
||||
CoreExport MNMesh* GetPolyMesh() {return type==polyObject? poly:NULL;}
|
||||
CoreExport PatchMesh* GetPatchMesh() {return type==patchObject? patch:NULL;}
|
||||
|
||||
enum { iv_none=0x000, iv_verts=0x001, iv_faces=0x002, iv_edges=0x004 };
|
||||
CoreExport void Invalidate( int iInvalid );
|
||||
|
||||
CoreExport void InvalidateGeomCache();
|
||||
|
||||
//-- Geom vert support
|
||||
CoreExport int NumVerts(); //geom verts
|
||||
CoreExport int NumFaces(); //geom faces
|
||||
CoreExport int NumEdges(); //geom edges
|
||||
|
||||
CoreExport Point3* Verts(); //geom verts
|
||||
CoreExport GenFace* Faces(); //geom faces
|
||||
CoreExport GenEdge* Edges(); //geom edges
|
||||
|
||||
CoreExport Point3* GetVert( int index );
|
||||
CoreExport void SetVert( int index, Point3 &p );
|
||||
CoreExport void SetNumVerts( int num );
|
||||
|
||||
CoreExport GenFace GetFace( int index );
|
||||
CoreExport void SetFace( int index, GenFace &face );
|
||||
CoreExport void SetNumFaces( int num );
|
||||
|
||||
CoreExport GenEdge GetEdge( int index );
|
||||
CoreExport int NumFaceEdges( int faceIndex );
|
||||
CoreExport int GetFaceEdgeIndex( int faceIndex, int edgeIndex );
|
||||
|
||||
CoreExport void GetVertexSpace( int index, Matrix3 & tm );
|
||||
CoreExport Point3* GetVertexNormal( int index );
|
||||
|
||||
//-- Map channel support
|
||||
CoreExport BOOL GetChannelSupport( int mapChannel );
|
||||
CoreExport void SetChannelSupport( int mapChannel, BOOL b );
|
||||
|
||||
CoreExport int NumMapVerts( int channel );
|
||||
CoreExport void SetNumMapVerts( int channel, int num );
|
||||
|
||||
CoreExport Point3* GetMapVert( int channel, int index );
|
||||
CoreExport void SetMapVert( int channel, int index, Point3 &p );
|
||||
|
||||
CoreExport GenFace GetMapFace( int channel, int index );
|
||||
CoreExport void SetMapFace( int channel, int index, GenFace &face );
|
||||
|
||||
//-- Material ID support
|
||||
CoreExport MtlID GetMtlID( int index ); // face index
|
||||
CoreExport void SetMtlID( int index, MtlID mtlID ); // face index
|
||||
|
||||
//-- Smoothing Group support
|
||||
CoreExport DWORD GetSmoothingGroup( int index ); // face index
|
||||
CoreExport void SetSmoothingGroup( int index, DWORD smGrp ); // face index
|
||||
|
||||
//-- Sub-object selection support
|
||||
enum {SEL_OBJECT, SEL_VERT, SEL_FACE, SEL_ELEM}; //selection enum values
|
||||
CoreExport int GetSelLevel(); //returns a selection enum value
|
||||
CoreExport void SetSelLevel(int selLevel); //selLevel is a selection enum value
|
||||
|
||||
CoreExport BitArray& GetVertSel();
|
||||
CoreExport void SetVertSel( BitArray& );
|
||||
|
||||
CoreExport BitArray& GetFaceSel();
|
||||
CoreExport void SetFaceSel( BitArray& sel );
|
||||
|
||||
CoreExport BitArray& GetElemSel();
|
||||
CoreExport void SetElemSel( BitArray& sel );
|
||||
|
||||
CoreExport BitArray* GetSel( int selLevel ); //gets the selection of the given type
|
||||
CoreExport void SetSel( int selLevel, BitArray& sel ); //sets the selection of the given type
|
||||
|
||||
CoreExport void FaceToElemSel( BitArray& elemSel, BitArray& faceSel ); //convert face to elem selection
|
||||
|
||||
//-- Selection methods
|
||||
CoreExport void GrowSelection( int selLevel, BitArray& newSel );
|
||||
CoreExport void ShrinkSelection( int selLevel, BitArray& newSel );
|
||||
|
||||
//-- Soft selection support
|
||||
CoreExport void GetSoftSel( GenSoftSelData& softSelData );
|
||||
CoreExport void SetSoftSel( GenSoftSelData& softSelData );
|
||||
CoreExport void UpdateSoftSel();
|
||||
|
||||
CoreExport float* SoftSelWeights();
|
||||
CoreExport Point3 SoftSelColor( float f );
|
||||
|
||||
//-- Hit testing and ray intersection
|
||||
enum { SUBHIT_IGNOREBACKFACING=(1<<5) }; //other SUBHIT_... values defined in Mesh.h are also supported
|
||||
|
||||
CoreExport BOOL SubObjectHitTest(
|
||||
int selLevel, GraphicsWindow* gw, Material* ma, HitRegion *hr,
|
||||
DWORD flags, HitListWrapper& hitList, int numMat=1, Matrix3 *mat = NULL );
|
||||
|
||||
CoreExport int IntersectRay( Ray& ray, float& intersectAt, Point3& norm, int& fi, FloatTab& bary );
|
||||
|
||||
CoreExport void Render(GraphicsWindow *gw, Material *ma, RECT *rp, int compFlags, int numMat = 1);
|
||||
|
||||
//-- Enum conversion
|
||||
CoreExport int SelLevel( int selLevel ); //generic enum to object-specific enum //FIXME: should be private?
|
||||
CoreExport int HitLevel( int selLevel ); //generic enum to object-specific hit level enum //FIXME: should be private?
|
||||
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class HitListWrapper
|
||||
|
||||
class HitListWrapper {
|
||||
protected:
|
||||
friend class ObjectWrapper;
|
||||
union {
|
||||
SubObjHitList* meshHitList;
|
||||
SubObjHitList* polyHitList;
|
||||
SubPatchHitList* patchHitList;
|
||||
};
|
||||
union {
|
||||
MeshSubHitRec* curMeshHitRec;
|
||||
MeshSubHitRec* curPolyHitRec;
|
||||
PatchSubHitRec* curPatchHitRec;
|
||||
};
|
||||
|
||||
public:
|
||||
enum { empty=0, triObject, polyObject, patchObject } type;
|
||||
|
||||
CoreExport HitListWrapper() {type=empty;}
|
||||
CoreExport ~HitListWrapper();
|
||||
|
||||
CoreExport bool GoToFirst();
|
||||
CoreExport bool GoToNext();
|
||||
CoreExport DWORD GetDist();
|
||||
CoreExport int GetIndex();
|
||||
|
||||
CoreExport void Init( int type );
|
||||
CoreExport void Release();
|
||||
};
|
||||
|
||||
|
||||
#endif //__OBJECTWRAPPER__H
|
||||
Reference in New Issue
Block a user