mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-18 19:29:09 +00:00
@ -217,15 +217,27 @@ void plRegistryKeyList::Write(hsStream* s)
|
|||||||
s->WriteLE32(0);
|
s->WriteLE32(0);
|
||||||
s->WriteByte(0); // Deprecated flags
|
s->WriteByte(0); // Deprecated flags
|
||||||
|
|
||||||
s->WriteLE32(fKeys.size());
|
// We only write out keys with data. Fill this value in later...
|
||||||
|
uint32_t countPos = s->GetPosition();
|
||||||
|
s->WriteLE32(0);
|
||||||
|
|
||||||
// Write out all our keys
|
// Write out all our keys with data
|
||||||
|
uint32_t keyCount = 0;
|
||||||
for (auto it = fKeys.begin(); it != fKeys.end(); ++it)
|
for (auto it = fKeys.begin(); it != fKeys.end(); ++it)
|
||||||
(*it)->Write(s);
|
{
|
||||||
|
plKeyImp* key = *it;
|
||||||
|
if (key->ObjectIsLoaded())
|
||||||
|
{
|
||||||
|
++keyCount;
|
||||||
|
key->Write(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Go back to the start and write the length of our data
|
// Rewind and write out data size and key count
|
||||||
uint32_t endPos = s->GetPosition();
|
uint32_t endPos = s->GetPosition();
|
||||||
s->SetPosition(beginPos);
|
s->SetPosition(beginPos);
|
||||||
s->WriteLE32(endPos-beginPos-sizeof(uint32_t));
|
s->WriteLE32(endPos-beginPos-sizeof(uint32_t));
|
||||||
|
s->SetPosition(countPos);
|
||||||
|
s->WriteLE32(keyCount);
|
||||||
s->SetPosition(endPos);
|
s->SetPosition(endPos);
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
// Standard Library
|
// Standard Library
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -78,6 +79,19 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include <shlwapi.h>
|
#include <shlwapi.h>
|
||||||
#include <windowsx.h>
|
#include <windowsx.h>
|
||||||
|
|
||||||
|
// 3ds Max SDK
|
||||||
|
// This stuff should ALWAYS come after hsWindows.h
|
||||||
|
#include <max.h>
|
||||||
|
#include <bmmlib.h>
|
||||||
|
#include <CS/bipexp.h>
|
||||||
|
#include <decomp.h>
|
||||||
|
#include <dummy.h>
|
||||||
|
#include <iparamm2.h>
|
||||||
|
#include <meshdlib.h>
|
||||||
|
#include <notetrck.h>
|
||||||
|
#include <notify.h>
|
||||||
|
#include <stdmat.h>
|
||||||
|
|
||||||
// These MaxComponent headers will trigger a rebuild if they are changed
|
// These MaxComponent headers will trigger a rebuild if they are changed
|
||||||
// So it's probably best to precompile them anyway.
|
// So it's probably best to precompile them anyway.
|
||||||
// Some of these may include 3dsm headers, so ensure they come after hsWindows.h
|
// Some of these may include 3dsm headers, so ensure they come after hsWindows.h
|
||||||
@ -102,18 +116,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "MaxMain/plMaxNode.h"
|
#include "MaxMain/plMaxNode.h"
|
||||||
#include "MaxMain/plMaxNodeData.h"
|
#include "MaxMain/plMaxNodeData.h"
|
||||||
|
|
||||||
// 3ds Max SDK
|
|
||||||
// This stuff should ALWAYS come after hsWindows.h
|
|
||||||
#include <bmmlib.h>
|
|
||||||
#include <CS/bipexp.h>
|
|
||||||
#include <decomp.h>
|
|
||||||
#include <dummy.h>
|
|
||||||
#include <iparamm2.h>
|
|
||||||
#include <meshdlib.h>
|
|
||||||
#include <notetrck.h>
|
|
||||||
#include <notify.h>
|
|
||||||
#include <stdmat.h>
|
|
||||||
|
|
||||||
#if MAX_VERSION_MAJOR >= 13
|
#if MAX_VERSION_MAJOR >= 13
|
||||||
# include <INamedSelectionSetManager.h>
|
# include <INamedSelectionSetManager.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -45,8 +45,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "pnKeyedObject/plKey.h"
|
#include "pnKeyedObject/plKey.h"
|
||||||
#include "hsWindows.h"
|
#include "hsWindows.h"
|
||||||
|
|
||||||
#include <iparamb2.h>
|
|
||||||
#include <max.h>
|
#include <max.h>
|
||||||
|
#include <iparamb2.h>
|
||||||
|
|
||||||
extern TCHAR *GetString(int id);
|
extern TCHAR *GetString(int id);
|
||||||
extern HINSTANCE hInstance;
|
extern HINSTANCE hInstance;
|
||||||
@ -67,7 +67,6 @@ class INode;
|
|||||||
class INodeTab;
|
class INodeTab;
|
||||||
class IObjParam;
|
class IObjParam;
|
||||||
class ObjectState;
|
class ObjectState;
|
||||||
enum IOResult;
|
|
||||||
class IParamBlock2;
|
class IParamBlock2;
|
||||||
enum RefResult;
|
enum RefResult;
|
||||||
class RemapDir;
|
class RemapDir;
|
||||||
|
@ -102,13 +102,6 @@ int IDescCompare(ClassDesc *desc1, ClassDesc *desc2);
|
|||||||
|
|
||||||
void plComponentMgr::Register(ClassDesc *desc)
|
void plComponentMgr::Register(ClassDesc *desc)
|
||||||
{
|
{
|
||||||
// No descs? Go ahead and push it to the back...
|
|
||||||
if (fDescs.size() == 0)
|
|
||||||
{
|
|
||||||
fDescs.push_back(desc);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Organize desc's by category and name
|
// Organize desc's by category and name
|
||||||
std::vector<ClassDesc*>::iterator it;
|
std::vector<ClassDesc*>::iterator it;
|
||||||
for (it = fDescs.begin(); it != fDescs.end(); it++)
|
for (it = fDescs.begin(); it != fDescs.end(); it++)
|
||||||
@ -119,6 +112,9 @@ void plComponentMgr::Register(ClassDesc *desc)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Still here? Push it to the back.
|
||||||
|
fDescs.push_back(desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
int IDescCompare(ClassDesc *desc1, ClassDesc *desc2)
|
int IDescCompare(ClassDesc *desc1, ClassDesc *desc2)
|
||||||
|
@ -51,6 +51,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
#include <iparamm2.h>
|
#include <iparamm2.h>
|
||||||
|
#include <memory>
|
||||||
#include <notify.h>
|
#include <notify.h>
|
||||||
#pragma hdrstop
|
#pragma hdrstop
|
||||||
|
|
||||||
@ -96,6 +97,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
|
|
||||||
// Location Related
|
// Location Related
|
||||||
#include "plAgeDescription/plAgeDescription.h"
|
#include "plAgeDescription/plAgeDescription.h"
|
||||||
|
#include "plFile/plEncryptedStream.h"
|
||||||
#include "MaxMain/plMaxCFGFile.h"
|
#include "MaxMain/plMaxCFGFile.h"
|
||||||
#include "MaxMain/plAgeDescInterface.h"
|
#include "MaxMain/plAgeDescInterface.h"
|
||||||
#include "plResMgr/plPageInfo.h"
|
#include "plResMgr/plPageInfo.h"
|
||||||
@ -270,7 +272,7 @@ protected:
|
|||||||
|
|
||||||
int idx = ComboBox_AddString( hAgeCombo, ageName.c_str() );
|
int idx = ComboBox_AddString( hAgeCombo, ageName.c_str() );
|
||||||
// Store the pathas the item data for later (so don't free it yet!)
|
// Store the pathas the item data for later (so don't free it yet!)
|
||||||
ComboBox_SetItemData( hAgeCombo, idx, (LPARAM)ageFiles[i].AsString().c_str() );
|
ComboBox_SetItemData( hAgeCombo, idx, (LPARAM)hsStrcpy(ageFiles[i].AsString().c_str()) );
|
||||||
|
|
||||||
if (ageName == curAge)
|
if (ageName == curAge)
|
||||||
ComboBox_SetCurSel( hAgeCombo, idx );
|
ComboBox_SetCurSel( hAgeCombo, idx );
|
||||||
@ -649,9 +651,9 @@ void plPageInfoComponent::IUpdateSeqNumbersFromAgeFile( plErrorMsg *errMsg )
|
|||||||
plFileName path = plFileName::Join(ageFolder, plString::Format("%s.age", curAge));
|
plFileName path = plFileName::Join(ageFolder, plString::Format("%s.age", curAge));
|
||||||
|
|
||||||
IVerifyLatestAgeAsset( curAge, path, errMsg );
|
IVerifyLatestAgeAsset( curAge, path, errMsg );
|
||||||
|
std::unique_ptr<plAgeDescription> aged(plPageInfoUtils::GetAgeDesc(curAge));
|
||||||
|
|
||||||
hsUNIXStream s;
|
if (!aged)
|
||||||
if (!s.Open(path))
|
|
||||||
{
|
{
|
||||||
errMsg->Set( true,
|
errMsg->Set( true,
|
||||||
"PageInfo Convert Error",
|
"PageInfo Convert Error",
|
||||||
@ -664,13 +666,8 @@ void plPageInfoComponent::IUpdateSeqNumbersFromAgeFile( plErrorMsg *errMsg )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// create and read the age desc
|
|
||||||
plAgeDescription aged;
|
|
||||||
aged.Read(&s);
|
|
||||||
s.Close();
|
|
||||||
|
|
||||||
// Update based on the age file now
|
// Update based on the age file now
|
||||||
fCompPB->SetValue( kInfoSeqPrefix, 0, (int)aged.GetSequencePrefix() );
|
fCompPB->SetValue( kInfoSeqPrefix, 0, (int)aged->GetSequencePrefix() );
|
||||||
|
|
||||||
// Find our page
|
// Find our page
|
||||||
const char *compPBPageName = fCompPB->GetStr( kInfoPage );
|
const char *compPBPageName = fCompPB->GetStr( kInfoPage );
|
||||||
@ -688,16 +685,16 @@ void plPageInfoComponent::IUpdateSeqNumbersFromAgeFile( plErrorMsg *errMsg )
|
|||||||
}
|
}
|
||||||
|
|
||||||
plAgePage *page;
|
plAgePage *page;
|
||||||
aged.SeekFirstPage();
|
aged->SeekFirstPage();
|
||||||
|
|
||||||
while( ( page = aged.GetNextPage() ) != nil )
|
while( ( page = aged->GetNextPage() ) != nil )
|
||||||
{
|
{
|
||||||
if( page->GetName().CompareI( compPBPageName ) == 0 )
|
if( page->GetName().CompareI( compPBPageName ) == 0 )
|
||||||
{
|
{
|
||||||
fCompPB->SetValue( kInfoSeqSuffix, 0, (int)page->GetSeqSuffix() );
|
fCompPB->SetValue( kInfoSeqSuffix, 0, (int)page->GetSeqSuffix() );
|
||||||
|
|
||||||
// Also re-copy the page name, just to make sure the case is correct
|
// Also re-copy the page name, just to make sure the case is correct
|
||||||
fCompPB->SetValue( kInfoPage, 0, (const char *)page->GetName().c_str() );
|
fCompPB->SetValue( kInfoPage, 0, const_cast<char*>(page->GetName().c_str()) );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -790,18 +787,16 @@ plAgeDescription *plPageInfoUtils::GetAgeDesc( const plString &ageName )
|
|||||||
{
|
{
|
||||||
plFileName ageFolder = plPageInfoUtils::GetAgeFolder();
|
plFileName ageFolder = plPageInfoUtils::GetAgeFolder();
|
||||||
if (!ageFolder.IsValid() || ageName.IsNull())
|
if (!ageFolder.IsValid() || ageName.IsNull())
|
||||||
return nil;
|
return nullptr;
|
||||||
|
|
||||||
hsUNIXStream s;
|
plAgeDescription* aged = new plAgeDescription;
|
||||||
if (!s.Open(plFileName::Join(ageFolder, ageName + ".age")))
|
if (aged->ReadFromFile(plFileName::Join(ageFolder, ageName + ".age")))
|
||||||
return nil;
|
return aged;
|
||||||
|
else
|
||||||
// Create and read the age desc
|
{
|
||||||
plAgeDescription *aged = new plAgeDescription;
|
delete aged;
|
||||||
aged->Read( &s );
|
return nullptr;
|
||||||
s.Close();
|
}
|
||||||
|
|
||||||
return aged;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* LocCompGetPage(plComponentBase* comp)
|
const char* LocCompGetPage(plComponentBase* comp)
|
||||||
|
@ -44,6 +44,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#define plMiscComponents_inc
|
#define plMiscComponents_inc
|
||||||
|
|
||||||
#include "plComponent.h"
|
#include "plComponent.h"
|
||||||
|
#include <notify.h>
|
||||||
|
|
||||||
#define ROOM_CID Class_ID(0x70a1570d, 0x472f5647)
|
#define ROOM_CID Class_ID(0x70a1570d, 0x472f5647)
|
||||||
#define PAGEINFO_CID Class_ID(0x54ee40f1, 0x4de45acc)
|
#define PAGEINFO_CID Class_ID(0x54ee40f1, 0x4de45acc)
|
||||||
@ -55,7 +56,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
class plFileName;
|
class plFileName;
|
||||||
class plAgeDescription;
|
class plAgeDescription;
|
||||||
class plComponentBase;
|
class plComponentBase;
|
||||||
struct NotifyInfo;
|
|
||||||
|
|
||||||
const char* LocCompGetPage(plComponentBase* comp);
|
const char* LocCompGetPage(plComponentBase* comp);
|
||||||
|
|
||||||
|
@ -51,7 +51,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
// Standard Library
|
// Standard Library
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
|
#include <functional>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <memory>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -75,18 +77,16 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include <CommCtrl.h>
|
#include <CommCtrl.h>
|
||||||
#include <commdlg.h>
|
#include <commdlg.h>
|
||||||
|
|
||||||
// MaxComponent
|
|
||||||
#include "MaxComponent/plComponent.h"
|
|
||||||
|
|
||||||
// 3ds Max SDK
|
// 3ds Max SDK
|
||||||
// This stuff should ALWAYS come after hsWindows.h
|
// This stuff should ALWAYS come after hsWindows.h
|
||||||
|
#include <max.h>
|
||||||
#include <bmmlib.h>
|
#include <bmmlib.h>
|
||||||
#include <dummy.h>
|
#include <dummy.h>
|
||||||
#include <keyreduc.h>
|
#include <keyreduc.h>
|
||||||
#include <INode.h>
|
#include <INode.h>
|
||||||
|
#include <iparamm2.h> // needs to be above ISkin.h for Max 7
|
||||||
#include <ISkin.h>
|
#include <ISkin.h>
|
||||||
#include <istdplug.h>
|
#include <istdplug.h>
|
||||||
#include <iparamm2.h>
|
|
||||||
#include <maxversion.h>
|
#include <maxversion.h>
|
||||||
#include <meshdlib.h>
|
#include <meshdlib.h>
|
||||||
#include <modstack.h>
|
#include <modstack.h>
|
||||||
@ -94,6 +94,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include <stdmat.h>
|
#include <stdmat.h>
|
||||||
#include <texutil.h>
|
#include <texutil.h>
|
||||||
|
|
||||||
|
// MaxComponent
|
||||||
|
#include "MaxComponent/plComponent.h"
|
||||||
|
|
||||||
#if MAX_VERSION_MAJOR >= 13
|
#if MAX_VERSION_MAJOR >= 13
|
||||||
# include <INamedSelectionSetManager.h>
|
# include <INamedSelectionSetManager.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -40,12 +40,15 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
|
|
||||||
*==LICENSE==*/
|
*==LICENSE==*/
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <math.h>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "HeadSpin.h"
|
#include "HeadSpin.h"
|
||||||
#include "hsExceptionStack.h"
|
#include "hsExceptionStack.h"
|
||||||
#include "hsTemplates.h"
|
#include "hsTemplates.h"
|
||||||
#include "hsWindows.h"
|
#include "hsWindows.h"
|
||||||
#include <commdlg.h>
|
#include <commdlg.h>
|
||||||
#include <math.h>
|
|
||||||
#include <stdmat.h>
|
#include <stdmat.h>
|
||||||
#include <bmmlib.h>
|
#include <bmmlib.h>
|
||||||
#include <istdplug.h>
|
#include <istdplug.h>
|
||||||
@ -72,6 +75,18 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "pnSceneObject/plSceneObject.h"
|
#include "pnSceneObject/plSceneObject.h"
|
||||||
#include "pnSceneObject/plCoordinateInterface.h"
|
#include "pnSceneObject/plCoordinateInterface.h"
|
||||||
|
|
||||||
|
typedef std::unique_ptr<IKey, std::function<void(IKey*)>> ikey_ptr;
|
||||||
|
|
||||||
|
/** Allocates a managed buffer to store derivatives of IKey */
|
||||||
|
static ikey_ptr IAllocKey(size_t size)
|
||||||
|
{
|
||||||
|
return ikey_ptr(
|
||||||
|
reinterpret_cast<IKey*>(new uint8_t[size]),
|
||||||
|
[](IKey* ptr) { delete[] reinterpret_cast<uint8_t*>(ptr); });
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
extern UserPropMgr gUserPropMgr;
|
extern UserPropMgr gUserPropMgr;
|
||||||
|
|
||||||
hsControlConverter& hsControlConverter::Instance()
|
hsControlConverter& hsControlConverter::Instance()
|
||||||
@ -760,7 +775,7 @@ plLeafController* hsControlConverter::ICreateQuatController(plMaxNode* node, Con
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
IKey* key=(IKey*)(new uint8_t[ikeys->GetKeySize()]);
|
ikey_ptr key = IAllocKey(ikeys->GetKeySize());
|
||||||
plLeafController* pc = new plLeafController;
|
plLeafController* pc = new plLeafController;
|
||||||
|
|
||||||
uint8_t compressLevel = node->GetAnimCompress();
|
uint8_t compressLevel = node->GetAnimCompress();
|
||||||
@ -776,7 +791,7 @@ plLeafController* hsControlConverter::ICreateQuatController(plMaxNode* node, Con
|
|||||||
for(int i = startIdx; i <= endIdx; i++)
|
for(int i = startIdx; i <= endIdx; i++)
|
||||||
{
|
{
|
||||||
// Get key
|
// Get key
|
||||||
ikeys->GetKey(i, key);
|
ikeys->GetKey(i, key.get());
|
||||||
const float kMaxRads = M_PI* 0.5f;
|
const float kMaxRads = M_PI* 0.5f;
|
||||||
Tab<TimeValue> kTimes;
|
Tab<TimeValue> kTimes;
|
||||||
kTimes.ZeroCount();
|
kTimes.ZeroCount();
|
||||||
@ -791,12 +806,12 @@ plLeafController* hsControlConverter::ICreateQuatController(plMaxNode* node, Con
|
|||||||
if (keyType == hsKeyFrame::kQuatKeyFrame)
|
if (keyType == hsKeyFrame::kQuatKeyFrame)
|
||||||
{
|
{
|
||||||
hsQuatKey *hsKey = pc->GetQuatKey(i - startIdx);
|
hsQuatKey *hsKey = pc->GetQuatKey(i - startIdx);
|
||||||
ICreateHSInterpKey(control, key, kTimes[k], hsKey, node, camRot);
|
ICreateHSInterpKey(control, key.get(), kTimes[k], hsKey, node, camRot);
|
||||||
}
|
}
|
||||||
else if (keyType == hsKeyFrame::kCompressedQuatKeyFrame64)
|
else if (keyType == hsKeyFrame::kCompressedQuatKeyFrame64)
|
||||||
{
|
{
|
||||||
hsQuatKey tempKey;
|
hsQuatKey tempKey;
|
||||||
ICreateHSInterpKey(control, key, kTimes[k], &tempKey, node, camRot);
|
ICreateHSInterpKey(control, key.get(), kTimes[k], &tempKey, node, camRot);
|
||||||
hsCompressedQuatKey64 *compKey = pc->GetCompressedQuatKey64(i - startIdx);
|
hsCompressedQuatKey64 *compKey = pc->GetCompressedQuatKey64(i - startIdx);
|
||||||
compKey->fFrame = tempKey.fFrame;
|
compKey->fFrame = tempKey.fFrame;
|
||||||
compKey->SetQuat(tempKey.fValue);
|
compKey->SetQuat(tempKey.fValue);
|
||||||
@ -804,14 +819,13 @@ plLeafController* hsControlConverter::ICreateQuatController(plMaxNode* node, Con
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
hsQuatKey tempKey;
|
hsQuatKey tempKey;
|
||||||
ICreateHSInterpKey(control, key, kTimes[k], &tempKey, node, camRot);
|
ICreateHSInterpKey(control, key.get(), kTimes[k], &tempKey, node, camRot);
|
||||||
hsCompressedQuatKey32 *compKey = pc->GetCompressedQuatKey32(i - startIdx);
|
hsCompressedQuatKey32 *compKey = pc->GetCompressedQuatKey32(i - startIdx);
|
||||||
compKey->fFrame = tempKey.fFrame;
|
compKey->fFrame = tempKey.fFrame;
|
||||||
compKey->SetQuat(tempKey.fValue);
|
compKey->SetQuat(tempKey.fValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete [] key;
|
|
||||||
|
|
||||||
return pc;
|
return pc;
|
||||||
}
|
}
|
||||||
@ -840,22 +854,21 @@ plLeafController* hsControlConverter::ICreateScaleValueController(plMaxNode* nod
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
IKey* key=(IKey*)(new uint8_t [ikeys->GetKeySize()]);
|
ikey_ptr key = IAllocKey(ikeys->GetKeySize());
|
||||||
plLeafController* pc = new plLeafController;
|
plLeafController* pc = new plLeafController;
|
||||||
pc->AllocKeys(endIdx - startIdx + 1, GetKeyType(control));
|
pc->AllocKeys(endIdx - startIdx + 1, GetKeyType(control));
|
||||||
for(int i = startIdx; i <= endIdx; i++)
|
for(int i = startIdx; i <= endIdx; i++)
|
||||||
{
|
{
|
||||||
// Get key
|
// Get key
|
||||||
ikeys->GetKey(i, key);
|
ikeys->GetKey(i, key.get());
|
||||||
hsScaleKey *hsKey = pc->GetScaleKey(i - startIdx);
|
hsScaleKey *hsKey = pc->GetScaleKey(i - startIdx);
|
||||||
if (hsKey)
|
if (hsKey)
|
||||||
ICreateHSInterpKey(control, key, key->time, hsKey, node);
|
ICreateHSInterpKey(control, key.get(), key->time, hsKey, node);
|
||||||
|
|
||||||
hsBezScaleKey *bezKey = pc->GetBezScaleKey(i - startIdx);
|
hsBezScaleKey *bezKey = pc->GetBezScaleKey(i - startIdx);
|
||||||
if (bezKey)
|
if (bezKey)
|
||||||
ICreateHSInterpKey(control, key, key->time, bezKey, node);
|
ICreateHSInterpKey(control, key.get(), key->time, bezKey, node);
|
||||||
}
|
}
|
||||||
delete [] key;
|
|
||||||
return pc;
|
return pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -881,23 +894,22 @@ plLeafController* hsControlConverter::ICreateScalarController(plMaxNode* node, C
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
IKey* key=(IKey*)(new uint8_t [ikeys->GetKeySize()]);
|
ikey_ptr key = IAllocKey(ikeys->GetKeySize());
|
||||||
plLeafController* pc = new plLeafController;
|
plLeafController* pc = new plLeafController;
|
||||||
pc->AllocKeys(endIdx - startIdx + 1, GetKeyType(control));
|
pc->AllocKeys(endIdx - startIdx + 1, GetKeyType(control));
|
||||||
for(int i = startIdx; i <= endIdx; i++)
|
for(int i = startIdx; i <= endIdx; i++)
|
||||||
{
|
{
|
||||||
// Get key
|
// Get key
|
||||||
ikeys->GetKey(i, key);
|
ikeys->GetKey(i, key.get());
|
||||||
hsScalarKey *hsKey = pc->GetScalarKey(i - startIdx);
|
hsScalarKey *hsKey = pc->GetScalarKey(i - startIdx);
|
||||||
if (hsKey)
|
if (hsKey)
|
||||||
ICreateHSInterpKey(control, key, key->time, hsKey);
|
ICreateHSInterpKey(control, key.get(), key->time, hsKey);
|
||||||
|
|
||||||
hsBezScalarKey *bezKey = pc->GetBezScalarKey(i - startIdx);
|
hsBezScalarKey *bezKey = pc->GetBezScalarKey(i - startIdx);
|
||||||
if (bezKey)
|
if (bezKey)
|
||||||
ICreateHSInterpKey(control, key, key->time, bezKey);
|
ICreateHSInterpKey(control, key.get(), key->time, bezKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] key;
|
|
||||||
return pc;
|
return pc;
|
||||||
}
|
}
|
||||||
return nil;
|
return nil;
|
||||||
@ -923,22 +935,21 @@ plLeafController* hsControlConverter::ICreateSimplePosController(plMaxNode* node
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
IKey* key=(IKey*)(new uint8_t [ikeys->GetKeySize()]);
|
ikey_ptr key = IAllocKey(ikeys->GetKeySize());
|
||||||
plLeafController* pc = new plLeafController;
|
plLeafController* pc = new plLeafController;
|
||||||
pc->AllocKeys(endIdx - startIdx + 1, GetKeyType(control));
|
pc->AllocKeys(endIdx - startIdx + 1, GetKeyType(control));
|
||||||
for(int i = startIdx; i <= endIdx; i++)
|
for(int i = startIdx; i <= endIdx; i++)
|
||||||
{
|
{
|
||||||
// Get key
|
// Get key
|
||||||
ikeys->GetKey(i, key);
|
ikeys->GetKey(i, key.get());
|
||||||
hsPoint3Key *hsKey = pc->GetPoint3Key(i - startIdx);
|
hsPoint3Key *hsKey = pc->GetPoint3Key(i - startIdx);
|
||||||
if (hsKey)
|
if (hsKey)
|
||||||
ICreateHSInterpKey(control, key, key->time, hsKey);
|
ICreateHSInterpKey(control, key.get(), key->time, hsKey);
|
||||||
|
|
||||||
hsBezPoint3Key *bezKey = pc->GetBezPoint3Key(i - startIdx);
|
hsBezPoint3Key *bezKey = pc->GetBezPoint3Key(i - startIdx);
|
||||||
if (bezKey)
|
if (bezKey)
|
||||||
ICreateHSInterpKey(control, key, key->time, bezKey);
|
ICreateHSInterpKey(control, key.get(), key->time, bezKey);
|
||||||
}
|
}
|
||||||
delete [] key;
|
|
||||||
return pc;
|
return pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -979,13 +990,13 @@ int hsControlConverter::IAddPartsKeys(Control* control,
|
|||||||
//
|
//
|
||||||
// Traverse all keys of controller
|
// Traverse all keys of controller
|
||||||
//
|
//
|
||||||
IKey* key=(IKey*)(new uint8_t [ikeys->GetKeySize()]);
|
ikey_ptr key = IAllocKey(ikeys->GetKeySize());
|
||||||
bool mb=false;
|
bool mb=false;
|
||||||
plMaxNode* xformParent = GetXformParent(node);
|
plMaxNode* xformParent = GetXformParent(node);
|
||||||
for(i = startIdx; i <= endIdx; i++)
|
for(i = startIdx; i <= endIdx; i++)
|
||||||
{
|
{
|
||||||
// Get key
|
// Get key
|
||||||
ikeys->GetKey(i, key);
|
ikeys->GetKey(i, key.get());
|
||||||
float frameTime = key->time / GetTicksPerSec();
|
float frameTime = key->time / GetTicksPerSec();
|
||||||
int frameNum = key->time / GetTicksPerFrame();
|
int frameNum = key->time / GetTicksPerFrame();
|
||||||
hsAssert(frameNum <= hsKeyFrame::kMaxFrameNumber, "Anim is too long.");
|
hsAssert(frameNum <= hsKeyFrame::kMaxFrameNumber, "Anim is too long.");
|
||||||
@ -1023,7 +1034,6 @@ int hsControlConverter::IAddPartsKeys(Control* control,
|
|||||||
// Add key to list
|
// Add key to list
|
||||||
kfArray->Append(hKey);
|
kfArray->Append(hKey);
|
||||||
}
|
}
|
||||||
delete [] key;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1099,8 +1109,8 @@ void hsControlConverter::IGetControlSampleTimes(Control* control, int iLo, int i
|
|||||||
|
|
||||||
|
|
||||||
IKeyControl* ikeys = GetKeyControlInterface(control);
|
IKeyControl* ikeys = GetKeyControlInterface(control);
|
||||||
IKey* key=(IKey*)(new uint8_t [ikeys->GetKeySize()]);
|
ikey_ptr key = IAllocKey(ikeys->GetKeySize());
|
||||||
IKey* lastKey=(IKey*)(new uint8_t [ikeys->GetKeySize()]);
|
ikey_ptr lastKey = IAllocKey(ikeys->GetKeySize());
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for( i = iLo; i < iHi; i++ )
|
for( i = iLo; i < iHi; i++ )
|
||||||
@ -1120,17 +1130,17 @@ void hsControlConverter::IGetControlSampleTimes(Control* control, int iLo, int i
|
|||||||
// key[i] = key[i-1] * key[i]
|
// key[i] = key[i-1] * key[i]
|
||||||
// or pass in the previous key and do it here.
|
// or pass in the previous key and do it here.
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
ikeys->GetKey(i-1, lastKey);
|
ikeys->GetKey(i-1, lastKey.get());
|
||||||
ikeys->GetKey(i, key);
|
ikeys->GetKey(i, key.get());
|
||||||
if( cID == Class_ID(TCBINTERP_ROTATION_CLASS_ID, 0) )
|
if( cID == Class_ID(TCBINTERP_ROTATION_CLASS_ID, 0) )
|
||||||
{
|
{
|
||||||
ITCBRotKey* tcbRotKey = (ITCBRotKey*)key;
|
ITCBRotKey* tcbRotKey = (ITCBRotKey*)key.get();
|
||||||
rads = tcbRotKey->val.angle;
|
rads = tcbRotKey->val.angle;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if( cID == Class_ID(LININTERP_ROTATION_CLASS_ID, 0) )
|
if( cID == Class_ID(LININTERP_ROTATION_CLASS_ID, 0) )
|
||||||
{
|
{
|
||||||
ILinRotKey* linRotKey = (ILinRotKey*)key;
|
ILinRotKey* linRotKey = (ILinRotKey*)key.get();
|
||||||
|
|
||||||
Point3 axis;
|
Point3 axis;
|
||||||
AngAxisFromQ(linRotKey->val, &rads, axis);
|
AngAxisFromQ(linRotKey->val, &rads, axis);
|
||||||
@ -1138,7 +1148,7 @@ void hsControlConverter::IGetControlSampleTimes(Control* control, int iLo, int i
|
|||||||
else
|
else
|
||||||
if( cID == Class_ID(HYBRIDINTERP_ROTATION_CLASS_ID, 0) )
|
if( cID == Class_ID(HYBRIDINTERP_ROTATION_CLASS_ID, 0) )
|
||||||
{
|
{
|
||||||
IBezQuatKey* bezRotKey = (IBezQuatKey*)key;
|
IBezQuatKey* bezRotKey = (IBezQuatKey*)key.get();
|
||||||
|
|
||||||
Point3 axis;
|
Point3 axis;
|
||||||
AngAxisFromQ(bezRotKey->val, &rads, axis);
|
AngAxisFromQ(bezRotKey->val, &rads, axis);
|
||||||
@ -1146,26 +1156,26 @@ void hsControlConverter::IGetControlSampleTimes(Control* control, int iLo, int i
|
|||||||
else
|
else
|
||||||
if( cID == Class_ID(TCBINTERP_FLOAT_CLASS_ID, 0) )
|
if( cID == Class_ID(TCBINTERP_FLOAT_CLASS_ID, 0) )
|
||||||
{
|
{
|
||||||
ITCBFloatKey* fKey = (ITCBFloatKey*)key;
|
ITCBFloatKey* fKey = (ITCBFloatKey*)key.get();
|
||||||
|
|
||||||
rads = fKey->val;
|
rads = fKey->val;
|
||||||
fKey = (ITCBFloatKey*)lastKey;
|
fKey = (ITCBFloatKey*)lastKey.get();
|
||||||
rads -= fKey->val;
|
rads -= fKey->val;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if( cID == Class_ID(LININTERP_FLOAT_CLASS_ID, 0) )
|
if( cID == Class_ID(LININTERP_FLOAT_CLASS_ID, 0) )
|
||||||
{
|
{
|
||||||
ILinFloatKey* fKey = (ILinFloatKey*)key;
|
ILinFloatKey* fKey = (ILinFloatKey*)key.get();
|
||||||
rads = fKey->val;
|
rads = fKey->val;
|
||||||
fKey = (ILinFloatKey*)lastKey;
|
fKey = (ILinFloatKey*)lastKey.get();
|
||||||
rads -= fKey->val;
|
rads -= fKey->val;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if( cID == Class_ID(HYBRIDINTERP_FLOAT_CLASS_ID, 0) )
|
if( cID == Class_ID(HYBRIDINTERP_FLOAT_CLASS_ID, 0) )
|
||||||
{
|
{
|
||||||
IBezFloatKey* fKey = (IBezFloatKey*)key;
|
IBezFloatKey* fKey = (IBezFloatKey*)key.get();
|
||||||
rads = fKey->val;
|
rads = fKey->val;
|
||||||
fKey = (IBezFloatKey*)lastKey;
|
fKey = (IBezFloatKey*)lastKey.get();
|
||||||
rads -= fKey->val;
|
rads -= fKey->val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1188,9 +1198,6 @@ void hsControlConverter::IGetControlSampleTimes(Control* control, int iLo, int i
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] key;
|
|
||||||
delete [] lastKey;
|
|
||||||
|
|
||||||
hsGuardEnd;
|
hsGuardEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1443,13 +1450,13 @@ int32_t hsControlConverter::IGetRangeCoverKeyIndices(char* nodeName, Control* co
|
|||||||
if (numKeys == 0)
|
if (numKeys == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
IKey* key=(IKey*)(new uint8_t [keys->GetKeySize()]);
|
ikey_ptr key = IAllocKey(keys->GetKeySize());
|
||||||
|
|
||||||
start = numKeys;
|
start = numKeys;
|
||||||
for (int i=0; i<numKeys; i++)
|
for (int i=0; i<numKeys; i++)
|
||||||
{
|
{
|
||||||
keys->GetKey(i, key);
|
keys->GetKey(i, key.get());
|
||||||
if (IIsKeyInRange(key))
|
if (IIsKeyInRange(key.get()))
|
||||||
{
|
{
|
||||||
if (start > i)
|
if (start > i)
|
||||||
start = i;
|
start = i;
|
||||||
@ -1464,7 +1471,7 @@ int32_t hsControlConverter::IGetRangeCoverKeyIndices(char* nodeName, Control* co
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < numKeys; i++)
|
for (int i = 0; i < numKeys; i++)
|
||||||
{
|
{
|
||||||
keys->GetKey(i, key);
|
keys->GetKey(i, key.get());
|
||||||
if (key->time < fSegStart)
|
if (key->time < fSegStart)
|
||||||
start = i;
|
start = i;
|
||||||
}
|
}
|
||||||
@ -1472,7 +1479,6 @@ int32_t hsControlConverter::IGetRangeCoverKeyIndices(char* nodeName, Control* co
|
|||||||
if ((start == numKeys) || // no keys before the start time
|
if ((start == numKeys) || // no keys before the start time
|
||||||
(start == numKeys - 1)) // no keys after end (since the latest key is before start)
|
(start == numKeys - 1)) // no keys after end (since the latest key is before start)
|
||||||
{
|
{
|
||||||
delete [] key;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1480,17 +1486,15 @@ int32_t hsControlConverter::IGetRangeCoverKeyIndices(char* nodeName, Control* co
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
keys->GetKey(start, key);
|
keys->GetKey(start, key.get());
|
||||||
if (key->time > fSegStart && start > 0)
|
if (key->time > fSegStart && start > 0)
|
||||||
start -= 1;
|
start -= 1;
|
||||||
|
|
||||||
keys->GetKey(end, key);
|
keys->GetKey(end, key.get());
|
||||||
if (key->time < fSegEnd && end < numKeys - 1)
|
if (key->time < fSegEnd && end < numKeys - 1)
|
||||||
end += 1;
|
end += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] key;
|
|
||||||
|
|
||||||
//fErrorMsg->Set(numInRange>1 && numInRange!=numKeys, nodeName ? nodeName : "?",
|
//fErrorMsg->Set(numInRange>1 && numInRange!=numKeys, nodeName ? nodeName : "?",
|
||||||
// "Warning: Object has controller with keyframes outside of animation interval").CheckAndAsk();
|
// "Warning: Object has controller with keyframes outside of animation interval").CheckAndAsk();
|
||||||
|
|
||||||
|
@ -3944,7 +3944,7 @@ bool hsMaterialConverter::IClearDoneMaterial(Mtl* mtl, plMaxNode* node)
|
|||||||
|
|
||||||
static BMM_Color_64 green64 = BMMCOLOR(0, (1<<16)-1, 0, (1<<16)-1)
|
static BMM_Color_64 green64 = BMMCOLOR(0, (1<<16)-1, 0, (1<<16)-1)
|
||||||
|
|
||||||
BMM_Color_64 hsMaterialConverter::ICubeSample(Bitmap *bitmap[6], double phi, double theta)
|
static BMM_Color_64 ICubeSample(plErrorMsg* const msg, Bitmap *bitmap[6], double phi, double theta)
|
||||||
{
|
{
|
||||||
hsGuardBegin("hsMaterialConverter::ICubeSample");
|
hsGuardBegin("hsMaterialConverter::ICubeSample");
|
||||||
|
|
||||||
@ -4024,7 +4024,7 @@ BMM_Color_64 hsMaterialConverter::ICubeSample(Bitmap *bitmap[6], double phi, dou
|
|||||||
iMap = (int)(xMap * (map->Width()-1));
|
iMap = (int)(xMap * (map->Width()-1));
|
||||||
jMap = (int)(yMap * (map->Height()-1));
|
jMap = (int)(yMap * (map->Height()-1));
|
||||||
|
|
||||||
fErrorMsg->Set(!map, "CubeSample", "Bad fallthrough in spherefromcube").Check();
|
msg->Set(!map, "CubeSample", "Bad fallthrough in spherefromcube").Check();
|
||||||
BMM_Color_64 c;
|
BMM_Color_64 c;
|
||||||
map->GetLinearPixels(iMap,jMap,1,&c);
|
map->GetLinearPixels(iMap,jMap,1,&c);
|
||||||
return c;
|
return c;
|
||||||
@ -4050,7 +4050,7 @@ void hsMaterialConverter::IBuildSphereMap(Bitmap *bitmap[6], Bitmap *bm)
|
|||||||
phi = (0.5 + j) * delPhi;
|
phi = (0.5 + j) * delPhi;
|
||||||
theta = PI - (0.5 + i) * delThe;
|
theta = PI - (0.5 + i) * delThe;
|
||||||
|
|
||||||
pb[i] = ICubeSample(bitmap, phi, theta);
|
pb[i] = ICubeSample(fErrorMsg, bitmap, phi, theta);
|
||||||
}
|
}
|
||||||
bm->PutPixels(0,j, bm->Width(), pb);
|
bm->PutPixels(0,j, bm->Width(), pb);
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#define __HSMATERIALCONVERTER_H
|
#define __HSMATERIALCONVERTER_H
|
||||||
|
|
||||||
#include "HeadSpin.h"
|
#include "HeadSpin.h"
|
||||||
|
#include <maxtypes.h>
|
||||||
|
|
||||||
class hsStream;
|
class hsStream;
|
||||||
class hsScene;
|
class hsScene;
|
||||||
@ -62,7 +63,6 @@ class plString;
|
|||||||
class plLocation;
|
class plLocation;
|
||||||
|
|
||||||
class Animatable;
|
class Animatable;
|
||||||
struct BMM_Color_64;
|
|
||||||
class Bitmap;
|
class Bitmap;
|
||||||
class BitmapTex;
|
class BitmapTex;
|
||||||
class Color;
|
class Color;
|
||||||
@ -306,7 +306,6 @@ private:
|
|||||||
hsGMaterial *ICheckForProjectedTexture(plMaxNode *node);
|
hsGMaterial *ICheckForProjectedTexture(plMaxNode *node);
|
||||||
hsGMaterial *IWrapTextureInMaterial(Texmap *texMap, plMaxNode *node);
|
hsGMaterial *IWrapTextureInMaterial(Texmap *texMap, plMaxNode *node);
|
||||||
|
|
||||||
BMM_Color_64 ICubeSample(Bitmap *bitmap[6], double phi, double theta);
|
|
||||||
void IBuildSphereMap(Bitmap *bitmap[6], Bitmap *bm);
|
void IBuildSphereMap(Bitmap *bitmap[6], Bitmap *bm);
|
||||||
#if 0 // DEFER_ANIM_MAT
|
#if 0 // DEFER_ANIM_MAT
|
||||||
void IProcessAnimMaterial(BitmapTex *bitmapTex, hsGAnimLayer* at, uint32_t texFlags, uint32_t procFlags);
|
void IProcessAnimMaterial(BitmapTex *bitmapTex, hsGAnimLayer* at, uint32_t texFlags, uint32_t procFlags);
|
||||||
|
@ -66,10 +66,10 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
|
|
||||||
// 3ds Max SDK
|
// 3ds Max SDK
|
||||||
// This stuff should ALWAYS come after hsWindows.h
|
// This stuff should ALWAYS come after hsWindows.h
|
||||||
|
#include <max.h>
|
||||||
#include <bmmlib.h>
|
#include <bmmlib.h>
|
||||||
#include <guplib.h>
|
#include <guplib.h>
|
||||||
#include <iparamb2.h>
|
#include <iparamb2.h>
|
||||||
#include <max.h>
|
|
||||||
#include <notify.h>
|
#include <notify.h>
|
||||||
|
|
||||||
#endif // _MaxExport_Pch_inc_
|
#endif // _MaxExport_Pch_inc_
|
||||||
|
@ -192,24 +192,6 @@ void HSExport2::ShowAbout(HWND hWnd)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void IGetPath(const char* name, char* path)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
// find the last backslash in the full path
|
|
||||||
for ( i=strlen(name)-1; i>=0 ; i-- )
|
|
||||||
{
|
|
||||||
if ( name[i] == '\\' )
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if ( i >= 0 && i < 256) // if either we couldn't the backslash or the path was too big
|
|
||||||
{
|
|
||||||
strncpy(path,name,i+1);
|
|
||||||
path[i+1] = '\0'; //null terminate string (cause strncpy might not)
|
|
||||||
}
|
|
||||||
else
|
|
||||||
path[0] = '\0'; // otherwise just make it a null string
|
|
||||||
}
|
|
||||||
|
|
||||||
// Another little helper class to help write out a list of textures to a log file
|
// Another little helper class to help write out a list of textures to a log file
|
||||||
class plTextureLoggerCBack : public plRegistryKeyIterator
|
class plTextureLoggerCBack : public plRegistryKeyIterator
|
||||||
{
|
{
|
||||||
@ -269,10 +251,10 @@ int HSExport2::DoExport(const TCHAR *name,ExpInterface *ei,Interface *gi, BOOL s
|
|||||||
BroadcastNotification(NOTIFY_PRE_EXPORT);
|
BroadcastNotification(NOTIFY_PRE_EXPORT);
|
||||||
|
|
||||||
// get just the path (not the file) of where we are going to export to
|
// get just the path (not the file) of where we are going to export to
|
||||||
char out_path[256];
|
plFileName out_path = plFileName(name).StripFileName();
|
||||||
IGetPath(name, out_path);
|
|
||||||
// Apparently this was implied by the open dialog, but not if you call Max's ExportToFile() func
|
// Apparently this was implied by the open dialog, but not if you call Max's ExportToFile() func
|
||||||
SetCurrentDirectory(out_path);
|
SetCurrentDirectoryW(out_path.AsString().ToWchar());
|
||||||
|
|
||||||
//
|
//
|
||||||
// Setup ErrorMsg
|
// Setup ErrorMsg
|
||||||
@ -286,7 +268,7 @@ int HSExport2::DoExport(const TCHAR *name,ExpInterface *ei,Interface *gi, BOOL s
|
|||||||
if (dot)
|
if (dot)
|
||||||
*dot = 0;
|
*dot = 0;
|
||||||
char ErrorLogName[512];
|
char ErrorLogName[512];
|
||||||
sprintf(ErrorLogName, "%s%s.err", out_path, fName);
|
sprintf(ErrorLogName, "%s%s.err", out_path.AsString().c_str(), fName);
|
||||||
plExportLogErrorMsg logonly_errorMessage(ErrorLogName); // This errorMessage just writes it all to a file
|
plExportLogErrorMsg logonly_errorMessage(ErrorLogName); // This errorMessage just writes it all to a file
|
||||||
|
|
||||||
// now decide which errorMessage object to use
|
// now decide which errorMessage object to use
|
||||||
@ -341,7 +323,7 @@ int HSExport2::DoExport(const TCHAR *name,ExpInterface *ei,Interface *gi, BOOL s
|
|||||||
bool convertOK = plConvert::Instance().Convert();
|
bool convertOK = plConvert::Instance().Convert();
|
||||||
|
|
||||||
// Free the material cache. This will delete unused materials.
|
// Free the material cache. This will delete unused materials.
|
||||||
hsMaterialConverter::Instance().FreeMaterialCache(out_path);
|
hsMaterialConverter::Instance().FreeMaterialCache(out_path.AsString().c_str());
|
||||||
|
|
||||||
if (convertOK)
|
if (convertOK)
|
||||||
{
|
{
|
||||||
|
@ -339,22 +339,22 @@ void plExportDlgImp::IDoExport()
|
|||||||
ShowWindow(fDlg, SW_HIDE);
|
ShowWindow(fDlg, SW_HIDE);
|
||||||
|
|
||||||
// Do the export
|
// Do the export
|
||||||
char exportPath[MAX_PATH];
|
wchar_t exportPathTEMP[MAX_PATH];
|
||||||
GetDlgItemText(fDlg, IDC_CLIENT_PATH, exportPath, sizeof(exportPath));
|
GetDlgItemTextW(fDlg, IDC_CLIENT_PATH, exportPathTEMP, arrsize(exportPathTEMP));
|
||||||
strcat(exportPath, "Export.prd");
|
plFileName exportPath = plFileName::Join(plString::FromWchar(exportPathTEMP), "Export.prd");
|
||||||
|
|
||||||
// For export time stats
|
// For export time stats
|
||||||
DWORD exportTime = timeGetTime();
|
DWORD exportTime = timeGetTime();
|
||||||
|
|
||||||
if (fExportFile)
|
if (fExportFile)
|
||||||
IExportCurrentFile(exportPath);
|
IExportCurrentFile(exportPath.AsString().c_str());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::vector<plFileName> sources = plFileSystem::ListDir(fExportSourceDir, "*.max");
|
std::vector<plFileName> sources = plFileSystem::ListDir(fExportSourceDir, "*.max");
|
||||||
for (auto iter = sources.begin(); iter != sources.end(); ++iter)
|
for (auto iter = sources.begin(); iter != sources.end(); ++iter)
|
||||||
{
|
{
|
||||||
if (GetCOREInterface()->LoadFromFile(iter->AsString().c_str()))
|
if (GetCOREInterface()->LoadFromFile(iter->AsString().c_str()))
|
||||||
IExportCurrentFile(exportPath);
|
IExportCurrentFile(exportPath.AsString().c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,43 +51,46 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include <maxversion.h>
|
#include <maxversion.h>
|
||||||
|
|
||||||
#if MAX_VERSION_MAJOR <= 9
|
#if MAX_VERSION_MAJOR <= 9
|
||||||
#define BMMCOLOR(x, y, z, w) \
|
# define BMMCOLOR(x, y, z, w) \
|
||||||
{x, y, x, w};
|
{x, y, x, w};
|
||||||
|
|
||||||
#define DEFAULTREMAP NoRemap()
|
# define DEFAULTREMAP NoRemap()
|
||||||
|
|
||||||
#define ENUMDEPENDENTS(maxObject, proc) \
|
# define ENUMDEPENDENTS(maxObject, proc) \
|
||||||
maxObject->EnumDependents(proc);
|
maxObject->EnumDependents(proc);
|
||||||
|
|
||||||
typedef TCHAR MCHAR;
|
typedef TCHAR MCHAR;
|
||||||
#else
|
#else
|
||||||
#define BMMCOLOR(x, y, z, w) \
|
# define BMMCOLOR(x, y, z, w) \
|
||||||
BMM_Color_64(x, y, z, w);
|
BMM_Color_64(x, y, z, w);
|
||||||
|
|
||||||
#define DEFAULTREMAP DefaultRemapDir()
|
# define DEFAULTREMAP DefaultRemapDir()
|
||||||
|
|
||||||
#define ENUMDEPENDENTS(maxObject, proc) \
|
# define ENUMDEPENDENTS(maxObject, proc) \
|
||||||
maxObject->DoEnumDependents(proc);
|
maxObject->DoEnumDependents(proc);
|
||||||
#endif //MAX_VERSION_MAJOR
|
#endif //MAX_VERSION_MAJOR
|
||||||
|
|
||||||
#if MAX_VERSION_MAJOR <= 13
|
#if MAX_VERSION_MAJOR <= 13
|
||||||
#define GetParamBlock2Controller(pb, id) pb->GetController(id)
|
# define GetParamBlock2Controller(pb, id) pb->GetController(id)
|
||||||
#define SetParamBlock2Controller(pb, id, tab, ctl) pb->SetController(id, tab, ctl)
|
# define SetParamBlock2Controller(pb, id, tab, ctl) pb->SetController(id, tab, ctl)
|
||||||
#else
|
#else
|
||||||
#define GetParamBlock2Controller(pb, id) pb->GetControllerByID(id)
|
# define GetParamBlock2Controller(pb, id) pb->GetControllerByID(id)
|
||||||
#define SetParamBlock2Controller(pb, id, tab, ctl) pb->SetControllerByID(id, tab, ctl)
|
# define SetParamBlock2Controller(pb, id, tab, ctl) pb->SetControllerByID(id, tab, ctl)
|
||||||
#endif // MAX_VERSION_MAJOR
|
#endif // MAX_VERSION_MAJOR
|
||||||
|
|
||||||
#if MAX_VERSION_MAJOR <= 11 // max 2009. Just a guess, really. 2010 doesn't need this function.
|
#if MAX_VERSION_MAJOR <= 11 // max 2009. Just a guess, really. 2010 doesn't need this function.
|
||||||
#define INIT_CUSTOM_CONTROLS(instance) InitCustomControls(instance)
|
# define INIT_CUSTOM_CONTROLS(instance) InitCustomControls(instance)
|
||||||
#else
|
#else
|
||||||
#define INIT_CUSTOM_CONTROLS(instance)
|
# define INIT_CUSTOM_CONTROLS(instance)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MAX_VERSION_MAJOR <= 10 // Max 2008
|
#if MAX_VERSION_MAJOR <= 10 // Max 2008
|
||||||
#define GETNAME_RETURN_TYPE TCHAR*
|
# define GETNAME_RETURN_TYPE TCHAR*
|
||||||
#else
|
#else
|
||||||
#define GETNAME_RETURN_TYPE const TCHAR*
|
# define GETNAME_RETURN_TYPE const TCHAR*
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Old versions of Max define this as an integer, not a Class_ID
|
||||||
|
#define XREFOBJ_COMPAT_CLASS_ID Class_ID(0x92aab38c, 0)
|
||||||
|
|
||||||
#endif // _PLASMA_MAXCOMPAT_H
|
#endif // _PLASMA_MAXCOMPAT_H
|
@ -78,14 +78,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include <comutil.h>
|
#include <comutil.h>
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
|
|
||||||
// PlasmaMax Stuff included everywhere
|
|
||||||
// Some of these files may pull in Max SDK headers, so put this below hsWindows.h!
|
|
||||||
#include "plMaxNode.h"
|
|
||||||
#include "plMaxNodeData.h"
|
|
||||||
#include "MaxComponent/plComponent.h"
|
|
||||||
#include "MaxComponent/plComponentReg.h"
|
|
||||||
|
|
||||||
// Misc Max SDK
|
// Misc Max SDK
|
||||||
|
#include <max.h>
|
||||||
#include <bmmlib.h>
|
#include <bmmlib.h>
|
||||||
#include <CustAttrib.h>
|
#include <CustAttrib.h>
|
||||||
#include <ICustAttribContainer.h>
|
#include <ICustAttribContainer.h>
|
||||||
@ -93,7 +87,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include <guplib.h>
|
#include <guplib.h>
|
||||||
#include <iMenuMan.h>
|
#include <iMenuMan.h>
|
||||||
#include <IMtlEdit.h>
|
#include <IMtlEdit.h>
|
||||||
#include <iskin.h>
|
#include <iparamb2.h> // above ISkin.h for Max 7
|
||||||
|
#include <ISkin.h>
|
||||||
#include <istdplug.h>
|
#include <istdplug.h>
|
||||||
#include <maxversion.h>
|
#include <maxversion.h>
|
||||||
#include <mnmath.h>
|
#include <mnmath.h>
|
||||||
@ -101,6 +96,13 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include <notify.h>
|
#include <notify.h>
|
||||||
#include <pbbitmap.h>
|
#include <pbbitmap.h>
|
||||||
|
|
||||||
|
// PlasmaMax Stuff included everywhere
|
||||||
|
// Some of these files may pull in Max SDK headers, so put this below hsWindows.h!
|
||||||
|
#include "plMaxNode.h"
|
||||||
|
#include "plMaxNodeData.h"
|
||||||
|
#include "MaxComponent/plComponent.h"
|
||||||
|
#include "MaxComponent/plComponentReg.h"
|
||||||
|
|
||||||
// Utility
|
// Utility
|
||||||
#include "MaxCompat.h"
|
#include "MaxCompat.h"
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
@ -43,7 +43,14 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
class Class_ID;
|
class Class_ID;
|
||||||
class Interface;
|
class Interface;
|
||||||
class plMaxNode;
|
class plMaxNode;
|
||||||
struct NotifyInfo;
|
|
||||||
|
#include <maxversion.h>
|
||||||
|
#if MAX_VERSION_MAJOR >= 9
|
||||||
|
struct NotifyInfo;
|
||||||
|
#else
|
||||||
|
// Max headers are more minimalistic in pre-9 maxes
|
||||||
|
# include <notify.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
class plComponentDlg
|
class plComponentDlg
|
||||||
{
|
{
|
||||||
|
@ -48,6 +48,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include "plMaxNodeBase.h"
|
#include "plMaxNodeBase.h"
|
||||||
#include "plMaxNodeData.h"
|
#include "plMaxNodeData.h"
|
||||||
#include "MaxComponent/plComponentBase.h"
|
#include "MaxComponent/plComponentBase.h"
|
||||||
|
#include "MaxCompat.h"
|
||||||
|
|
||||||
#include <guplib.h>
|
#include <guplib.h>
|
||||||
#include <iparamm2.h>
|
#include <iparamm2.h>
|
||||||
@ -483,7 +484,7 @@ bool plMaxNodeBase::IsXRef()
|
|||||||
{
|
{
|
||||||
// Is this an XRef'd object?
|
// Is this an XRef'd object?
|
||||||
Object *obj = GetObjectRef();
|
Object *obj = GetObjectRef();
|
||||||
if (obj->SuperClassID() == SYSTEM_CLASS_ID && obj->ClassID() == XREFOBJ_CLASS_ID)
|
if (obj->SuperClassID() == SYSTEM_CLASS_ID && obj->ClassID() == XREFOBJ_COMPAT_CLASS_ID)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -54,14 +54,15 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
// Windows
|
// Windows
|
||||||
#include "hsWindows.h"
|
#include "hsWindows.h"
|
||||||
|
|
||||||
|
// Max SDK
|
||||||
|
#include <max.h>
|
||||||
|
#include <decomp.h>
|
||||||
|
#include <hsv.h>
|
||||||
|
|
||||||
// Base MaxPlasmaLights stuff...
|
// Base MaxPlasmaLights stuff...
|
||||||
#include "plRealTimeLightBase.h"
|
#include "plRealTimeLightBase.h"
|
||||||
#include "plRealTimeLights.h"
|
#include "plRealTimeLights.h"
|
||||||
|
|
||||||
// Max SDK
|
|
||||||
#include <decomp.h>
|
|
||||||
#include <hsv.h>
|
|
||||||
|
|
||||||
// Utility
|
// Utility
|
||||||
#include "MaxMain/MaxCompat.h"
|
#include "MaxMain/MaxCompat.h"
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
@ -56,7 +56,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
|
|
||||||
class Class_ID;
|
class Class_ID;
|
||||||
class IParamBlock2;
|
class IParamBlock2;
|
||||||
struct PB2Value;
|
|
||||||
class ReferenceMaker;
|
class ReferenceMaker;
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,15 +59,11 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include <commdlg.h>
|
#include <commdlg.h>
|
||||||
#include <windowsx.h>
|
#include <windowsx.h>
|
||||||
|
|
||||||
// MaxMain
|
|
||||||
#include "MaxMain/plMaxNode.h"
|
|
||||||
#include "MaxMain/MaxCompat.h"
|
|
||||||
|
|
||||||
// Misc 3dsm SDK
|
// Misc 3dsm SDK
|
||||||
|
#include <max.h>
|
||||||
#include <bmmlib.h>
|
#include <bmmlib.h>
|
||||||
#include <iparamm2.h>
|
#include <iparamm2.h>
|
||||||
#include <istdplug.h>
|
#include <istdplug.h>
|
||||||
#include <max.h>
|
|
||||||
#include <maxicon.h>
|
#include <maxicon.h>
|
||||||
#include <notetrck.h>
|
#include <notetrck.h>
|
||||||
#include <notify.h>
|
#include <notify.h>
|
||||||
@ -75,6 +71,10 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
#include <texutil.h>
|
#include <texutil.h>
|
||||||
#include <triobj.h>
|
#include <triobj.h>
|
||||||
|
|
||||||
|
// MaxMain
|
||||||
|
#include "MaxMain/plMaxNode.h"
|
||||||
|
#include "MaxMain/MaxCompat.h"
|
||||||
|
|
||||||
// Local
|
// Local
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
|
@ -42,18 +42,43 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|||||||
|
|
||||||
#include "HeadSpin.h"
|
#include "HeadSpin.h"
|
||||||
#include "hsWindows.h"
|
#include "hsWindows.h"
|
||||||
|
|
||||||
|
#include <bmmlib.h>
|
||||||
#include <iparamb2.h>
|
#include <iparamb2.h>
|
||||||
#pragma hdrstop
|
#pragma hdrstop
|
||||||
|
|
||||||
|
/** Stubbed out BitmapIO instance for deprecated bink layers **/
|
||||||
|
class plBinkBitmapIO : public BitmapIO
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int ExtCount() { return 1; }
|
||||||
|
const TCHAR* Ext(int n) { return _T("bik"); }
|
||||||
|
|
||||||
|
const TCHAR* LongDesc() { return _T("DEAD: Bink File"); }
|
||||||
|
const TCHAR* ShortDesc() { return _T("Bink"); }
|
||||||
|
|
||||||
|
const TCHAR* AuthorName() { return _T("Colin Bonstead"); }
|
||||||
|
const TCHAR* CopyrightMessage() { return _T("Copyright 2004, Cyan Inc."); }
|
||||||
|
unsigned int Version() { return 100; }
|
||||||
|
|
||||||
|
int Capability() { return 0; }
|
||||||
|
DWORD EvaluateConfigure() { return 0; }
|
||||||
|
BOOL LoadConfigure(void* ptr) { return FALSE; }
|
||||||
|
BOOL SaveConfigure(void* ptr) { return FALSE; }
|
||||||
|
|
||||||
|
BMMRES GetImageInfo(BitmapInfo* fbi) { return BMMRES_INTERNALERROR; }
|
||||||
|
BitmapStorage* Load(BitmapInfo* fbi, Bitmap* map, BMMRES* status) { return nullptr; }
|
||||||
|
void ShowAbout(HWND hWnd)
|
||||||
|
{
|
||||||
|
hsMessageBoxWithOwner(hWnd, "Bink Layers removed due to license issues", "DEAD", hsMessageBoxNormal, MB_ICONEXCLAMATION);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class BinkClassDesc : public ClassDesc2
|
class BinkClassDesc : public ClassDesc2
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int IsPublic() { return 1; }
|
int IsPublic() { return 1; }
|
||||||
void* Create(BOOL loading=FALSE)
|
void* Create(BOOL loading=FALSE) { return static_cast<void*>(new plBinkBitmapIO); }
|
||||||
{
|
|
||||||
hsAssert(false, "bink layers removed due to license issues");
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TCHAR* ClassName() { return "Bink"; }
|
const TCHAR* ClassName() { return "Bink"; }
|
||||||
SClass_ID SuperClassID() { return BMM_IO_CLASS_ID; }
|
SClass_ID SuperClassID() { return BMM_IO_CLASS_ID; }
|
||||||
|
Reference in New Issue
Block a user