【问题标题】:How to create a keyframe with Python API for 3D Studio Max如何使用 Python API 为 3D Studio Max 创建关键帧
【发布时间】:2016-10-03 01:22:57
【问题描述】:

目前我正在使用自动键创建关键帧,如下所示:

MaxPlus.Animation.SetAnimateButtonState(True)  # autokey on
MaxPlus.Animation.SetTime(time)                # Set time slider to chosen time of keframe
obj.Position = MaxPlus.Point3(x, y, z)         # Set position
MaxPlus.Animation.SetAnimateButtonState(False) # autokey off

但这并不是很方便。还有其他方法吗?有没有这样的功能: 创建关键帧(时间,价值)?如何访问可见性控制器?

我可能应该使用:

c = MaxPlus.Factory.CreateDefaultFloatController()
obj.ParameterBlock.Parameter.SetController(c) 

但我仍然不知道如何插入关键帧,我只知道如何使用 AutoKey 设置它们,所以这没有任何改变

【问题讨论】:

    标签: python python-2.7 3dsmax


    【解决方案1】:

    使用 max 2016,几乎没有比您正在做的更好的方法了。当然,您可以分配一个新的可见性控制器:

    node.SetVisibilityController(MaxPlus.Factory.CreateDefaultFloatController())
    

    或者您可以修改任何现有的:

    node.GetSubAnim(0).AddNewKey(time, param)
    

    其中 param 是任何一个的总和

    MaxPlus.Constants.AddkeyFlagged
    MaxPlus.Constants.AddkeyInterp
    MaxPlus.Constants.AddkeySelect
    

    但要使用键的值,您必须获得IKeyControl/ISetKeyControl 接口。这行不通:

    ctrl.GetInterface(MaxPlus.AnimatableInterfaceIds.IKeycontrol)
    

    正如它所期望的那样,MaxPlus.Interface_ID 类型和IKeycontrol(这里代表原始的I_KEYCONTROL)是值0x00001100 的常量。然而,最初的实现是这样的:

    void* Control::GetInterface(ULONG id)
    {
        if (id==I_CONTROL) {
            return this;
        }
        else if (id==I_KEYCONTROL) {
            ...;
        }
        // and so on, only as a last resort checking the Interface_ID
        else {
            return Animatable::GetInterface(id);
        }
    }
    

    【讨论】:

    • Max 2018 的任何更新?我也在尝试在 MaxPlus 中获取关键帧,但无法弄清楚。
    • 有什么理由避免在该部分使用 pymxs?
    • 好点,我猜不是。我刚从 Max 中的 python 开始(最终从 2016 年升级)并坚持使用 MaxPlus,因为我认为它拥有 pymxs 所拥有的一切,但现在我正在阅读文档,看起来这实际上非常简单。
    • @Swordslayer 如果你能发布一个例子,那将非常有用
    猜你喜欢
    • 2018-03-03
    • 2012-04-25
    • 2011-04-20
    • 1970-01-01
    • 2015-03-19
    • 2012-04-04
    • 2017-10-18
    • 2014-03-16
    • 1970-01-01
    相关资源
    最近更新 更多