95 lines
2.3 KiB
C++
Executable File
95 lines
2.3 KiB
C++
Executable File
/**********************************************************************
|
|
|
|
FILE: ISkin.h
|
|
|
|
DESCRIPTION: Skin Bone Deformer API
|
|
|
|
CREATED BY: Nikolai Sander, Discreet
|
|
|
|
HISTORY: 7/12/99
|
|
|
|
|
|
*> Copyright (c) 1998, All Rights Reserved.
|
|
**********************************************************************/
|
|
|
|
#ifndef __ISKIN__H
|
|
#define __ISKIN__H
|
|
|
|
#include "ISkinCodes.h"
|
|
|
|
#define I_SKIN 0x00010000
|
|
|
|
#define SKIN_INVALID_NODE_PTR 0
|
|
#define SKIN_OK 1
|
|
|
|
//#define SKIN_CLASSID Class_ID(0x68477bb4, 0x28cf6b86)
|
|
#define SKIN_CLASSID Class_ID(9815843,87654)
|
|
|
|
class ISkinContextData
|
|
{
|
|
public:
|
|
virtual int GetNumPoints()=0;
|
|
virtual int GetNumAssignedBones(int vertexIdx)=0;
|
|
virtual int GetAssignedBone(int vertexIdx, int boneIdx)=0;
|
|
virtual float GetBoneWeight(int vertexIdx, int boneIdx)=0;
|
|
|
|
// These are only used for Spline animation
|
|
virtual int GetSubCurveIndex(int vertexIdx, int boneIdx)=0;
|
|
virtual int GetSubSegmentIndex(int vertexIdx, int boneIdx)=0;
|
|
virtual float GetSubSegmentDistance(int vertexIdx, int boneIdx)=0;
|
|
virtual Point3 GetTangent(int vertexIdx, int boneIdx)=0;
|
|
virtual Point3 GetOPoint(int vertexIdx, int boneIdx)=0;
|
|
|
|
};
|
|
|
|
class ISkin
|
|
{
|
|
public:
|
|
virtual int GetBoneInitTM(INode *pNode, Matrix3 &InitTM, bool bObjOffset = false)=0;
|
|
virtual int GetSkinInitTM(INode *pNode, Matrix3 &InitTM, bool bObjOffset = false)=0;
|
|
virtual int GetNumBones()=0;
|
|
virtual INode *GetBone(int idx)=0;
|
|
virtual DWORD GetBoneProperty(int idx)=0;
|
|
virtual ISkinContextData *GetContextInterface(INode *pNode)=0;
|
|
|
|
};
|
|
/*
|
|
Modifier* FindSkinModifier (INode* node)
|
|
{
|
|
// Get object from node. Abort if no object.
|
|
Object* pObj = node->GetObjectRef();
|
|
|
|
|
|
if (!pObj) return NULL;
|
|
|
|
// Is derived object ?
|
|
while (pObj->SuperClassID() == GEN_DERIVOB_CLASS_ID)
|
|
{
|
|
// Yes -> Cast.
|
|
IDerivedObject* pDerObj = static_cast<IDerivedObject*>(pObj);
|
|
|
|
// Iterate over all entries of the modifier stack.
|
|
int ModStackIndex = 0;
|
|
while (ModStackIndex < pDerObj->NumModifiers())
|
|
{
|
|
// Get current modifier.
|
|
Modifier* mod = pDerObj->GetModifier(ModStackIndex);
|
|
|
|
// Is this Skin ?
|
|
if (mod->ClassID() == SKIN_CLASSID )
|
|
{
|
|
// Yes -> Exit.
|
|
return mod;
|
|
}
|
|
|
|
// Next modifier stack entry.
|
|
ModStackIndex++;
|
|
}
|
|
pObj = pDerObj->GetObjRef();
|
|
}
|
|
|
|
// Not found.
|
|
return NULL;
|
|
}
|
|
*/
|
|
#endif |