HIK2016/humanik/hikdump.h File Reference

hikdump.h File Reference
#include "humanik.h"
#include "hikproperty.h"
#include <stdio.h>
#include <stddef.h>
#include <string.h>

Classes

class  Header
 
class  Field< type, count >
 
class  Field2D< type, count1, count2 >
 
class  HIKCharacterStream
 
class  HIKCharacterStateStream
 
class  HIKEffectorSetStateStream
 
class  HIKPropertySetStream
 
class  HIKDataDescriptionStream
 

Macros

#define _CRT_SECURE_NO_WARNINGS
 
#define HEADERLENGTH   16
 

Functions

HIKCharacterHIKLoadCharacter (const char *pFileName, const char *pValidationString, HIKMalloc pMalloc)
 Load file pFileName, and create an HIKCharacter object from its contents. More...
 
bool HIKSaveCharacter (const char *pFileName, HIKCharacter *pCharacter, HIKMalloc pMalloc, HIKFree pFree, float pUnitScale=1.0f)
 Save HIKCharacter pCharacter to file pFileName. More...
 
HIKCharacterStateHIKLoadCharacterState (const char *pFileName, HIKCharacter *pCharacter, HIKMalloc pMalloc)
 Load file pFileName, and create an HIKCharacterState object from its contents. More...
 
bool HIKSaveCharacterState (const char *pFileName, HIKCharacter *pCharacter, HIKCharacterState *pState, int pTransformMode, float pUnitScale=1.0f)
 Save HIKCharacterState pState to file pFileName. More...
 
HIKEffectorSetStateHIKLoadEffectorState (const char *pFileName, HIKMalloc pMalloc)
 Load file pFileName, and create an HIKEffectorSetState object from its contents. More...
 
bool HIKSaveEffectorState (const char *pFileName, HIKEffectorSetState *pState, float pUnitScale=1.0f)
 Save HIKEffectorSetState pState to file pFileName. More...
 
HIKPropertySetStateHIKLoadPropertySetState (const char *pFileName, HIKMalloc pMalloc)
 Load file pFileName, and create an HIKPropertySetState object from its contents. More...
 
bool HIKSavePropertySetState (const char *pFileName, HIKPropertySetState *pState, float pUnitScale=1.0f)
 Save HIKPropertySetState pState to file pFileName. More...
 
void * HIKLoadDataBlock (const char *pFileName, HIKDataDescription &pDataDesc, HIKMalloc pMalloc)
 Load file pFileName, and create a data set from its contents according to the data description provided in the pDataDesc argument. More...
 
void * HIKDefaultAlignedMalloc (size_t pSize, size_t pAlignment, HIKMalloc pMalloc)
 Allocates a data block aligned to the pAlignment pointer boundary. More...
 
void HIKDefaultAlignedFree (void *pAligned, HIKFree pFree)
 Frees a data block allocated using HIKDefaultAlignedMalloc(). More...
 
void HIKSaveDataBlock (const char *pFileName, const HIKDataDescription &pDataDesc, const void *pDataBlock)
 Save the data set located in memory at pDataBlock to file pFileName. More...
 
template<typename type >
bool Write (const char *pFileName, const type &pStream)
 
template<typename type >
bool WriteBlock (const char *pFileName, const size_t &pElementSize, const size_t &pElementCount, type &pStream)
 
template<typename type >
bool Read (const char *pFileName, type &pStream)
 
template<typename type >
bool ReadBlock (const char *pFileName, const size_t pOffset, const size_t &pElementSize, const size_t &pElementCount, type &pStream)
 
void SwapBytes4 (char *ToSwap)
 
bool HIKGetCharacterDefinitionFromDump (const char *pFileName, HIKCharacterDefinition &pDef)
 
HIKCharacterHIKLoadCharacter (const char *pFileName, const char *pValidationString, HIKMalloc pMalloc)
 
bool HIKSaveCharacter (const char *pFileName, HIKCharacter *pCharacter, HIKMalloc pMalloc, HIKFree pFree, float pUnitScale)
 
HIKCharacterStateHIKLoadCharacterState (const char *pFileName, HIKCharacter *pCharacter, HIKMalloc pMalloc)
 
bool HIKSaveCharacterState (const char *pFileName, HIKCharacter *pCharacter, HIKCharacterState *pState, int pTransformMode, float pUnitScale)
 
HIKEffectorSetStateHIKLoadEffectorState (const char *pFileName, HIKMalloc pMalloc)
 
bool HIKSaveEffectorState (const char *pFileName, HIKEffectorSetState *pState, float pUnitScale)
 
HIKPropertySetStateHIKLoadPropertySetState (const char *pFileName, HIKMalloc pMalloc)
 
bool HIKSavePropertySetState (const char *pFileName, HIKPropertySetState *pState, float pUnitScale)
 
void * HIKDefaultAlignedMalloc (size_t pSize, size_t pAlignment, HIKMalloc pMalloc)
 
void HIKDefaultAlignedFree (void *pAligned, HIKFree pFree)
 
void * HIKLoadDataBlock (const char *pFileName, HIKDataDescription &pDataDesc, HIKMalloc pMalloc)
 
void HIKSaveDataBlock (const char *pFileName, const HIKDataDescription &pDataDesc, const void *pDataBlock)
 

Variables

const char HIKCHARACTER_HEADER [] = "HIKCHARACTER000\0"
 
const char HIKCHARACTERSTATE_HEADER [] = "HIKSTATE0000000\0"
 
