我在Autodesk Maya中开发工具.我构建的许多工具都有简单的窗口GUI,供动画师和建模人员使用.这些GUI通常包含您通常希望在任何基本窗口中看到的内容; 标签,列表,菜单,按钮,文本字段等.但是,您可以使用可用工具构建的UI的复杂性存在限制,特别是在可用小部件的类型中.
我有兴趣使用一些更高级的wxPython小部件,如ListView(网格),树等.这将涉及使用完整的wxFrame(窗口)来显示整个UI,这实际上意味着窗口将不再被绑在玛雅身上.不是交易破坏者,但这意味着当Maya被最小化时,窗口将不会跟随.
我之前尝试使用tkinter作为测试,但发现它需要MainLoop才能在自己的线程中运行.这是合乎逻辑的,但在我的情况下,它与Maya自己的线程冲突,基本上使Maya挂起,直到窗口关闭.这是因为Maya在主Maya GUI共享的单个线程中运行所有脚本,无论是MEL还是Python.这是为了防止一个脚本在另一个脚本尝试对同一个对象进行操作时删除一个对象.
wxPython具有相同的"mainloop"方法.我想知道它是否有任何解决方法,以便它可以在Maya中工作?
我在这里实时处理多边形数据,但问题很简单.我有一个包含数千套多边形Indecies(整数)的庞大列表,我需要将列表尽可能"快速"简化为"连接"Indecies集合列表.即包含也在另一个集合中的整数的任何集合将成为结果中的一个集合.我已经阅读了几个涉及集合和图形等的可能解决方案.我所追求的是具有任何程度共性的最终集合列表.
我在这里处理大量数据,但为了简单起见,这里有一些示例数据:
setA = set([0,1,2])
setB = set([6,7,8,9])
setC = set([4,5,6])
setD = set([3,4,5,0])
setE = set([10,11,12])
setF = set([11,13,14,15])
setG = set([16,17,18,19])
listOfSets = [setA,setB,setC,setD,setE,setF,setG]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我在一个包含这样结果的列表之后,尽管排序是无关紧要的:
connectedFacesListOfSets = [set([0,1,2,3,4,5,6,7,8,9]),set([10,11,12,13,14,15]),set([16, 17,18,19])]
我已经找到了类似的解决方案,但是投票率最高的解决方案在我的大型测试数据上给出了错误的结果.
我有一些用3dmax/maya/cad/4dcinema编写的3d模型,我可以在我的网站上显示它们,这样用户就可以旋转模型并检查它.
我在互联网上找到了这个http://replimat.com/thingiview/examples/client_side_ajax.html我认为如果我能以某种方式将这些模型从3dmax/maya/cad/3dcinema转换为OBJ/STL,它将起作用.
有什么转换器可用于Linux?或任何其他方法在Web浏览器中显示这些模型而无需在浏览器上安装任何东西?谢谢 .
我想开始为我的Maya脚本创建单元测试.这些脚本必须在Maya环境中运行,并依赖于maya.cmds模块命名空间.
如何从运行环境(如Maya)中运行Nose测试?
这可能是一个相当复杂的问题,因为很多人可能不知道我正在为它编写的软件:Autodesk Maya 2011.我正在尝试加快一个繁琐的缓慢过程(操纵:赋予3d角色能力)通过编写自动执行的脚本来移动.
我会尽力解释这种情况.
我有一个脚本,它接受一个对象,遍历该对象的子节点,将它们存储在列表中,然后将初始对象放在列表的末尾,反转列表,因为它是错误的方法,然后放置初始对象在前面.
问题:有三个不同的列表,所有相同的对象TYPE但具有不同的名称,它们实际上是不同的对象.我的目标是通过生成称为"blendcolors"的节点将它们连接在一起.但是,如果我有一个循环为列表A中的每个对象生成它们,那么我需要循环也将它们连接到其他列表中的对象,我无法弄清楚这一点.
这是我的代码,它已被播放,因此就实际循环而言,比以前更加不完整.
import maya.cmds as cmds
def crBC(IKJoint, FKJoint, bindJoint, xQuan, switch):
# gets children joints of the selected joint
chHipIK = cmds.listRelatives(IKJoint, ad = True, type = 'joint')
chHipFK = cmds.listRelatives(FKJoint, ad = True, type = 'joint')
chHipBind = cmds.listRelatives(bindJoint, ad = True, type = 'joint')
# list is built backwards, this reverses the list
chHipIK.reverse()
chHipFK.reverse()
chHipBind.reverse()
# appends the initial joint to the list
chHipIK.append(IKJoint)
chHipFK.append(FKJoint)
chHipBind.append(bindJoint)
# puts the last joint …Run Code Online (Sandbox Code Playgroud) 我想知道是否有更好的方法在列表中一次迭代两个项目.我经常使用Maya,其中一个命令(listConnections)返回一个交替值列表.该列表将类似于[connectionDestination,connectionSource,connectionDestination,connectionSource].要对此列表执行任何操作,我最好还是要做类似的事情:
for destination, source in cmds.listConnections():
print source, destination
Run Code Online (Sandbox Code Playgroud)
你当然可以使用[:: 2]迭代列表中的每个其他项目,枚举和source将是索引+ 1,但是你必须为奇数列表和东西添加额外的检查.
到目前为止,我最接近的是:
from itertools import izip
connections = cmds.listConnections()
for destination, source in izip(connections[::2], connections[1::2]):
print source, destination
Run Code Online (Sandbox Code Playgroud)
这并不是非常重要,因为我已经有办法做我想做的事情.这似乎就是应该有更好的方法之一.
我有cpp代码,在Maya中显示简单的OpenGL形状.如果使用遗留视口,那么我正是我想要的:沿x轴的箭头:

