【问题标题】:Getting a selection in 3ds Max into a list in Python将 3ds Max 中的选择放入 Python 中的列表中
【发布时间】:2018-08-07 13:19:26
【问题描述】:

我正在使用 Python 编写代码,有时会调用 maxscript 的某些方面,并且我已经掌握了大部分基础知识。但是,我仍然不了解 FPValues。在浏览示例和最大帮助站点时,我什至不明白如何从中获得任何有意义的东西。例如:

import MaxPlus as MP
import pymxs

MPEval = MP.Core.EvalMAXScript
objectList = []

def addBtnCheck():
    select = MPEval('''GetCurrentSelection()''')
    objectList.append(select)
    print(objectList)

MPEval('''
try (destroyDialog unnamedRollout) catch()
rollout unnamedRollout "Centered" width:262 height:350
(
    button 'addBtn' "Add Selection to List" pos:[16,24] width:88 height:38 
    align:#left

    on 'addBtn' pressed do
        (
            python.Execute "addBtnCheck()"
        )
)
''')
MP.Core.EvalMAXScript('''createDialog unnamedRollout''')

(我希望我的缩进是正确的,这很新)

在上面的代码中,我成功生成了我的 rollout,并使用了一个按钮来调用一个 python 函数,然后我尝试将一组对象的选择放在一个我可以通过 python 控制的变量中。

objectList print 给了我这个:

 [<MaxPlus.FPValue; proxy of <Swig Object of type 'Autodesk::Max::FPValue *' at 0x00000000846E5F00> >]

用于选择两个对象时。虽然我想要对象名称、它们的位置等!

如果有人能指出我正确的方向,或者解释 FPValues 以及如何像我实际五岁那样使用它们,我将永远感激不尽!

【问题讨论】:

    标签: python 3dsmax maxscript


    【解决方案1】:

    从哪里开始,对我来说,主要问题似乎是你接近它的方式:

    • 为什么要使用 MaxPlus,这是一个低级 SDK 包装器,因为它是非 Python 的(且不完整)
    • 为什么要从 python 调用 maxscript 来完成可以在 python (getCurrentSelection) 中完成的事情
    • 为什么要使用 maxscript 创建 UI,你在 python 中,使用 pySide
    • 如果你可以在 maxscript 中做到这一点,为什么你首先要在 python 中做到这一点?除了更快的数学运算之外,大多数场景运算在 python 中都会慢几个数量级。如果你愿意,你也可以在 maxscript 中导入和使用 python 模块。

    【讨论】:

    • 哈哈好吧好吧,你提出了很好的观点,我真的没有答案。我最近开始编码,自学python,发现max可以使用python。 (我首先是一个 3D 建模师。)所以我心想,哦,我一直想写这个小脚本。让我们在 python 中测试自己!但要了解您的几点:我认为我必须使用 MaxPlus 才能获得我需要的某些功能。我在 max 中使用了推出,因为这是我所知道的,而且我在尝试安装 pyside2 时遇到了很多麻烦。
    • 我刚刚在 Autodesk 论坛和您的网站上发现了您之前的评论,其中包含可能对我非常有用的代码提示。所以我要研究一下这个和pymxs!再次感谢:)
    • 除非你需要一些非常底层的东西,否则你不需要 MaxPlus。即使您需要它们,也可以从 maxscript 访问 .NET SDK API。它有一些限制,但 MaxPlus 也有。至于 pySide,你不需要安装任何东西,这是 max install 的一部分。有关示例,请参见 scripts\Python\demoPySide 脚本。
    【解决方案2】:
    import MaxPlus as MP
    import pymxs
    
    mySel = mp.SelectionManager.Nodes
    objectList = []
    
    for each in mySel:
        x = each.Name
        objectList.append(x)
    
    print objectList
    

    【讨论】:

      猜你喜欢
      • 2015-11-18
      • 2014-03-11
      • 2018-06-26
      • 2017-09-05
      • 2020-02-25
      • 2014-09-24
      • 1970-01-01
      • 2019-05-14
      • 2020-08-03
      相关资源
      最近更新 更多