首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >3dsmax SDK c++ bonesdef.h

3dsmax SDK c++ bonesdef.h
EN

Stack Overflow用户
提问于 2018-06-10 15:52:08
回答 1查看 223关注 0票数 1

这是我的代码,如果我把它放在BonesDef项目中,它就能完美地工作:

代码语言:javascript
运行
复制
#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项目之外的项目中,我会收到几个错误:

代码语言:javascript
运行
复制
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    

这是我的附加内容:

代码语言:javascript
运行
复制
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)

和库:

代码语言:javascript
运行
复制
F:\Software\3dsMax\SDK\3ds Max 2018 SDK\maxsdk\lib\x64\Release
%(AdditionalLibraryDirectories)

但却永远不能建造。我的问题是,我如何配置一个项目,以便我可以使用(调用)BonesDef(皮肤)函数?

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 23:29:15

我终于弄明白了如何创建一个独立的项目并包含BonesDef函数!我们应该遵循以下步骤:

  1. 包含project.
  2. Append静态库(.lib)。
  3. 将该库添加到项目设置/其他库中。
  4. 从BonesDef项目复制相关性列表/其他相关性,并将其附加到我们project.
  5. Append BonesDef.lib的其他相关性选项中。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50781627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档