但是,如果我在ViewPort 2.0中使用相同的代码,则箭头会跟随相机移动:


只有当我应用glTranslatef(我将需要使用)时才会发生这种情况.
这是一段代码:
for (int i=0;i<10;i++)
{
glPushMatrix();
glTranslatef(i,0,0);
glBegin(GL_LINES);
// Arrow
glVertex3f(0, y, z);
glVertex3f(1, y, z);
glVertex3f(1, y, z);
glVertex3f(0.5, y, z+0.5);
glVertex3f(1, y, z);
glVertex3f(0.5, y, z-0.5);
glEnd();
glPopMatrix();
}
Run Code Online (Sandbox Code Playgroud)
如何在"新"Maya视口中具有正确的行为?
我创建了一个可以停靠在 Maya 主用户界面中的工具,但是我无法在它关闭后找到清理它的方法。问题是,如果我创建了该工具的多个实例,然后将其拖动到位以停靠它,当我右键单击 Maya 的窗口时,它们都会显示出来。工具关闭时如何正确清理这些?
我已经尝试过了cmds.deleteUI,QObject.deleteLater()充其量只能清除工具的内容,但它仍然存在于 Maya 中。这是我到目前为止所拥有的一个例子:
from shiboken import wrapInstance
from PySide import QtGui, QtCore
from maya import OpenMayaUI as OpenMayaUI
from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
class Window(MayaQWidgetDockableMixin, QtGui.QWidget):
def __init__(self, parent = None):
super(self.__class__, self).__init__(parent = parent)
mayaMainWindowPtr = OpenMayaUI.MQtUtil.mainWindow()
self.mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QtGui.QWidget)
self.setWindowFlags(QtCore.Qt.Window)
if cmds.window('myTool', q = True, ex = True):
cmds.deleteUI('myTool')
self.setObjectName('myTool')
self.setWindowTitle('My tool')
self.resize(200, 200)
self.myButton = QtGui.QPushButton('TEMP')
self.mainLayout = QtGui.QVBoxLayout()
self.mainLayout.addWidget(self.myButton)
self.setLayout(self.mainLayout)
def dockCloseEventTriggered(self):
self.deleteLater()
def run(self):
self.show(dockable = …Run Code Online (Sandbox Code Playgroud) 我有一个来自 help() 函数的很长的输出,发现在脚本编辑器中找到我要找的东西有点困难。是否可以将 help() 输出保存为格式化的 html 文件?
如何编辑usdz文件并维护其中设置的装备?例如,我正在尝试编辑此示例项目中包含的 robots.usdz 网格 -
https://developer.apple.com/documentation/arkit/capturing_body_motion_in_3d
robots.usdz 文件包含在字符文件夹中。
我尝试了以下方法:
您是否有推荐的管道来编辑 usdz 文件的实际网格?我没有原始的 dae 或 fbx 或 gtlf 文件。
maya ×10
python ×7
3ds ×1
api ×1
arkit ×1
c++ ×1
environment ×1
javascript ×1
nose ×1
opengl ×1
pyside ×1
python-2.7 ×1
realitykit ×1
scenekit ×1
scripting ×1
unit-testing ×1
usdz ×1
wxpython ×1
wxwidgets ×1