如何使用PythonAPI for 3D Studio Max创建关键帧

如何使用PythonAPI for 3D Studio Max创建关键帧,python,python-2.7,3dsmax,Python,Python 2.7,3dsmax,目前,我使用“自动关键点”创建关键帧,如下所示: 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.Anim

目前,我使用“自动关键点”创建关键帧,如下所示:

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) 

但我仍然不知道如何插入关键帧,我只知道如何使用“自动关键点”设置关键帧,因此,对于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\u ID
类型和
IKeycontrol
(这里代表原始的
I\u 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 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\u ID
类型和
IKeycontrol
(这里代表原始的
I\u 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);
    }
}

从2018年起对此有任何更新吗?我也在尝试在MaxPlus中获取关键帧,但无法理解。有什么理由避免在该部分使用PyMX吗?很好,我想没有。我刚开始在Max中使用python(最终从2016年升级),并坚持使用MaxPlus,因为我认为它拥有pymxs的所有功能,但现在我阅读的文档看起来实际上非常简单。@如果你能发布一个示例,它将非常有用。从Max 2018起,有任何更新吗?我也在尝试在MaxPlus中获取关键帧,但无法理解。有什么理由避免在该部分使用PyMX吗?很好,我想没有。我刚开始在Max中使用python(最终从2016年升级),并坚持使用MaxPlus,因为我认为它拥有pymxs的所有功能,但现在我阅读的文档看起来实际上非常简单。@如果您能发布一个示例,它将非常有用