3DS Max Python脚本

3DS Max Python脚本,python,scripting,3dsmax,Python,Scripting,3dsmax,我花了好几个小时寻找如何在Python for 3DS Max(v2017)中执行一个非常简单的脚本,但是API非常糟糕——至少可以这么说 我甚至不知道如何在场景中选择现有对象。。 另外,我不明白我应该使用pymxs包装器还是MaxPlus 我需要做的只是告诉3ds Max在选择某个场景摄影机或视图切换到该摄影机时更改渲染效果属性 我将用伪代码为您编写脚本,以便您能够更好地理解主题: camera_1 = MaxPlus.Factory.SelectCameraObject("36x24_Mor

我花了好几个小时寻找如何在Python for 3DS Max(v2017)中执行一个非常简单的脚本,但是API非常糟糕——至少可以这么说

我甚至不知道如何在场景中选择现有对象。。 另外,我不明白我应该使用pymxs包装器还是MaxPlus

我需要做的只是告诉3ds Max在选择某个场景摄影机或视图切换到该摄影机时更改渲染效果属性

我将用伪代码为您编写脚本,以便您能够更好地理解主题:

camera_1 = MaxPlus.Factory.SelectCameraObject("36x24_MoreDof")
# camera name is 36x24_MoreDof

camera_2 = MaxPlus.Factory.SelectCameraObject("36x24_LessDof")
# camera name is 36x24_LessDof

effect1 = RenderingTab.EnvironmentAndEffects.Effects.Attribute1
effect2 = RenderingTab.EnvironmentAndEffects.Effects.Attribute2

effect1.active = False
effect2.active = False

while True:
    if camera_1.isSelected == True:
        effect1.active = True
        effect2.active = False
    elif camera_2.isSelected == True:
        effect1.active = False
        effect2.active = True
我希望这足够清楚。。 您知道如何在3DS Max的实际Python代码中翻译此内容吗

提前谢谢大家,


Riccardo

下面是python脚本,用于指导您的请求

  • PyMXS;我的建议是主要使用这个。它包装了几乎所有的MaxScript(除了一些奇特的MaxScript语法功能)。它已经持续开发了几十年,非常健壮,与构建它的3ds Max SDK相比,它提供了许多辅助功能和简化
  • MaxPlus;我的建议是使用PyMXS未涵盖的某些部分(例如用于创建基于Qt的UI的函数MaxPlus.GetQMaxMainWindow()),但不要将其用作Python中的主要工具。它是较新的,虽然从长远来看,它可能会更好地用于3ds Max SDK的Python公开,但从短期来看,您可能更喜欢PyMXS的覆盖范围和简单性
基本上,我建议您将自己想象成一个使用Python实现语言优势的MaxScript程序员。要访问3ds Max场景,请通过MaxScript(通过PyMXS)。然后利用Python的优势进行字符串处理和数据管理(字典!)。在某些较低级别的SDK访问需要时使用MaxPlus

下面的脚本按名称获取对象,按索引获取渲染效果,并根据对象选择启用/禁用渲染效果:

import pymxs
mxs = pymxs.runtime

object_1 = mxs.getNodeByName( "Camera001" )

effect_1 = mxs.getEffect(1)
effect_1.camera

mxs.setActive(effect_1, mxs.false)

if object_1.isSelected:
    mxs.setActive(effect_1, mxs.true)

希望这有帮助

迈克尔,谢谢你详尽的回答!我马上就去试试。我最后做的是创建一个链接到MAXscript的按钮,每次按下该按钮时,它都会选中活动摄影机,并根据该按钮激活或取消激活相对效果:如果getActiveCamera()=$36x24,则设置活动(getEffect 1)true,否则设置活动(getEffect 1)false如果getActiveCamera()=$36x24_LessDof然后设置活动(getEffect 2)true否则设置活动(getEffect 2)false