tge/lib/maxsdk70/include/iMorphByBone.h
2017-04-17 06:17:10 -06:00

454 lines
19 KiB
C++
Executable File

#ifndef __IMORPHBYBONE__H
#define __IMORPHBYBONE__H
#include "iFnPub.h"
//***************************************************************
//Function Publishing System stuff
//****************************************************************
#define MORPHBYBONE_INTERFACE Interface_ID(0xDE17A34f, 0x8B52E4E3)
enum { morphbybone_addbone,
morphbybone_removebone,
morphbybone_selectbone,
morphbybone_getselectedbone,
morphbybone_getselectedmorph,
morphbybone_selectvertices,
morphbybone_isselectedvertex,
morphbybone_resetgraph,
morphbybone_grow,morphbybone_shrink,
morphbybone_ring,morphbybone_loop,
morphbybone_createmorph,
morphbybone_removemorph,
morphbybone_editmorph,
morphbybone_clearvertices,
morphbybone_deletevertices,
morphbybone_resetorientation,
morphbybone_reloadtarget,
morphbybone_mirrorpaste,
morphbybone_editfalloffgraph,
morphbybone_setexternalnode,
morphbybone_moveverts,
morphbybone_transformverts,
morphbybone_numberofbones,
morphbybone_bonegetinitialnodetm,
morphbybone_bonesetinitialnodetm,
morphbybone_bonegetinitialobjecttm,
morphbybone_bonesetinitialobjecttm,
morphbybone_bonegetinitialparenttm,
morphbybone_bonesetinitialparenttm,
morphbybone_bonegetnumberofmorphs,
morphbybone_bonegetmorphname,
morphbybone_bonesetmorphname,
morphbybone_bonegetmorphangle,
morphbybone_bonesetmorphangle,
morphbybone_bonegetmorphtm,
morphbybone_bonesetmorphtm,
morphbybone_bonegetmorphparenttm,
morphbybone_bonesetmorphparenttm,
morphbybone_bonegetmorphisdead,
morphbybone_bonegetmorphsetdead,
morphbybone_bonegetmorphnumpoints,
morphbybone_bonesetmorphnumpoints,
morphbybone_bonegetmorphvertid,
morphbybone_bonesetmorphvertid,
morphbybone_bonegetmorphvec,
morphbybone_bonesetmorphvec,
morphbybone_bonegetmorphpvec,
morphbybone_bonesetmorphpvec,
morphbybone_bonegetmorphop,
morphbybone_bonesetmorphop,
morphbybone_bonegetmorphowner,
morphbybone_bonesetmorphowner,
morphbybone_bonegetmorphfalloff,
morphbybone_bonesetmorphfalloff,
morphbybone_bonegetjointtype,
morphbybone_bonesetjointtype,
morphbybone_update,
morphbybone_getweight,
morphbybone_bonegetmorphenabled,
morphbybone_bonesetmorphenabled,
};
//****************************************************************
class IMorphByBone : public FPMixinInterface
{
public:
//Function Publishing System
//Function Map For Mixin Interface
//*************************************************
BEGIN_FUNCTION_MAP
VFN_1(morphbybone_addbone, fnAddBone, TYPE_INODE);
VFN_1(morphbybone_removebone, fnRemoveBone, TYPE_INODE);
VFN_2(morphbybone_selectbone, fnSelectBone, TYPE_INODE,TYPE_STRING);
FN_0(morphbybone_getselectedbone, TYPE_INODE, fnGetSelectedBone);
FN_0(morphbybone_getselectedmorph, TYPE_STRING, fnGetSelectedMorph);
VFN_2(morphbybone_selectvertices, fnSelectVertices, TYPE_INODE,TYPE_BITARRAY);
FN_2(morphbybone_isselectedvertex,TYPE_BOOL, fnIsSelectedVertex, TYPE_INODE,TYPE_INT);
VFN_0(morphbybone_resetgraph, fnResetGraph);
VFN_0(morphbybone_grow, fnGrow);
VFN_0(morphbybone_shrink, fnShrink);
VFN_0(morphbybone_ring, fnRing);
VFN_0(morphbybone_loop, fnLoop);
VFN_1(morphbybone_createmorph, fnCreateMorph, TYPE_INODE);
VFN_2(morphbybone_removemorph, fnRemoveMorph, TYPE_INODE,TYPE_STRING);
VFN_1(morphbybone_editmorph, fnEdit,TYPE_BOOL);
VFN_0(morphbybone_clearvertices, fnClearSelectedVertices);
VFN_0(morphbybone_deletevertices, fnDeleteSelectedVertices);
VFN_2(morphbybone_resetorientation, fnResetOrientation, TYPE_INODE,TYPE_STRING);
VFN_2(morphbybone_reloadtarget, fnReloadTarget, TYPE_INODE,TYPE_STRING);
VFN_1(morphbybone_mirrorpaste, fnMirrorPaste, TYPE_INODE);
VFN_2(morphbybone_editfalloffgraph, fnEditFalloffGraph, TYPE_INODE,TYPE_STRING);
VFN_3(morphbybone_setexternalnode, fnSetExternalNode, TYPE_INODE,TYPE_STRING,TYPE_INODE);
VFN_1(morphbybone_moveverts, fnMoveVerts, TYPE_POINT3);
VFN_2(morphbybone_transformverts, fnTransFormVerts, TYPE_MATRIX3, TYPE_MATRIX3);
FN_0(morphbybone_numberofbones, TYPE_INT, fnNumberOfBones);
FN_1(morphbybone_bonegetinitialnodetm, TYPE_MATRIX3, fnBoneGetInitialNodeTM, TYPE_INODE);
VFN_2(morphbybone_bonesetinitialnodetm, fnBoneSetInitialNodeTM, TYPE_INODE, TYPE_MATRIX3);
FN_1(morphbybone_bonegetinitialobjecttm, TYPE_MATRIX3, fnBoneGetInitialObjectTM, TYPE_INODE);
VFN_2(morphbybone_bonesetinitialobjecttm, fnBoneSetInitialObjectTM, TYPE_INODE, TYPE_MATRIX3);
FN_1(morphbybone_bonegetinitialparenttm, TYPE_MATRIX3, fnBoneGetInitialParentTM, TYPE_INODE);
VFN_2(morphbybone_bonesetinitialparenttm, fnBoneSetInitialParentTM, TYPE_INODE, TYPE_MATRIX3);
FN_1(morphbybone_bonegetnumberofmorphs, TYPE_INT, fnBoneGetNumberOfMorphs,TYPE_INODE);
FN_2(morphbybone_bonegetmorphname, TYPE_STRING, fnBoneGetMorphName,TYPE_INODE,TYPE_INT);
VFN_3(morphbybone_bonesetmorphname, fnBoneSetMorphName,TYPE_INODE,TYPE_INT,TYPE_STRING);
FN_2(morphbybone_bonegetmorphangle, TYPE_FLOAT, fnBoneGetMorphAngle,TYPE_INODE,TYPE_INT);
VFN_3(morphbybone_bonesetmorphangle, fnBoneSetMorphAngle,TYPE_INODE,TYPE_INT,TYPE_FLOAT);
FN_2(morphbybone_bonegetmorphtm, TYPE_MATRIX3, fnBoneGetMorphTM,TYPE_INODE,TYPE_INT);
VFN_3(morphbybone_bonesetmorphtm, fnBoneSetMorphTM,TYPE_INODE,TYPE_INT,TYPE_MATRIX3);
FN_2(morphbybone_bonegetmorphparenttm, TYPE_MATRIX3, fnBoneGetMorphParentTM,TYPE_INODE,TYPE_INT);
VFN_3(morphbybone_bonesetmorphparenttm, fnBoneSetMorphParentTM,TYPE_INODE,TYPE_INT,TYPE_MATRIX3);
FN_2(morphbybone_bonegetmorphisdead, TYPE_BOOL, fnBoneGetMorphIsDead,TYPE_INODE,TYPE_INT);
VFN_3(morphbybone_bonegetmorphsetdead, fnBoneSetMorphSetDead,TYPE_INODE,TYPE_INT,TYPE_BOOL);
FN_2 (morphbybone_bonegetmorphnumpoints, TYPE_INT, fnBoneGetMorphNumPoints,TYPE_INODE,TYPE_INT);
VFN_3(morphbybone_bonesetmorphnumpoints, fnBoneSetMorphNumPoints,TYPE_INODE,TYPE_INT,TYPE_INT);
FN_3 (morphbybone_bonegetmorphvertid, TYPE_INT, fnBoneGetMorphVertID,TYPE_INODE,TYPE_INT,TYPE_INT);
VFN_4(morphbybone_bonesetmorphvertid, fnBoneSetMorphVertID,TYPE_INODE,TYPE_INT,TYPE_INT,TYPE_INT);
FN_3 (morphbybone_bonegetmorphvec, TYPE_POINT3, fnBoneGetMorphVec,TYPE_INODE,TYPE_INT,TYPE_INT);
VFN_4(morphbybone_bonesetmorphvec, fnBoneSetMorphVec,TYPE_INODE,TYPE_INT,TYPE_INT,TYPE_POINT3);
FN_3 (morphbybone_bonegetmorphpvec, TYPE_POINT3, fnBoneGetMorphPVec,TYPE_INODE,TYPE_INT,TYPE_INT);
VFN_4(morphbybone_bonesetmorphpvec, fnBoneSetMorphPVec,TYPE_INODE,TYPE_INT,TYPE_INT,TYPE_POINT3);
FN_3 (morphbybone_bonegetmorphop, TYPE_POINT3, fnBoneGetMorphOP,TYPE_INODE,TYPE_INT,TYPE_INT);
VFN_4(morphbybone_bonesetmorphop, fnBoneSetMorphOP,TYPE_INODE,TYPE_INT,TYPE_INT,TYPE_POINT3);
FN_3 (morphbybone_bonegetmorphowner, TYPE_INODE, fnBoneGetMorphOwner,TYPE_INODE,TYPE_INT,TYPE_INT);
VFN_4(morphbybone_bonesetmorphowner, fnBoneSetMorphOwner,TYPE_INODE,TYPE_INT,TYPE_INT,TYPE_INODE);
FN_2 (morphbybone_bonegetmorphfalloff, TYPE_INT, fnBoneGetMorphFalloff,TYPE_INODE,TYPE_INT);
VFN_3(morphbybone_bonesetmorphfalloff, fnBoneSetMorphFalloff,TYPE_INODE,TYPE_INT,TYPE_INT);
FN_1 (morphbybone_bonegetjointtype, TYPE_INT, fnBoneGetJointType,TYPE_INODE);
VFN_2(morphbybone_bonesetjointtype, fnBoneSetJointType,TYPE_INODE,TYPE_INT);
VFN_0(morphbybone_update, fnUpdate);
FN_2(morphbybone_getweight, TYPE_FLOAT, fnGetWeight,TYPE_INODE,TYPE_STRING);
FN_2 (morphbybone_bonegetmorphenabled, TYPE_BOOL, fnBoneGetMorphEnabled,TYPE_INODE,TYPE_INT);
VFN_3(morphbybone_bonesetmorphenabled, fnBoneSetMorphEnabled,TYPE_INODE,TYPE_INT,TYPE_BOOL);
END_FUNCTION_MAP
FPInterfaceDesc* GetDesc(); // <-- must implement
//note functions that start with fn are to be used with maxscript since these expect 1 based indices
/// void fnAddBone(INode *node)=0;
/// This adds a bone to the system
/// INode *node the bone to add
virtual void fnAddBone(INode *node)=0;
/// void fnRemoveBone(INode *node)
/// This removes a bone from the system
/// INode *node the bone to remove
virtual void fnRemoveBone(INode *node)=0;
/// void fnSelectBone(INode *node,TCHAR* morphName)
/// This selects a bone and/or morph in the selection list. If the morphName is null
/// only the bone will be selected.
/// INode *node this is the node to be selected
/// TCHAR* morphName this is the morph to be selected
virtual void fnSelectBone(INode *node,TCHAR* morphName)=0;
/// INode* fnGetSelectedBone()
/// This returns the current active bone
virtual INode* fnGetSelectedBone()=0;
/// TCHAR* fnGetSelectedMorph()
/// This returns the name of the current selected morph
virtual TCHAR* fnGetSelectedMorph()=0;
/// void fnSelectVertices(INode *node,BitArray *sel)
/// This lets you select vertices.
/// INode *node this is the node that owns the modifier, this is used to find a specific
/// instance of the modifier and apply it to the right local data
/// BitArray *sel the selection array
virtual void fnSelectVertices(INode *node,BitArray *sel)=0;
/// BOOL fnIsSelectedVertex(INode *node,int index)
/// INode *node this is the node that owns the modifier, this is used to find a specific
/// instance of the modifier and apply it to the right local data
/// int index this the index of the vertex that you want to check
virtual BOOL fnIsSelectedVertex(INode *node,int index)=0;
/// void fnResetGraph()
/// this is equivalent to pressing the reset graph button in the UI which
/// resets the the soft selection graph to a sinual graph
virtual void fnResetGraph()=0;
/// void fnShrink()
/// This contracts your vertex selection
virtual void fnShrink()=0;
/// void fnGrow()
/// This expands your vertex selection
virtual void fnGrow()=0;
/// void fnRing()
/// This turns your current selection into a ring selection
virtual void fnRing()=0;
/// void fnLoop()
/// This turns your current selection into a loop selection
virtual void fnLoop()=0;
/// void fnCreateMorph(INode *node)
/// This creates a new morph for a bone
/// INode *node this is the bone that you want to create the morph on
virtual void fnCreateMorph(INode *node)=0;
/// void fnRemoveMorph(INode *node, TCHAR *name)
/// This removes a morph target
/// INode *node this is the bone that owns the morph that you want to remove
/// TCHAR *name this is the name of the morph that you want to remove
virtual void fnRemoveMorph(INode *node, TCHAR *name)=0;
/// fnEdit(BOOL edit)
/// This toggles on/off the edit morph mode. The current active morph is the one
/// that will be edited
/// BOOL edit the edit mode state
virtual void fnEdit(BOOL edit)=0;
/// void fnClearSelectedVertices()
/// This ie equivalent to press the clear verts button in the UI which takes the
/// selected vertices and sets their delta to zero
virtual void fnClearSelectedVertices()=0;
/// void fnDeleteSelectedVertices()
/// This ie equivalent to press the delet verts button in the UI which takes the
/// selected vertices and removes them from the current morph
virtual void fnDeleteSelectedVertices()=0;
/// void fnResetOrientation(INode *node, TCHAR *name)
/// This resets the orientation of morph to the current orientation of the bone that owns it
/// INode *node this is the bone that owns the morph to be reset
/// TCHAR *name this is the name of the morph to be reset
virtual void fnResetOrientation(INode *node, TCHAR *name)=0;
/// void fnReloadTarget(INode *node, TCHAR *name)
/// This reloads the external mesh for a morph if there is one
/// INode *node this is the bone that owns the morph to be reloaded
/// TCHAR *name this is the name of the morph to be reloaded
virtual void fnReloadTarget(INode *node, TCHAR *name)=0;
/// fnMirrorPaste(INode *node)
/// This mirror pastes the node to its mirror target based on the mirror parameters
/// INode *node this is the node that is to be mirrored
virtual void fnMirrorPaste(INode *node)=0;
/// void fnEditFalloffGraph(INode *node, TCHAR *name)
/// This brings up the falloff graph of a morph if there is one
/// INode *node this is the bone that owns the morph
/// TCHAR *name this is the name of the morph to to have its graph brought up
virtual void fnEditFalloffGraph(INode *node, TCHAR *name)=0;
/// void fnSetExternalNode(INode *node, TCHAR *name,INode *exnode)
/// This lets you set the external mesh node for a morph
/// INode *node this is the bone that owns the morph
/// TCHAR *name this is the name of the morph to to have its external node set
virtual void fnSetExternalNode(INode *node, TCHAR *name,INode *exnode)=0;
/// void fnMoveVerts(Point3 vec)
/// This moves the selected vertices along a vec which is applied to an active morph if there is one
/// Point3 vec this is the vec which the vertices are moved.
virtual void fnMoveVerts(Point3 vec)=0;
/// void fnTransFormVerts(Matrix3 a, Matrix3 b)
/// This transforms the selected vertices which is applied to an active morph if there is one
/// Matrix a this is matrix transformation
/// Matrix b this is the space?
virtual void fnTransFormVerts(Matrix3 a, Matrix3 b)=0;
/// int fnNumberOfBones()
/// This is the number of bones in the system
virtual int fnNumberOfBones() = 0;
/// Matrix3* fnBoneGetInitialNodeTM(INode *node)
/// This returns the initial node tm of bone. This is the tm of the bone
/// when it is added to the system
/// the initial node tm is used to determine the actual deformation
/// INode *node this is the bone that you want get the tm from
virtual Matrix3* fnBoneGetInitialNodeTM(INode *node) = 0;
/// void fnBoneSetInitialNodeTM(INode *node, Matrix3 tm)
/// This lets you set the initial node tm of a bone
/// INode *node this is the bone that you want set the tm on
/// Matrix3 tm this is the initial tm
virtual void fnBoneSetInitialNodeTM(INode *node, Matrix3 tm) = 0;
/// Matrix3* fnBoneGetInitialObjectTM(INode *node)
/// This returns the initial object tm of bone. This is the tm of the bone
/// when it is added to the system
/// the initial object tm is used only for display
/// INode *node this is the bone that you want get the tm from
virtual Matrix3* fnBoneGetInitialObjectTM(INode *node) = 0;
/// void fnBoneSetInitialObjectTM(INode *node, Matrix3 tm)
/// This lets you set the initial object tm of a bone
/// INode *node this is the bone that you want set the tm on
/// Matrix3 tm this is the initial tm
virtual void fnBoneSetInitialObjectTM(INode *node, Matrix3 tm) = 0;
/// Matrix3* fnBoneGetInitialParentTM(INode *node)
/// This returns the initial node tm parent that owns bone.
/// INode *node this is the bone that you want get the parent tm from
virtual Matrix3* fnBoneGetInitialParentTM(INode *node) = 0;
/// void fnBoneSetInitialParentTM(INode *node, Matrix3 tm)
/// This lets you set the parent tm of a bone.
/// INode *node this is the bone that you want set the tm on
/// Matrix3 tm this is the parent tm
virtual void fnBoneSetInitialParentTM(INode *node, Matrix3 tm) = 0;
/// int fnBoneGetNumberOfMorphs(INode *node)
/// This returns the number of morphs that a bone owns
/// INode *node this the bone to get the number of morphs from
virtual int fnBoneGetNumberOfMorphs(INode *node) = 0;
/// the follow le get/set properties of individual morphs they all follow the same format
/// INode *node is the bone that owns the morph
/// int morphIndex is the index of the morph
virtual TCHAR* fnBoneGetMorphName(INode *node, int morphIndex) = 0;
virtual void fnBoneSetMorphName(INode *node, int morphIndex,TCHAR* name) = 0;
virtual float fnBoneGetMorphAngle(INode *node, int morphIndex) = 0;
virtual void fnBoneSetMorphAngle(INode *node, int morphIndex,float angle) = 0;
virtual Matrix3* fnBoneGetMorphTM(INode *node, int morphIndex) = 0;
virtual void fnBoneSetMorphTM(INode *node, int morphIndex,Matrix3 tm) = 0;
virtual Matrix3* fnBoneGetMorphParentTM(INode *node, int morphIndex) = 0;
virtual void fnBoneSetMorphParentTM(INode *node, int morphIndex,Matrix3 tm) = 0;
virtual BOOL fnBoneGetMorphIsDead(INode *node, int morphIndex) = 0;
virtual void fnBoneSetMorphSetDead(INode *node, int morphIndex,BOOL dead) = 0;
virtual int fnBoneGetMorphNumPoints(INode *node, int morphIndex) = 0;
virtual void fnBoneSetMorphNumPoints(INode *node, int morphIndex, int numberPoints) = 0;
///These let you get access to the morph vertex properties
///every morph contains a list of vertices and properties
/// INode *node is the bone that owns the morph
/// int morphIndex is the index of the morph
/// int ithIndex is which vertex you want to get info about
/// the index back into the mesh vertex list
virtual int fnBoneGetMorphVertID(INode *node, int morphIndex, int ithIndex) = 0;
virtual void fnBoneSetMorphVertID(INode *node, int morphIndex, int ithIndex, int vertIndex) = 0;
/// the vector in local bone space
virtual Point3* fnBoneGetMorphVec(INode *node, int morphIndex, int ithIndex) = 0;
virtual void fnBoneSetMorphVec(INode *node, int morphIndex, int ithIndex, Point3 vec) = 0;
/// the vector in parent space
virtual Point3* fnBoneGetMorphPVec(INode *node, int morphIndex, int ithIndex) = 0;
virtual void fnBoneSetMorphPVec(INode *node, int morphIndex, int ithIndex, Point3 vec) = 0;
/// the original point before any deformation
virtual Point3* fnBoneGetMorphOP(INode *node, int morphIndex, int ithIndex) = 0;
virtual void fnBoneSetMorphOP(INode *node, int morphIndex, int ithIndex, Point3 vec) = 0;
/// this returns which node owns the vertex if ther modifier is instanced
virtual INode* fnBoneGetMorphOwner(INode *node, int morphIndex, int ithIndex) = 0;
virtual void fnBoneSetMorphOwner(INode *node, int morphIndex, int ithIndex, INode *onode) = 0;
virtual int fnBoneGetMorphFalloff(INode *node, int morphIndex) = 0;
virtual void fnBoneSetMorphFalloff(INode *node, int morphIndex, int falloff) = 0;
virtual int fnBoneGetJointType(INode *node) = 0;
virtual void fnBoneSetJointType(INode *node, int jointType) = 0;
/// void fnUpdate()
/// This forces a system to update
virtual void fnUpdate() = 0;
/// float fnGetWeight(INode *node, TCHAR*name)
/// This return the weight of particular morph is contributing
/// INode *node is the bone that owns the morph
/// TCHAR*name this is the name of the morph
virtual float fnGetWeight(INode *node, TCHAR*name) = 0;
virtual BOOL fnBoneGetMorphEnabled(INode *node, int morphIndex) = 0;
virtual void fnBoneSetMorphEnabled(INode *node, int morphIndex, BOOL enabled) = 0;
};
#endif // __ILAG__H