const char HIKCHARACTEREFFECTOR_HEADER [] = "HIKEFFECTOR0000\0"
 
const char HIKCHARACTERPROPERTY_HEADER [] = "HIKPROPERTY0000\0"
 
const char HIKCHARACTERDATABLOCK_HEADER [] = "HIKDATABLOCK000\0"
 
const int MagicNumber = 0xabcdef12
 

Macro Definition Documentation

#define _CRT_SECURE_NO_WARNINGS

Definition at line 43 of file hikdump.h.

#define HEADERLENGTH   16

Definition at line 192 of file hikdump.h.

Function Documentation

void HIKDefaultAlignedFree ( void *  pAligned,
HIKFree  pFree 
)
inline

Definition at line 864 of file hikdump.h.

865 {
866  void* lRawPointer = *(void**)((char*)pAligned-sizeof(void*));
867  (*pFree)(lRawPointer);
868 }
void* HIKDefaultAlignedMalloc ( size_t  pSize,
size_t  pAlignment,
HIKMalloc  pMalloc 
)
inline

Definition at line 853 of file hikdump.h.

854 {
855  const size_t lPointerSize = sizeof(void*);
856  const size_t lRequestedSize = pSize + pAlignment - 1 + lPointerSize;
857  void* lRawPointer = (*pMalloc)(lRequestedSize);
858  void* lStart = (char*)lRawPointer + lPointerSize;
859  void* lAligned = (void*)(((size_t)((char*)lStart+pAlignment-1)) & ~(pAlignment-1));
860  *(void**)((char*)lAligned-lPointerSize) = lRawPointer;
861  return lAligned;
862 }
bool HIKGetCharacterDefinitionFromDump ( const char *  pFileName,
HIKCharacterDefinition pDef 
)
inline

Definition at line 343 of file hikdump.h.

344 {
345  // First let retrieve data
346  // We need characterization flag, Default stance pose and Parent offset
347  HIKCharacterStream lStream;
348 
349  lStream.Init();
350 
351  // Load all the data
352  if(Read(pFileName, lStream))
353  {
354  memcpy(pDef.mUsedNodes, lStream.mNodeFlag.mField, sizeof(int)*lStream.mNodeFlag.eCount);
355  return true;
356  }
357  return false;
358 }
Field< int, LastNodeId > mNodeFlag
Definition: hikdump.h:277
bool Read(const char *pFileName, type &pStream)
FieldType mField[eCount]
Definition: hikdump.h:243
HIKCharacter* HIKLoadCharacter ( const char *  pFileName,
const char *  pValidationString,
HIKMalloc  pMalloc 
)
inline

Definition at line 360 of file hikdump.h.

363 {
364  // First let retrieve data
365  // We need characterization flag, Default stance pose and Parent offset
366  HIKCharacterStream lStream;
367  HIKCharacter* lCharacter = NULL;
368 
369  lStream.Init();
370 
371  // Load all the data
372  if(Read(pFileName, lStream))
373  {
375 
376  memcpy(lDef.mUsedNodes, lStream.mNodeFlag.mField, sizeof(int)*lStream.mNodeFlag.eCount);
377 
378  lCharacter = HIKCharacterCreate(&lDef, pMalloc, pValidationString);
379  if (!lCharacter)
380  return NULL;
381  int i;
382  for(i=0;i<LastNodeId;i++)
383  {
384  if(lDef.mUsedNodes[i] & HIKNodeUsed)
385  {
386  HIKSetCharacterizeNodeStateTQSfv(lCharacter, i, &lStream.mTOffset.mField[i][0], &lStream.mQOffset.mField[i][0], &lStream.mSOffset.mField[i][0]);
387  }
388 
389  if(lDef.mUsedNodes[i] & HIKNodeParentOffset)
390  {
391  HIKSetParentOffsetfv(lCharacter, i, &lStream.mParentTOffset.mField[i][0], &lStream.mParentQOffset.mField[i][0], &lStream.mParentSOffset.mField[i][0]);
392  }
393  }
394 
395  HIKCharacterizeGeometry(lCharacter);
396  }
397  return lCharacter;
398 }
Field< int, LastNodeId > mNodeFlag
Definition: hikdump.h:277
Node is characterized.
Definition: humanik.h:482
void HIKSetParentOffsetfv(HIKCharacter *pCharacter, int pNodeId, const float pParentTOffset[4], const float pParentQOffset[4], const float pParentSOffset[4])
Set the parent offset for Node pNodeId.
Field2D< float, LastNodeId, 4 > mTOffset
Definition: hikdump.h:278
Py_ssize_t i
Definition: abstract.h:1086
Marks the end of the enumeration.
Definition: humanik.h:257
#define NULL
Definition: kaydara.h:179
FieldType mField[eCount1][eCount2]
Definition: hikdump.h:263
void HIKSetCharacterizeNodeStateTQSfv(HIKCharacter *pCharacter, int pNodeId, const float pT[4], const float pQ[4], const float pS[4])
Set the translation, orientation and scaling for the Node pNodeId when the character is standing in t...
Field2D< float, LastNodeId, 4 > mSOffset
Definition: hikdump.h:280
bool HIKCharacterizeGeometry(HIKCharacter *pCharacter)
Set up and initialize character pCharacter for solving.
bool Read(const char *pFileName, type &pStream)
Field2D< float, LastNodeId, 4 > mParentSOffset
Definition: hikdump.h:283
FieldType mField[eCount]
Definition: hikdump.h:243
Field2D< float, LastNodeId, 4 > mQOffset
Definition: hikdump.h:279
Node has a parent unknown to HumanIK, used for local space transform and DoF.
Definition: humanik.h:483
Defines which Nodes are to be used by an HIKCharacter.
Field2D< float, LastNodeId, 4 > mParentQOffset
Definition: hikdump.h:282
Defines a character to be used with HumanIK.
Field2D< float, LastNodeId, 4 > mParentTOffset
Definition: hikdump.h:281
HIKCharacter * HIKCharacterCreate(const HIKCharacterDefinition *pCharacterDefinition, HIKMalloc pMalloc, const char *pValidationString)
Create a new HIKCharacter.
HIKCharacterState* HIKLoadCharacterState ( const char *  pFileName,
HIKCharacter pCharacter,
HIKMalloc  pMalloc 
)
inline

Definition at line 490 of file hikdump.h.

491 {
492  HIKCharacterStateStream lStateStream;
493  HIKCharacterState* lState = NULL;
494 
495  lStateStream.Init();
496 
497  if(Read(pFileName, lStateStream))
498  {
499  lState = HIKCharacterStateCreate(pCharacter, pMalloc);
500 
501  HIKDataDescription lDataDesc;
502 
503  lDataDesc.mTransformSpace = lStateStream.mTransformMode.mField[0] == HIKDataDescription::HIKLocalSpace ? HIKDataDescription::HIKLocalSpace : HIKDataDescription::HIKGlobalSpace;
504  lDataDesc.mTOffset = 0;
505  lDataDesc.mQOffset = 16;
506  lDataDesc.mSOffset = 32;
507  lDataDesc.mStride = 48;
508  lDataDesc.mHIKNodeId = &lStateStream.mNodeId.mField[0];
509 
510  HIKSetCharacterStateTransformTQS(pCharacter, lState, &lDataDesc, &lStateStream.mTransformData);
511  }
512  return lState;
513 }
#define NULL
Definition: kaydara.h:179
A description of a data set that contains separate translation, quaternion rotation, and scaling values for multiple different Nodes in an HIKCharacterState.
bool Read(const char *pFileName, type &pStream)
FieldType mField[eCount]
Definition: hikdump.h:243
Defines a pose for a character.
Definition: humanik.h:441
HIKCharacterState * HIKCharacterStateCreate(const HIKCharacter *pCharacter, HIKMalloc pMalloc)
Create a new HIKCharacterState.
Field< int, 1 > mTransformMode
Definition: hikdump.h:440
Field< int, LastNodeId > mNodeId
Definition: hikdump.h:441
void HIKSetCharacterStateTransformTQS(const HIKCharacter *pCharacter, HIKCharacterState *pCharacterState, const HIKDataDescription *pDataDescription, const void *pDataSet)
Set the translation (T), quaternion rotation (Q) and scaling (S) of multiple Nodes from data set pDat...
void* HIKLoadDataBlock ( const char *  pFileName,
HIKDataDescription pDataDesc,
HIKMalloc  pMalloc 
)
inline

Definition at line 870 of file hikdump.h.

871 {
872  void *lDataBlock = NULL;
873  HIKDataDescriptionStream lStream;
874  lStream.Init();
875 
876  if(Read(pFileName, lStream))
877  {
878  pDataDesc.mTransformSpace = lStream.mTransformSpace.mField[0] == HIKDataDescription::HIKLocalSpace ? HIKDataDescription::HIKLocalSpace : HIKDataDescription::HIKGlobalSpace;;
879  pDataDesc.mTOffset = (size_t)lStream.mTOffset.mField[0];
880  pDataDesc.mQOffset = (size_t)lStream.mQOffset.mField[0];
881  pDataDesc.mSOffset = (size_t)lStream.mSOffset.mField[0];
882  pDataDesc.mStride = (size_t)lStream.mStride.mField[0];
883 
884  int i = 0;
885  do
886  {
887  pDataDesc.mHIKNodeId[i] = lStream.mHIKNodeId.mField[i];
888  }
889  while(lStream.mHIKNodeId.mField[i++] != HIKLastNode);
890 
891  // allocate the data bloc
892  const size_t align = 16;
893  lDataBlock = HIKDefaultAlignedMalloc(pDataDesc.mStride*i-1, align, pMalloc);
894  ReadBlock(pFileName, sizeof(HIKDataDescriptionStream), (size_t)pDataDesc.mStride, (size_t)(i-1), lDataBlock);
895  }
896  return lDataBlock;
897 }
Field< int, 1 > mQOffset
Definition: hikdump.h:794
Py_ssize_t i
Definition: abstract.h:1086
Field< int, 1 > mStride
Definition: hikdump.h:796
#define NULL
Definition: kaydara.h:179
Field< int, 1 > mTransformSpace
Definition: hikdump.h:792
bool ReadBlock(const char *pFileName, const size_t pOffset, const size_t &pElementSize, const size_t &pElementCount, type &pStream)
void * HIKDefaultAlignedMalloc(size_t pSize, size_t pAlignment, HIKMalloc pMalloc)
Allocates a data block aligned to the pAlignment pointer boundary.
Definition: hikdump.h:846
Indicates the end of the list of Nodes.
Definition: humanik.h:1592
Field< int, LastNodeId > mHIKNodeId
Definition: hikdump.h:797
Field< int, 1 > mTOffset
Definition: hikdump.h:793
PyObject char size_t
Definition: import.h:39
Field< int, 1 > mSOffset
Definition: hikdump.h:795
bool Read(const char *pFileName, type &pStream)
FieldType mField[eCount]
Definition: hikdump.h:243
HIKEffectorSetState* HIKLoadEffectorState ( const char *  pFileName,
HIKMalloc  pMalloc 
)
inline

Definition at line 618 of file hikdump.h.

619 {
620  HIKEffectorSetStateStream lEffectorStream;
621  HIKEffectorSetState* lState = NULL;
622 
623  lEffectorStream.Init();
624 
625  if(Read(pFileName, lEffectorStream))
626  {
627  lState = HIKEffectorSetStateCreate(pMalloc);
628 
629  int i;
630  for(i=0;i<LastEffectorId;i++)
631  {
632  HIKSetTranslationActive(lState, i, lEffectorStream.mReachT.mField[i]);
633  HIKSetRotationActive(lState, i, lEffectorStream.mReachR.mField[i]);
634  HIKSetResist(lState, i, lEffectorStream.mResist.mField[i]);
635  HIKSetPull(lState, i, lEffectorStream.mPull.mField[i]);
636  HIKSetEffectorStateTQSfv(lState, i, &lEffectorStream.mTQS.mField[i][0],&lEffectorStream.mTQS.mField[i][4], &lEffectorStream.mTQS.mField[i][8]);
637  }
638 
639  HIKSetHandPullHips(lState, 0, lEffectorStream.mHandPullHips.mField[0]);
640  HIKSetHandPullHips(lState, 1, lEffectorStream.mHandPullHips.mField[1]);
641 
642  for(i=0;i<HIKLastFloorId;i++)
643  {
644  HIKSetEffectorFloorStatefv(lState, i, &lEffectorStream.mFloorTQS.mField[i][0]);
645  }
646 
647  }
648  return lState;
649 }
HIKEffectorSetState * HIKEffectorSetStateCreate(HIKMalloc pMalloc)
Create a new HIKEffectorSetState.
void HIKSetEffectorFloorStatefv(HIKEffectorSetState *pEffectorSetState, int pFloor, const float pXForm[16])
Set the transform matrix of the oriented plane that the floor contact engine applies to one of your c...
Field< float, 2 > mHandPullHips
Definition: hikdump.h:557
Marks the end of the enumeration.
Definition: humanik.h:332
Py_ssize_t i
Definition: abstract.h:1086
Field< float, LastEffectorId > mResist
Definition: hikdump.h:555
#define NULL
Definition: kaydara.h:179
FieldType mField[eCount1][eCount2]
Definition: hikdump.h:263
void HIKSetResist(HIKEffectorSetState *pEffectorSetState, int pEffectorIndex, float pValue)
Set the Resist constraint for Effector pEffectorIndex.
Field2D< float, LastEffectorId, 12 > mTQS
Definition: hikdump.h:559
Defines an HIKEffectorSetState.
Definition: humanik.h:418
void HIKSetEffectorStateTQSfv(HIKEffectorSetState *pEffectorSetState, int pEffectorIndex, const float pT[4], const float pQ[4], const float pS[4])
Set the translation (T), quaternion rotation (Q) and scaling (S) in global space of Effector pEffecto...
Field< float, LastEffectorId > mReachT
Definition: hikdump.h:553
Field2D< float, HIKLastFloorId, 16 > mFloorTQS
Definition: hikdump.h:560
void HIKSetHandPullHips(HIKEffectorSetState *pEffectorSetState, int pLeft, float pValue)
Set the amount of pull the left or right hand can exert on the hips.
Field< float, LastEffectorId > mReachR
Definition: hikdump.h:554
void HIKSetTranslationActive(HIKEffectorSetState *pEffectorSetState, int pEffectorIndex, float pValue)
Set the Reach Translation constraint for Effector pEffectorIndex.
Field< float, LastEffectorId > mPull
Definition: hikdump.h:556
bool Read(const char *pFileName, type &pStream)
FieldType mField[eCount]
Definition: hikdump.h:243
void HIKSetPull(HIKEffectorSetState *pEffectorSetState, int pEffectorIndex, float pValue)
Set the Pull constraint for Effector pEffectorIndex.
Marks the end of the enumeration.
Definition: humanik.h:315
void HIKSetRotationActive(HIKEffectorSetState *pEffectorSetState, int pEffectorIndex, float pValue)
Set the Reach Rotation constraint for Effector pEffectorIndex.
HIKPropertySetState* HIKLoadPropertySetState ( const char *  pFileName,
HIKMalloc  pMalloc 
)
inline

Definition at line 726 of file hikdump.h.

