mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-14 02:27:40 -04:00
Deprecate and remove hsStlSortUtils
This commit is contained in:
@ -68,7 +68,6 @@ set(CoreLib_HEADERS
|
|||||||
hsQuat.h
|
hsQuat.h
|
||||||
hsRefCnt.h
|
hsRefCnt.h
|
||||||
hsSafeRefCnt.h
|
hsSafeRefCnt.h
|
||||||
hsStlSortUtils.h
|
|
||||||
hsSTLStream.h
|
hsSTLStream.h
|
||||||
hsStream.h
|
hsStream.h
|
||||||
hsStringTokenizer.h
|
hsStringTokenizer.h
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
#ifndef hsStlSortUtils_inc
|
|
||||||
#define hsStlSortUtils_inc
|
|
||||||
|
|
||||||
// These get used a lot in char * STL maps, so lets just have them in one place
|
|
||||||
|
|
||||||
class stringSorter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool operator() (const char *s1, const char *s2) const
|
|
||||||
{
|
|
||||||
return (strcmp(s1,s2) < 0);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class stringISorter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool operator() (const char *s1, const char *s2) const
|
|
||||||
{
|
|
||||||
return (stricmp(s1,s2) < 0);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // hsStlSortUtils_inc
|
|
@ -537,7 +537,7 @@ PF_CONSOLE_CMD(Stats, ListGroups, "", "Prints the names of all the stat groups t
|
|||||||
|
|
||||||
plProfileManagerFull::GroupSet::iterator it;
|
plProfileManagerFull::GroupSet::iterator it;
|
||||||
for (it = groups.begin(); it != groups.end(); it++)
|
for (it = groups.begin(); it != groups.end(); it++)
|
||||||
PrintString((char*)*it);
|
PrintString(it->c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
PF_CONSOLE_CMD(Stats, ListLaps, "", "Prints the names of all the stats with laps to the console")
|
PF_CONSOLE_CMD(Stats, ListLaps, "", "Prints the names of all the stats with laps to the console")
|
||||||
|
@ -70,7 +70,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "hsGeometry3.h"
|
#include "hsGeometry3.h"
|
||||||
#include "hsQuat.h"
|
#include "hsQuat.h"
|
||||||
#include "hsResMgr.h"
|
#include "hsResMgr.h"
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
#include "hsStream.h"
|
#include "hsStream.h"
|
||||||
#include "hsTemplates.h"
|
#include "hsTemplates.h"
|
||||||
#include "hsTimer.h"
|
#include "hsTimer.h"
|
||||||
|
@ -49,7 +49,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
|
|
||||||
#include "HeadSpin.h"
|
#include "HeadSpin.h"
|
||||||
#include "hsStream.h"
|
#include "hsStream.h"
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
#pragma hdrstop
|
#pragma hdrstop
|
||||||
|
|
||||||
#include "plPythonPack.h"
|
#include "plPythonPack.h"
|
||||||
|
@ -52,7 +52,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include "pnNetCommon/plSynchedObject.h"
|
#include "pnNetCommon/plSynchedObject.h"
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
|
|
||||||
class plTMController;
|
class plTMController;
|
||||||
class hsAffineParts;
|
class hsAffineParts;
|
||||||
|
@ -56,8 +56,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "HeadSpin.h"
|
#include "HeadSpin.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
|
|
||||||
// local
|
// local
|
||||||
#include "plScalarChannel.h"
|
#include "plScalarChannel.h"
|
||||||
|
|
||||||
|
@ -58,9 +58,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "plAvDefs.h"
|
#include "plAvDefs.h"
|
||||||
#include "pnKeyedObject/plMsgForwarder.h"
|
#include "pnKeyedObject/plMsgForwarder.h"
|
||||||
|
|
||||||
// templates
|
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
|
|
||||||
|
|
||||||
class plAGModifier;
|
class plAGModifier;
|
||||||
class plAGAnimInstance;
|
class plAGAnimInstance;
|
||||||
|
@ -53,9 +53,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
// local
|
// local
|
||||||
#include "plAvatar/plScalarChannel.h"
|
#include "plAvatar/plScalarChannel.h"
|
||||||
|
|
||||||
// stl
|
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
|
|
||||||
class plSceneObject;
|
class plSceneObject;
|
||||||
|
|
||||||
class plAGAnimInstance;
|
class plAGAnimInstance;
|
||||||
|
@ -48,7 +48,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "HeadSpin.h"
|
#include "HeadSpin.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
#include "hsGeometry3.h"
|
#include "hsGeometry3.h"
|
||||||
|
|
||||||
#include "pnKeyedObject/hsKeyedObject.h"
|
#include "pnKeyedObject/hsKeyedObject.h"
|
||||||
|
@ -110,17 +110,17 @@ void plProfileManagerFull::ShowGroup(const char* groupName)
|
|||||||
|
|
||||||
void plProfileManagerFull::ShowNextGroup()
|
void plProfileManagerFull::ShowNextGroup()
|
||||||
{
|
{
|
||||||
const char* curGroup = nil;
|
plString curGroup;
|
||||||
if (fShowGroups.begin() != fShowGroups.end())
|
if (fShowGroups.begin() != fShowGroups.end())
|
||||||
curGroup = *(fShowGroups.begin());
|
curGroup = *(fShowGroups.begin());
|
||||||
|
|
||||||
GroupSet groups;
|
GroupSet groups;
|
||||||
GetGroups(groups);
|
GetGroups(groups);
|
||||||
|
|
||||||
const char* nextGroup = nil;
|
plString nextGroup;
|
||||||
if (curGroup)
|
if (!curGroup.IsNull())
|
||||||
{
|
{
|
||||||
CreateStandardGraphs(curGroup, false);
|
CreateStandardGraphs(curGroup.c_str(), false);
|
||||||
|
|
||||||
GroupSet::iterator it = groups.find(curGroup);
|
GroupSet::iterator it = groups.find(curGroup);
|
||||||
it++;
|
it++;
|
||||||
@ -128,7 +128,7 @@ void plProfileManagerFull::ShowNextGroup()
|
|||||||
{
|
{
|
||||||
nextGroup = *it;
|
nextGroup = *it;
|
||||||
}
|
}
|
||||||
ISetActive(curGroup,false);
|
ISetActive(curGroup.c_str(), false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -136,10 +136,10 @@ void plProfileManagerFull::ShowNextGroup()
|
|||||||
}
|
}
|
||||||
|
|
||||||
fShowGroups.clear();
|
fShowGroups.clear();
|
||||||
if (nextGroup)
|
if (!nextGroup.IsNull())
|
||||||
{
|
{
|
||||||
ISetActive(nextGroup, true);
|
ISetActive(nextGroup.c_str(), true);
|
||||||
CreateStandardGraphs(nextGroup, true);
|
CreateStandardGraphs(nextGroup.c_str(), true);
|
||||||
fShowGroups.insert(nextGroup);
|
fShowGroups.insert(nextGroup);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -305,16 +305,16 @@ void plProfileManagerFull::Update()
|
|||||||
GroupSet::iterator it;
|
GroupSet::iterator it;
|
||||||
for (it = fShowGroups.begin(); it != fShowGroups.end(); it++)
|
for (it = fShowGroups.begin(); it != fShowGroups.end(); it++)
|
||||||
{
|
{
|
||||||
const char* groupName = *it;
|
plString groupName = *it;
|
||||||
|
|
||||||
std::vector<plProfileBase*> group;
|
std::vector<plProfileBase*> group;
|
||||||
|
|
||||||
for (int i = 0; i < fVars.size(); i++)
|
for (int i = 0; i < fVars.size(); i++)
|
||||||
if (strcmp(fVars[i]->GetGroup(), groupName) == 0)
|
if (groupName.Compare(fVars[i]->GetGroup()) == 0)
|
||||||
group.push_back(fVars[i]);
|
group.push_back(fVars[i]);
|
||||||
|
|
||||||
int x = 10;
|
int x = 10;
|
||||||
PrintGroup(group, groupName, x, y);
|
PrintGroup(group, groupName.c_str(), x, y);
|
||||||
|
|
||||||
maxX = hsMaximum(maxX, x);
|
maxX = hsMaximum(maxX, x);
|
||||||
y += 10;
|
y += 10;
|
||||||
@ -480,8 +480,8 @@ void plProfileManagerFull::ILogStats()
|
|||||||
|
|
||||||
for (it = groups.begin(); it != groups.end(); it++)
|
for (it = groups.begin(); it != groups.end(); it++)
|
||||||
{
|
{
|
||||||
const char* groupName = *it;
|
plString groupName = *it;
|
||||||
IPrintGroup(&s, groupName, true);
|
IPrintGroup(&s, groupName.c_str(), true);
|
||||||
}
|
}
|
||||||
s.WriteByte('\r');
|
s.WriteByte('\r');
|
||||||
s.WriteByte('\n');
|
s.WriteByte('\n');
|
||||||
@ -492,8 +492,8 @@ void plProfileManagerFull::ILogStats()
|
|||||||
|
|
||||||
for (it = groups.begin(); it != groups.end(); it++)
|
for (it = groups.begin(); it != groups.end(); it++)
|
||||||
{
|
{
|
||||||
const char* groupName = *it;
|
plString groupName = *it;
|
||||||
IPrintGroup(&s, groupName);
|
IPrintGroup(&s, groupName.c_str());
|
||||||
}
|
}
|
||||||
s.WriteByte('\r');
|
s.WriteByte('\r');
|
||||||
s.WriteByte('\n');
|
s.WriteByte('\n');
|
||||||
|
@ -44,11 +44,10 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "plString.h"
|
||||||
|
|
||||||
#include "plProfileManager.h"
|
#include "plProfileManager.h"
|
||||||
|
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
|
|
||||||
class plProfileManager;
|
class plProfileManager;
|
||||||
class plGraphPlate;
|
class plGraphPlate;
|
||||||
class plStatusLog;
|
class plStatusLog;
|
||||||
@ -58,7 +57,7 @@ class plProfileVar;
|
|||||||
class plProfileManagerFull
|
class plProfileManagerFull
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef std::set<const char*, stringISorter> GroupSet;
|
typedef std::set<plString, plString::less_i> GroupSet;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
plProfileManager::VarVec& fVars;
|
plProfileManager::VarVec& fVars;
|
||||||
|
@ -68,7 +68,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "plPhysical.h"
|
#include "plPhysical.h"
|
||||||
#include "plQuality.h"
|
#include "plQuality.h"
|
||||||
#include "hsResMgr.h"
|
#include "hsResMgr.h"
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
#include "hsStream.h"
|
#include "hsStream.h"
|
||||||
#include "hsStringTokenizer.h"
|
#include "hsStringTokenizer.h"
|
||||||
#include "hsTemplates.h"
|
#include "hsTemplates.h"
|
||||||
|
@ -40,7 +40,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
|
|
||||||
*==LICENSE==*/
|
*==LICENSE==*/
|
||||||
#include "HeadSpin.h"
|
#include "HeadSpin.h"
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
|
|
||||||
#include "plComponent.h"
|
#include "plComponent.h"
|
||||||
#include "plComponentReg.h"
|
#include "plComponentReg.h"
|
||||||
@ -77,10 +76,6 @@ struct nodeTMInfo
|
|||||||
// A vector of matrix samples
|
// A vector of matrix samples
|
||||||
typedef std::vector<nodeTMInfo *> plSampleVec;
|
typedef std::vector<nodeTMInfo *> plSampleVec;
|
||||||
|
|
||||||
// PLSAMPLEVECMAP
|
|
||||||
// A map relating bone names to plSampleVecs
|
|
||||||
typedef std::map<char *, plSampleVec *, stringSorter> plSampleVecMap;
|
|
||||||
|
|
||||||
/////////////
|
/////////////
|
||||||
//
|
//
|
||||||
// PROTOTYPES
|
// PROTOTYPES
|
||||||
@ -530,233 +525,3 @@ int LimitTransform(INode* node, Matrix3* nodeTM)
|
|||||||
*/
|
*/
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
//////////
|
|
||||||
// ARCHIVE
|
|
||||||
//////////
|
|
||||||
// Stuff we're not using but that looks kind of handy and which we might use again at some point.
|
|
||||||
|
|
||||||
/////////////////////////////////
|
|
||||||
/////////////////////////////////
|
|
||||||
/// SAMPLETREEMOTION
|
|
||||||
/// Sample motion for all of the non-bip bones in the heirarchy.
|
|
||||||
/// Need to sample the motion before rearranging the hierarchy and then
|
|
||||||
/// apply it after rearranging; hence the intermediate storage format.
|
|
||||||
|
|
||||||
// SAMPLETREEMOTION
|
|
||||||
// Sample all the (non-bip) motion in the whole tree
|
|
||||||
plSampleVecMap *SampleTreeMotion(INode* node, INode* parent, int sampleRate, Interface *theInterface)
|
|
||||||
{
|
|
||||||
Interval interval = theInterface->GetAnimRange();
|
|
||||||
TimeValue start = interval.Start(); // in ticks
|
|
||||||
TimeValue end = interval.End();
|
|
||||||
plSampleVecMap *ourMap = new plSampleVecMap();
|
|
||||||
|
|
||||||
sampleRate *= GetTicksPerFrame(); // convert sample rate to ticks
|
|
||||||
|
|
||||||
SampleTreeMotionRecurse(node, parent, sampleRate, start, end, ourMap);
|
|
||||||
|
|
||||||
return ourMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// SAMPLETREEMOTIONRECURSE
|
|
||||||
void SampleTreeMotionRecurse(INode * node, INode* parent, int sampleRate,
|
|
||||||
TimeValue start, TimeValue end, plSampleVecMap *ourMap)
|
|
||||||
{
|
|
||||||
// if it's not a bip, sample the fuck out of it
|
|
||||||
if(!HasBipController(node))
|
|
||||||
{
|
|
||||||
char *nodeName = node->GetName();
|
|
||||||
char *nameCopy = new char[strlen(nodeName) + 1];
|
|
||||||
strcpy(nameCopy, nodeName);
|
|
||||||
|
|
||||||
plSampleVec *branch = SampleNodeMotion(node, parent, sampleRate, start, end);
|
|
||||||
(*ourMap)[nameCopy] = branch;
|
|
||||||
}
|
|
||||||
|
|
||||||
// whether it's a bip or not, paw through its children
|
|
||||||
for(int i = 0; i < node->NumberOfChildren(); i++)
|
|
||||||
{
|
|
||||||
INode *child = node->GetChildNode(i);
|
|
||||||
SampleTreeMotionRecurse(child, node, sampleRate, start, end, ourMap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GETPARTS
|
|
||||||
void GetParts(int32_t i, std::vector<nodeTMInfo *>& mat3Array, hsAffineParts* parts)
|
|
||||||
{
|
|
||||||
hsAssert(parts, "nil parts");
|
|
||||||
|
|
||||||
// decomp matrix
|
|
||||||
gemAffineParts ap;
|
|
||||||
hsMatrix44 tXform = plMaxNodeBase::Matrix3ToMatrix44(mat3Array[i]->fMat3);
|
|
||||||
|
|
||||||
decomp_affine(tXform.fMap, &ap);
|
|
||||||
AP_SET((*parts), ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
// MAKEROTKEY
|
|
||||||
Quat MakeRotKey(INode *node, INode *parent, TimeValue t)
|
|
||||||
{
|
|
||||||
AffineParts parts = GetLocalNodeParts(node, parent, t);
|
|
||||||
|
|
||||||
Quat q(parts.q.x, parts.q.y, parts.q.z, parts.q.w);
|
|
||||||
if( parts.f < 0.f )
|
|
||||||
{
|
|
||||||
// q = Quat(parts.q.x, parts.q.y, parts.q.z, -parts.q.w);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// q=Quat(-parts.q.x, -parts.q.y, -parts.q.z, parts.q.w);
|
|
||||||
}
|
|
||||||
|
|
||||||
return q;
|
|
||||||
}
|
|
||||||
|
|
||||||
Quat GetRotKey(int32_t i, std::vector<nodeTMInfo *>& mat3Array)
|
|
||||||
{
|
|
||||||
Matrix3 m = mat3Array[i]->fMat3;
|
|
||||||
AffineParts parts;
|
|
||||||
|
|
||||||
decomp_affine(m, &parts);
|
|
||||||
|
|
||||||
Quat q(parts.q.x, parts.q.y, parts.q.z, parts.q.w);
|
|
||||||
|
|
||||||
return q;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// GETROTKEY
|
|
||||||
Quat GetRotKey(int32_t i, std::vector<nodeTMInfo *>& mat3Array, hsAffineParts* parts)
|
|
||||||
{
|
|
||||||
hsAffineParts myParts;
|
|
||||||
if (!parts)
|
|
||||||
{
|
|
||||||
parts=&myParts;
|
|
||||||
GetParts(i, mat3Array, parts);
|
|
||||||
}
|
|
||||||
|
|
||||||
Quat q;
|
|
||||||
if( parts->fF < 0.f )
|
|
||||||
{
|
|
||||||
q = Quat(parts->fQ.fX, parts->fQ.fY, parts->fQ.fZ, -parts->fQ.fW); // ??? why are we inverting W?
|
|
||||||
#if 0
|
|
||||||
if( false)
|
|
||||||
{
|
|
||||||
Point3 ax;
|
|
||||||
float ang;
|
|
||||||
AngAxisFromQ(q, &ang, ax);
|
|
||||||
//ang -= M_PI;
|
|
||||||
ax = -ax;
|
|
||||||
q = QFromAngAxis(ang, ax);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
q=Quat(-parts->fQ.fX, -parts->fQ.fY, -parts->fQ.fZ, parts->fQ.fW);
|
|
||||||
}
|
|
||||||
|
|
||||||
return q;
|
|
||||||
}
|
|
||||||
|
|
||||||
// MAKEPOSKEY
|
|
||||||
Point3 MakePosKey(INode *node, INode *parent, TimeValue t)
|
|
||||||
{
|
|
||||||
AffineParts parts = GetLocalNodeParts(node, parent, t);
|
|
||||||
|
|
||||||
return Point3(parts.t.x, parts.t.y, parts.t.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// GETPOSKEY
|
|
||||||
Point3 GetPosKey(int32_t i, std::vector<nodeTMInfo *>& mat3Array, hsAffineParts* parts)
|
|
||||||
{
|
|
||||||
hsAffineParts myParts;
|
|
||||||
if (!parts)
|
|
||||||
{
|
|
||||||
parts=&myParts;
|
|
||||||
GetParts(i, mat3Array, parts);
|
|
||||||
}
|
|
||||||
return Point3(parts->fT.fX, parts->fT.fY, parts->fT.fZ);
|
|
||||||
}
|
|
||||||
|
|
||||||
// MAKESCALEKEY
|
|
||||||
ScaleValue MakeScaleKey(INode *node, INode *parent, TimeValue t)
|
|
||||||
{
|
|
||||||
Matrix3 m1 = node->GetNodeTM(t);
|
|
||||||
hsMatrix44 hsM = plMaxNodeBase::Matrix3ToMatrix44(m1);
|
|
||||||
gemAffineParts ap;
|
|
||||||
hsAffineParts hsParts;
|
|
||||||
|
|
||||||
decomp_affine(hsM.fMap, &ap);
|
|
||||||
AP_SET(hsParts, ap);
|
|
||||||
|
|
||||||
Point3 sAx1;
|
|
||||||
sAx1=Point3(hsParts.fK.fX, hsParts.fK.fY, hsParts.fK.fZ);
|
|
||||||
if( hsParts.fF < 0.f )
|
|
||||||
{
|
|
||||||
sAx1=-sAx1;
|
|
||||||
}
|
|
||||||
Quat sQ1(hsParts.fU.fX, hsParts.fU.fY, hsParts.fU.fZ, hsParts.fU.fW);
|
|
||||||
|
|
||||||
// return ScaleValue(sAx, sQ);
|
|
||||||
|
|
||||||
AffineParts parts = GetLocalNodeParts(node, parent, t);
|
|
||||||
|
|
||||||
Point3 sAx(parts.k.x, parts.k.y, parts.k.z);
|
|
||||||
if( parts.f < 0.f )
|
|
||||||
{
|
|
||||||
sAx=-sAx;
|
|
||||||
}
|
|
||||||
Quat sQ(parts.u.x, parts.u.y, parts.u.z, parts.u.w);
|
|
||||||
|
|
||||||
return ScaleValue(sAx, sQ);
|
|
||||||
}
|
|
||||||
|
|
||||||
// GETSCALEKEY
|
|
||||||
ScaleValue GetScaleKey(int32_t i, std::vector<nodeTMInfo *>& mat3Array, hsAffineParts* parts)
|
|
||||||
{
|
|
||||||
hsAffineParts myParts;
|
|
||||||
if (!parts)
|
|
||||||
{
|
|
||||||
parts=&myParts;
|
|
||||||
GetParts(i, mat3Array, parts);
|
|
||||||
}
|
|
||||||
|
|
||||||
Point3 sAx;
|
|
||||||
sAx=Point3(parts->fK.fX, parts->fK.fY, parts->fK.fZ);
|
|
||||||
if( parts->fF < 0.f )
|
|
||||||
{
|
|
||||||
sAx=-sAx;
|
|
||||||
}
|
|
||||||
Quat sQ(parts->fU.fX, parts->fU.fY, parts->fU.fZ, parts->fU.fW);
|
|
||||||
|
|
||||||
return ScaleValue(sAx, sQ);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// GETLOCALNODEPARTS
|
|
||||||
AffineParts GetLocalNodeParts(INode *node, INode *parent, TimeValue t)
|
|
||||||
{
|
|
||||||
Matrix3 localTM = node->GetNodeTM(t); // world transform of source node
|
|
||||||
|
|
||||||
INode *parent2 = node->GetParentNode();
|
|
||||||
// localize it
|
|
||||||
Matrix3 parentTMX = parent->GetNodeTM(t);
|
|
||||||
Matrix3 parentTM = parent2->GetNodeTM(t);
|
|
||||||
|
|
||||||
Matrix3 invParent = Inverse(parentTM);
|
|
||||||
localTM *= invParent;
|
|
||||||
|
|
||||||
AffineParts parts;
|
|
||||||
|
|
||||||
decomp_affine(localTM, &parts);
|
|
||||||
|
|
||||||
return parts;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
@ -44,7 +44,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
#include "plString.h"
|
#include "plString.h"
|
||||||
|
|
||||||
class plErrorMsg;
|
class plErrorMsg;
|
||||||
@ -88,4 +87,4 @@ void GetSegment(const char *note, float time, SegmentMap *segMap, plErrorMsg *pE
|
|||||||
|
|
||||||
bool DoesHaveStopPoints(Animatable *anim);
|
bool DoesHaveStopPoints(Animatable *anim);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -41,7 +41,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
*==LICENSE==*/
|
*==LICENSE==*/
|
||||||
#include "HeadSpin.h"
|
#include "HeadSpin.h"
|
||||||
#include "hsResMgr.h"
|
#include "hsResMgr.h"
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
#include "hsWindows.h"
|
#include "hsWindows.h"
|
||||||
|
|
||||||
#include <iparamm2.h>
|
#include <iparamm2.h>
|
||||||
@ -597,7 +596,7 @@ void plResponderProc::ICreateMenu()
|
|||||||
{
|
{
|
||||||
fhMenu = CreatePopupMenu();
|
fhMenu = CreatePopupMenu();
|
||||||
|
|
||||||
std::map<const char *, HMENU, stringSorter> menus;
|
std::map<plString, HMENU> menus;
|
||||||
int cmdID = 0;
|
int cmdID = 0;
|
||||||
|
|
||||||
for (int i = 0; i < gResponderCmds.size(); i++)
|
for (int i = 0; i < gResponderCmds.size(); i++)
|
||||||
|
@ -59,7 +59,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "hsExceptionStack.h"
|
#include "hsExceptionStack.h"
|
||||||
#include "hsExceptions.h"
|
#include "hsExceptions.h"
|
||||||
#include "plFile/plFileUtils.h"
|
#include "plFile/plFileUtils.h"
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
#include "hsStream.h"
|
#include "hsStream.h"
|
||||||
|
|
||||||
// Windows
|
// Windows
|
||||||
|
@ -41,7 +41,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
*==LICENSE==*/
|
*==LICENSE==*/
|
||||||
|
|
||||||
#include "HeadSpin.h"
|
#include "HeadSpin.h"
|
||||||
#include "hsStlSortUtils.h"
|
|
||||||
#include "hsWindows.h"
|
#include "hsWindows.h"
|
||||||
|
|
||||||
#include <bitmap.h>
|
#include <bitmap.h>
|
||||||
|
@ -43,7 +43,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#define plMtlCollector_h_inc
|
#define plMtlCollector_h_inc
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include "hsStlSortUtils.h"
|
#include "plString.h"
|
||||||
|
|
||||||
class PBBitmap;
|
class PBBitmap;
|
||||||
class Mtl;
|
class Mtl;
|
||||||
@ -55,7 +55,7 @@ typedef std::set<Mtl*> MtlSet;
|
|||||||
typedef std::set<Texmap*> TexSet;
|
typedef std::set<Texmap*> TexSet;
|
||||||
typedef std::set<plPlasmaMAXLayer*> LayerSet;
|
typedef std::set<plPlasmaMAXLayer*> LayerSet;
|
||||||
typedef std::set<PBBitmap*> PBSet;
|
typedef std::set<PBBitmap*> PBSet;
|
||||||
typedef std::set<const char*, stringISorter> TexNameSet;
|
typedef std::set<plString, plString::less_i> TexNameSet;
|
||||||
|
|
||||||
class plMtlCollector
|
class plMtlCollector
|
||||||
{
|
{
|
||||||
|
@ -80,10 +80,10 @@ void plResCollector::Collect()
|
|||||||
TexNameSet::iterator it = texNames.begin();
|
TexNameSet::iterator it = texNames.begin();
|
||||||
for (; it != texNames.end(); it++)
|
for (; it != texNames.end(); it++)
|
||||||
{
|
{
|
||||||
const char *texName = *it;
|
plString texName = *it;
|
||||||
|
|
||||||
char outpath[MAX_PATH], name[_MAX_FNAME+_MAX_EXT], ext[_MAX_EXT];
|
char outpath[MAX_PATH], name[_MAX_FNAME+_MAX_EXT], ext[_MAX_EXT];
|
||||||
_splitpath(texName, NULL, NULL, name, ext);
|
_splitpath(texName.c_str(), NULL, NULL, name, ext);
|
||||||
strcat(name, ext);
|
strcat(name, ext);
|
||||||
|
|
||||||
if (bar.Update(name))
|
if (bar.Update(name))
|
||||||
@ -92,7 +92,7 @@ void plResCollector::Collect()
|
|||||||
strcpy(outpath, path);
|
strcpy(outpath, path);
|
||||||
strcat(outpath, name);
|
strcat(outpath, name);
|
||||||
|
|
||||||
CopyFile(texName, outpath, TRUE);
|
CopyFile(texName.c_str(), outpath, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the filename to save to
|
// Get the filename to save to
|
||||||
|
Reference in New Issue
Block a user