added everything
This commit is contained in:
202
lib/maxsdk70/include/polyobj.h
Executable file
202
lib/maxsdk70/include/polyobj.h
Executable file
@@ -0,0 +1,202 @@
|
||||
/**********************************************************************
|
||||
*<
|
||||
FILE: polyobj.h
|
||||
|
||||
DESCRIPTION: Defines Polygon Mesh Object
|
||||
|
||||
CREATED BY: Steve Anderson
|
||||
|
||||
HISTORY: created June 1998
|
||||
|
||||
*> Copyright (c) 1998, All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __POLYOBJ__
|
||||
|
||||
#define __POLYOBJ__
|
||||
|
||||
#include "meshlib.h"
|
||||
#include "mnmath.h"
|
||||
#include "snap.h"
|
||||
|
||||
#ifdef POLY_LIB_EXPORTING
|
||||
#define PolyLibExport __declspec( dllexport )
|
||||
#else
|
||||
#define PolyLibExport __declspec( dllimport )
|
||||
#endif
|
||||
|
||||
#define POLY_MULTI_PROCESSING TRUE
|
||||
|
||||
extern PolyLibExport Class_ID polyObjectClassID;
|
||||
|
||||
class PolyObject: public GeomObject {
|
||||
private:
|
||||
// Displacement approximation stuff:
|
||||
TessApprox mDispApprox;
|
||||
bool mSubDivideDisplacement;
|
||||
bool mDisableDisplacement;
|
||||
bool mSplitMesh;
|
||||
|
||||
protected:
|
||||
Interval geomValid;
|
||||
Interval topoValid;
|
||||
Interval texmapValid;
|
||||
Interval selectValid;
|
||||
Interval vcolorValid;
|
||||
DWORD validBits; // for the remaining constant channels
|
||||
PolyLibExport void CopyValidity(PolyObject *fromOb, ChannelMask channels);
|
||||
// inherited virtual methods for Reference-management
|
||||
PolyLibExport RefResult NotifyRefChanged(Interval changeInt, RefTargetHandle hTarget, PartID& partID, RefMessage message );
|
||||
public:
|
||||
MNMesh mm;
|
||||
|
||||
PolyLibExport PolyObject();
|
||||
PolyLibExport ~PolyObject();
|
||||
|
||||
// inherited virtual methods:
|
||||
|
||||
// From BaseObject
|
||||
PolyLibExport int HitTest(TimeValue t, INode* inode, int type, int crossing, int flags, IPoint2 *p, ViewExp *vpt);
|
||||
PolyLibExport int Display(TimeValue t, INode* inode, ViewExp *vpt, int flags);
|
||||
PolyLibExport void Snap(TimeValue t, INode* inode, SnapInfo *snap, IPoint2 *p, ViewExp *vpt);
|
||||
PolyLibExport CreateMouseCallBack* GetCreateMouseCallBack() { return NULL; }
|
||||
PolyLibExport RefTargetHandle Clone(RemapDir& remap = NoRemap());
|
||||
|
||||
// From Object
|
||||
PolyLibExport ObjectState Eval(TimeValue time);
|
||||
PolyLibExport Interval ObjectValidity(TimeValue t);
|
||||
PolyLibExport BOOL HasUVW();
|
||||
PolyLibExport BOOL HasUVW(int mapChannel);
|
||||
PolyLibExport Object *CollapseObject();
|
||||
// get and set the validity interval for the nth channel
|
||||
PolyLibExport Interval ChannelValidity (TimeValue t, int nchan);
|
||||
PolyLibExport Interval PartValidity (DWORD partIDs);
|
||||
PolyLibExport void SetChannelValidity (int i, Interval v);
|
||||
PolyLibExport void SetPartValidity (DWORD partIDs, Interval v);
|
||||
PolyLibExport void InvalidateChannels (ChannelMask channels);
|
||||
|
||||
// Convert-to-type validity
|
||||
PolyLibExport Interval ConvertValidity(TimeValue t);
|
||||
|
||||
// Deformable object procs
|
||||
int IsDeformable() { return 1; }
|
||||
PolyLibExport int NumPoints();
|
||||
PolyLibExport Point3 GetPoint(int i);
|
||||
PolyLibExport void SetPoint(int i, const Point3& p);
|
||||
PolyLibExport void PointsWereChanged();
|
||||
PolyLibExport void Deform (Deformer *defProc, int useSel=0);
|
||||
|
||||
// The following members have been added
|
||||
// in 3ds max 4.2. If your plugin utilizes this new
|
||||
// mechanism, be sure that your clients are aware that they
|
||||
// must run your plugin with 3ds max version 4.2 or higher.
|
||||
BOOL IsPointSelected (int i) {
|
||||
if ((i<0) || (i>=mm.numv)) return false;
|
||||
return mm.v[i].FlagMatch (MN_DEAD|MN_SEL, MN_SEL);
|
||||
}
|
||||
float PointSelection (int i) {
|
||||
if ((i<0) || (i>=mm.numv)) return 0.0f;
|
||||
if (mm.v[i].GetFlag (MN_DEAD)) return 0.0f;
|
||||
if (mm.v[i].GetFlag (MN_SEL)) return 1.0f;
|
||||
float *vssel = mm.getVSelectionWeights();
|
||||
if (vssel) return vssel[i];
|
||||
else return 0.0f;
|
||||
}
|
||||
BOOL PolygonCount(TimeValue t, int& numFaces, int& numVerts) {
|
||||
numFaces = 0;
|
||||
numVerts = 0;
|
||||
for (int i=0; i<mm.numf; i++) if (!mm.f[i].GetFlag (MN_DEAD)) numFaces++;
|
||||
for (int i=0; i<mm.numv; i++) if (!mm.v[i].GetFlag (MN_DEAD)) numVerts++;
|
||||
return TRUE;
|
||||
}
|
||||
// End of 3ds max 4.2 Extension
|
||||
|
||||
// Mappable object procs
|
||||
int IsMappable() { return 1; }
|
||||
int NumMapChannels () { return MAX_MESHMAPS; }
|
||||
int NumMapsUsed () { return mm.numm; }
|
||||
PolyLibExport void ApplyUVWMap(int type, float utile, float vtile, float wtile,
|
||||
int uflip, int vflip, int wflip, int cap,const Matrix3 &tm,int channel=1);
|
||||
|
||||
PolyLibExport void GetDeformBBox(TimeValue t, Box3& box, Matrix3 *tm=NULL,BOOL useSel=FALSE );
|
||||
|
||||
PolyLibExport int CanConvertToType(Class_ID obtype);
|
||||
PolyLibExport Object* ConvertToType(TimeValue t, Class_ID obtype);
|
||||
PolyLibExport void FreeChannels(ChannelMask chan);
|
||||
PolyLibExport Object *MakeShallowCopy(ChannelMask channels);
|
||||
PolyLibExport void ShallowCopy(Object* fromOb, ChannelMask channels);
|
||||
PolyLibExport void NewAndCopyChannels(ChannelMask channels);
|
||||
|
||||
PolyLibExport DWORD GetSubselState();
|
||||
PolyLibExport void SetSubSelState(DWORD s);
|
||||
|
||||
PolyLibExport BOOL CheckObjectIntegrity();
|
||||
|
||||
// From GeomObject
|
||||
PolyLibExport int IntersectRay(TimeValue t, Ray& ray, float& at, Point3& norm);
|
||||
PolyLibExport ObjectHandle CreateTriObjRep(TimeValue t); // obselete, do not use!!! (Returns NULL.)
|
||||
PolyLibExport void GetWorldBoundBox(TimeValue t, INode *inode, ViewExp* vpt, Box3& box );
|
||||
PolyLibExport void GetLocalBoundBox(TimeValue t, INode *inode, ViewExp* vpt, Box3& box );
|
||||
PolyLibExport Mesh* GetRenderMesh(TimeValue t, INode *inode, View &view, BOOL& needDelete);
|
||||
|
||||
PolyLibExport void TopologyChanged();
|
||||
|
||||
MNMesh& GetMesh() { return mm; }
|
||||
|
||||
// Animatable methods
|
||||
|
||||
void DeleteThis() { delete this; }
|
||||
void FreeCaches() {mm.InvalidateGeomCache(); }
|
||||
Class_ID ClassID() { return Class_ID(POLYOBJ_CLASS_ID,0); }
|
||||
void GetClassName(TSTR& s) { s = TSTR(_T("PolyMeshObject")); }
|
||||
void NotifyMe(Animatable *subAnim, int message) {}
|
||||
int IsKeyable() { return 0;}
|
||||
int Update(TimeValue t) { return 0; }
|
||||
//BOOL BypassTreeView() { return TRUE; }
|
||||
// This is the name that will appear in the history browser.
|
||||
TCHAR *GetObjectName() { return _T("PolyMesh"); }
|
||||
PolyLibExport void RescaleWorldUnits(float f);
|
||||
|
||||
// IO
|
||||
PolyLibExport IOResult Save(ISave *isave);
|
||||
PolyLibExport IOResult Load(ILoad *iload);
|
||||
|
||||
// Displacement mapping parameter access.
|
||||
// (PolyObjects don't do displacement mapping directly, but they
|
||||
// pass their settings on to TriObjects.)
|
||||
PolyLibExport BOOL CanDoDisplacementMapping();
|
||||
PolyLibExport void SetDisplacementApproxToPreset(int preset);
|
||||
|
||||
// Accessor methods:
|
||||
void SetDisplacementDisable (bool disable) { mDisableDisplacement = disable; }
|
||||
void SetDisplacementParameters (TessApprox & params) { mDispApprox = params; }
|
||||
void SetDisplacementSplit (bool split) { mSplitMesh = split; }
|
||||
void SetDisplacement (bool displace) { mSubDivideDisplacement = displace; }
|
||||
|
||||
bool GetDisplacementDisable () const { return mDisableDisplacement; }
|
||||
TessApprox GetDisplacementParameters () const { return mDispApprox; }
|
||||
bool GetDisplacementSplit () const { return mSplitMesh; }
|
||||
bool GetDisplacement () const { return mSubDivideDisplacement; }
|
||||
|
||||
TessApprox &DispParams() { return mDispApprox; }
|
||||
};
|
||||
|
||||
// Regular PolyObject
|
||||
PolyLibExport ClassDesc* GetPolyObjDescriptor();
|
||||
|
||||
// A new descriptor can be registered to replace the default
|
||||
// tri object descriptor. This new descriptor will then
|
||||
// be used to create tri objects.
|
||||
|
||||
PolyLibExport void RegisterEditPolyObjDesc(ClassDesc* desc);
|
||||
PolyLibExport ClassDesc* GetEditPolyObjDesc(); // Returns default of none have been registered
|
||||
|
||||
// Use this instead of new PolyObject. It will use the registered descriptor
|
||||
// if one is registered, otherwise you'll get a default poly-object.
|
||||
PolyLibExport PolyObject *CreateEditablePolyObject();
|
||||
|
||||
// Inter-object conversions:
|
||||
PolyLibExport void ConvertPolyToPatch (MNMesh & from, PatchMesh & to, DWORD flags=0);
|
||||
PolyLibExport void ConvertPatchToPoly (PatchMesh & from, MNMesh & to, DWORD flags=0);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user