727 {
728  HIKPropertySetStream lStream;
729  HIKPropertySetState* lState = NULL;
730 
731  lStream.Init();
732 
733  if(Read(pFileName, lStream))
734  {
735  lState = HIKPropertySetStateCreate(pMalloc);
736 
737  int i;
738  for(i=0;i<HIKLastPropertyId;i++)
739  {
740  HIKSetPropertyMode(lState, i, lStream.mMode.mField[i]);
741  HIKSetPropertyValue(lState, i, lStream.mValue.mField[i]);
742  }
743  }
744 
745  return lState;
746 }
Py_ssize_t i
Definition: abstract.h:1086
#define NULL
Definition: kaydara.h:179
HIKPropertySetState * HIKPropertySetStateCreate(HIKMalloc pMalloc)
Create a new HIKPropertySetState.
void HIKSetPropertyValue(HIKPropertySetState *pState, int pPropertyId, float pValue)
Sets the current value for property pPropertyId in HIKPropertySetState pState.
Defines a character's properties.
Definition: humanik.h:457
Field< int, HIKLastPropertyId > mMode
Definition: hikdump.h:680
bool Read(const char *pFileName, type &pStream)
FieldType mField[eCount]
Definition: hikdump.h:243
void HIKSetPropertyMode(HIKPropertySetState *pState, int pPropertyId, int pMode)
Sets the current mode for property pPropertyId in HIKPropertySetState pState.
Field< float, HIKLastPropertyId > mValue
Definition: hikdump.h:681
Marks the end of the enumeration.
Definition: hikproperty.h:513
bool HIKSaveCharacter ( const char *  pFileName,
HIKCharacter pCharacter,
HIKMalloc  pMalloc,
HIKFree  pFree,
float  pUnitScale 
)
inline

Definition at line 400 of file hikdump.h.

401 {
402  // First let prepare data to save
403  // We need characterization flag, Default stance pose and Parent offset
404  HIKCharacterStream lStream;
405 
406  lStream.Init();
407 
408  int i;
409  for(i=0;i<LastNodeId;i++)
410  {
411  lStream.mNodeFlag.mField[i] = HIKGetNodeUse(pCharacter, i);
412  }
413 
414  for(i=0;i<LastNodeId;i++)
415  {
416  if(lStream.mNodeFlag.mField[i] & HIKNodeParentOffset)
417  {
418  HIKGetParentOffsetfv(pCharacter, i, &lStream.mParentTOffset.mField[i][0], &lStream.mParentQOffset.mField[i][0], &lStream.mParentSOffset.mField[i][0]);
419  lStream.mParentTOffset.mField[i][0] *= pUnitScale;
420  lStream.mParentTOffset.mField[i][1] *= pUnitScale;
421  lStream.mParentTOffset.mField[i][2] *= pUnitScale;
422  }
423  }
424 
425  HIKCharacterState* lState = HIKCharacterStateCreate(pCharacter, pMalloc);
426  HIKGetDefaultState(pCharacter, lState);
427 
428  for(i=0;i<LastNodeId;i++)
429  {
430  if(lStream.mNodeFlag.mField[i] & HIKNodeUsed)
431  {
432  HIKGetNodeStateTQSfv(pCharacter, lState, i, &lStream.mTOffset.mField[i][0], &lStream.mQOffset.mField[i][0], &lStream.mSOffset.mField[i][0]);
433  lStream.mTOffset.mField[i][0] *= pUnitScale;
434  lStream.mTOffset.mField[i][1] *= pUnitScale;
435  lStream.mTOffset.mField[i][2] *= pUnitScale;
436  }
437  }
438 
439  HIKCharacterStateDestroy(lState , pFree);
440 
441  return Write(pFileName, lStream);
442 }
void HIKCharacterStateDestroy(HIKCharacterState *pCharacterState, HIKFree pFree)
Destroy HIKCharacterState pCharacterState.
Field< int, LastNodeId > mNodeFlag
Definition: hikdump.h:277
Node is characterized.
Definition: humanik.h:482
Field2D< float, LastNodeId, 4 > mTOffset
Definition: hikdump.h:278
bool Write(const char *pFileName, const type &pStream)
Py_ssize_t i
Definition: abstract.h:1086
void HIKGetDefaultState(const HIKCharacter *pCharacter, HIKCharacterState *pCharacterState)
Retrieve the default T-stance for character pCharacter, storing it in HIKCharacterState pCharacterSta...
Marks the end of the enumeration.
Definition: humanik.h:257
FieldType mField[eCount1][eCount2]
Definition: hikdump.h:263
void HIKGetNodeStateTQSfv(const HIKCharacter *pCharacter, const HIKCharacterState *pCharacterState, int pNodeId, float pT[4], float pQ[4], float pS[4])
Retrieve the translation (T), quaternion rotation (Q) and scaling (S) in global space of Node pNodeId...
int HIKGetNodeUse(const HIKCharacter *pCharacter, int pNodeId)
Retrieve the characterization flag set for Node pNodeId in HIKCharacter pCharacter.
Field2D< float, LastNodeId, 4 > mSOffset
Definition: hikdump.h:280
void HIKGetParentOffsetfv(const HIKCharacter *pCharacter, int pNodeId, float pParentTOffset[4], float pParentQOffset[4], float pParentSOffset[4])
Retrieve the parent offset set for Node pNodeId.
Field2D< float, LastNodeId, 4 > mParentSOffset
Definition: hikdump.h:283
FieldType mField[eCount]
Definition: hikdump.h:243
Defines a pose for a character.
Definition: humanik.h:441
HIKCharacterState * HIKCharacterStateCreate(const HIKCharacter *pCharacter, HIKMalloc pMalloc)
Create a new HIKCharacterState.
Field2D< float, LastNodeId, 4 > mQOffset
Definition: hikdump.h:279
Node has a parent unknown to HumanIK, used for local space transform and DoF.
Definition: humanik.h:483
Field2D< float, LastNodeId, 4 > mParentQOffset
Definition: hikdump.h:282
Field2D< float, LastNodeId, 4 > mParentTOffset
Definition: hikdump.h:281
bool HIKSaveCharacterState ( const char *  pFileName,
HIKCharacter pCharacter,
HIKCharacterState pState,
int  pTransformMode,
float  pUnitScale 
)
inline

