📄 animtbl.h
字号:
// edit the track or parameters
virtual void EditTrack() { assert(0); }
// Get the number of keys and the time of the ith key.
virtual int NumKeys() {return NOT_KEYFRAMEABLE;}
virtual TimeValue GetKeyTime(int index) {return 0;}
virtual int GetKeyIndex(TimeValue t) {return -1;}
virtual BOOL GetNextKeyTime(TimeValue t,DWORD flags,TimeValue &nt) {return FALSE;}
virtual void CopyKeysFromTime(TimeValue src,TimeValue dst,DWORD flags) {}
virtual void DeleteKeyAtTime(TimeValue t) {}
virtual BOOL IsKeyAtTime(TimeValue t,DWORD flags) {return FALSE;}
// The value returned from these two methods should be the number of keys skipped because their times were before
// range.Start(). So sel[i] is the selection state for the offset+ith key.
virtual int GetKeyTimes(Tab<TimeValue> ×,Interval range,DWORD flags) {return 0;}
virtual int GetKeySelState(BitArray &sel,Interval range,DWORD flags) {return 0;}
// TreeView Methods
/////////////////////////////////////////////////////////////
// the 'tv' parameter specifies which track view.
// each track view uses one bit, there can be up to MAX_TRACK_VIEWS
CoreExport void OpenTreeEntry(int type, DWORD tv);
CoreExport void CloseTreeEntry(int type, DWORD tv);
CoreExport int IsTreeEntryOpen(int type, DWORD tv);
// Track view selected state
CoreExport BOOL GetSelInTrackView(DWORD tv);
CoreExport void SetSelInTrackView(DWORD tv, BOOL sel);
// Track view selection sets: 'which' should be >=0 and <MAX_TRACKVIEW_SELSETS
CoreExport BOOL InTrackViewSelSet(int which);
CoreExport void SetTrackViewSelSet(int which, BOOL inOut);
// The tracks time range:
CoreExport virtual Interval GetTimeRange(DWORD flags);
virtual void EditTimeRange(Interval range,DWORD flags) {};
// Operations to a selected block of time
virtual void DeleteTime(Interval iv, DWORD flags) {}
virtual void ReverseTime(Interval iv, DWORD flags) {}
virtual void ScaleTime(Interval iv, float s) {}
virtual void InsertTime(TimeValue ins, TimeValue amount) {}
// If an anim supports the above time operations it should return TRUE from this method.
// Returning TRUE enables time selection on the track view for the track.
virtual BOOL SupportTimeOperations() {return FALSE;}
// Operations to keys
CoreExport virtual void MapKeys(TimeMap *map, DWORD flags);
virtual void DeleteKeys(DWORD flags) {}
virtual void DeleteKeyByIndex(int index) {}
virtual void SelectKeys(TrackHitTab& sel, DWORD flags) {}
virtual void SelectSubKeys(int subNum,TrackHitTab& sel, DWORD flags) {} // this is called on the client when the client takes over control of an anims fcurve
virtual void SelectSubCurve(int subNum,BOOL sel) {}
virtual void SelectKeyByIndex(int i,BOOL sel) {}
virtual BOOL IsKeySelected(int i) {return FALSE;}
virtual void FlagKey(TrackHitRecord hit) {}
virtual int GetFlagKeyIndex() {return -1;}
virtual int NumSelKeys() {return 0;}
virtual void CloneSelectedKeys(BOOL offset=FALSE) {} // When offset is TRUE, set the new key time to be centered between the original key and the next key
virtual void AddNewKey(TimeValue t,DWORD flags) {}
virtual void MoveKeys(ParamDimensionBase *dim,float delta,DWORD flags) {} // move selected keys vertically in the function curve editor
virtual void ScaleKeyValues(ParamDimensionBase *dim,float origin,float scale,DWORD flags) {}
virtual void SelectCurve(BOOL sel) {}
virtual BOOL IsCurveSelected() {return FALSE;}
virtual BOOL IsSubCurveSelected(int subNum) {return FALSE;}
virtual int GetSelKeyCoords(TimeValue &t, float &val,DWORD flags) {return KEYS_NONESELECTED;}
virtual void SetSelKeyCoords(TimeValue t, float val,DWORD flags) {}
virtual int SetSelKeyCoordsExpr(ParamDimension *dim,TCHAR *timeExpr, TCHAR *valExpr, DWORD flags) {return KEYCOORDS_EXPR_UNSUPPORTED;}
virtual void AdjustTangents(
TrackHitRecord hit,
ParamDimensionBase *dim,
Rect& rcGraph,
float tzoom,
int tscroll,
float vzoom,
int vscroll,
int dx,int dy,
DWORD flags) {};
// Does this animatable actually have animation?
// Default implementation returns TRUE if a child anim has animation.
CoreExport virtual BOOL IsAnimated();
// Clipboard methods:
virtual BOOL CanCopyTrack(Interval iv, DWORD flags) {return FALSE;}
virtual BOOL CanPasteTrack(TrackClipObject *cobj,Interval iv, DWORD flags) {return FALSE;}
virtual TrackClipObject *CopyTrack(Interval iv, DWORD flags) {return NULL;}
virtual void PasteTrack(TrackClipObject *cobj,Interval iv, DWORD flags) {}
// Plug-ins can implement copying and pasting for cases where their subanims
// don't implement it. These aren't called on the client unless the sub-anim
// doesn't implement the above versions.
virtual BOOL CanCopySubTrack(int subNum,Interval iv, DWORD flags) {return FALSE;}
virtual BOOL CanPasteSubTrack(int subNum,TrackClipObject *cobj,Interval iv, DWORD flags) {return FALSE;}
virtual TrackClipObject *CopySubTrack(int subNum,Interval iv, DWORD flags) {return NULL;}
virtual void PasteSubTrack(int subNum,TrackClipObject *cobj,Interval iv, DWORD flags) {}
// Drawing and hit testing tracks
virtual int GetTrackVSpace( int lineHeight ) { return 1; }
virtual int HitTestTrack(
TrackHitTab& hits,
Rect& rcHit,
Rect& rcTrack,
float zoom,
int scroll,
DWORD flags ) { return TRACK_DORANGE; }
virtual int PaintTrack(
ParamDimensionBase *dim,
HDC hdc,
Rect& rcTrack,
Rect& rcPaint,
float zoom,
int scroll,
DWORD flags ) { return TRACK_DORANGE; }
virtual int PaintSubTrack(
int subNum,
ParamDimensionBase *dim,
HDC hdc,
Rect& rcTrack,
Rect& rcPaint,
float zoom,
int scroll,
DWORD flags) {return TRACK_DORANGE;}
// Drawing and hit testing function curves
virtual int PaintFCurves(
ParamDimensionBase *dim,
HDC hdc,
Rect& rcGraph,
Rect& rcPaint,
float tzoom,
int tscroll,
float vzoom,
int vscroll,
DWORD flags ) { return 0; }
virtual int HitTestFCurves(
ParamDimensionBase *dim,
TrackHitTab& hits,
Rect& rcHit,
Rect& rcGraph,
float tzoom,
int tscroll,
float vzoom,
int vscroll,
DWORD flags ) { return HITCURVE_NONE; }
// Versions that allow clients to paint and hit test their subanims curves
virtual int PaintSubFCurves(
int subNum,
ParamDimensionBase *dim,
HDC hdc,
Rect& rcGraph,
Rect& rcPaint,
float tzoom,
int tscroll,
float vzoom,
int vscroll,
DWORD flags ) { return 0; }
virtual int HitTestSubFCurves(
int subNum,
ParamDimensionBase *dim,
TrackHitTab& hits,
Rect& rcHit,
Rect& rcGraph,
float tzoom,
int tscroll,
float vzoom,
int vscroll,
DWORD flags ) { return HITCURVE_NONE; }
// Edit key info (or whatever) for selected keys.
// hParent is the parent window that should be used to create any dialogs.
// This function should not return until the user has completed editng at which
// time any windows that were created should be destroyed. Unlike
// BeginEditParams/EndEditParams this interface is modal.
virtual void EditTrackParams(
TimeValue t, // The horizontal position of where the user right clicked.
ParamDimensionBase *dim,
TCHAR *pname, // The name of the parameter as given by the client
HWND hParent,
IObjParam *ip,
DWORD flags) {}
// Returns a value indicating how track parameters are
// are invoked. See description above by
// TRACKPARAMS_NONE, TRACKPARAMS_KEY, TRACKPARAMS_WHOLE
virtual int TrackParamsType() {return TRACKPARAMS_NONE;}
// Calculate the largest and smallest values.
// If this is processed, return non-zero.
virtual int GetFCurveExtents(
ParamDimensionBase *dim,
float &min, float &max, DWORD flags) {return 0;}
virtual int GetSubFCurveExtents(
int subNum,
ParamDimensionBase *dim,
float &min, float &max, DWORD flags) {return 0;}
// Describes the type of dimension of the ith sub-anim
virtual ParamDimension* GetParamDimension(int i) {return defaultDim;}
// This is not used anymore.
virtual LRESULT CALLBACK TrackViewWinProc( HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam ) { return 0;}
// Called when the user clicks on the icon of a subAnim in the track view.
virtual BOOL SelectSubAnim(int subNum) {return FALSE;}
// Add/delete note tracks
CoreExport void AddNoteTrack(NoteTrack *note);
CoreExport void DeleteNoteTrack(NoteTrack *note,BOOL delNote=TRUE); // If delNote is FALSE the note track will be removed from the anim but not deleted.
CoreExport BOOL HasNoteTracks();
CoreExport int NumNoteTracks();
CoreExport NoteTrack *GetNoteTrack(int i);
// Enumerate auxiliary files -- see ref.h for default implementation
virtual void EnumAuxFiles(NameEnumCallback& nameEnum, DWORD flags = FILE_ENUM_ALL) {}
// Free all bitmaps in the Animatable: don't recurse
virtual void FreeAllBitmaps() {}
// A master controller should implement this method to give the
// MAX a list of nodes that are part of the system.
virtual void GetSystemNodes(INodeTab &nodes) {}
// If an object is a sub-class of a particular class, it will have a
// different ClassID() because it is a different class. This method
// allows an object to indicate that it is a sub-class of a particluar
// class and therefore can be treated as one.
// For example, a class could be derived from TriObject. This derived
// class would have a different ClassID() then TriObject's class ID
// however it still can be treated (cast) as a TriObject because it
// is derived from TriObject.
// Note the default implelementation: a class is considered to also
// be a subclass of itself.
virtual BOOL IsSubClassOf(Class_ID classID) {return classID==ClassID();}
// Access app data chunks
CoreExport void AddAppDataChunk(Class_ID cid, SClass_ID sid, DWORD sbid, DWORD len, void *d);
CoreExport AppDataChunk *GetAppDataChunk(Class_ID cid, SClass_ID sid, DWORD sbid);
CoreExport BOOL RemoveAppDataChunk(Class_ID cid, SClass_ID sid, DWORD sbid);
CoreExport void ClearAllAppData();
CoreExport virtual void MouseCycleCompleted(TimeValue t);
CoreExport virtual void MouseCycleStarted(TimeValue t);
// JBW: direct ParamBlock2 access added
virtual int NumParamBlocks() { return 0; } // return number of ParamBlocks in this instance
virtual IParamBlock2* GetParamBlock(int i) { return NULL; } // return i'th ParamBlock
virtual IParamBlock2* GetParamBlockByID(short id) { return NULL; } // return ParamBlock given ID
// Save and load functions for schematic view data.
// For classes derived from ReferenceMaker, there is
// no need to call these. However, IF you have stuff
// derived from Animatable AND it appears in the
// schematic view AND you want to save schematic view
// properties for the object (node position, selection
// state, etc.) THEN you have to call these guys in
// your Save and Load functions...
CoreExport bool SvSaveData(ISave *isave, USHORT id);
CoreExport bool SvLoadData(ILoad *iLoad);
// Used internally by the schematic view. There should
// be no reason for plug-ins to ever call these...
CoreExport DWORD SvGetRefIndex();
CoreExport void SvSetRefIndex(DWORD i);
CoreExport bool SvDeleteRefIndex();
// Traverses the graph of objects in the MAX scene,
// adding desired objects to the schematic view.
// Developers can specialize this behaviour by overriding
// this method and adding whatever objects are interesting
// to the schematic view...
// Objects are added to the schematic view by calling
// IGraphObjectManager::AddAnimatable(...)
// Reference lines are added to the schematic view by
// calling IGraphObjectManager::AddReference(...)
// Implementers of SvTraverseAnimGraph(...) should
// call SvTraverseAnimGraph(...) recursively to
// process other objects in the scene.
CoreExport virtual SvGraphNodeReference SvTraverseAnimGraph(IGraphObjectManager *gom, Animatable *owner, int id, DWORD flags);
// A default graph traversal function which can be
// called from SvTraverseAnimGraph(...) to handle
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -