如何使用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的所有功能,但现在我阅读的文档看起来实际上非常简单。@如果您能发布一个示例,它将非常有用