визуальная студия — 3dsmax SDK c ++ bonesdef.h

Это мой код, который отлично работает, если я помещу его в проект BonesDef:

#include "mods.h"#include "bonesdef.h"#include <maxscript/macros/define_instantiation_functions.h>
#include "modstack.h"
Modifier* FindSkinModifier(INode* nodePtr)
{
Object* ObjectPtr = nodePtr->GetObjectRef();
if (!ObjectPtr) return NULL;
while (ObjectPtr && ObjectPtr->SuperClassID() == GEN_DERIVOB_CLASS_ID)
{
IDerivedObject *DerivedObjectPtr = (IDerivedObject *)(ObjectPtr);
int ModStackIndex = 0;
while (ModStackIndex < DerivedObjectPtr->NumModifiers())
{
Modifier* ModifierPtr = DerivedObjectPtr->GetModifier(ModStackIndex);
if (ModifierPtr->ClassID() == Class_ID(SKIN_CLASSID))
{
return ModifierPtr;
}
ModStackIndex++;
}
ObjectPtr = DerivedObjectPtr->GetObjRef();
}
return NULL;
}

void RecursiveRemoveUnusedBones(INode* node)
{
Modifier* skin = FindSkinModifier(node);
if (skin)
{
ISkin* iskin = (ISkin*)skin->GetInterface(I_SKIN);
BonesDefMod* bmod = (BonesDefMod*)iskin;
ISkinContextData* skinData = iskin->GetContextInterface(node);
BitArray usedbones = BitArray(iskin->GetNumBones());
for (int i = 0; i < skinData->GetNumPoints(); i++)
{
for (int j = 0; j < skinData->GetNumAssignedBones(i); j++)
{
int boneIndex = skinData->GetAssignedBone(i, j);
float boneWeight = skinData->GetBoneWeight(i, j);
if (boneWeight > 0) usedbones.Set(boneIndex);
}
}
for (int i = usedbones.GetSize(); i >= 0; i--)
{
if (usedbones[i] != 1) bmod->RemoveBone(i);
}
}

for (int i = 0; i < node->NumberOfChildren(); ++i)
{
RecursiveRemoveUnusedBones(node->GetChildNode(i));
}
}

def_visible_primitive(RemoveUnusedBones, "RemoveUnusedBones");
Value* RemoveUnusedBones_cf(Value **arg_list, int count)
{
RecursiveRemoveUnusedBones(GetCOREInterface()->GetRootNode());
return &ok;
}

Но проблема в том, что если я поместил этот код в свой проект вне проекта BonesDef, я получил несколько ошибок:

Severity    Code    Description    Project    File    Line    Suppression State
Error    LNK2001    unresolved external symbol "public: void __cdecl BonesDefMod::RemoveBone(int)" (?RemoveBone@BonesDefMod@@QEAAXH@Z)    SamplePlugin    C:\Users\Mehdi\Documents\Visual Studio 2015\Projects\SamplePlugin\Source.obj    1

Severity    Code    Description    Project    File    Line    Suppression State
Error    LNK2001    unresolved external symbol "public: static class IObjParam * BonesDefMod::ip" (?ip@BonesDefMod@@2PEAVIObjParam@@EA)    SamplePlugin    C:\Users\Mehdi\Documents\Visual Studio 2015\Projects\SamplePlugin\Source.obj    1

Это мое дополнительное включение:

F:\Software\3dsMax\SDK\3ds Max 2018 SDK\maxsdk\obj\x64\Release\bonesdef\
F:\Software\3dsMax\SDK\3ds Max 2018 SDK\maxsdk\include\XRef
F:\Software\3dsMax\SDK\3ds Max 2018 SDK\maxsdk\samples\modifiers\bonesdef
F:\Software\3dsMax\SDK\3ds Max 2018 SDK\maxsdk\include
%(AdditionalIncludeDirectories)

и библиотека:

F:\Software\3dsMax\SDK\3ds Max 2018 SDK\maxsdk\lib\x64\Release
%(AdditionalLibraryDirectories)

Но никогда не в состоянии построить. У меня вопрос, как я могу настроить проект, чтобы я мог использовать (вызывать) функции BonesDef (Skin)?

1

Решение

Наконец-то я понял, как создать отдельный проект и включить функции BonesDef! Мы должны следовать этим шагам:

  1. Включить BonesDef.h.
  2. Создайте статическую библиотеку BonesDef (.lib).
  3. Добавьте эту библиотеку в настройки проекта / дополнительную библиотеку.
  4. Скопируйте список зависимостей из проекта BonesDef / Additional Dependency и добавьте его в наш проект.
  5. Добавьте BonesDef.lib к опции «Дополнительная зависимость».
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]