Class PBAccessor

3DS Max Plug-In SDK

Class PBAccessor

See Also: Structure ParamDef, List of ParamType2 Choices, Class ReferenceMaker, Structure PB2Value.

class PBAccessor : public InterfaceServer

Description:

This class is available in release 3.0 and later only.

Any parameter in a block can have an accessor callback object that has its Get() or Set() method called whenever the parameter is accessed. This may be used to provide access to dynamically-computed virtual parameters and sometimes to allow parameter-specific processing by the class as the parameter in the block is modified (such as keeping object data members up-to-date).

The Get() and Set() methods are called at all times when a parameter is accessed, including parameters that are animated. The Get() method is called after the controller is accessed, so the current controller value is seen and can be optionally overridden in the Get() method. Note that the controller is accessed whenever the 3ds max time is changed (such as a frame slider move) and so the Get() method will be called each frame as this happens.

A pointer to an instance of this class is a data member of the ParamDef structure.

Methods:

public:

Prototype:

virtual void Get(PB2Value& v, ReferenceMaker* owner, ParamID id, int tabIndex, TimeValue t, Interval &valid);

Remarks:

This method is called when the specified owner object accesses (gets) the value v. This is called after the controller is accessed, so the current controller value is seen and can be optionally overridden in the this method. Note that the controller is accessed whenever the 3ds max time is changed (such as a slider move) and so this method will be called each frame as this happens.

Parameters:

PB2Value& v

The value being accessed.

ReferenceMaker* owner

Points to the owner of the parameter.

ParamID id

The permanent ID of the parameter.

int tabIndex

If the parameter is a Tab<> this is the zero based index of the parameter in the table.

TimeValue t

The current time the get is taking place.

Interval &valid

The validity interval for the value.

Default Implementation:

{}

Prototype:

virtual void Set(PB2Value& v, ReferenceMaker* owner, ParamID id, int tabIndex TimeValue t);

Remarks:

This method is called when the specified owner objects sets the value v. This is called just before calling SetValue() on the parameters controller, so it can take note of the value going in and change it if desired.

Parameters:

PB2Value& v

The value being set.

ReferenceMaker* owner

Points to the owner of the parameter.

ParamID id

The permanent ID of the parameter.

int tabIndex

If the parameter is a Tab<> this is the zero based index of the parameter in the table.

TimeValue t

The current time the set is taking place.

Default Implementation:

{}

Function:

virtual void TabChanged(tab_changes changeCode, Tab<PB2Value>* tab, ReferenceMaker* owner, ParamID id, int tabIndex, int count);

Remarks:

This method is available in release 4.0 and later only.

This method is called when a Tab<> parameter has a change made to its table structure.

Parameters:

tab_changes changeCode

Describes the change that has just occurred to the Tab<> parameter. One of the following enumerations:

enum tab_changes { tab_insert, tab_append, tab_delete, tab_ref_deleted, tab_setcount, tab_sort };

Tab<PB2Value>* tab

Points to the actual Tab<> in the pblock parameter.

ReferenceMaker* owner

Points to the owner of the parameter.

ParamID id

The permanent ID of the parameter.

int tabIndex

The start index of the change (for tab_insert, tab_append, tab_delete, tab_ref_deleted)

int count

The number of elements changed (for tab_insert, tab_append, tab_delete).

Prototype:

virtual BOOL KeyFrameAtTime(ReferenceMaker* owner, ParamID id, int tabIndex, TimeValue t);

Remarks:

Checks to see if a keyframe exists for the given parameter at the given time. Returns TRUE if a keyframe exists at the specified time; otherwise FALSE. For parameters not directly hosted in the parameter block that are internally animatable, this provides a keyframe query callback so that any ParamMap2 spinners associated with these 'virtual' parameters can show keyframe status for the underlying parameter. In these cases, developers should implement this method for the parameter usually asking the underlying parameter for its keyframe state.

Parameters:

ReferenceMaker* owner

Points to the owner of the parameter.

ParamID id

The permanent ID of the parameter.

int tabIndex

TimeValue t

The current time.

Default Implementation:

{ return FALSE; }

Prototype:

virtual TSTR GetLocalName(ReferenceMaker* owner, ParamID id, int tabIndex);

Remarks:

This allows a plug-in to provide a dynamically-created local name for a parameter or Tab<> parameter entry. If you specify the P_COMPUTED_NAME parameter flag, you also need to suppy a p_accessor PBAccessor instance pointer that has this method implemented.

Parameters:

ReferenceMaker* owner

Points to the owner of the parameter.

ParamID id

The permanent ID of the parameter.

int tabIndex

If the parameter is a Tab<> this is the zero based index of the parameter in the table.

Default Implementation:

{ return _T(""); }

Prototype:

virtual void DeleteThis();

Remarks:

This method that can be used to destroy dynamically allocated instances of this class.

Default Implementation:

{ }