Definition at line 515 of file hikdump.h.

516 {
517  HIKCharacterStateStream lStateStream;
518  HIKDataDescription lDataDesc;
519 
520  lStateStream.Init();
521 
522  lDataDesc.mTransformSpace = pTransformMode == HIKDataDescription::HIKLocalSpace ? HIKDataDescription::HIKLocalSpace : HIKDataDescription::HIKGlobalSpace;
523  lDataDesc.mTOffset = 0;
524  lDataDesc.mQOffset = 16;
525  lDataDesc.mSOffset = 32;
526  lDataDesc.mStride = 48;
527  lDataDesc.mHIKNodeId = &lStateStream.mNodeId.mField[0];
528 
529  // First let prepare data to save
530  // We need transform mode and all joint transform
531  int i, lLastId = 0;
532  for(i=0;i<LastNodeId;i++)
533  {
534  if( HIKGetNodeUse(pCharacter, i) & HIKNodeUsed)
535  {
536  lStateStream.mNodeId.mField[lLastId++] = i;
537  }
538  }
539 
540  lStateStream.mNodeId.mField[lLastId] = HIKLastNode;
541  lStateStream.mTransformMode.mField[0] = pTransformMode;
542 
543  HIKGetCharacterStateTransformTQS(pCharacter, pState, &lDataDesc, &lStateStream.mTransformData);
544  for(i=0;i<LastNodeId;i++)
545  {
546  //if(HIKGetNodeUse(pCharacter, i) & HIKNodeUsed)
547  {
548  lStateStream.mTransformData.mField[i][0] *= pUnitScale;
549  lStateStream.mTransformData.mField[i][1] *= pUnitScale;
550  lStateStream.mTransformData.mField[i][2] *= pUnitScale;
551  }
552  }
553 
554  return Write(pFileName, lStateStream);
555 }
Node is characterized.
Definition: humanik.h:482
bool Write(const char *pFileName, const type &pStream)
Py_ssize_t i
Definition: abstract.h:1086
Marks the end of the enumeration.
Definition: humanik.h:257
A description of a data set that contains separate translation, quaternion rotation, and scaling values for multiple different Nodes in an HIKCharacterState.
int HIKGetNodeUse(const HIKCharacter *pCharacter, int pNodeId)
Retrieve the characterization flag set for Node pNodeId in HIKCharacter pCharacter.
Indicates the end of the list of Nodes.
Definition: humanik.h:1592
FieldType mField[eCount]
Definition: hikdump.h:243
Field< int, 1 > mTransformMode
Definition: hikdump.h:440
Field< int, LastNodeId > mNodeId
Definition: hikdump.h:441
void HIKGetCharacterStateTransformTQS(const HIKCharacter *pCharacter, HIKCharacterState *pCharacterState, const HIKDataDescription *pDataDescription, void *pDataSet)
Retrieve the translation (T), quaternion rotation (Q) and scaling (S) of multiple Nodes from HIKChara...
void HIKSaveDataBlock ( const char *  pFileName,
const HIKDataDescription pDataDesc,
const void *  pDataBlock 
)
inline

Definition at line 899 of file hikdump.h.

900 {
901  HIKDataDescriptionStream lStream;
902  lStream.Init();
903 
904  lStream.mTransformSpace.mField[0] = pDataDesc.mTransformSpace;
905  lStream.mTOffset.mField[0] = (int)pDataDesc.mTOffset;
906  lStream.mQOffset.mField[0] = (int)pDataDesc.mQOffset;
907  lStream.mSOffset.mField[0] = (int)pDataDesc.mSOffset;
908  lStream.mStride.mField[0] = (int)pDataDesc.mStride;
909 
910  int i = 0;
911  do
912  {
913  lStream.mHIKNodeId.mField[i] = pDataDesc.mHIKNodeId[i];
914  }
915  while(pDataDesc.mHIKNodeId[i++] != HIKLastNode);
916 
917  // Save descriptor
918  if(Write(pFileName, lStream))
919  {
920  // Save all the collected data
921  WriteBlock(pFileName, (size_t)pDataDesc.mStride, (size_t)(i-1), pDataBlock);
922  }
923 }
int
Definition: code.h:72
Field< int, 1 > mQOffset
Definition: hikdump.h:794
bool Write(const char *pFileName, const type &pStream)
Py_ssize_t i
Definition: abstract.h:1086
Field< int, 1 > mStride
Definition: hikdump.h:796
Field< int, 1 > mTransformSpace
Definition: hikdump.h:792
Indicates the end of the list of Nodes.
Definition: humanik.h:1592
Field< int, LastNodeId > mHIKNodeId
Definition: hikdump.h:797
bool WriteBlock(const char *pFileName, const size_t &pElementSize, const size_t &pElementCount, type &pStream)
Field< int, 1 > mTOffset
Definition: hikdump.h:793
Field< int, 1 > mSOffset
Definition: hikdump.h:795
FieldType mField[eCount]
Definition: hikdump.h:243
bool HIKSaveEffectorState ( const char *  pFileName,
HIKEffectorSetState pState,
float  pUnitScale 
)
inline

Definition at line 651 of file hikdump.h.

