【问题标题】:Unclear on how to import and display an .OBJ file with Python (in Maya)不清楚如何使用 Python(在 Maya 中)导入和显示 .OBJ 文件
【发布时间】:2016-02-09 16:47:44
【问题描述】:

我已经在一个项目上工作了一周,现在正在尝试不同的方法来解决这个问题。我对 python 和一般编程非常陌生,并且不了解基础知识。

任务是创建一个带有按钮的窗口,该按钮将外部 .obj 文件导入场景并重命名。有一次,我可以通过将文件放在“HOME”目录(即我的文档)中来做到这一点,但我丢失了那段代码。

我尝试了很多方法,但我根本不理解正确的语法。我也向同学寻求帮助,我们无法弄清楚 obj 的存储位置以及如何正确引用它。

我看到这个帖子看起来很有用,但总是返回“未找到文件”Importing OBJ file to maya scene (MEL/Python)

import maya.cmds as mc
import os

ram = mc.window("RenamerWin", t = "Renamer v 1.0", w = 300, h = 300)
if mc.window(ram, exists = True): 
    mc.deleteUI("RenamerWin")

#icon
logopath = mc.internalVar(upd = True) + "icons/icon.jpg"

mc.columnLayout(adj = True)
mc.image (w = 300, h = 100, image = logopath)
mc.separator (h = 25, style = 'double')

mc.text("Welcome to your Custom Forest Builder!")

rockW = mc.intSliderGrp(l = "width", min = 0, max = 10, field = True)
rockH = mc.intSliderGrp(l = "height", min = 0, max = 10, field = True)
rockD = mc.intSliderGrp(l = "depth", min = 0, max = 10, field = True)
mc.button(l = "Create a Rock", c = "myRock()")

#Name the Rock
rockName = mc.textFieldGrp (l="renamer", editable = True)
mc.button (l = "Name the Rock", c = "myRockRenamer()")
mc.showWindow(ram)
def myRockRenamer():
    finalName = mc.textFieldGrp(rockName,q = True, text = True) 
    mc.rename(finalName)

mc.showWindow(ram)

def myRock():
    myRockWidth = mc.intSliderGrp(rockW, q = True, value = True)
    myRockHeight = mc.intSliderGrp(rockH, q = True, value = True)
    myRockDepth = mc.intSliderGrp(rockD, q = True, value = True)
    finalRock = mc.file(os.path.join(os.getenv('E:\2015\2. Tech Art Programming\Forest Builder'), 'rock.obj'), open = True, force = True)
    finalRock.scale( myRockWidth, myRockHeight, myRockDepth)

问题:

  1. 我是否将 .obj 存储在与 .mb 文件相同的文件夹中?我希望能够压缩此代码。

  2. 是否必须先将文件加载到 Maya 中,然后使用另一段代码显示?

  3. 你能给我链接一些参考资料吗?我一遍又一遍地搜索谷歌。也许我偶然发现了答案,但不明白我在看什么。

  4. 除了在我的 PC 上的 Maya 文件夹中之外,我如何存储它?

    logopath = mc.internalVar(upd = True) + "icons/icon.jpg"

  5. 当我打开窗口并尝试按下按钮时,我不再收到有关找不到文件的错误消息(我以前做过)。

“#错误:TypeError:文件 C:\Program Files\Autodesk\Maya2015\bin\python27.zip\ntpath.py 第 96 行:'NoneType' 类型的对象没有 len()”

非常感谢您的帮助。

【问题讨论】:

    标签: python import external maya


    【解决方案1】:

    您没有转义文件路径中的反斜杠,因此 Maya 将它们视为特殊字符。试试

        finalRock = mc.file(os.path.join(os.getenv('E:\\2015\\2. Tech Art Programming\\Forest Builder'), 'rock.obj'), open = True, force = True)
    

        finalRock = mc.file(os.path.join(os.getenv('E:/2015/2. Tech Art Programming/Forest Builder'), 'rock.obj'), open = True, force = True)
    

    【讨论】:

      【解决方案2】:

      我不确定您的问题是您无法自动找到 obj 的路径,还是之后无法导入/重命名它?
      我刚刚做了一个简单的例子来说明我将如何做到这一点:

      import maya.cmds as cmds
      new_name = "Renamed_OBJ"
      my_file_path = "C:/Temp/OBJ_Temp.obj"
      import_nodes = cmds.file(my_file_path,i=True,type="OBJ",rpr="OBJ_Import",rnn=True)
      transform_nodes = cmds.ls(import_nodes,type="transform")
      for t_node in transform_nodes:
          print(t_node)
          cmds.rename(t_node,new_name)
      

      一些事情;您可以在 file 命令中使用 i=True + type="OBJ" 来导入 objs 并添加 rnn=True 以使其返回刚刚导入的所有节点。
      然后,您可以对它们进行排序,挑选出变换节点,然后重命名和缩放它们。
      这个文档在这样的时候帮助了我很多:https://help.autodesk.com/view/MAYAUL/2020/ENU/?guid=__CommandsPython_index_html

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        • 1970-01-01
        • 2016-12-26
        • 2018-06-11
        • 1970-01-01
        • 1970-01-01
        • 2018-03-08
        相关资源
        最近更新 更多