652 {
653  HIKEffectorSetStateStream lEffectorStream;
654  lEffectorStream.Init();
655 
656  int i;
657  for(i=0;i<LastEffectorId;i++)
658  {
659  lEffectorStream.mReachT.mField[i] = HIKGetTranslationActive(pState, i);
660  lEffectorStream.mReachR.mField[i] = HIKGetRotationActive(pState, i);
661  lEffectorStream.mResist.mField[i] = HIKGetResist(pState, i);
662  lEffectorStream.mPull.mField[i] = HIKGetPull(pState, i);
663 
664  HIKGetEffectorStateTQSfv(pState, i, &lEffectorStream.mTQS.mField[i][0], &lEffectorStream.mTQS.mField[i][4], &lEffectorStream.mTQS.mField[i][8]);
665  lEffectorStream.mTQS.mField[i][0] *= pUnitScale;
666  lEffectorStream.mTQS.mField[i][1] *= pUnitScale;
667  lEffectorStream.mTQS.mField[i][2] *= pUnitScale;
668  }
669 
670  lEffectorStream.mHandPullHips.mField[0] = HIKGetHandPullHips(pState, 0);
671  lEffectorStream.mHandPullHips.mField[1] = HIKGetHandPullHips(pState, 1);
672 
673  for(i=0;i<HIKLastFloorId;i++)
674  {
675  HIKGetEffectorFloorStatefv(pState, i, &lEffectorStream.mFloorTQS.mField[i][0]);
676  lEffectorStream.mFloorTQS.mField[i][0] *= pUnitScale;
677  lEffectorStream.mFloorTQS.mField[i][1] *= pUnitScale;
678  lEffectorStream.mFloorTQS.mField[i][2] *= pUnitScale;
679  }
680 
681  return Write(pFileName, lEffectorStream);
682 }
float HIKGetRotationActive(const HIKEffectorSetState *pEffectorSetState, int pEffectorIndex)
Retrieve the Reach Rotation constraint for Effector pEffectorIndex.
Field< float, 2 > mHandPullHips
Definition: hikdump.h:557
bool Write(const char *pFileName, const type &pStream)
Marks the end of the enumeration.
Definition: humanik.h:332
Py_ssize_t i
Definition: abstract.h:1086
void HIKGetEffectorFloorStatefv(const HIKEffectorSetState *pEffectorSetState, int pFloor, float pXForm[16])
Retrieve the transform matrix of the oriented plane that the floor contact engine applies to one of y...
float HIKGetHandPullHips(const HIKEffectorSetState *pEffectorSetState, int pLeft)
Retrieve the amount of pull the left or right hand can exert on the hips.
Field< float, LastEffectorId > mResist
Definition: hikdump.h:555
float HIKGetTranslationActive(const HIKEffectorSetState *pEffectorSetState, int pEffectorIndex)
Retrieve the Reach Translation constraint for Effector pEffectorIndex.
FieldType mField[eCount1][eCount2]
Definition: hikdump.h:263
void HIKGetEffectorStateTQSfv(const HIKEffectorSetState *pEffectorSetState, int pEffectorIndex, float pT[4], float pQ[4], float pS[4])
Retrieve the translation (T), quaternion rotation (Q) and scaling (S) in global space of Effector pEf...
Field2D< float, LastEffectorId, 12 > mTQS
Definition: hikdump.h:559
float HIKGetPull(const HIKEffectorSetState *pEffectorSetState, int pEffectorIndex)
Retrieve the Pull constraint for Effector pEffectorIndex.
Field< float, LastEffectorId > mReachT
Definition: hikdump.h:553
Field2D< float, HIKLastFloorId, 16 > mFloorTQS
Definition: hikdump.h:560
Field< float, LastEffectorId > mReachR
Definition: hikdump.h:554
Field< float, LastEffectorId > mPull
Definition: hikdump.h:556
FieldType mField[eCount]
Definition: hikdump.h:243
float HIKGetResist(const HIKEffectorSetState *pEffectorSetState, int pEffectorIndex)
Retrieve the Resist constraint for Effector pEffectorIndex.
Marks the end of the enumeration.
Definition: humanik.h:315
bool HIKSavePropertySetState ( const char *  pFileName,
HIKPropertySetState pState,
float  pUnitScale 
)
inline

Definition at line 748 of file hikdump.h.

749 {
750  HIKPropertySetStream lStream;
751  lStream.Init();
752 
753  int i;
754  for(i=0;i<HIKLastPropertyId;i++)
755  {
756  lStream.mMode.mField[i] = HIKGetPropertyMode(pState, i);
757  lStream.mValue.mField[i] = HIKGetPropertyValue(pState, i);
758 
759  // Handle unitScale
760 
761  switch(i)
762  {
763  case HIKHipsTOffsetXId :
764  case HIKHipsTOffsetYId :
765  case HIKHipsTOffsetZId :
766  case HIKChestTOffsetXId :
767  case HIKChestTOffsetYId :
768  case HIKChestTOffsetZId :
769 
771  case HIKFootBackToAnkleId :
774  case HIKFootInToAnkleId :
775  case HIKFootOutToAnkleId :
776 
778  case HIKHandBackToWristId :
781  case HIKHandInToWristId :
782  case HIKHandOutToWristId :
783 
787 
788  lStream.mValue.mField[i] *= pUnitScale;
789  break;
790  }
791  }
792 
793  return Write(pFileName, lStream);
794 }
Defines the distance from the wrist to the inside edge of the model's hand (the side of the thumb)...
Definition: hikproperty.h:158
Defines the distance from the ankle to the inside edge of the model's foot (the instep).
Definition: hikproperty.h:151
Defines the distance from the ankle to the middle of the model's foot (its ball, or toe base)...
Definition: hikproperty.h:149
If your source and target character have their ankles at different heights above the floor...
Definition: hikproperty.h:77
Defines the distance from the wrist to the outside edge of the model's hand (the side with the pinky)...
Definition: hikproperty.h:159
int HIKGetPropertyMode(HIKPropertySetState *pState, int pPropertyId)
Retrieves the current mode set for property pPropertyId in HIKPropertySetState pState.
bool Write(const char *pFileName, const type &pStream)
Py_ssize_t i
Definition: abstract.h:1086
Defines the distance from the wrist to the bottom of the model's hand.
Definition: hikproperty.h:154
float HIKGetPropertyValue(HIKPropertySetState *pState, int pPropertyId)
Retrieves the current value set for property pPropertyId in HIKPropertySetState pState.
Defines the distance from the ankle to the outside edge of the model's foot.
Definition: hikproperty.h:152
Defines the distance from the wrist to the back of the model's hand.
Definition: hikproperty.h:155
Defines the distance from the wrist to the front end of the model's fingers.
Definition: hikproperty.h:157
The Hips and Chest Offset properties offset the translation of the character's hips and chest along e...
Definition: hikproperty.h:276
Adjusts the height of the target character's hips.
Definition: hikproperty.h:87
Defines the distance from the ankle to the bottom of the model's foot.
Definition: hikproperty.h:147
Adjusts the spacing between the left and right ankles of the target character relative to the source ...
Definition: hikproperty.h:82
Field< int, HIKLastPropertyId > mMode
Definition: hikdump.h:680
Defines the distance from the ankle to the back of the model's foot.
Definition: hikproperty.h:148
Defines the distance from the wrist to the middle of the model's hand (its knuckles, or finger base).
Definition: hikproperty.h:156
FieldType mField[eCount]
Definition: hikdump.h:243
Defines the distance from the ankle to the front end of the model's toes.
Definition: hikproperty.h:150
Field< float, HIKLastPropertyId > mValue
Definition: hikdump.h:681
Marks the end of the enumeration.
Definition: hikproperty.h:513
bool Read ( const char *  pFileName,
type pStream 
)

Definition at line 139 of file hikdump_std.inl.

140 {
141  // Read all the data
142  bool bResult = false;
143  FILE* lFile = fopen(pFileName, "rb");
144  if(lFile != NULL)
145  {
146  bResult = pStream.Read(lFile);
147  fclose(lFile);
148  }
149 
150  return bResult;
151 }
#define NULL
Definition: kaydara.h:179
char char int FILE
Definition: fileobject.h:45
bool ReadBlock ( const char *  pFileName,
const size_t  pOffset,
const size_t pElementSize,
const size_t pElementCount,
type pStream 
)

Definition at line 153 of file hikdump_std.inl.

154 {
155  // Read all the data
156  bool bResult = false;
157  FILE* lFile = fopen(pFileName, "rb");
158  if(lFile != NULL)
159  {
160  fseek(lFile, pOffset, 0);
161  bResult = fread(pStream, pElementSize, pElementCount, lFile) > 0 ;
162  fclose(lFile);
163  }
164 
165  return bResult;
166 }
#define NULL
Definition: kaydara.h:179
char char int FILE
Definition: fileobject.h:45
void SwapBytes4 ( char *  ToSwap)
inline

Definition at line 231 of file hikdump.h.

232 {
233  char temp;
234 
235  temp = ToSwap[0];
236  ToSwap[0] = ToSwap[3];
237  ToSwap[3] = temp;
238  temp = ToSwap[1];
239  ToSwap[1] = ToSwap[2];
240  ToSwap[2] = temp;
241 }
bool Write ( const char *  pFileName,
const type pStream 
)

Definition at line 113 of file hikdump_std.inl.

114 {
115  // Save all the collected data
116  FILE* lFile = fopen(pFileName, "wb+");
117  if(lFile != NULL)
118  {
119  pStream.Write(lFile);
120  fclose(lFile);
121  return true;
122  }
123  return false;
124 }
#define NULL
Definition: kaydara.h:179
char char int FILE
Definition: fileobject.h:45
bool WriteBlock ( const char *  pFileName,
const size_t pElementSize,
const size_t pElementCount,
type pStream 
)

Definition at line 126 of file hikdump_std.inl.

127 {
128  // Save all the collected data
129  FILE* lFile = fopen(pFileName, "ab+");
130  if(lFile != NULL)
131  {
132  fwrite(pStream, pElementSize, pElementCount, lFile);
133  fclose(lFile);
134  return true;
135  }
136  return false;
137 }
#define NULL
Definition: kaydara.h:179
char char int FILE
Definition: fileobject.h:45

Variable Documentation

const char HIKCHARACTER_HEADER[] = "HIKCHARACTER000\0"

Definition at line 194 of file hikdump.h.

const char HIKCHARACTERDATABLOCK_HEADER[] = "HIKDATABLOCK000\0"

Definition at line 198 of file hikdump.h.

const char HIKCHARACTEREFFECTOR_HEADER[] = "HIKEFFECTOR0000\0"

Definition at line 196 of file hikdump.h.

const char HIKCHARACTERPROPERTY_HEADER[] = "HIKPROPERTY0000\0"

Definition at line 197 of file hikdump.h.

const char HIKCHARACTERSTATE_HEADER[] = "HIKSTATE0000000\0"

Definition at line 195 of file hikdump.h.

const int MagicNumber = 0xabcdef12

Definition at line 199 of file hikdump.h.

Go to the source code of this file.