This commit is contained in:
2025-04-17 04:52:48 +08:00
commit 9985b73dc1
3708 changed files with 2387532 additions and 0 deletions

View File

@ -0,0 +1 @@
packages/mutils/tests/data/* linguist-vendored

View File

@ -0,0 +1,332 @@
[comment]: # "请通过github查看此页面: https://github.com/krathjen/studiolibrary/blob/master/DOCS.md"
<a name="top"></a>
<img src="./src/studiolibrary/resource/icons/header.png" width="252" height="42"/>
请随意根据需要改进此页面。谢谢。
### 索引
* [如何从代码运行](#jf82ksc)
* [如何进行开发时重新加载](#gw4un1m)
* [如何从代码设置名称和路径](#nc2dokp)
* [如何创建本地和共享库](#k25lyqw)
* [如何创建多个库实例](#ou3nb4z)
* [如何为多个项目创建库](#lvx2med)
* [如何为多个项目设置库](#h2rz6Km)
* [如何调试“加载数据时没有对象匹配”](#zi20df5)
* [如何修复具有未知节点的场景](#ufj2oi4)
* [如何锁定和解锁特定文件夹](#we7zm9m)
* [如何手动安装Studio Library](#qiot1k3)
### 常见问题
另请参阅常见问题解答。
https://github.com/krathjen/studiolibrary/labels/FAQ
<br>
### <a name="jf82ksc"></a> 如何从代码运行
```python
import studiolibrary
studiolibrary.main()
```
[顶部](#top)
<br>
### <a name="gw4un1m"></a> 如何进行开发时重新加载
此代码在加载之前移除所有先前导入的Studio Library模块和缓存。
提示您还可以在单击货架按钮时按住“Shift”键以重新加载模块。
```python
import studiolibrary
studiolibrary.reload()
import studiolibrary
studiolibrary.main()
```
[顶部](#top)
<br>
### <a name="nc2dokp"></a> 如何从代码设置名称和路径
创建并显示一个名为“MY_PROJECT - Anim”的库指向自定义路径。
```python
import studiolibrary
studiolibrary.main(name="MY_PROJECT - Anim", path="P:/MY_PROJECT/studiolibrary/anim")
```
[顶部](#top)
<br>
### <a name="k25lyqw"></a> 如何创建本地和共享库
创建并显示一个共享库和一个本地库。
```python
import studiolibrary
studiolibrary.main(name="Local", path="C:/temp/studiolibrary/")
studiolibrary.main(name="Shared", path="P:/shared/studiolibrary/")
```
[顶部](#top)
<br>
### <a name="ou3nb4z"></a> 如何创建多个库实例
在此示例中,我们为动画部门、预览部门和本地临时文件夹创建一个库。
创建三个库并仅显示第三个。您可以通过设置菜单访问其他库。
```python
import studiolibrary
studiolibrary.main(name="Local", path="C:/temp/studiolibrary", show=False)
studiolibrary.main(name="MY_PROJECT - Anim", path="P:/MY_PROJECT/studiolibrary/anim", show=False)
studiolibrary.main(name="MY_PROJECT - Previs", path="P:/MY_PROJECT/studiolibrary/previs")
```
[顶部](#top)
<br>
### <a name="lvx2med"></a> 如何为多个项目创建库
在为多个项目实现Studio Library时我们可以获取当前项目名称然后设置名称和路径。
```python
import studiolibrary
# 您可以使用环境变量或内部Python模块来获取项目名称。
project = "MY_PROJECT"
path = "/shared/libraries/" + project + "_Library"
name = project + " Library"
studiolibrary.main(name=name, path=path)
```
[顶部](#top)
<br>
### <a name="h2rz6Km"></a> 如何为多个项目设置库
```python
import studiolibrary
libraries = [
{"name":"Project1", "path":r"D:\Library_Data", "default":True, "theme":{"accentColor":"rgb(0,200,100)"}},
{"name":"Project2", "path":r"D:\Library_Data2"},
{"name":"Temp", "path":r"C:\temp"},
]
studiolibrary.setLibraries(libraries)
studiolibrary.main()
```
[顶部](#top)
<br>
### <a name="zi20df5"></a> 如何调试“加载数据时没有对象匹配”
确保在设置菜单中选中“调试模式”。应用姿势后,它应该在脚本编辑器中打印任何奇怪的行为。这可能会使应用姿势变得更慢。
您可能会看到类似以下内容...
```
// mutils : 找不到匹配的目标对象 ...
// mutils : 加载函数耗时 0.38400 秒 /
```
[顶部](#top)
<br>
### <a name="ufj2oi4"></a> 如何修复具有未知节点的场景
未知节点是因为缺少插件。修复此问题的简单方法是在**Python**脚本编辑器中执行以下代码。另一种方法是找到缺少的插件并确保它已加载。
```python
# 删除当前场景中的所有未知节点
import maya.cmds
n = maya.cmds.ls(type="unknown")
if n:
maya.cmds.delete(n)
```
[顶部](#top)
<br>
### <a name="we7zm9m"></a> 如何锁定和解锁特定文件夹
```python
import studiolibrary
path= "C:/MY_PROJECT/studiolibrary/anim"
name = "MY_PROJECT - Anim"
superusers = ["kurt.rathjen"]
# 解锁所有文件夹。这是默认行为。
studiolibrary.main(name=name, path=path)
# 除非您是超级用户,否则锁定所有文件夹。
studiolibrary.main(name=name, path=path, superusers=superusers)
# 此命令将仅锁定路径中包含“Approved”一词的文件夹。
studiolibrary.main(name=name, path=path, superusers=superusers, lockFolder="Approved")
# 此命令将锁定所有文件夹除了路径中包含“Users”或“Shared”一词的文件夹。
studiolibrary.main(name=name, path=path, superusers=superusers, unlockFolder="Users|Shared")
```
[顶部](#top)
<br>
### <a name="qiot1k3"></a> 如何手动安装
#### 下载
从以下链接下载并解压缩studiolibrary.zip文件。
www.studiolibrary.com
#### 安装
1. 解压缩下载的studiolibrary.zip文件。
2. 将下面的`Python代码`复制到Maya Python脚本编辑器中。确保选项卡为Python而不是MEL。
3. 在Python代码中更改路径变量为studiolibrary文件夹。
4.`Ctrl + Enter`运行。
5. 将Python代码拖到货架上。
``` python
# Python代码
import os
import sys
# 3. 用解压后的`src`位置替换此路径。
path = r"C:\Users\USER\Downloads\studiolibrary\src"
if not os.path.exists(path):
raise FileNotFoundError(r'源路径不存在!')
if path not in sys.path:
sys.path.insert(0, path)
import studiolibrary
studiolibrary.main()
```
[顶部](#top)

View File

@ -0,0 +1,69 @@
### GNU 较宽松公共许可证
版本 32007年6月29日
版权 (C) 2007 自由软件基金会Inc.
<http://fsf.org/>
任何人都可以复制和分发该许可证文档的逐字副本,但不允许更改。
此版本的 GNU 较宽松公共许可证包含了版本 3 的 GNU 通用公共许可证的条款和条件,并补充了以下额外权限。
#### 0. 附加定义。
在此使用的“本许可证”指的是版本 3 的 GNU 较宽松公共许可证“GNU GPL”指的是版本 3 的 GNU 通用公共许可证。
“库”指的是受本许可证管辖的覆盖作品,而不是下文定义的应用程序或组合作品。
“应用程序”是指任何利用库提供的接口的作品,但不基于库。定义库中定义的类的子类被视为使用库提供的接口的一种方式。
“组合作品”是指通过将应用程序与库结合或链接而产生的作品。与组合作品一起制作的库的特定版本也称为“链接版本”。
“最小对应源”指的是组合作品的对应源,排除任何源代码,这些源代码在孤立考虑时是基于应用程序,而不是链接版本。
“对应应用程序代码”指的是应用程序的目标代码和/或源代码,包括任何数据和实用程序,这些数据和实用程序用于从应用程序重现组合作品,但不包括组合作品的系统库。
#### 1. 对 GNU GPL 第 3 节的例外。
您可以根据本许可证的第 3 和第 4 节传达受保护的作品,而不受 GNU GPL 第 3 节的约束。
#### 2. 传达修改版本。
如果您修改了库的副本,并且在您的修改中,一个设施引用了由使用该设施的应用程序提供的函数或数据(而不是在调用该设施时传递的参数),那么您可以传达修改版本的副本:
- a) 根据本许可证,前提是您尽力确保,如果应用程序未提供该函数或数据,该设施仍然可以操作,并执行其目的中仍然有意义的部分,或者
- b) 根据 GNU GPL且该副本不适用本许可证的任何额外权限。
#### 3. 包含库头文件材料的目标代码。
应用程序的目标代码形式可以包含来自库的头文件的材料。您可以根据您选择的条款传达此类目标代码,前提是,如果所包含的材料不局限于数值参数、数据结构布局和访问器,或小宏、内联函数和模板(长度不超过十行),您必须同时做到以下两点:
- a) 在每个目标代码副本中给出显著通知,说明库在其中使用,并且库及其使用受本许可证的约束。
- b) 随目标代码附带一份 GNU GPL 和本许可证文档的副本。
#### 4. 组合作品。
您可以根据您选择的条款传达组合作品,这些条款共同有效地不限制组合作品中包含的库部分的修改和调试此类修改的逆向工程,前提是您还必须做到以下每一点:
- a) 在每个组合作品副本中给出显著通知,说明库在其中使用,并且库及其使用受本许可证的约束。
- b) 随组合作品附带一份 GNU GPL 和本许可证文档的副本。
- c) 对于在执行期间显示版权通知的组合作品,包括库的版权通知在这些通知中,以及指向 GNU GPL 和本许可证文档副本的引用。
- d) 执行以下任一项:
- 0) 根据本许可证传达最小对应源,并以适合的形式传达对应应用程序代码,并在允许用户重新组合或重新链接应用程序与修改版本的链接版本以生成修改后的组合作品的条款下进行传达,按照 GNU GPL 第 6 节规定的传达对应源的方式。
- 1) 使用适当的共享库机制与库链接。适当的机制是指a在运行时使用用户计算机系统上已存在的库的副本并且b能够与与链接版本接口兼容的库的修改版本正常工作。
- e) 提供安装信息,但仅在您本来需要根据 GNU GPL 第 6 节提供此类信息的情况下,并且仅在此类信息对于安装和执行由重新组合或重新链接应用程序与修改版本的链接版本生成的修改版本的组合作品是必要的情况下。(如果您使用选项 4d0则安装信息必须随最小对应源和对应应用程序代码一起提供。如果您使用选项 4d1则必须按照 GNU GPL 第 6 节规定的传达对应源的方式提供安装信息。)
#### 5. 组合库。
您可以将基于库的库设施与其他不属于应用程序且不受本许可证约束的库设施并排放置在一个库中,并根据您选择的条款传达此类组合库,前提是您同时做到以下两点:
- a) 随组合库附带一份基于库的相同作品的副本,该副本未与任何其他库设施组合,并根据本许可证的条款进行传达。
- b) 在组合库中给出显著通知,说明其部分是基于库的作品,并解释在哪里可以找到相同作品的未组合形式的附带副本。
#### 6. GNU 较宽松公共许可证的修订版本。
自由软件基金会可能不时发布 GNU 较宽松公共许可证的修订版和/或新版本。这些新版本在精神上与当前版本相似,但可能在细节上有所不同,以解决新问题或关注。
每个版本都有一个区分版本号。如果您收到的库指定某个编号版本的 GNU 较宽松公共许可证“或任何后续版本”适用于它,您可以选择遵循该发布版本或自由软件基金会发布的任何后续版本的条款和条件。如果您收到的库未指定 GNU 较宽松公共许可证的版本号,您可以选择自由软件基金会发布的任何版本的 GNU 较宽松公共许可证。
如果您收到的库指定代理可以决定未来的 GNU 较宽松公共许可证版本是否适用,则该代理对任何版本的公开接受声明是您选择该版本用于库的永久授权。

View File

@ -0,0 +1,79 @@

<img src="./src/studiolibrary/resource/icons/header.png" width="252" height="42"/>
Studio Library 是一个基于 Python 的 Qt 工具,用于管理 Maya 中的姿势和动画。
## 特性
* 保存姿势和动画
* 镜像姿势和动画
* 创建易于使用的选择集
* MMB 拖动以快速混合姿势
* LMB 拖放以组织项目
* 插入、合并和替换动画
* 支持 Windows、Linux 和 OSX
* 支持 Maya 2018+
## 教程
* [如何使用姿势](https://www.youtube.com/watch?v=lpaWrT7VXfM)
* [如何使用选择集](https://www.youtube.com/watch?v=xejWubal_j8)
* [如何使用镜像表](https://www.youtube.com/watch?v=kCv0XleJfjU&t=3s)
## 安装
1. 从 [github releases](https://github.com/krathjen/studiolibrary/releases) 或 [网站](http://www.studiolibrary.com/download) 下载并解压 *studiolibrary.zip* 文件。
2. 将 "studiolibrary/install.mel" 文件拖放到 Maya 视口中。
3. 点击工具栏上的 Studio Library 图标以运行。
提示:如果您想与其他用户共享 Studio Library请将解压后的 "studiolibrary" 文件夹放在网络驱动器上。
<img src="install.gif" width="640" height="360"/>
## 文档
在 [这里](DOCS.md) 查找最新文档。
## 贡献
欢迎对 Studio Library 进行贡献!无论是报告错误、功能请求、讨论想法还是提交代码。
我们遵循以下指南...
* [提交信息风格](https://github.com/erlang/otp/wiki/Writing-good-commit-messages)
* [GitHub 分叉工作流程](https://gist.github.com/Chaser324/ce0505fbed06b947d962)
* [Python Qt 风格指南](http://bitesofcode.blogspot.co.uk/2011/10/pyqt-coding-style-guidelines.html)
## 许可证
Studio Library 在 GNU 较宽松公共许可证 v3.0 下免费用于生产。
有关更多信息,请点击 [这里](LICENSE.md)。
## 支持
欢迎提出意见、建议和错误报告。
请随时在 [github issues](https://github.com/krathjen/studiolibrary/issues/new)
提交任何问题,附上错误信息和详细的步骤说明,
或者联系 [support@studiolibrary.com](support@studiolibrary.com)。

View File

@ -0,0 +1,25 @@
## Config
There are two ways to create a custom config.
1. You can create a config.json file in this directory.
The config.json file will override any keys in the [default.json](../src/studiolibrary/config/default.json) file
and will be ignored by git.
2. The other way is to create an environment variable with the name
STUDIO_LIBRARY_CONFIG_PATH. The value of this variable should be the
full path to your config.json file.
The config uses the json file type with basic support for comments using "//".
##### Example:
```javascript
// config.json
{
// The maximum walking depth from the root directory
"recursiveSearchDepth": 4
}
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 KiB

View File

@ -0,0 +1,12 @@
/*
Drag and drop for Maya 2016+
*/
global proc studioLibraryInstall() {
string $whatIs = `whatIs studioLibraryInstall`;
string $path = `substring $whatIs 25 999`;
string $filename = `substitute "install.mel" $path "install.py"`;;
python("import imp;imp.load_source('_studioLibraryInstall', '"+$filename+"')");
}
studioLibraryInstall();

View File

@ -0,0 +1,83 @@
# Copyright 2017 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation, either
# version 3 of the License, or (at your option) any later version.
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
"""
Drag and drop for Maya 2018+
"""
import os
import sys
try:
import maya.mel
import maya.cmds
isMaya = True
except ImportError:
isMaya = False
def onMayaDroppedPythonFile(*args, **kwargs):
"""This function is only supported since Maya 2017 Update 3"""
pass
def _onMayaDropped():
"""Dragging and dropping this file into the scene executes the file."""
srcPath = os.path.join(os.path.dirname(__file__), 'src')
iconPath = os.path.join(srcPath, 'studiolibrary', 'resource', 'icons', 'icon.png')
srcPath = os.path.normpath(srcPath)
iconPath = os.path.normpath(iconPath)
if not os.path.exists(iconPath):
raise IOError('Cannot find ' + iconPath)
for path in sys.path:
if os.path.exists(path + '/studiolibrary/__init__.py'):
maya.cmds.warning('Studio Library is already installed at ' + path)
command = '''
# -----------------------------------
# Studio Library
# www.studiolibrary.com
# -----------------------------------
import os
import sys
if not os.path.exists(r'{path}'):
raise IOError(r'The source path "{path}" does not exist!')
if r'{path}' not in sys.path:
sys.path.insert(0, r'{path}')
import studiolibrary
studiolibrary.main()
'''.format(path=srcPath)
shelf = maya.mel.eval('$gShelfTopLevel=$gShelfTopLevel')
parent = maya.cmds.tabLayout(shelf, query=True, selectTab=True)
maya.cmds.shelfButton(
command=command,
annotation='Studio Library',
sourceType='Python',
image=iconPath,
image1=iconPath,
parent=parent
)
# print("\n// Studio Library has been added to current shelf.")
if isMaya:
_onMayaDropped()

View File

@ -0,0 +1,12 @@
How to install the Studio Library.
1. Drag and drop the "install.mel" file onto the Maya viewport.
2. Click the Studio Library icon on the shelf to run.
Tip: If you would like to share the Studio Library with other users then
place the downloaded "studiolibrary" folder on a network drive.
Support:
www.studiolibrary.com

View File

@ -0,0 +1,30 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
from .cmds import *
from .decorators import *
from . import playblast
from . import namespace
from .scriptjob import ScriptJob
from .matchnames import matchNames, groupObjects
from .node import Node
from .attribute import Attribute
from .transferobject import TransferObject
from .selectionset import SelectionSet, saveSelectionSet
from .pose import Pose, savePose, loadPose
from .animation import Animation, PasteOption, saveAnim, loadAnims
from .mirrortable import MirrorTable, MirrorOption, saveMirrorTable

View File

@ -0,0 +1,839 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import os
import shutil
import logging
from studiovendor.Qt import QtWidgets
import mutils
import mutils.gui
try:
import maya.cmds
except ImportError:
import traceback
traceback.print_exc()
logger = logging.getLogger(__name__)
MIN_TIME_LIMIT = -10000
MAX_TIME_LIMIT = 100000
DEFAULT_FILE_TYPE = "mayaBinary" # "mayaAscii"
# A feature flag that will be removed in the future.
FIX_SAVE_ANIM_REFERENCE_LOCKED_ERROR = True
class PasteOption:
Insert = "insert"
Replace = "replace"
ReplaceAll = "replace all"
ReplaceCompletely = "replaceCompletely"
class AnimationTransferError(Exception):
"""Base class for exceptions in this module."""
pass
class OutOfBoundsError(AnimationTransferError):
"""Exceptions for clips or ranges that are outside the expected range"""
pass
def validateAnimLayers():
"""
Check if the selected animation layer can be exported.
:raise: AnimationTransferError
"""
if maya.cmds.about(q=True, batch=True):
return
animLayers = maya.mel.eval('$gSelectedAnimLayers=$gSelectedAnimLayers')
# Check if more than one animation layer has been selected.
if len(animLayers) > 1:
msg = "More than one animation layer is selected! " \
"Please select only one animation layer for export!"
raise AnimationTransferError(msg)
# Check if the selected animation layer is locked
if len(animLayers) == 1:
if maya.cmds.animLayer(animLayers[0], query=True, lock=True):
msg = "Cannot export an animation layer that is locked! " \
"Please unlock the anim layer before exporting animation!"
raise AnimationTransferError(msg)
def saveAnim(
objects,
path,
time=None,
sampleBy=1,
fileType="",
metadata=None,
iconPath="",
sequencePath="",
bakeConnected=True
):
"""
Save the anim data for the given objects.
Example:
import mutils
mutils.saveAnim(
path="c:/example.anim",
objects=["control1", "control2"]
time=(1, 20),
metadata={'description': 'Example anim'}
)
:type path: str
:type objects: None or list[str]
:type time: (int, int) or None
:type fileType: str or None
:type sampleBy: int
:type iconPath: str
:type sequencePath: str
:type metadata: dict or None
:type bakeConnected: bool
:rtype: mutils.Animation
"""
# Copy the icon path to the temp location
if iconPath:
shutil.copyfile(iconPath, path + "/thumbnail.jpg")
# Copy the sequence path to the temp location
if sequencePath:
shutil.move(sequencePath, path + "/sequence")
# Save the animation to the temp location
anim = mutils.Animation.fromObjects(objects)
anim.updateMetadata(metadata)
anim.save(
path,
time=time,
sampleBy=sampleBy,
fileType=fileType,
bakeConnected=bakeConnected
)
return anim
def clampRange(srcTime, dstTime):
"""
Clips the given source time to within the given destination time.
Example:
print clampRange((15, 35), (20, 30))
# 20, 30
print clampRange((25, 45), (20, 30))
# 25, 30
:type srcTime: (int, int)
:type dstTime: (int, int)
:rtype: (int, int)
"""
srcStart, srcEnd = srcTime
dstStart, dstEnd = dstTime
if srcStart > dstEnd or srcEnd < dstStart:
msg = "The src and dst time do not overlap. " \
"Unable to clamp (src=%s, dest=%s)"
raise OutOfBoundsError(msg, srcTime, dstTime)
if srcStart < dstStart:
srcStart = dstStart
if srcEnd > dstEnd:
srcEnd = dstEnd
return srcStart, srcEnd
def moveTime(time, start):
"""
Move the given time to the given start time.
Example:
print moveTime((15, 35), 5)
# 5, 20
:type time: (int, int)
:type start: int
:rtype: (int, int)
"""
srcStartTime, srcEndTime = time
duration = srcEndTime - srcStartTime
if start is None:
startTime = srcStartTime
else:
startTime = start
endTime = startTime + duration
if startTime == endTime:
endTime = startTime + 1
return startTime, endTime
def findFirstLastKeyframes(curves, time=None):
"""
Return the first and last frame of the given animation curves
:type curves: list[str]
:type time: (int, int)
:rtype: (int, int)
"""
first = maya.cmds.findKeyframe(curves, which='first')
last = maya.cmds.findKeyframe(curves, which='last')
result = (first, last)
if time:
# It's possible (but unlikely) that the curves will not lie within the
# first and last frame
try:
result = clampRange(time, result)
except OutOfBoundsError as error:
logger.warning(error)
return result
def insertKeyframe(curves, time):
"""
Insert a keyframe on the given curves at the given time.
:type curves: list[str]
:type time: (int, int)
"""
startTime, endTime = time
for curve in curves:
insertStaticKeyframe(curve, time)
firstFrame = maya.cmds.findKeyframe(curves, time=(startTime, startTime), which='first')
lastFrame = maya.cmds.findKeyframe(curves, time=(endTime, endTime), which='last')
if firstFrame < startTime < lastFrame:
maya.cmds.setKeyframe(curves, insert=True, time=(startTime, startTime))
if firstFrame < endTime < lastFrame:
maya.cmds.setKeyframe(curves, insert=True, time=(endTime, endTime))
def insertStaticKeyframe(curve, time):
"""
Insert a static keyframe on the given curve at the given time.
:type curve: str
:type time: (int, int)
:rtype: None
"""
startTime, endTime = time
lastFrame = maya.cmds.findKeyframe(curve, which='last')
firstFrame = maya.cmds.findKeyframe(curve, which='first')
if firstFrame == lastFrame:
maya.cmds.setKeyframe(curve, insert=True, time=(startTime, endTime))
maya.cmds.keyTangent(curve, time=(startTime, startTime), ott="step")
if startTime < firstFrame:
nextFrame = maya.cmds.findKeyframe(curve, time=(startTime, startTime), which='next')
if startTime < nextFrame < endTime:
maya.cmds.setKeyframe(curve, insert=True, time=(startTime, nextFrame))
maya.cmds.keyTangent(curve, time=(startTime, startTime), ott="step")
if endTime > lastFrame:
previousFrame = maya.cmds.findKeyframe(curve, time=(endTime, endTime), which='previous')
if startTime < previousFrame < endTime:
maya.cmds.setKeyframe(curve, insert=True, time=(previousFrame, endTime))
maya.cmds.keyTangent(curve, time=(previousFrame, previousFrame), ott="step")
def duplicateNode(node, name):
"""Duplicate the given node.
:param node: Maya path.
:type node: str
:param name: Name for the duplicated node.
:type name: str
:returns: Duplicated node names.
:rtype: list[str]
"""
if maya.cmds.nodeType(node) in ["transform", "joint"]:
new = maya.cmds.duplicate(node, name=name, parentOnly=True)[0]
else:
# Please let us know if this logic is causing issues.
new = maya.cmds.duplicate(node, name=name)[0]
shapes = maya.cmds.listRelatives(new, shapes=True) or []
if shapes:
return [shapes[0], new]
return [new]
def loadAnims(
paths,
spacing=1,
objects=None,
option=None,
connect=False,
namespaces=None,
startFrame=None,
mirrorTable=None,
currentTime=None,
showDialog=False,
):
"""
Load the animations in the given order of paths with the spacing specified.
:type paths: list[str]
:type spacing: int
:type connect: bool
:type objects: list[str]
:type namespaces: list[str]
:type startFrame: int
:type option: PasteOption
:type currentTime: bool
:type mirrorTable: bool
:type showDialog: bool
"""
isFirstAnim = True
if spacing < 1:
spacing = 1
if option is None or option == "replace all":
option = PasteOption.ReplaceCompletely
if currentTime and startFrame is None:
startFrame = int(maya.cmds.currentTime(query=True))
if showDialog:
msg = "Load the following animation in sequence;\n"
for i, path in enumerate(paths):
msg += "\n {0}. {1}".format(i, os.path.basename(path))
msg += "\n\nPlease choose the spacing between each animation."
spacing, accepted = QtWidgets.QInputDialog.getInt(
None,
"Load animation sequence",
msg,
spacing,
QtWidgets.QInputDialog.NoButtons,
)
if not accepted:
raise Exception("Dialog canceled!")
for path in paths:
anim = mutils.Animation.fromPath(path)
if startFrame is None and isFirstAnim:
startFrame = anim.startFrame()
if option == "replaceCompletely" and not isFirstAnim:
option = "insert"
anim.load(
option=option,
objects=objects,
connect=connect,
startFrame=startFrame,
namespaces=namespaces,
currentTime=currentTime,
mirrorTable=mirrorTable,
)
duration = anim.endFrame() - anim.startFrame()
startFrame += duration + spacing
isFirstAnim = False
class Animation(mutils.Pose):
IMPORT_NAMESPACE = "REMOVE_IMPORT"
@classmethod
def fromPath(cls, path):
"""
Create and return an Anim object from the give path.
Example:
anim = Animation.fromPath("/temp/example.anim")
print anim.endFrame()
# 14
:type path: str
:rtype: Animation
"""
anim = cls()
anim.setPath(path)
anim.read()
return anim
def __init__(self):
mutils.Pose.__init__(self)
try:
timeUnit = maya.cmds.currentUnit(q=True, time=True)
linearUnit = maya.cmds.currentUnit(q=True, linear=True)
angularUnit = maya.cmds.currentUnit(q=True, angle=True)
self.setMetadata("timeUnit", timeUnit)
self.setMetadata("linearUnit", linearUnit)
self.setMetadata("angularUnit", angularUnit)
except NameError as msg:
logger.exception(msg)
def select(self, objects=None, namespaces=None, **kwargs):
"""
Select the objects contained in the animation.
:type objects: list[str] or None
:type namespaces: list[str] or None
:rtype: None
"""
selectionSet = mutils.SelectionSet.fromPath(self.poseJsonPath())
selectionSet.load(objects=objects, namespaces=namespaces, **kwargs)
def startFrame(self):
"""
Return the start frame for anim object.
:rtype: int
"""
return self.metadata().get("startFrame")
def endFrame(self):
"""
Return the end frame for anim object.
:rtype: int
"""
return self.metadata().get("endFrame")
def mayaPath(self):
"""
:rtype: str
"""
mayaPath = os.path.join(self.path(), "animation.mb")
if not os.path.exists(mayaPath):
mayaPath = os.path.join(self.path(), "animation.ma")
return mayaPath
def poseJsonPath(self):
"""
:rtype: str
"""
return os.path.join(self.path(), "pose.json")
def paths(self):
"""
Return all the paths for Anim object.
:rtype: list[str]
"""
result = []
if os.path.exists(self.mayaPath()):
result.append(self.mayaPath())
if os.path.exists(self.poseJsonPath()):
result.append(self.poseJsonPath())
return result
def animCurve(self, name, attr, withNamespace=False):
"""
Return the animCurve for the given object name and attribute.
:type name: str
:type attr: str
:type withNamespace: bool
:rtype: str
"""
curve = self.attr(name, attr).get("curve", None)
if curve and withNamespace:
curve = Animation.IMPORT_NAMESPACE + ":" + curve
return curve
def setAnimCurve(self, name, attr, curve):
"""
Set the animCurve for the given object name and attribute.
:type name: str
:type attr: str
:type curve: str
"""
self.objects()[name].setdefault("attrs", {})
self.objects()[name]["attrs"].setdefault(attr, {})
self.objects()[name]["attrs"][attr]["curve"] = curve
def read(self, path=None):
"""
Read all the data to be used by the Anim object.
:rtype: None
"""
path = self.poseJsonPath()
logger.debug("Reading: " + path)
mutils.Pose.read(self, path=path)
logger.debug("Reading Done")
def isAscii(self, s):
"""Check if the given string is a valid ascii string."""
return all(ord(c) < 128 for c in s)
@mutils.unifyUndo
@mutils.restoreSelection
def open(self):
"""
The reason we use importing and not referencing is because we
need to modify the imported animation curves and modifying
referenced animation curves is only supported in Maya 2014+
"""
self.close() # Make sure everything is cleaned before importing
if not self.isAscii(self.mayaPath()):
msg = "Cannot load animation using non-ascii paths."
raise IOError(msg)
nodes = maya.cmds.file(
self.mayaPath(),
i=True,
groupLocator=True,
ignoreVersion=True,
returnNewNodes=True,
namespace=Animation.IMPORT_NAMESPACE,
)
return nodes
def close(self):
"""
Clean up all imported nodes, as well as the namespace.
Should be called in a finally block.
"""
nodes = maya.cmds.ls(Animation.IMPORT_NAMESPACE + ":*", r=True) or []
if nodes:
maya.cmds.delete(nodes)
# It is important that we remove the imported namespace,
# otherwise another namespace will be created on next
# animation open.
namespaces = maya.cmds.namespaceInfo(ls=True) or []
if Animation.IMPORT_NAMESPACE in namespaces:
maya.cmds.namespace(set=':')
maya.cmds.namespace(rm=Animation.IMPORT_NAMESPACE)
def cleanMayaFile(self, path):
"""
Clean up all commands in the exported maya file that are
not createNode.
"""
results = []
if path.endswith(".mb"):
return
with open(path, "r") as f:
for line in f.readlines():
if not line.startswith("select -ne"):
results.append(line)
else:
results.append("// End")
break
with open(path, "w") as f:
f.writelines(results)
@mutils.timing
@mutils.unifyUndo
@mutils.showWaitCursor
@mutils.restoreSelection
def save(
self,
path,
time=None,
sampleBy=1,
fileType="",
bakeConnected=True
):
"""
Save all animation data from the objects set on the Anim object.
:type path: str
:type time: (int, int) or None
:type sampleBy: int
:type fileType: str
:type bakeConnected: bool
:rtype: None
"""
objects = list(self.objects().keys())
fileType = fileType or DEFAULT_FILE_TYPE
if not time:
time = mutils.selectedObjectsFrameRange(objects)
start, end = time
# Check selected animation layers
validateAnimLayers()
# Check frame range
if start is None or end is None:
msg = "Please specify a start and end frame!"
raise AnimationTransferError(msg)
if start >= end:
msg = "The start frame cannot be greater than or equal to the end frame!"
raise AnimationTransferError(msg)
# Check if animation exists
if mutils.getDurationFromNodes(objects or [], time=time) <= 0:
msg = "No animation was found on the specified object/s! " \
"Please create a pose instead!"
raise AnimationTransferError(msg)
self.setMetadata("endFrame", end)
self.setMetadata("startFrame", start)
end += 1
validCurves = []
deleteObjects = []
msg = u"Animation.save(path={0}, time={1}, bakeConnections={2}, sampleBy={3})"
msg = msg.format(path, str(time), str(bakeConnected), str(sampleBy))
logger.debug(msg)
try:
if bakeConnected:
maya.cmds.undoInfo(openChunk=True)
mutils.bakeConnected(objects, time=(start, end), sampleBy=sampleBy)
for name in objects:
if maya.cmds.copyKey(name, time=(start, end), includeUpperBound=False, option="keys"):
dstNodes = duplicateNode(name, "CURVE")
dstNode = dstNodes[0]
deleteObjects.extend(dstNodes)
if not FIX_SAVE_ANIM_REFERENCE_LOCKED_ERROR:
mutils.disconnectAll(dstNode)
# Make sure we delete all proxy attributes, otherwise pasteKey will duplicate keys
mutils.Attribute.deleteProxyAttrs(dstNode)
maya.cmds.pasteKey(dstNode)
attrs = maya.cmds.listAttr(dstNode, unlocked=True, keyable=True) or []
attrs = list(set(attrs) - set(['translate', 'rotate', 'scale']))
for attr in attrs:
dstAttr = mutils.Attribute(dstNode, attr)
dstCurve = dstAttr.animCurve()
if dstCurve:
dstCurve = maya.cmds.rename(dstCurve, "CURVE")
deleteObjects.append(dstCurve)
srcAttr = mutils.Attribute(name, attr)
srcCurve = srcAttr.animCurve()
if srcCurve:
preInfinity = maya.cmds.getAttr(srcCurve + ".preInfinity")
postInfinity = maya.cmds.getAttr(srcCurve + ".postInfinity")
curveColor = maya.cmds.getAttr(srcCurve + ".curveColor")
useCurveColor = maya.cmds.getAttr(srcCurve + ".useCurveColor")
maya.cmds.setAttr(dstCurve + ".preInfinity", preInfinity)
maya.cmds.setAttr(dstCurve + ".postInfinity", postInfinity)
maya.cmds.setAttr(dstCurve + ".curveColor", *curveColor[0])
maya.cmds.setAttr(dstCurve + ".useCurveColor", useCurveColor)
if maya.cmds.keyframe(dstCurve, query=True, time=(start, end), keyframeCount=True):
self.setAnimCurve(name, attr, dstCurve)
maya.cmds.cutKey(dstCurve, time=(MIN_TIME_LIMIT, start - 1))
maya.cmds.cutKey(dstCurve, time=(end + 1, end + MAX_TIME_LIMIT))
validCurves.append(dstCurve)
fileName = "animation.ma"
if fileType == "mayaBinary":
fileName = "animation.mb"
mayaPath = os.path.join(path, fileName)
posePath = os.path.join(path, "pose.json")
mutils.Pose.save(self, posePath)
if validCurves:
maya.cmds.select(validCurves)
logger.info("Saving animation: %s" % mayaPath)
maya.cmds.file(mayaPath, force=True, options='v=0', type=fileType, uiConfiguration=False, exportSelected=True)
self.cleanMayaFile(mayaPath)
finally:
if bakeConnected:
# HACK! Undo all baked connections. :)
maya.cmds.undoInfo(closeChunk=True)
maya.cmds.undo()
elif deleteObjects:
maya.cmds.delete(deleteObjects)
self.setPath(path)
@mutils.timing
@mutils.showWaitCursor
def load(
self,
objects=None,
namespaces=None,
attrs=None,
startFrame=None,
sourceTime=None,
option=None,
connect=False,
mirrorTable=None,
currentTime=None
):
"""
Load the animation data to the given objects or namespaces.
:type objects: list[str]
:type namespaces: list[str]
:type startFrame: int
:type sourceTime: (int, int) or None
:type attrs: list[str]
:type option: PasteOption or None
:type connect: bool
:type mirrorTable: mutils.MirrorTable
:type currentTime: bool or None
"""
logger.info(u'Loading: {0}'.format(self.path()))
connect = bool(connect) # Make false if connect is None
if not sourceTime:
sourceTime = (self.startFrame(), self.endFrame())
if option and option.lower() == "replace all":
option = "replaceCompletely"
if option is None or option == PasteOption.ReplaceAll:
option = PasteOption.ReplaceCompletely
self.validate(namespaces=namespaces)
objects = objects or []
logger.debug("Animation.load(objects=%s, option=%s, namespaces=%s, srcTime=%s, currentTime=%s)" %
(len(objects), str(option), str(namespaces), str(sourceTime), str(currentTime)))
srcObjects = self.objects().keys()
if mirrorTable:
self.setMirrorTable(mirrorTable)
valid = False
matches = list(mutils.matchNames(srcObjects=srcObjects, dstObjects=objects, dstNamespaces=namespaces))
for srcNode, dstNode in matches:
if dstNode.exists():
valid = True
break
if not matches or not valid:
text = "No objects match when loading data. " \
"Turn on debug mode to see more details."
raise mutils.NoMatchFoundError(text)
# Load the animation data.
srcCurves = self.open()
try:
maya.cmds.flushUndo()
maya.cmds.undoInfo(openChunk=True)
if currentTime and startFrame is None:
startFrame = int(maya.cmds.currentTime(query=True))
srcTime = findFirstLastKeyframes(srcCurves, sourceTime)
dstTime = moveTime(srcTime, startFrame)
if option != PasteOption.ReplaceCompletely:
insertKeyframe(srcCurves, srcTime)
for srcNode, dstNode in matches:
# Remove the first pipe in-case the object has a parent
dstNode.stripFirstPipe()
for attr in self.attrs(srcNode.name()):
# Filter any attributes if the parameter has been set
if attrs is not None and attr not in attrs:
continue
dstAttr = mutils.Attribute(dstNode.name(), attr)
if not dstAttr.exists():
logger.debug('Skipping attribute: The destination attribute "%s" does not exist!' % dstAttr.fullname())
continue
if dstAttr.isProxy():
logger.debug('Skipping attribute: The destination attribute "%s" is a proxy attribute!', dstAttr.fullname())
continue
srcCurve = self.animCurve(srcNode.name(), attr, withNamespace=True)
if srcCurve:
dstAttr.setAnimCurve(
srcCurve,
time=dstTime,
option=option,
source=srcTime,
connect=connect
)
else:
value = self.attrValue(srcNode.name(), attr)
dstAttr.setStaticKeyframe(value, dstTime, option)
finally:
self.close()
maya.cmds.undoInfo(closeChunk=True)
# Return the focus to the Maya window
maya.cmds.setFocus("MayaWindow")
logger.info(u'Loaded: {0}'.format(self.path()))

View File

@ -0,0 +1,565 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
"""
Example:
import mutils
attr = mutils.Attribute("sphere1", "translateX")
attr.set(100)
"""
import logging
from studiovendor import six
try:
import maya.cmds
except ImportError:
import traceback
traceback.print_exc()
logger = logging.getLogger(__name__)
VALID_CONNECTIONS = [
"animCurve",
"animBlend",
"pairBlend",
"character"
]
VALID_BLEND_ATTRIBUTES = [
"int",
"long",
"float",
"short",
"double",
"doubleAngle",
"doubleLinear",
]
VALID_ATTRIBUTE_TYPES = [
"int",
"long",
"enum",
"bool",
"string",
"float",
"short",
"double",
"doubleAngle",
"doubleLinear",
]
class AttributeError(Exception):
"""Base class for exceptions in this module."""
pass
class Attribute(object):
@classmethod
def listAttr(cls, name, **kwargs):
"""
Return a list of Attribute from the given name and matching criteria.
If no flags are specified all attributes are listed.
:rtype: list[Attribute]
"""
attrs = maya.cmds.listAttr(name, **kwargs) or []
return [cls(name, attr) for attr in attrs]
@classmethod
def deleteProxyAttrs(cls, name):
"""Delete all the proxy attributes for the given object name."""
attrs = cls.listAttr(name, unlocked=True, keyable=True) or []
for attr in attrs:
if attr.isProxy():
attr.delete()
def __init__(self, name, attr=None, value=None, type=None, cache=True):
"""
:type name: str
:type attr: str | None
:type type: str | None
:type value: object | None
:type cache: bool
"""
if "." in name:
name, attr = name.split(".")
if attr is None:
msg = "Cannot initialise attribute instance without a given attr."
raise AttributeError(msg)
self._name = six.text_type(name)
self._attr = six.text_type(attr)
self._type = type
self._value = value
self._cache = cache
self._fullname = None
def __str__(self):
"""
:rtype: str
"""
return str(self.toDict())
def name(self):
"""
Return the Maya object name for the attribute.
:rtype: str
"""
return self._name
def attr(self):
"""
Return the attribute name.
:rtype: str
"""
return self._attr
def isLocked(self):
"""
Return true if the attribute is locked.
:rtype: bool
"""
return maya.cmds.getAttr(self.fullname(), lock=True)
def isUnlocked(self):
"""
Return true if the attribute is unlocked.
:rtype: bool
"""
return not self.isLocked()
def toDict(self):
"""
Return a dictionary of the attribute object.
:rtype: dict
"""
result = {
"type": self.type(),
"value": self.value(),
"fullname": self.fullname(),
}
return result
def isValid(self):
"""
Return true if the attribute type is valid.
:rtype: bool
"""
return self.type() in VALID_ATTRIBUTE_TYPES
def isProxy(self):
"""
Return true if the attribute is a proxy
:rtype: bool
"""
if not maya.cmds.addAttr(self.fullname(), query=True, exists=True):
return False
return maya.cmds.addAttr(self.fullname(), query=True, usedAsProxy=True)
def delete(self):
"""Delete the attribute"""
maya.cmds.deleteAttr(self.fullname())
def exists(self):
"""
Return true if the object and attribute exists in the scene.
:rtype: bool
"""
return maya.cmds.objExists(self.fullname())
def prettyPrint(self):
"""
Print the command for setting the attribute value
"""
msg = 'maya.cmds.setAttr("{0}", {1})'
msg = msg.format(self.fullname(), self.value())
print(msg)
def clearCache(self):
"""
Clear all cached values
"""
self._type = None
self._value = None
def update(self):
"""
This method will be deprecated.
"""
self.clearCache()
def query(self, **kwargs):
"""
Convenience method for Maya's attribute query command
:rtype: object
"""
return maya.cmds.attributeQuery(self.attr(), node=self.name(), **kwargs)
def listConnections(self, **kwargs):
"""
Convenience method for Maya's list connections command
:rtype: list[str]
"""
return maya.cmds.listConnections(self.fullname(), **kwargs)
def sourceConnection(self, **kwargs):
"""
Return the source connection for this attribute.
:rtype: str | None
"""
try:
return self.listConnections(destination=False, **kwargs)[0]
except IndexError:
return None
def fullname(self):
"""
Return the name with the attr name.
:rtype: str
"""
if self._fullname is None:
self._fullname = '{0}.{1}'.format(self.name(), self.attr())
return self._fullname
def value(self):
"""
Return the value of the attribute.
:rtype: float | str | list
"""
if self._value is None or not self._cache:
try:
self._value = maya.cmds.getAttr(self.fullname())
except Exception:
msg = 'Cannot GET attribute VALUE for "{0}"'
msg = msg.format(self.fullname())
logger.exception(msg)
return self._value
def type(self):
"""
Return the type of data currently in the attribute.
:rtype: str
"""
if self._type is None:
try:
self._type = maya.cmds.getAttr(self.fullname(), type=True)
self._type = six.text_type(self._type)
except Exception:
msg = 'Cannot GET attribute TYPE for "{0}"'
msg = msg.format(self.fullname())
logger.exception(msg)
return self._type
def set(self, value, blend=100, key=False, clamp=True, additive=False):
"""
Set the value for the attribute.
:type key: bool
:type clamp: bool
:type value: float | str | list
:type blend: float
"""
try:
if additive and self.type() != 'bool':
if self.attr().startswith('scale'):
value = self.value() * (1 + (value - 1) * (blend/100.0))
else:
value = self.value() + value * (blend/100.0)
elif int(blend) == 0:
value = self.value()
else:
_value = (value - self.value()) * (blend/100.00)
value = self.value() + _value
except TypeError as error:
msg = 'Cannot BLEND or ADD attribute {0}: Error: {1}'
msg = msg.format(self.fullname(), error)
logger.debug(msg)
try:
if self.type() in ["string"]:
maya.cmds.setAttr(self.fullname(), value, type=self.type())
elif self.type() in ["list", "matrix"]:
maya.cmds.setAttr(self.fullname(), *value, type=self.type())
else:
maya.cmds.setAttr(self.fullname(), value, clamp=clamp)
except (ValueError, RuntimeError) as error:
msg = "Cannot SET attribute {0}: Error: {1}"
msg = msg.format(self.fullname(), error)
logger.debug(msg)
try:
if key:
self.setKeyframe(value=value)
except TypeError as error:
msg = 'Cannot KEY attribute {0}: Error: {1}'
msg = msg.format(self.fullname(), error)
logger.debug(msg)
def setKeyframe(self, value, respectKeyable=True, **kwargs):
"""
Set a keyframe with the given value.
:value: object
:respectKeyable: bool
:rtype: None
"""
if self.query(minExists=True):
minimum = self.query(minimum=True)[0]
if value < minimum:
value = minimum
if self.query(maxExists=True):
maximum = self.query(maximum=True)[0]
if value > maximum:
value = maximum
kwargs.setdefault("value", value)
kwargs.setdefault("respectKeyable", respectKeyable)
maya.cmds.setKeyframe(self.fullname(), **kwargs)
def setStaticKeyframe(self, value, time, option):
"""
Set a static keyframe at the given time.
:type value: object
:type time: (int, int)
:type option: PasteOption
"""
if option == "replaceCompletely":
maya.cmds.cutKey(self.fullname())
self.set(value, key=False)
# This should be changed to only look for animation.
# Also will need to support animation layers ect...
elif self.isConnected():
# TODO: Should also support static attrs when there is animation.
if option == "replace":
maya.cmds.cutKey(self.fullname(), time=time)
self.insertStaticKeyframe(value, time)
elif option == "replace":
self.insertStaticKeyframe(value, time)
else:
self.set(value, key=False)
def insertStaticKeyframe(self, value, time):
"""
Insert a static keyframe at the given time with the given value.
:type value: float | str
:type time: (int, int)
:rtype: None
"""
startTime, endTime = time
duration = endTime - startTime
try:
# Offset all keyframes from the start position.
maya.cmds.keyframe(self.fullname(), relative=True, time=(startTime, 1000000), timeChange=duration)
# Set a key at the given start and end time
self.setKeyframe(value, time=(startTime, startTime), ott='step')
self.setKeyframe(value, time=(endTime, endTime), itt='flat', ott='flat')
# Set the tangent for the next keyframe to flat
nextFrame = maya.cmds.findKeyframe(self.fullname(), time=(endTime, endTime), which='next')
maya.cmds.keyTangent(self.fullname(), time=(nextFrame, nextFrame), itt='flat')
except TypeError as error:
msg = "Cannot insert static key frame for attribute {0}: Error: {1}"
msg = msg.format(self.fullname(), error)
logger.debug(msg)
def setAnimCurve(self, curve, time, option, source=None, connect=False):
"""
Set/Paste the give animation curve to this attribute.
:type curve: str
:type option: PasteOption
:type time: (int, int)
:type source: (int, int)
:type connect: bool
:rtype: None
"""
fullname = self.fullname()
startTime, endTime = time
if self.isProxy():
logger.debug("Cannot set anim curve for proxy attribute")
return
if not self.exists():
logger.debug("Attr does not exists")
return
if self.isLocked():
logger.debug("Cannot set anim curve when the attr locked")
return
if source is None:
first = maya.cmds.findKeyframe(curve, which='first')
last = maya.cmds.findKeyframe(curve, which='last')
source = (first, last)
# We run the copy key command twice to check we have a valid curve.
# It needs to run before the cutKey command, otherwise if it fails
# we have cut keys for no reason!
success = maya.cmds.copyKey(curve, time=source)
if not success:
msg = "Cannot copy keys from the anim curve {0}"
msg = msg.format(curve)
logger.debug(msg)
return
if option == "replace":
maya.cmds.cutKey(fullname, time=time)
else:
time = (startTime, startTime)
try:
# Update the clip board with the give animation curve
maya.cmds.copyKey(curve, time=source)
# Note: If the attribute is connected to referenced
# animation then the following command will not work.
maya.cmds.pasteKey(fullname, option=option, time=time, connect=connect)
if option == "replaceCompletely":
# The pasteKey cmd doesn't support all anim attributes
# so we need to manually set theses.
dstCurve = self.animCurve()
if dstCurve:
curveColor = maya.cmds.getAttr(curve + ".curveColor")
preInfinity = maya.cmds.getAttr(curve + ".preInfinity")
postInfinity = maya.cmds.getAttr(curve + ".postInfinity")
useCurveColor = maya.cmds.getAttr(curve + ".useCurveColor")
maya.cmds.setAttr(dstCurve + ".preInfinity", preInfinity)
maya.cmds.setAttr(dstCurve + ".postInfinity", postInfinity)
maya.cmds.setAttr(dstCurve + ".curveColor", *curveColor[0])
maya.cmds.setAttr(dstCurve + ".useCurveColor", useCurveColor)
except RuntimeError:
msg = 'Cannot paste anim curve "{0}" to attribute "{1}"'
msg = msg.format(curve, fullname)
logger.exception(msg)
def animCurve(self):
"""
Return the connected animation curve.
:rtype: str | None
"""
result = None
if self.exists():
n = self.listConnections(plugs=True, destination=False)
if n and "animCurve" in maya.cmds.nodeType(n):
result = n
elif n and "character" in maya.cmds.nodeType(n):
n = maya.cmds.listConnections(n, plugs=True,
destination=False)
if n and "animCurve" in maya.cmds.nodeType(n):
result = n
if result:
return result[0].split(".")[0]
def isConnected(self, ignoreConnections=None):
"""
Return true if the attribute is connected.
:type ignoreConnections: list[str]
:rtype: bool
"""
if ignoreConnections is None:
ignoreConnections = []
try:
connection = self.listConnections(destination=False)
except ValueError:
return False
if connection:
if ignoreConnections:
connectionType = maya.cmds.nodeType(connection)
for ignoreType in ignoreConnections:
if connectionType.startswith(ignoreType):
return False
return True
else:
return False
def isBlendable(self):
"""
Return true if the attribute can be blended.
:rtype: bool
"""
return self.type() in VALID_BLEND_ATTRIBUTES
def isSettable(self, validConnections=None):
"""
Return true if the attribute can be set.
:type validConnections: list[str]
:rtype: bool
"""
if validConnections is None:
validConnections = VALID_CONNECTIONS
if not self.exists():
return False
if not maya.cmds.listAttr(self.fullname(), unlocked=True, keyable=True, multi=True, scalar=True):
return False
connection = self.listConnections(destination=False)
if connection:
connectionType = maya.cmds.nodeType(connection)
for validType in validConnections:
if connectionType.startswith(validType):
return True
return False
else:
return True

View File

@ -0,0 +1,425 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import logging
import platform
import traceback
from studiovendor.Qt import QtCore
from studiovendor.Qt import QtWidgets
try:
import maya.mel
import maya.cmds
except ImportError:
traceback.print_exc()
import mutils
logger = logging.getLogger(__name__)
class MayaUtilsError(Exception):
"""Base class for exceptions in this module."""
class ObjectsError(MayaUtilsError):
pass
class SelectionError(MayaUtilsError):
pass
class NoMatchFoundError(MayaUtilsError):
pass
class NoObjectFoundError(MayaUtilsError):
pass
class MoreThanOneObjectFoundError(MayaUtilsError):
pass
class ModelPanelNotInFocusError(MayaUtilsError):
pass
def system():
"""
Return the current platform in lowercase.
:rtype: str
"""
return platform.system().lower()
def isMac():
"""
Return True if the current OS is Mac.
:rtype: bool
"""
return system().startswith("os") or \
system().startswith("mac") or \
system().startswith("darwin")
def isLinux():
"""
Return True if the current OS is linux.
:rtype: bool
"""
return system().lower().startswith("lin")
def isWindows():
"""
Return True if the current OS is windows.
:rtype: bool
"""
return system().lower().startswith("win")
def isMaya():
"""
Return True if the current python session is in Maya.
:rtype: bool
"""
try:
import maya.cmds
maya.cmds.about(batch=True)
return True
except ImportError:
return False
def selectionModifiers():
"""
Return a dictionary of the current key modifiers
:rtype: dict
"""
result = {"add": False, "deselect": False}
modifiers = QtWidgets.QApplication.keyboardModifiers()
if modifiers == QtCore.Qt.ShiftModifier:
result["deselect"] = True
elif modifiers == QtCore.Qt.ControlModifier:
result["add"] = True
return result
def ls(*args, **kwargs):
"""
List all the node objects for the given options.
:type args: list
:type kwargs: dict
"""
return [mutils.Node(name) for name in maya.cmds.ls(*args, **kwargs) or []]
def listAttr(name, **kwargs):
"""
List all the attributes for the given object name.
:type name: str
:type kwargs: str
:rtype: list[mutils.Attribute]
"""
attrs = maya.cmds.listAttr(name, **kwargs) or []
attrs = list(set(attrs))
return [mutils.Attribute(name, attr) for attr in attrs]
def disconnectAll(name):
"""
Disconnect all connections from the given object name.
:type name: str
"""
plugins = maya.cmds.listConnections(name, plugs=True, source=False) or []
for plug in plugins:
source, = maya.cmds.listConnections(plug, plugs=True)
maya.cmds.disconnectAttr(source, plug)
def animCurve(fullname):
"""
Return the animation curve name for the give attribute.
:type fullname: str or None
:rtype: str or None
"""
attribute = mutils.Attribute(fullname)
return attribute.animCurve()
def deleteUnknownNodes():
"""Delete all unknown nodes in the Maya scene."""
nodes = maya.cmds.ls(type="unknown")
if nodes:
for node in nodes:
if maya.cmds.objExists(node) and \
maya.cmds.referenceQuery(node, inr=True):
maya.cmds.delete(node)
def currentModelPanel():
"""
Get the current model panel name.
:rtype: str or None
"""
currentPanel = maya.cmds.getPanel(withFocus=True)
currentPanelType = maya.cmds.getPanel(typeOf=currentPanel)
if currentPanelType not in ['modelPanel']:
return None
return currentPanel
def getBakeAttrs(objects):
"""
Get the attributes that are not connected to an animation curve.
:type objects: list[str]
:rtype: list[str]
"""
result = []
if not objects:
raise Exception("No objects specified")
connections = maya.cmds.listConnections(
objects,
plugs=True,
source=True,
connections=True,
destination=False
) or []
for i in range(0, len(connections), 2):
dstObj = connections[i]
srcObj = connections[i + 1]
nodeType = maya.cmds.nodeType(srcObj)
if "animCurve" not in nodeType:
result.append(dstObj)
return result
def bakeConnected(objects, time, sampleBy=1):
"""
Bake the given objects.
:type objects: list[str]
:type time: (int, int)
:type sampleBy: int
"""
bakeAttrs = getBakeAttrs(objects)
if bakeAttrs:
maya.cmds.bakeResults(
bakeAttrs,
time=time,
shape=False,
simulation=True,
sampleBy=sampleBy,
controlPoints=False,
minimizeRotation=True,
bakeOnOverrideLayer=False,
preserveOutsideKeys=False,
sparseAnimCurveBake=False,
disableImplicitControl=True,
removeBakedAttributeFromLayer=False,
)
else:
logger.error("Cannot find any connection to bake!")
def getSelectedObjects():
"""
Get a list of the selected objects in Maya.
:rtype: list[str]
:raises: mutils.SelectionError:
"""
selection = maya.cmds.ls(selection=True)
if not selection:
raise mutils.SelectionError("No objects selected!")
return selection
def getSelectedAttrs():
"""
Get the attributes that are selected in the channel box.
:rtype: list[str]
"""
attributes = maya.cmds.channelBox(
"mainChannelBox",
query=True,
selectedMainAttributes=True
)
if attributes is not None:
attributes = str(attributes)
attributes = attributes.replace("tx", "translateX")
attributes = attributes.replace("ty", "translateY")
attributes = attributes.replace("tz", "translateZ")
attributes = attributes.replace("rx", "rotateX")
attributes = attributes.replace("ry", "rotateY")
attributes = attributes.replace("rz", "rotateZ")
attributes = eval(attributes)
return attributes
def currentFrameRange():
"""
Get the current first and last frame depending on the context.
:rtype: (int, int)
"""
start, end = selectedFrameRange()
if end == start:
start, end = selectedObjectsFrameRange()
if start == end:
start, end = playbackFrameRange()
return start, end
def playbackFrameRange():
"""
Get the first and last frame from the play back options.
:rtype: (int, int)
"""
start = maya.cmds.playbackOptions(query=True, min=True)
end = maya.cmds.playbackOptions(query=True, max=True)
return start, end
def selectedFrameRange():
"""
Get the first and last frame from the play back slider.
:rtype: (int, int)
"""
result = maya.mel.eval("timeControl -q -range $gPlayBackSlider")
start, end = result.replace('"', "").split(":")
start, end = int(start), int(end)
if end - start == 1:
end = start
return start, end
def selectedObjectsFrameRange(objects=None):
"""
Get the first and last animation frame from the given objects.
:type objects: list[str]
:rtype: (int, int)
"""
start = 0
end = 0
if not objects:
objects = maya.cmds.ls(selection=True) or []
if objects:
start = int(maya.cmds.findKeyframe(objects, which='first'))
end = int(maya.cmds.findKeyframe(objects, which='last'))
return start, end
def getDurationFromNodes(objects, time=None):
"""
Get the duration of the animation from the given object names.
:type time: [str, str]
:type objects: list[str]
:rtype: float
"""
if objects:
first = maya.cmds.findKeyframe(objects, which='first')
last = maya.cmds.findKeyframe(objects, which='last')
if time:
startKey = maya.cmds.findKeyframe(objects, time=(time[0], time[0]), which="next")
if startKey > time[1] or startKey < time[0]:
return 0
if first == last:
if maya.cmds.keyframe(objects, query=True, keyframeCount=True) > 0:
return 1
else:
return 0
return last - first
else:
return 0
def getReferencePaths(objects, withoutCopyNumber=False):
"""
Get the reference paths for the given objects.
:type objects: list[str]
:type withoutCopyNumber: bool
:rtype: list[str]
"""
paths = []
for obj in objects:
if maya.cmds.referenceQuery(obj, isNodeReferenced=True):
paths.append(maya.cmds.referenceQuery(obj, f=True, wcn=withoutCopyNumber))
return list(set(paths))
def getReferenceData(objects):
"""
Get the reference paths for the given objects.
:type objects: list[str]
:rtype: list[dict]
"""
data = []
paths = getReferencePaths(objects)
for path in paths:
data.append({
"filename": path,
"unresolved": maya.cmds.referenceQuery(path, filename=True, withoutCopyNumber=True),
"namespace": maya.cmds.file(path, q=True, namespace=True),
"node": maya.cmds.referenceQuery(path, referenceNode=True)
})
return data

View File

@ -0,0 +1,166 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import time
import logging
try:
import maya.cmds
except ImportError:
import traceback
traceback.print_exc()
logger = logging.getLogger(__name__)
__all__ = [
"timing",
"unifyUndo",
"disableUndo",
"disableViews",
"disableAutoKey",
"showWaitCursor",
"restoreSelection",
"restoreCurrentTime",
]
def timing(fn):
def wrapped(*args, **kwargs):
time1 = time.time()
ret = fn(*args, **kwargs)
time2 = time.time()
logger.debug('%s function took %0.5f sec' % (fn.__name__, (time2 - time1)))
return ret
return wrapped
def unifyUndo(fn):
def wrapped(*args, **kwargs):
maya.cmds.undoInfo(openChunk=True)
try:
return fn(*args, **kwargs)
finally:
maya.cmds.undoInfo(closeChunk=True)
wrapped.__name__ = fn.__name__
wrapped.__doc__ = fn.__doc__
return wrapped
def disableUndo(fn):
def wrapped(*args, **kwargs):
initialUndoState = maya.cmds.undoInfo(q=True, state=True)
maya.cmds.undoInfo(stateWithoutFlush=False)
try:
return fn(*args, **kwargs)
finally:
maya.cmds.undoInfo(stateWithoutFlush=initialUndoState)
wrapped.__name__ = fn.__name__
wrapped.__doc__ = fn.__doc__
return wrapped
def disableAutoKey(fn):
def wrapped(*args, **kwargs):
initialState = maya.cmds.autoKeyframe(query=True, state=True)
maya.cmds.autoKeyframe(edit=True, state=False)
try:
return fn(*args, **kwargs)
finally:
maya.cmds.autoKeyframe(edit=True, state=initialState)
wrapped.__name__ = fn.__name__
wrapped.__doc__ = fn.__doc__
return wrapped
def restoreSelection(fn):
def wrapped(*args, **kwargs):
selection = maya.cmds.ls(selection=True) or []
try:
return fn(*args, **kwargs)
finally:
if selection:
maya.cmds.select(selection)
wrapped.__name__ = fn.__name__
wrapped.__doc__ = fn.__doc__
return wrapped
def restoreCurrentTime(fn):
def wrapped(*args, **kwargs):
initialTime = maya.cmds.currentTime(query=True)
try:
return fn(*args, **kwargs)
finally:
maya.cmds.currentTime(initialTime, edit=True)
wrapped.__name__ = fn.__name__
wrapped.__doc__ = fn.__doc__
return wrapped
def showWaitCursor(fn):
def wrapped(*args, **kwargs):
maya.cmds.waitCursor(state=True)
try:
return fn(*args, **kwargs)
finally:
maya.cmds.waitCursor(state=False)
wrapped.__name__ = fn.__name__
wrapped.__doc__ = fn.__doc__
return wrapped
def disableViews(fn):
def wrapped(*args, **kwargs):
modelPanels = maya.cmds.getPanel(vis=True)
emptySelConn = maya.cmds.selectionConnection()
for panel in modelPanels:
if maya.cmds.getPanel(to=panel) == 'modelPanel':
maya.cmds.isolateSelect(panel, state=True)
maya.cmds.modelEditor(panel, e=True, mlc=emptySelConn)
try:
return fn(*args, **kwargs)
finally:
for panel in modelPanels:
if maya.cmds.getPanel(to=panel) == 'modelPanel':
maya.cmds.isolateSelect(panel, state=False)
maya.cmds.deleteUI(emptySelConn)
wrapped.__name__ = fn.__name__
wrapped.__doc__ = fn.__doc__
return wrapped

View File

@ -0,0 +1,52 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
from studiovendor.Qt import QtCore
from studiovendor.Qt import QtCompat
from studiovendor.Qt import QtWidgets
try:
import maya.OpenMayaUI as omui
except ImportError as error:
print(error)
from .framerangemenu import FrameRangeMenu
from .framerangemenu import showFrameRangeMenu
from .modelpanelwidget import ModelPanelWidget
from .thumbnailcapturedialog import *
from .thumbnailcapturemenu import ThumbnailCaptureMenu
def mayaWindow():
"""
Return the Maya main window as a QMainWindow object.
:rtype: QMainWindow
"""
mainWindowPtr = omui.MQtUtil.mainWindow()
return QtCompat.wrapInstance(int(mainWindowPtr), QtWidgets.QMainWindow)
def makeMayaStandaloneWindow(w):
"""
Make a standalone window, though parented under Maya's mainWindow.
The parenting under Maya's mainWindow is done so that the QWidget will
not auto-destroy itself when the instance variable goes out of scope.
"""
# Parent under the main Maya window
w.setParent(mayaWindow())
# Make this widget appear as a standalone window
w.setWindowFlags(QtCore.Qt.Window)
w.raise_()
w.show()

View File

@ -0,0 +1,67 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
from studiovendor.Qt import QtGui
from studiovendor.Qt import QtWidgets
import mutils
__all__ = ["FrameRangeMenu", "showFrameRangeMenu"]
class FrameRangeAction(QtWidgets.QAction):
def __init__(self, *args):
super(FrameRangeAction, self).__init__(*args)
self._frameRange = (0, 100)
def frameRange(self):
return self._frameRange
def setFrameRange(self, frameRange):
self._frameRange = frameRange
class FrameRangeMenu(QtWidgets.QMenu):
def __init__(self, parent=None):
super(FrameRangeMenu, self).__init__(parent)
action = FrameRangeAction("From Timeline", self)
action.setFrameRange(mutils.playbackFrameRange())
self.addAction(action)
action = FrameRangeAction("From Selected Timeline", self)
action.setFrameRange(mutils.selectedFrameRange())
self.addAction(action)
action = FrameRangeAction("From Selected Objects", self)
action.setFrameRange(mutils.selectedObjectsFrameRange())
self.addAction(action)
def showFrameRangeMenu():
"""
Show the frame range menu at the current cursor position.
:rtype: QtWidgets.QAction
"""
menu = FrameRangeMenu()
position = QtGui.QCursor().pos()
action = menu.exec_(position)
return action
if __name__ == "__main__":
action = showFrameRangeMenu()
print(action.frameRange())

View File

@ -0,0 +1,100 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import mutils
import mutils.gui
from studiovendor.Qt import QtCore
from studiovendor.Qt import QtWidgets
try:
import maya.cmds
import maya.OpenMayaUI as mui
isMaya = True
except ImportError:
isMaya = False
__all__ = ["ModelPanelWidget"]
class ModelPanelWidget(QtWidgets.QWidget):
def __init__(self, parent, name="capturedModelPanel", **kwargs):
super(ModelPanelWidget, self).__init__(parent, **kwargs)
uniqueName = name + str(id(self))
self.setObjectName(uniqueName + 'Widget')
layout = QtWidgets.QVBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0)
layout.setObjectName(uniqueName + "Layout")
self.setLayout(layout)
maya.cmds.setParent(layout.objectName())
self._modelPanel = maya.cmds.modelPanel(uniqueName, label="ModelPanel")
self.setModelPanelOptions()
def setModelPanelOptions(self):
modelPanel = self.name()
maya.cmds.modelEditor(modelPanel, edit=True, allObjects=False)
maya.cmds.modelEditor(modelPanel, edit=True, grid=False)
maya.cmds.modelEditor(modelPanel, edit=True, dynamics=False)
maya.cmds.modelEditor(modelPanel, edit=True, activeOnly=False)
maya.cmds.modelEditor(modelPanel, edit=True, manipulators=False)
maya.cmds.modelEditor(modelPanel, edit=True, headsUpDisplay=False)
maya.cmds.modelEditor(modelPanel, edit=True, selectionHiliteDisplay=False)
maya.cmds.modelEditor(modelPanel, edit=True, polymeshes=True)
maya.cmds.modelEditor(modelPanel, edit=True, nurbsSurfaces=True)
maya.cmds.modelEditor(modelPanel, edit=True, subdivSurfaces=True)
maya.cmds.modelEditor(modelPanel, edit=True, displayTextures=True)
maya.cmds.modelEditor(modelPanel, edit=True, displayAppearance="smoothShaded")
currentModelPanel = mutils.currentModelPanel()
if currentModelPanel:
camera = maya.cmds.modelEditor(currentModelPanel, query=True, camera=True)
displayLights = maya.cmds.modelEditor(currentModelPanel, query=True, displayLights=True)
displayTextures = maya.cmds.modelEditor(currentModelPanel, query=True, displayTextures=True)
maya.cmds.modelEditor(modelPanel, edit=True, camera=camera)
maya.cmds.modelEditor(modelPanel, edit=True, displayLights=displayLights)
maya.cmds.modelEditor(modelPanel, edit=True, displayTextures=displayTextures)
def name(self):
return self._modelPanel
def modelPanel(self):
ptr = mui.MQtUtil.findControl(self._modelPanel)
return mutils.gui.wrapInstance(int(ptr), QtWidgets.QWidget)
def barLayout(self):
name = maya.cmds.modelPanel(self._modelPanel, query=True, barLayout=True)
ptr = mui.MQtUtil.findControl(name)
return mutils.gui.wrapInstance(int(ptr), QtCore.QObject)
def hideBarLayout(self):
self.barLayout().hide()
def hideMenuBar(self):
maya.cmds.modelPanel(self._modelPanel, edit=True, menuBarVisible=False)
def setCamera(self, name):
maya.cmds.modelPanel(self._modelPanel, edit=True, cam=name)
if __name__ == "__main__":
widget = ModelPanelWidget(None, "modelPanel")
widget.show()

View File

@ -0,0 +1,290 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
"""
The capture dialog is used for creating thumbnails and thumbnail playblasts.
import mutils.gui
print mutils.gui.capture("c:/temp/test.jpg", startFrame=1, endFrame=100)
# c:/temp/test.0001.jpg
"""
import os
import shutil
from studiovendor.Qt import QtGui
from studiovendor.Qt import QtCore
from studiovendor.Qt import QtWidgets
try:
import maya.cmds
except Exception:
import traceback
traceback.print_exc()
import studioqt
import mutils.gui
import mutils.gui.modelpanelwidget
__all__ = [
"thumbnailCapture",
"ThumbnailCaptureDialog",
]
_instance = None
def thumbnailCapture(
path,
startFrame=None,
endFrame=None,
step=1,
clearCache=False,
captured=None,
show=False,
modifier=True,
):
"""
Capture a playblast and save it to the given path.
:type path: str
:type startFrame: int or None
:type endFrame: int or None
:type step: int
:type clearCache: bool
:type captured: func or None
:rtype: ThumbnailCaptureDialog
"""
global _instance
def _clearCache():
dirname = os.path.dirname(path)
if os.path.exists(dirname):
shutil.rmtree(dirname)
if _instance:
_instance.close()
d = mutils.gui.ThumbnailCaptureDialog(
path=path,
startFrame=startFrame,
endFrame=endFrame,
step=step,
)
if captured:
d.captured.connect(captured)
if clearCache:
d.capturing.connect(_clearCache)
d.show()
if not show and not (modifier and studioqt.isControlModifier()):
d.capture()
d.close()
_instance = d
return _instance
class ThumbnailCaptureDialog(QtWidgets.QDialog):
DEFAULT_WIDTH = 250
DEFAULT_HEIGHT = 250
captured = QtCore.Signal(str)
capturing = QtCore.Signal(str)
def __init__(self, path="", parent=None, startFrame=None, endFrame=None, step=1):
"""
:type path: str
:type parent: QtWidgets.QWidget
:type startFrame: int
:type endFrame: int
:type step: int
"""
parent = parent or mutils.gui.mayaWindow()
QtWidgets.QDialog.__init__(self, parent)
self._path = path
self._step = step
self._endFrame = None
self._startFrame = None
self._capturedPath = None
if endFrame is None:
endFrame = int(maya.cmds.currentTime(query=True))
if startFrame is None:
startFrame = int(maya.cmds.currentTime(query=True))
self.setEndFrame(endFrame)
self.setStartFrame(startFrame)
self.setObjectName("CaptureWindow")
self.setWindowTitle("Capture Window")
self._captureButton = QtWidgets.QPushButton("Capture")
self._captureButton.clicked.connect(self.capture)
self._modelPanelWidget = mutils.gui.modelpanelwidget.ModelPanelWidget(self)
vbox = QtWidgets.QVBoxLayout(self)
vbox.setObjectName(self.objectName() + "Layout")
vbox.addWidget(self._modelPanelWidget)
vbox.addWidget(self._captureButton)
self.setLayout(vbox)
width = (self.DEFAULT_WIDTH * 1.5)
height = (self.DEFAULT_HEIGHT * 1.5) + 50
self.setWidthHeight(width, height)
self.centerWindow()
def path(self):
"""
Return the destination path.
:rtype: str
"""
return self._path
def setPath(self, path):
"""
Set the destination path.
:type path: str
"""
self._path = path
def endFrame(self):
"""
Return the end frame of the playblast.
:rtype: int
"""
return self._endFrame
def setEndFrame(self, endFrame):
"""
Specify the end frame of the playblast.
:type endFrame: int
"""
self._endFrame = int(endFrame)
def startFrame(self):
"""
Return the start frame of the playblast.
:rtype: int
"""
return self._startFrame
def setStartFrame(self, startFrame):
"""
Specify the start frame of the playblast.
:type startFrame: int
"""
self._startFrame = int(startFrame)
def step(self):
"""
Return the step amount of the playblast.
Example:
if step is set to 2 it will playblast every second frame.
:rtype: int
"""
return self._step
def setStep(self, step):
"""
Set the step amount of the playblast.
:type step: int
"""
self._step = step
def setWidthHeight(self, width, height):
"""
Set the width and height of the window.
:type width: int
:type height: int
:rtype: None
"""
x = self.geometry().x()
y = self.geometry().y()
self.setGeometry(x, y, width, height)
def centerWindow(self):
"""
Center the widget to the center of the desktop.
:rtype: None
"""
geometry = self.frameGeometry()
pos = QtGui.QCursor.pos()
screen = QtWidgets.QApplication.screenAt(pos)
centerPoint = screen.availableGeometry().center()
geometry.moveCenter(centerPoint)
self.move(geometry.topLeft())
def capturedPath(self):
"""
Return the location of the captured playblast.
:rtype:
"""
return self._capturedPath
def capture(self):
"""
Capture a playblast and save it to the given path.
:rtype: None
"""
path = self.path()
self.capturing.emit(path)
modelPanel = self._modelPanelWidget.name()
startFrame = self.startFrame()
endFrame = self.endFrame()
step = self.step()
width = self.DEFAULT_WIDTH
height = self.DEFAULT_HEIGHT
self._capturedPath = mutils.playblast.playblast(
path,
modelPanel,
startFrame,
endFrame,
width,
height,
step=step,
)
self.accept()
self.captured.emit(self._capturedPath)
return self._capturedPath

View File

@ -0,0 +1,149 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import os
import shutil
import logging
from studiovendor.Qt import QtGui
from studiovendor.Qt import QtCore
from studiovendor.Qt import QtWidgets
import mutils.gui
import studiolibrary.widgets
__all__ = [
"ThumbnailCaptureMenu",
"testThumbnailCaptureMenu"
]
logger = logging.getLogger(__name__)
class ThumbnailCaptureMenu(QtWidgets.QMenu):
captured = QtCore.Signal(str)
def __init__(self, path, force=False, parent=None):
"""
Thumbnail capture menu.
:type path: str
:type force: bool
:type parent: None or QtWidgets.QWidget
"""
QtWidgets.QMenu.__init__(self, parent)
self._path = path
self._force = force
changeImageAction = QtWidgets.QAction('Capture new image', self)
changeImageAction.triggered.connect(self.capture)
self.addAction(changeImageAction)
changeImageAction = QtWidgets.QAction('Show Capture window', self)
changeImageAction.triggered.connect(self.showCaptureWindow)
self.addAction(changeImageAction)
loadImageAction = QtWidgets.QAction('Load image from disk', self)
loadImageAction.triggered.connect(self.showLoadImageDialog)
self.addAction(loadImageAction)
def path(self):
"""
Return the thumbnail path on disc.
:rtype: str
"""
return self._path
def showWarningDialog(self):
"""Show a warning dialog for overriding the previous thumbnail."""
title = "Override Thumbnail"
text = u"This action will delete the previous thumbnail. The " \
u"previous image cannot be backed up. Do you want to " \
u"confirm the action to take a new image and delete " \
u"the previous one?"
clickedButton = studiolibrary.widgets.MessageBox.warning(
self.parent(),
title=title,
text=text,
enableDontShowCheckBox=True,
)
if clickedButton != QtWidgets.QDialogButtonBox.StandardButton.Yes:
raise Exception("Dialog was canceled!")
def showCaptureWindow(self):
"""Show the capture window for framing."""
self.capture(show=True)
def capture(self, show=False):
"""
Capture an image from the Maya viewport.
:type show: bool
"""
if not self._force and os.path.exists(self.path()):
self.showWarningDialog()
mutils.gui.thumbnailCapture(
show=show,
path=self.path(),
captured=self.captured.emit
)
def showLoadImageDialog(self):
"""Show a file dialog for choosing an image from disc."""
if not self._force and os.path.exists(self.path()):
self.showWarningDialog()
fileDialog = QtWidgets.QFileDialog(
self,
caption="Open Image",
filter="Image Files (*.png *.jpg *.bmp)"
)
fileDialog.fileSelected.connect(self._fileSelected)
fileDialog.exec_()
def _fileSelected(self, path):
"""
Triggered when the file dialog is accepted.
:type path: str
"""
shutil.copy(path, self.path())
self.captured.emit(self.path())
def testThumbnailCaptureMenu():
"""A method for testing the thumbnail capture menu in Maya."""
def capturedCallback(path):
"""
Triggered when the captured menu has been accepted.
:type path: str
"""
print("Captured thumbnail to:", path)
path = "c:/tmp/test.png"
menu = ThumbnailCaptureMenu(path, True)
menu.captured.connect(capturedCallback)
menu.exec_(QtGui.QCursor.pos())

View File

@ -0,0 +1,174 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import logging
import mutils
from collections import OrderedDict
__all__ = [
"matchNames",
"groupObjects",
]
logger = logging.getLogger(__name__)
def rotateSequence(seq, current):
"""
:type seq:
:type current:
:rtype:
"""
n = len(seq)
for i in range(n):
yield seq[(i + current) % n]
def groupObjects(objects):
"""
:type objects:
:rtype:
"""
results = OrderedDict()
for name in objects:
node = mutils.Node(name)
results.setdefault(node.namespace(), [])
results[node.namespace()].append(name)
results = OrderedDict(sorted(results.items(), key=lambda t: (t[0].count(":"), len(t[0]))))
return results
def indexObjects(objects):
"""
:type objects: list[str]
:rtype: dict
"""
result = {}
if objects:
for name in objects:
node = mutils.Node(name)
result.setdefault(node.shortname(), [])
result[node.shortname()].append(node)
return result
def matchInIndex(node, index):
"""
:type node: mutils.Node
:type index: dict[list[mutils.Node]]
:rtype: Node
"""
result = None
if node.shortname() in index:
nodes = index[node.shortname()]
if nodes:
for n in nodes:
if node.name().endswith(n.name()) or n.name().endswith(node.name()):
result = n
break
if result is not None:
index[node.shortname()].remove(result)
return result
def matchNames(srcObjects, dstObjects=None, dstNamespaces=None, search=None, replace=None):
"""
:type srcObjects: list[str]
:type dstObjects: list[str]
:type dstNamespaces: list[str]
:rtype: list[(mutils.Node, mutils.Node)]
"""
results = []
if dstObjects is None:
dstObjects = []
srcGroup = groupObjects(srcObjects)
srcNamespaces = srcGroup.keys()
if not dstObjects and not dstNamespaces: # and not selection:
dstNamespaces = srcNamespaces
if not dstNamespaces and dstObjects:
dstGroup = groupObjects(dstObjects)
dstNamespaces = dstGroup.keys()
dstIndex = indexObjects(dstObjects)
# DESTINATION NAMESPACES NOT IN SOURCE OBJECTS
dstNamespaces2 = [x for x in dstNamespaces if x not in srcNamespaces]
# DESTINATION NAMESPACES IN SOURCE OBJECTS
dstNamespaces1 = [x for x in dstNamespaces if x not in dstNamespaces2]
# CACHE DESTINATION OBJECTS WITH NAMESPACES IN SOURCE OBJECTS
usedNamespaces = []
notUsedNamespaces = []
# FIRST LOOP THROUGH ALL DESTINATION NAMESPACES IN SOURCE OBJECTS
for srcNamespace in srcNamespaces:
if srcNamespace in dstNamespaces1:
usedNamespaces.append(srcNamespace)
for name in srcGroup[srcNamespace]:
srcNode = mutils.Node(name)
if search is not None and replace is not None:
# Using the mirror table which supports * style replacing
name = mutils.MirrorTable.replace(name, search, replace)
dstNode = mutils.Node(name)
if dstObjects:
dstNode = matchInIndex(dstNode, dstIndex)
if dstNode:
results.append((srcNode, dstNode))
yield (srcNode, dstNode)
else:
logger.debug("Cannot find matching destination object for %s" % srcNode.name())
else:
notUsedNamespaces.append(srcNamespace)
# SECOND LOOP THROUGH ALL OTHER DESTINATION NAMESPACES
srcNamespaces = notUsedNamespaces
srcNamespaces.extend(usedNamespaces)
_index = 0
for dstNamespace in dstNamespaces2:
match = False
i = _index
for srcNamespace in rotateSequence(srcNamespaces, _index):
if match:
_index = i
break
i += 1
for name in srcGroup[srcNamespace]:
srcNode = mutils.Node(name)
dstNode = mutils.Node(name)
dstNode.setNamespace(dstNamespace)
if dstObjects:
dstNode = matchInIndex(dstNode, dstIndex)
elif dstNamespaces:
pass
if dstNode:
match = True
results.append((srcNode, dstNode))
yield (srcNode, dstNode)
else:
logger.debug("Cannot find matching destination object for %s" % srcNode.name())
if logger.parent.level == logging.DEBUG or logger.level == logging.DEBUG:
for dstNodes in dstIndex.values():
for dstNode in dstNodes:
logger.debug("Cannot find matching source object for %s" % dstNode.name())

View File

@ -0,0 +1,918 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
"""
# mirrortable.py
import mutils
# Example 1:
# Create a MirrorTable instance from the given objects
mt = mutils.MirrorTable.fromObjects(objects, "_l_", "_r_", MirrorPlane.YZ)
# Example 2:
# Create a MirrorTable instance from the selected objects
objects = maya.cmds.ls(selection=True)
mt = mutils.MirrorTable.fromObjects(objects, "_l_", "_r_", MirrorPlane.YZ)
# Example 3:
# Save the MirrorTable to the given JSON path
path = "/tmp/mirrortable.json"
mt.save(path)
# Example 4:
# Create a MirrorTable instance from the given JSON path
path = "/tmp/mirrortable.json"
mt = mutils.MirrorTable.fromPath(path)
# Example 5:
# Mirror all the objects from file
mt.load()
# Example 6:
# Mirror only the selected objects
objects = maya.cmds.ls(selection=True) or []
mt.load(objects=objects)
# Example 7:
# Mirror all objects from file to the given namespaces
mt.load(namespaces=["character1", "character2"])
# Example 8:
# Mirror only the given objects
mt.load(objects=["character1:Hand_L", "character1:Finger_L"])
# Example 9:
# Mirror all objects from left to right
mt.load(option=mutils.MirrorOption.LeftToRight)
# Example 10:
# Mirror all objects from right to left
mt.load(option=mutils.MirrorOption.RightToLeft)
# Example 11:
# Mirror only the current pose
mt.load(animation=False)
"""
import re
import mutils
import logging
import traceback
from studiovendor import six
try:
import maya.cmds
except ImportError:
traceback.print_exc()
__all__ = [
"MirrorTable",
"MirrorPlane",
"MirrorOption",
"saveMirrorTable",
]
logger = logging.getLogger(__name__)
RE_LEFT_SIDE = "Left|left|Lf|lt_|_lt|lf_|_lf|_l_|_L|L_|:l_|^l_|_l$|:L|^L"
RE_RIGHT_SIDE = "Right|right|Rt|rt_|_rt|_r_|_R|R_|:r_|^r_|_r$|:R|^R"
VALID_NODE_TYPES = ["joint", "transform"]
class MirrorPlane:
YZ = [-1, 1, 1]
XZ = [1, -1, 1]
XY = [1, 1, -1]
class MirrorOption:
Swap = 0
LeftToRight = 1
RightToLeft = 2
class KeysOption:
All = "All Keys"
SelectedRange = "Selected Range"
def saveMirrorTable(path, objects, metadata=None, *args, **kwargs):
"""
Convenience function for saving a mirror table to the given disc location.
:type path: str
:type objects: list[str]
:type metadata: dict or None
:type args: list
:type kwargs: dict
:rtype: MirrorTable
"""
mirrorTable = MirrorTable.fromObjects(objects, *args, **kwargs)
if metadata:
mirrorTable.updateMetadata(metadata)
mirrorTable.save(path)
return mirrorTable
class MirrorTable(mutils.TransferObject):
@classmethod
@mutils.timing
@mutils.unifyUndo
@mutils.showWaitCursor
@mutils.restoreSelection
def fromObjects(
cls,
objects,
leftSide=None,
rightSide=None,
mirrorPlane=None
):
"""
Create a new Mirror Table instance from the given Maya object/controls.
:type objects: list[str]
:type leftSide: str
:type rightSide: str
:type mirrorPlane: mirrortable.MirrorPlane or str
:rtype: MirrorTable
"""
mirrorPlane = mirrorPlane or MirrorPlane.YZ
if isinstance(mirrorPlane, six.string_types):
if mirrorPlane.lower() == "yz":
mirrorPlane = MirrorPlane.YZ
elif mirrorPlane.lower() == "xz":
mirrorPlane = MirrorPlane.XZ
elif mirrorPlane.lower() == "xy":
mirrorPlane = MirrorPlane.XY
mirrorTable = cls()
mirrorTable.setMetadata("left", leftSide)
mirrorTable.setMetadata("right", rightSide)
mirrorTable.setMetadata("mirrorPlane", mirrorPlane)
for obj in objects:
nodeType = maya.cmds.nodeType(obj)
if nodeType in VALID_NODE_TYPES:
mirrorTable.add(obj)
else:
msg = "Node of type {0} is not supported. Node name: {1}"
msg = msg.format(nodeType, obj)
logger.info(msg)
return mirrorTable
@staticmethod
def findLeftSide(objects):
"""
Return the left side naming convention for the given objects
:type objects: list[str]
:rtype: str
"""
return MirrorTable.findSide(objects, RE_LEFT_SIDE)
@staticmethod
def findRightSide(objects):
"""
Return the right side naming convention for the given objects
:type objects: list[str]
:rtype: str
"""
return MirrorTable.findSide(objects, RE_RIGHT_SIDE)
@classmethod
def findSide(cls, objects, reSides):
"""
Return the naming convention for the given object names.
:type objects: list[str]
:type reSides: str or list[str]
:rtype: str
"""
if isinstance(reSides, six.string_types):
reSides = reSides.split("|")
# Compile the list of regular expressions into a re.object
reSides = [re.compile(side) for side in reSides]
for obj in objects:
obj = obj.split("|")[-1]
obj = obj.split(":")[-1]
for reSide in reSides:
m = reSide.search(obj)
if m:
side = m.group()
if obj.startswith(side):
side += "*"
if obj.endswith(side):
side = "*" + side
return side
return ""
@staticmethod
def matchSide(name, side):
"""
Return True if the name contains the given side.
:type name: str
:type side: str
:rtype: bool
"""
if side:
return MirrorTable.rreplace(name, side, "X") != name
return False
@staticmethod
def rreplace(name, old, new):
"""
convenience method.
Example:
print MirrorTable.rreplace("CHR1:RIG:RhandCON", ":R", ":L")
"CHR1:RIG:LhandCON"
:type name: str
:type old: str
:type new: str
:rtype: str
"""
names = []
for n in name.split("|"):
namespaces = ''
if ':' in n:
namespaces, n = n.rsplit(':', 1)
other = mutils.mirrortable.MirrorTable.replace(n, old, new)
if namespaces:
other = ':'.join([namespaces, other])
names.append(other)
return "|".join(names)
@staticmethod
def replace(name, old, new):
"""
A static method that is called by self.mirrorObject.
:type name: str
:type old: str
:type new: str
:rtype: str
"""
# Support for replacing a prefix naming convention.
if old.endswith("*") or new.endswith("*"):
name = MirrorTable.replacePrefix(name, old, new)
# Support for replacing a suffix naming convention.
elif old.startswith("*") or new.startswith("*"):
name = MirrorTable.replaceSuffix(name, old, new)
# Support for all other naming conventions.
else:
name = name.replace(old, new)
return name
@staticmethod
def replacePrefix(name, old, new):
"""
Replace the given old prefix with the given new prefix.
It should also support long names.
# Example:
self.replacePrefix("R_footRoll", "R", "L")
# Result: "L_footRoll" and not "L_footLoll".
self.replacePrefix("Grp|Ch1:R_footExtra|Ch1:R_footRoll", "R_", "L_")
# Result: "Grp|Ch1:L_footExtra|Ch1:L_footRoll"
:type name: str
:type old: str
:type new: str
:rtype: str
"""
old = old.replace("*", "")
new = new.replace("*", "")
if name.startswith(old):
name = name.replace(old, new, 1)
return name
@staticmethod
def replaceSuffix(name, old, new):
"""
Replace the given old suffix with the given new suffix.
It should also support long names.
# Example:
self.replaceSuffix("footRoll_R", "R", "L")
# Result: "footRoll_L" and not "footLoll_L".
self.replaceSuffix("Grp|Ch1:footExtra_R|Ch1:footRoll_R", "_R", "_L")
# Result: "Grp|Ch1:footExtra_L|Ch1:footRoll_L"
:type name: str
:type old: str
:type new: str
:rtype: str
"""
old = old.replace("*", "")
new = new.replace("*", "")
if name.endswith(old):
name = name[:-len(old)] + new
return name
def mirrorObject(self, obj):
"""
Return the other/opposite side for the given name.
Example:
print self.mirrorObject("FKSholder_L")
# FKShoulder_R
:type obj: str
:rtype: str or None
"""
leftSide = self.leftSide()
rightSide = self.rightSide()
return self._mirrorObject(obj, leftSide, rightSide)
@staticmethod
def _mirrorObject(obj, leftSide, rightSide):
"""
A static method that is called by self.mirrorObject.
:type obj: str
:rtype: str or None
"""
dstName = MirrorTable.rreplace(obj, leftSide, rightSide)
if obj == dstName:
dstName = MirrorTable.rreplace(obj, rightSide, leftSide)
if dstName != obj:
return dstName
# Return None as the given name is probably a center control
# and doesn't have an opposite side.
return None
@staticmethod
def animCurve(obj, attr):
"""
:type obj: str
:type attr: str
:rtype: str
"""
fullname = obj + "." + attr
connections = maya.cmds.listConnections(fullname, d=False, s=True)
if connections:
return connections[0]
return None
@staticmethod
def scaleKey(obj, attr, time=None):
"""
:type obj: str
:type attr: str
"""
curve = MirrorTable.animCurve(obj, attr)
if curve:
maya.cmds.selectKey(curve)
if time:
maya.cmds.scaleKey(time=time, iub=False, ts=1, fs=1, vs=-1, vp=0, animation="keys")
else:
maya.cmds.scaleKey(iub=False, ts=1, fs=1, vs=-1, vp=0, animation="keys")
@staticmethod
def formatValue(attr, value, mirrorAxis):
"""
:type attr: str
:type value: float
:type mirrorAxis: list[int]
:rtype: float
"""
if MirrorTable.isAttrMirrored(attr, mirrorAxis):
return value * -1
return value
@staticmethod
def maxIndex(numbers):
"""
Finds the largest number in a list
:type numbers: list[float] or list[str]
:rtype: int
"""
m = 0
result = 0
for i in numbers:
v = abs(float(i))
if v > m:
m = v
result = numbers.index(i)
return result
@staticmethod
def axisWorldPosition(obj, axis):
"""
:type obj: str
:type axis: list[int]
:rtype: list[float]
"""
transform1 = maya.cmds.createNode("transform", name="transform1")
try:
transform1, = maya.cmds.parent(transform1, obj, r=True)
maya.cmds.setAttr(transform1 + ".t", *axis)
maya.cmds.setAttr(transform1 + ".r", 0, 0, 0)
maya.cmds.setAttr(transform1 + ".s", 1, 1, 1)
return maya.cmds.xform(transform1, q=True, ws=True, piv=True)
finally:
maya.cmds.delete(transform1)
@staticmethod
def isAttrMirrored(attr, mirrorAxis):
"""
:type attr: str
:type mirrorAxis: list[int]
:rtype: float
"""
if mirrorAxis == [-1, 1, 1]:
if attr == "translateX" or attr == "rotateY" or attr == "rotateZ":
return True
elif mirrorAxis == [1, -1, 1]:
if attr == "translateY" or attr == "rotateX" or attr == "rotateZ":
return True
elif mirrorAxis == [1, 1, -1]:
if attr == "translateZ" or attr == "rotateX" or attr == "rotateY":
return True
elif mirrorAxis == [-1, -1, -1]:
if attr == "translateX" or attr == "translateY" or attr == "translateZ":
return True
return False
@staticmethod
def isAxisMirrored(srcObj, dstObj, axis, mirrorPlane):
"""
:type srcObj: str
:type dstObj: str
:type axis: list[int]
:type mirrorPlane: list[int]
:rtype: int
"""
old1 = maya.cmds.xform(srcObj, q=True, ws=True, piv=True)
old2 = maya.cmds.xform(dstObj, q=True, ws=True, piv=True)
new1 = MirrorTable.axisWorldPosition(srcObj, axis)
new2 = MirrorTable.axisWorldPosition(dstObj, axis)
mp = mirrorPlane
v1 = mp[0]*(new1[0]-old1[0]), mp[1]*(new1[1]-old1[1]), mp[2]*(new1[2]-old1[2])
v2 = new2[0]-old2[0], new2[1]-old2[1], new2[2]-old2[2]
d = sum(p*q for p, q in zip(v1, v2))
if d >= 0.0:
return False
return True
@staticmethod
def _calculateMirrorAxis(obj, mirrorPlane):
"""
:type obj: str
:rtype: list[int]
"""
result = [1, 1, 1]
transform0 = maya.cmds.createNode("transform", name="transform0")
try:
transform0, = maya.cmds.parent(transform0, obj, r=True)
transform0, = maya.cmds.parent(transform0, w=True)
maya.cmds.setAttr(transform0 + ".t", 0, 0, 0)
t1 = MirrorTable.axisWorldPosition(transform0, [1, 0, 0])
t2 = MirrorTable.axisWorldPosition(transform0, [0, 1, 0])
t3 = MirrorTable.axisWorldPosition(transform0, [0, 0, 1])
t1 = "%.3f" % t1[0], "%.3f" % t1[1], "%.3f" % t1[2]
t2 = "%.3f" % t2[0], "%.3f" % t2[1], "%.3f" % t2[2]
t3 = "%.3f" % t3[0], "%.3f" % t3[1], "%.3f" % t3[2]
if mirrorPlane == MirrorPlane.YZ: # [-1, 1, 1]:
x = [t1[0], t2[0], t3[0]]
i = MirrorTable.maxIndex(x)
result[i] = -1
if mirrorPlane == MirrorPlane.XZ: # [1, -1, 1]:
y = [t1[1], t2[1], t3[1]]
i = MirrorTable.maxIndex(y)
result[i] = -1
if mirrorPlane == MirrorPlane.XY: # [1, 1, -1]:
z = [t1[2], t2[2], t3[2]]
i = MirrorTable.maxIndex(z)
result[i] = -1
finally:
maya.cmds.delete(transform0)
return result
def select(self, objects=None, namespaces=None, **kwargs):
"""
Select the objects contained in file.
:type objects: list[str] or None
:type namespaces: list[str] or None
:rtype: None
"""
selectionSet = mutils.SelectionSet.fromPath(self.path())
selectionSet.load(objects=objects, namespaces=namespaces, **kwargs)
def leftSide(self):
"""
:rtype: str | None
"""
return self.metadata().get("left")
def rightSide(self):
"""
:rtype: str | None
"""
return self.metadata().get("right")
def mirrorPlane(self):
"""
:rtype: lsit[int] | None
"""
return self.metadata().get("mirrorPlane")
def mirrorAxis(self, name):
"""
:rtype: list[int]
"""
return self.objects()[name]["mirrorAxis"]
def leftCount(self, objects=None):
"""
:type objects: list[str]
:rtype: int
"""
if objects is None:
objects = self.objects()
return len([obj for obj in objects if self.isLeftSide(obj)])
def rightCount(self, objects=None):
"""
:type objects: list[str]
:rtype: int
"""
if objects is None:
objects = self.objects()
return len([obj for obj in objects if self.isRightSide(obj)])
def createObjectData(self, name):
"""
:type name:
:rtype:
"""
result = {"mirrorAxis": self.calculateMirrorAxis(name)}
return result
def matchObjects(
self,
objects=None,
namespaces=None,
):
"""
:type objects: list[str]
:type namespaces: list[str]
:rtype: list[str]
"""
srcObjects = self.objects().keys()
matches = mutils.matchNames(
srcObjects=srcObjects,
dstObjects=objects,
dstNamespaces=namespaces,
)
for srcNode, dstNode in matches:
dstName = dstNode.name()
mirrorAxis = self.mirrorAxis(srcNode.name())
yield srcNode.name(), dstName, mirrorAxis
def rightToLeft(self):
""""""
self.load(option=MirrorOption.RightToLeft)
def leftToRight(self):
""""""
self.load(option=MirrorOption.LeftToRight)
@mutils.timing
@mutils.unifyUndo
@mutils.showWaitCursor
@mutils.restoreSelection
def load(
self,
objects=None,
namespaces=None,
option=None,
keysOption=None,
time=None,
):
"""
Load the mirror table for the given objects.
:type objects: list[str]
:type namespaces: list[str]
:type option: mirrorOptions
:type keysOption: None or KeysOption.SelectedRange
:type time: None or list[int]
"""
if option and not isinstance(option, int):
if option.lower() == "swap":
option = 0
elif option.lower() == "left to right":
option = 1
elif option.lower() == "right to left":
option = 2
else:
raise ValueError('Invalid load option=' + str(option))
self.validate(namespaces=namespaces)
results = {}
animation = True
foundObject = False
srcObjects = self.objects().keys()
if option is None:
option = MirrorOption.Swap
if keysOption == KeysOption.All:
time = None
elif keysOption == KeysOption.SelectedRange:
time = mutils.selectedFrameRange()
# Check to make sure that the given time is not a single frame
if time and time[0] == time[1]:
time = None
animation = False
matches = mutils.matchNames(
srcObjects=srcObjects,
dstObjects=objects,
dstNamespaces=namespaces,
)
for srcNode, dstNode in matches:
dstObj = dstNode.name()
dstObj2 = self.mirrorObject(dstObj) or dstObj
if dstObj2 not in results:
results[dstObj] = dstObj2
mirrorAxis = self.mirrorAxis(srcNode.name())
dstObjExists = maya.cmds.objExists(dstObj)
dstObj2Exists = maya.cmds.objExists(dstObj2)
if dstObjExists and dstObj2Exists:
foundObject = True
if animation:
self.transferAnimation(dstObj, dstObj2, mirrorAxis=mirrorAxis, option=option, time=time)
else:
self.transferStatic(dstObj, dstObj2, mirrorAxis=mirrorAxis, option=option)
else:
if not dstObjExists:
msg = "Cannot find destination object {0}"
msg = msg.format(dstObj)
logger.debug(msg)
if not dstObj2Exists:
msg = "Cannot find mirrored destination object {0}"
msg = msg.format(dstObj2)
logger.debug(msg)
# Return the focus to the Maya window
maya.cmds.setFocus("MayaWindow")
if not foundObject:
text = "No objects match when loading data. " \
"Turn on debug mode to see more details."
raise mutils.NoMatchFoundError(text)
def transferStatic(self, srcObj, dstObj, mirrorAxis=None, attrs=None, option=MirrorOption.Swap):
"""
:type srcObj: str
:type dstObj: str
:type mirrorAxis: list[int]
:type attrs: None | list[str]
:type option: MirrorOption
"""
srcValue = None
dstValue = None
srcValid = self.isValidMirror(srcObj, option)
dstValid = self.isValidMirror(dstObj, option)
if attrs is None:
attrs = maya.cmds.listAttr(srcObj, keyable=True) or []
for attr in attrs:
dstAttr = dstObj + "." + attr
srcAttr = srcObj + "." + attr
if maya.cmds.objExists(dstAttr):
if dstValid:
srcValue = maya.cmds.getAttr(srcAttr)
if srcValid:
dstValue = maya.cmds.getAttr(dstAttr)
if dstValid:
self.setAttr(dstObj, attr, srcValue, mirrorAxis=mirrorAxis)
if srcValid:
self.setAttr(srcObj, attr, dstValue, mirrorAxis=mirrorAxis)
else:
logger.debug("Cannot find destination attribute %s" % dstAttr)
def setAttr(self, name, attr, value, mirrorAxis=None):
"""
:type name: str
:type: attr: str
:type: value: int | float
:type mirrorAxis: Axis or None
"""
if mirrorAxis is not None:
value = self.formatValue(attr, value, mirrorAxis)
try:
maya.cmds.setAttr(name + "." + attr, value)
except RuntimeError:
msg = "Cannot mirror static attribute {name}.{attr}"
msg = msg.format(name=name, attr=attr)
logger.debug(msg)
def transferAnimation(self, srcObj, dstObj, mirrorAxis=None, option=MirrorOption.Swap, time=None):
"""
:type srcObj: str
:type dstObj: str
:type mirrorAxis: Axis or None
"""
srcValid = self.isValidMirror(srcObj, option)
dstValid = self.isValidMirror(dstObj, option)
tmpObj, = maya.cmds.duplicate(srcObj, name='DELETE_ME', parentOnly=True)
try:
if dstValid:
self._transferAnimation(srcObj, tmpObj, time=time)
if srcValid:
self._transferAnimation(dstObj, srcObj, mirrorAxis=mirrorAxis, time=time)
if dstValid:
self._transferAnimation(tmpObj, dstObj, mirrorAxis=mirrorAxis, time=time)
finally:
maya.cmds.delete(tmpObj)
def _transferAnimation(self, srcObj, dstObj, attrs=None, mirrorAxis=None, time=None):
"""
:type srcObj: str
:type dstObj: str
:type attrs: list[str]
:type time: list[int]
:type mirrorAxis: list[int]
"""
maya.cmds.cutKey(dstObj, time=time or ()) # remove keys
if maya.cmds.copyKey(srcObj, time=time or ()):
if not time:
maya.cmds.pasteKey(dstObj, option="replaceCompletely")
else:
maya.cmds.pasteKey(dstObj, time=time, option="replace")
if attrs is None:
attrs = maya.cmds.listAttr(srcObj, keyable=True) or []
for attr in attrs:
srcAttribute = mutils.Attribute(srcObj, attr)
dstAttribute = mutils.Attribute(dstObj, attr)
if dstAttribute.exists():
if dstAttribute.isConnected():
if self.isAttrMirrored(attr, mirrorAxis):
maya.cmds.scaleKey(dstAttribute.name(), valueScale=-1, attribute=attr)
else:
value = srcAttribute.value()
self.setAttr(dstObj, attr, value, mirrorAxis)
def isValidMirror(self, obj, option):
"""
:type obj: str
:type option: MirrorOption
:rtype: bool
"""
if option == MirrorOption.Swap:
return True
elif option == MirrorOption.LeftToRight and self.isLeftSide(obj):
return False
elif option == MirrorOption.RightToLeft and self.isRightSide(obj):
return False
else:
return True
def isLeftSide(self, name):
"""
Return True if the object contains the left side string.
# Group|Character1:footRollExtra_L|Character1:footRoll_L
# Group|footRollExtra_L|footRoll_LShape
# footRoll_L
# footRoll_LShape
:type name: str
:rtype: bool
"""
side = self.leftSide()
return self.matchSide(name, side)
def isRightSide(self, name):
"""
Return True if the object contains the right side string.
# Group|Character1:footRollExtra_R|Character1:footRoll_R
# Group|footRollExtra_R|footRoll_RShape
# footRoll_R
# footRoll_RShape
:type name: str
:rtype: bool
"""
side = self.rightSide()
return self.matchSide(name, side)
def calculateMirrorAxis(self, srcObj):
"""
:type srcObj: str
:rtype: list[int]
"""
result = [1, 1, 1]
dstObj = self.mirrorObject(srcObj) or srcObj
mirrorPlane = self.mirrorPlane()
if dstObj == srcObj or not maya.cmds.objExists(dstObj):
# The source object does not have an opposite side
result = MirrorTable._calculateMirrorAxis(srcObj, mirrorPlane)
else:
# The source object does have an opposite side
if MirrorTable.isAxisMirrored(srcObj, dstObj, [1, 0, 0], mirrorPlane):
result[0] = -1
if MirrorTable.isAxisMirrored(srcObj, dstObj, [0, 1, 0], mirrorPlane):
result[1] = -1
if MirrorTable.isAxisMirrored(srcObj, dstObj, [0, 0, 1], mirrorPlane):
result[2] = -1
return result

View File

@ -0,0 +1,88 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import logging
import traceback
from collections import OrderedDict
try:
import maya.cmds
except ImportError:
traceback.print_exc()
logger = logging.getLogger(__name__)
__all__ = [
"getAll",
"getFromDagPath",
"getFromDagPaths",
"getFromSelection",
]
def getFromDagPaths(dagPaths):
"""
:type dagPaths: list[str]
:rtype: list[str]
"""
namespaces = []
for dagPath in dagPaths:
namespace = getFromDagPath(dagPath)
namespaces.append(namespace)
# Remove any duplicates while retaining the order
return list(OrderedDict.fromkeys(namespaces))
def getFromDagPath(dagPath):
"""
:type dagPath: str
:rtype: str
"""
shortName = dagPath.split("|")[-1]
namespace = ":".join(shortName.split(":")[:-1])
return namespace
def getFromSelection():
"""
Get the current namespaces from the selected objects in Maya.
:rtype: list[str]
"""
namespaces = [""]
try:
names = maya.cmds.ls(selection=True)
namespaces = getFromDagPaths(names) or namespaces
except NameError as error:
# Catch any errors when running this command outside of Maya
logger.exception(error)
return namespaces
def getAll():
"""
Get all the available namespaces in the scene
:rtype: list[str]
"""
IGNORE_NAMESPACES = ['UI', 'shared']
namespaces = maya.cmds.namespaceInfo(listOnlyNamespaces=True, recurse=True)
namespaces = list(set(namespaces) - set(IGNORE_NAMESPACES))
namespaces = sorted(namespaces)
return namespaces

View File

@ -0,0 +1,178 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import mutils
from studiovendor import six
try:
import maya.cmds
except Exception:
import traceback
traceback.print_exc()
class Node(object):
@classmethod
def ls(cls, objects=None, selection=False):
"""
nodes = Node.ls(selection=True)
:rtype: list[Node]
"""
if objects is None and not selection:
objects = maya.cmds.ls()
else:
objects = objects or []
if selection:
objects.extend(maya.cmds.ls(selection=True) or [])
return [cls(name) for name in objects]
def __init__(self, name, attributes=None):
"""
:type attributes: [Attribute]
:type name: str
"""
try:
self._name = six.text_type(name) # .encode('ascii')
except UnicodeEncodeError:
raise UnicodeEncodeError('Not a valid ascii name "%s".' % name)
# Cached properties
self._shortname = None
self._namespace = None
self._mirrorAxis = None
self._attributes = attributes
def __str__(self):
return self.name()
def name(self):
"""
:rtype: str
"""
return self._name
def attributes(self):
"""
:rtype: str
"""
return self._attributes
def shortname(self):
"""
:rtype: str
"""
if self._shortname is None:
self._shortname = self.name().split("|")[-1]
return self._shortname
def toShortName(self):
"""
:rtype: None or str
"""
# Try to reduce any long names to short names when using namespaces
names = maya.cmds.ls(self.shortname())
if len(names) == 1:
return Node(names[0])
elif len(names) > 1:
# Return the original name if the short name is not unique
return Node(self.name())
else:
raise mutils.NoObjectFoundError("No object found %s" % str(self.shortname()))
def namespace(self):
"""
:rtype: str
"""
if self._namespace is None:
self._namespace = ":".join(self.shortname().split(":")[:-1])
return self._namespace
def stripFirstPipe(self):
"""
n = Node("|pSphere")
n.stripFirstPipe()
print(n.name())
# Result: pSphere
"""
if self.name().startswith("|"):
self._name = self.name()[1:]
def exists(self):
"""
:rtype: bool
"""
return maya.cmds.objExists(self.name())
def isLong(self):
"""
:rtype: bool
"""
return "|" in self.name()
def isReferenced(self):
"""
:rtype: bool
"""
return maya.cmds.referenceQuery(self.name(), isNodeReferenced=True)
def setMirrorAxis(self, mirrorAxis):
"""
:type mirrorAxis: list[int]
"""
self._mirrorAxis = mirrorAxis
def setNamespace(self, namespace):
"""
Sets the namespace for a current node in Maya.
node.setNamespace("character", "|group|control")
result: |character:group|character:control
setNamespace("", "|character:group|character:control")
result: |group|control
:type namespace: str
"""
newName = self.name()
oldName = self.name()
newNamespace = namespace
oldNamespace = self.namespace()
# Ignore any further processing if the namespace is the same.
if newNamespace == oldNamespace:
return self.name()
# Replace the current namespace with the specified one
if oldNamespace and newNamespace:
newName = oldName.replace(oldNamespace + ":", newNamespace + ":")
# Remove existing namespace
elif oldNamespace and not newNamespace:
newName = oldName.replace(oldNamespace + ":", "")
# Set namespace if the current namespace doesn't exists
elif not oldNamespace and newNamespace:
newName = oldName.replace("|", "|" + newNamespace + ":")
if newNamespace and not newName.startswith("|"):
newName = newNamespace + ":" + newName
self._name = newName
self._shortname = None
self._namespace = None
return self.name()

View File

@ -0,0 +1,107 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import os
import logging
import mutils
try:
import maya.cmds
except Exception:
import traceback
traceback.print_exc()
__all__ = [
"playblast",
]
logger = logging.getLogger(__name__)
# Valid Renderers:
# [u'vp2Renderer', u'base_OpenGL_Renderer',
# u'hwRender_OpenGL_Renderer', u'stub_Renderer']
DEFAULT_PLAYBLAST_RENDERER = None
class PlayblastError(Exception):
"""Base class for exceptions in this module."""
pass
def playblast(filename, modelPanel, startFrame, endFrame, width, height, step=1):
"""
Wrapper for Maya's Playblast command.
:type filename: str
:type modelPanel: str
:type startFrame: int
:type endFrame: int
:type width: int
:type height: int
:type step: list[int]
:rtype: str
"""
logger.info(u"Playblasting '{filename}'".format(filename=filename))
if startFrame == endFrame and os.path.exists(filename):
os.remove(filename)
frame = [i for i in range(startFrame, endFrame + 1, step)]
modelPanel = modelPanel or mutils.currentModelPanel()
if maya.cmds.modelPanel(modelPanel, query=True, exists=True):
maya.cmds.setFocus(modelPanel)
if DEFAULT_PLAYBLAST_RENDERER:
maya.cmds.modelEditor(
modelPanel,
edit=True,
rendererName=DEFAULT_PLAYBLAST_RENDERER
)
name, compression = os.path.splitext(filename)
filename = filename.replace(compression, "")
compression = compression.replace(".", "")
offScreen = mutils.isLinux()
path = maya.cmds.playblast(
format="image",
viewer=False,
percent=100,
quality=100,
frame=frame,
width=width,
height=height,
filename=filename,
endTime=endFrame,
startTime=startFrame,
offScreen=offScreen,
forceOverwrite=True,
showOrnaments=False,
compression=compression,
)
if not path:
raise PlayblastError("Playblast was canceled")
src = path.replace("####", str(int(0)).rjust(4, "0"))
if startFrame == endFrame:
dst = src.replace(".0000.", ".")
logger.info("Renaming '%s' => '%s" % (src, dst))
os.rename(src, dst)
src = dst
logger.info(u"Playblasted '%s'" % src)
return src

View File

@ -0,0 +1,591 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
"""
#
# pose.py
import mutils
# Example 1:
# Save and load a pose from the selected objects
objects = maya.cmds.ls(selection=True)
mutils.savePose("/tmp/pose.json", objects)
mutils.loadPose("/tmp/pose.json")
# Example 2:
# Create a pose object from a list of object names
pose = mutils.Pose.fromObjects(objects)
# Example 3:
# Create a pose object from the selected objects
objects = maya.cmds.ls(selection=True)
pose = mutils.Pose.fromObjects(objects)
# Example 4:
# Save the pose object to disc
path = "/tmp/pose.json"
pose.save(path)
# Example 5:
# Create a pose object from disc
path = "/tmp/pose.json"
pose = mutils.Pose.fromPath(path)
# Load the pose on to the objects from file
pose.load()
# Load the pose to the selected objects
objects = maya.cmds.ls(selection=True)
pose.load(objects=objects)
# Load the pose to the specified namespaces
pose.load(namespaces=["character1", "character2"])
# Load the pose to the specified objects
pose.load(objects=["Character1:Hand_L", "Character1:Finger_L"])
"""
import logging
import mutils
try:
import maya.cmds
except ImportError:
import traceback
traceback.print_exc()
__all__ = ["Pose", "savePose", "loadPose"]
logger = logging.getLogger(__name__)
_pose_ = None
def savePose(path, objects, metadata=None):
"""
Convenience function for saving a pose to disc for the given objects.
Example:
path = "C:/example.pose"
pose = savePose(path, metadata={'description': 'Example pose'})
print(pose.metadata())
# {
'user': 'Hovel',
'mayaVersion': '2016',
'description': 'Example pose'
}
:type path: str
:type objects: list[str]
:type metadata: dict or None
:rtype: Pose
"""
pose = mutils.Pose.fromObjects(objects)
if metadata:
pose.updateMetadata(metadata)
pose.save(path)
return pose
def loadPose(path, *args, **kwargs):
"""
Convenience function for loading the given pose path.
:type path: str
:type args: list
:type kwargs: dict
:rtype: Pose
"""
global _pose_
clearCache = kwargs.get("clearCache")
if not _pose_ or _pose_.path() != path or clearCache:
_pose_ = Pose.fromPath(path)
_pose_.load(*args, **kwargs)
return _pose_
class Pose(mutils.TransferObject):
def __init__(self):
mutils.TransferObject.__init__(self)
self._cache = None
self._mtime = None
self._cacheKey = None
self._isLoading = False
self._selection = None
self._mirrorTable = None
self._autoKeyFrame = None
def createObjectData(self, name):
"""
Create the object data for the given object name.
:type name: str
:rtype: dict
"""
attrs = maya.cmds.listAttr(name, unlocked=True, keyable=True) or []
attrs = list(set(attrs))
attrs = [mutils.Attribute(name, attr) for attr in attrs]
data = {"attrs": self.attrs(name)}
for attr in attrs:
if attr.isValid():
if attr.value() is None:
msg = "Cannot save the attribute %s with value None."
logger.warning(msg, attr.fullname())
else:
data["attrs"][attr.attr()] = {
"type": attr.type(),
"value": attr.value()
}
return data
def select(self, objects=None, namespaces=None, **kwargs):
"""
Select the objects contained in the pose file.
:type objects: list[str] or None
:type namespaces: list[str] or None
:rtype: None
"""
selectionSet = mutils.SelectionSet.fromPath(self.path())
selectionSet.load(objects=objects, namespaces=namespaces, **kwargs)
def cache(self):
"""
Return the current cached attributes for the pose.
:rtype: list[(Attribute, Attribute)]
"""
return self._cache
def attrs(self, name):
"""
Return the attribute for the given name.
:type name: str
:rtype: dict
"""
return self.object(name).get("attrs", {})
def attr(self, name, attr):
"""
Return the attribute data for the given name and attribute.
:type name: str
:type attr: str
:rtype: dict
"""
return self.attrs(name).get(attr, {})
def attrType(self, name, attr):
"""
Return the attribute type for the given name and attribute.
:type name: str
:type attr: str
:rtype: str
"""
return self.attr(name, attr).get("type", None)
def attrValue(self, name, attr):
"""
Return the attribute value for the given name and attribute.
:type name: str
:type attr: str
:rtype: str | int | float
"""
return self.attr(name, attr).get("value", None)
def setMirrorAxis(self, name, mirrorAxis):
"""
Set the mirror axis for the given name.
:type name: str
:type mirrorAxis: list[int]
"""
if name in self.objects():
self.object(name).setdefault("mirrorAxis", mirrorAxis)
else:
msg = "Object does not exist in pose. " \
"Cannot set mirror axis for %s"
logger.debug(msg, name)
def mirrorAxis(self, name):
"""
Return the mirror axis for the given name.
:rtype: list[int] | None
"""
result = None
if name in self.objects():
result = self.object(name).get("mirrorAxis", None)
if result is None:
logger.debug("Cannot find mirror axis in pose for %s", name)
return result
def updateMirrorAxis(self, name, mirrorAxis):
"""
Update the mirror axis for the given object name.
:type name: str
:type mirrorAxis: list[int]
"""
self.setMirrorAxis(name, mirrorAxis)
def mirrorTable(self):
"""
Return the Mirror Table for the pose.
:rtype: mutils.MirrorTable
"""
return self._mirrorTable
def setMirrorTable(self, mirrorTable):
"""
Set the Mirror Table for the pose.
:type mirrorTable: mutils.MirrorTable
"""
objects = self.objects().keys()
self._mirrorTable = mirrorTable
for srcName, dstName, mirrorAxis in mirrorTable.matchObjects(objects):
self.updateMirrorAxis(dstName, mirrorAxis)
def mirrorValue(self, name, attr, mirrorAxis):
"""
Return the mirror value for the given name, attribute and mirror axis.
:type name: str
:type attr: str
:type mirrorAxis: list[]
:rtype: None | int | float
"""
value = None
if self.mirrorTable() and name:
value = self.attrValue(name, attr)
if value is not None:
value = self.mirrorTable().formatValue(attr, value, mirrorAxis)
else:
logger.debug("Cannot find mirror value for %s.%s", name, attr)
return value
def beforeLoad(self, clearSelection=True):
"""
Called before loading the pose.
:type clearSelection: bool
"""
logger.debug('Before Load "%s"', self.path())
if not self._isLoading:
maya.cmds.refresh(cv=True)
self._isLoading = True
maya.cmds.undoInfo(openChunk=True)
self._selection = maya.cmds.ls(selection=True) or []
self._autoKeyFrame = maya.cmds.autoKeyframe(query=True, state=True)
maya.cmds.autoKeyframe(edit=True, state=False)
maya.cmds.select(clear=clearSelection)
def afterLoad(self):
"""Called after loading the pose."""
if not self._isLoading:
return
logger.debug("After Load '%s'", self.path())
self._isLoading = False
if self._selection:
maya.cmds.select(self._selection)
self._selection = None
maya.cmds.autoKeyframe(edit=True, state=self._autoKeyFrame)
maya.cmds.undoInfo(closeChunk=True)
logger.debug('Loaded "%s"', self.path())
@mutils.timing
def load(
self,
objects=None,
namespaces=None,
attrs=None,
blend=100,
key=False,
mirror=False,
additive=False,
refresh=False,
batchMode=False,
clearCache=False,
mirrorTable=None,
onlyConnected=False,
clearSelection=False,
ignoreConnected=False,
searchAndReplace=None,
):
"""
Load the pose to the given objects or namespaces.
:type objects: list[str]
:type namespaces: list[str]
:type attrs: list[str]
:type blend: float
:type key: bool
:type refresh: bool
:type mirror: bool
:type additive: bool
:type mirrorTable: mutils.MirrorTable
:type batchMode: bool
:type clearCache: bool
:type ignoreConnected: bool
:type onlyConnected: bool
:type clearSelection: bool
:type searchAndReplace: (str, str) or None
"""
if mirror and not mirrorTable:
logger.warning("Cannot mirror pose without a mirror table!")
mirror = False
if batchMode:
key = False
self.updateCache(
objects=objects,
namespaces=namespaces,
attrs=attrs,
batchMode=batchMode,
clearCache=clearCache,
mirrorTable=mirrorTable,
onlyConnected=onlyConnected,
ignoreConnected=ignoreConnected,
searchAndReplace=searchAndReplace,
)
self.beforeLoad(clearSelection=clearSelection)
try:
self.loadCache(blend=blend, key=key, mirror=mirror,
additive=additive)
finally:
if not batchMode:
self.afterLoad()
# Return the focus to the Maya window
maya.cmds.setFocus("MayaWindow")
maya.cmds.refresh(cv=True)
def updateCache(
self,
objects=None,
namespaces=None,
attrs=None,
ignoreConnected=False,
onlyConnected=False,
mirrorTable=None,
batchMode=False,
clearCache=True,
searchAndReplace=None,
):
"""
Update the pose cache.
:type objects: list[str] or None
:type namespaces: list[str] or None
:type attrs: list[str] or None
:type ignoreConnected: bool
:type onlyConnected: bool
:type clearCache: bool
:type batchMode: bool
:type mirrorTable: mutils.MirrorTable
:type searchAndReplace: (str, str) or None
"""
if clearCache or not batchMode or not self._mtime:
self._mtime = self.mtime()
mtime = self._mtime
cacheKey = \
str(mtime) + \
str(objects) + \
str(attrs) + \
str(namespaces) + \
str(ignoreConnected) + \
str(searchAndReplace) + \
str(maya.cmds.currentTime(query=True))
if self._cacheKey != cacheKey or clearCache:
self.validate(namespaces=namespaces)
self._cache = []
self._cacheKey = cacheKey
dstObjects = objects
srcObjects = self.objects()
usingNamespaces = not objects and namespaces
if mirrorTable:
self.setMirrorTable(mirrorTable)
search = None
replace = None
if searchAndReplace:
search = searchAndReplace[0]
replace = searchAndReplace[1]
matches = mutils.matchNames(
srcObjects,
dstObjects=dstObjects,
dstNamespaces=namespaces,
search=search,
replace=replace,
)
for srcNode, dstNode in matches:
self.cacheNode(
srcNode,
dstNode,
attrs=attrs,
onlyConnected=onlyConnected,
ignoreConnected=ignoreConnected,
usingNamespaces=usingNamespaces,
)
if not self.cache():
text = "No objects match when loading data. " \
"Turn on debug mode to see more details."
raise mutils.NoMatchFoundError(text)
def cacheNode(
self,
srcNode,
dstNode,
attrs=None,
ignoreConnected=None,
onlyConnected=None,
usingNamespaces=None
):
"""
Cache the given pair of nodes.
:type srcNode: mutils.Node
:type dstNode: mutils.Node
:type attrs: list[str] or None
:type ignoreConnected: bool or None
:type onlyConnected: bool or None
:type usingNamespaces: none or list[str]
"""
mirrorAxis = None
mirrorObject = None
# Remove the first pipe in-case the object has a parent
dstNode.stripFirstPipe()
srcName = srcNode.name()
if self.mirrorTable():
mirrorObject = self.mirrorTable().mirrorObject(srcName)
if not mirrorObject:
mirrorObject = srcName
msg = "Cannot find mirror object in pose for %s"
logger.debug(msg, srcName)
# Check if a mirror axis exists for the mirrorObject otherwise
# check the srcNode
mirrorAxis = self.mirrorAxis(mirrorObject) or self.mirrorAxis(srcName)
if mirrorObject and not maya.cmds.objExists(mirrorObject):
msg = "Mirror object does not exist in the scene %s"
logger.debug(msg, mirrorObject)
if usingNamespaces:
# Try and use the short name.
# Much faster than the long name when setting attributes.
try:
dstNode = dstNode.toShortName()
except mutils.NoObjectFoundError as msg:
logger.debug(msg)
return
except mutils.MoreThanOneObjectFoundError as msg:
logger.debug(msg)
for attr in self.attrs(srcName):
if attrs and attr not in attrs:
continue
dstAttribute = mutils.Attribute(dstNode.name(), attr)
isConnected = dstAttribute.isConnected()
if (ignoreConnected and isConnected) or (onlyConnected and not isConnected):
continue
type_ = self.attrType(srcName, attr)
value = self.attrValue(srcName, attr)
srcMirrorValue = self.mirrorValue(mirrorObject, attr, mirrorAxis=mirrorAxis)
srcAttribute = mutils.Attribute(dstNode.name(), attr, value=value, type=type_)
dstAttribute.update()
self._cache.append((srcAttribute, dstAttribute, srcMirrorValue))
def loadCache(self, blend=100, key=False, mirror=False, additive=False):
"""
Load the pose from the current cache.
:type blend: float
:type key: bool
:type mirror: bool
:rtype: None
"""
cache = self.cache()
for i in range(0, len(cache)):
srcAttribute, dstAttribute, srcMirrorValue = cache[i]
if srcAttribute and dstAttribute:
if mirror and srcMirrorValue is not None:
value = srcMirrorValue
else:
value = srcAttribute.value()
try:
dstAttribute.set(value, blend=blend, key=key,
additive=additive)
except (ValueError, RuntimeError):
cache[i] = (None, None)
logger.debug('Ignoring %s', dstAttribute.fullname())

View File

@ -0,0 +1,5 @@
# Welcome to mutils!
`mutils` is a python package containing many Maya utility functions for managing poses and animations in Maya.
* www.studiolibrary.com

View File

@ -0,0 +1,38 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import traceback
try:
import maya.cmds
except ImportError:
traceback.print_exc()
class ScriptJob(object):
"""
self._scriptJob = mutils.ScriptJob(e=['SelectionChanged', self.selectionChanged])
"""
def __init__(self, *args, **kwargs):
self.id = maya.cmds.scriptJob(*args, **kwargs)
def kill(self):
if self.id:
maya.cmds.scriptJob(kill=self.id, force=True)
self.id = None
def __enter__(self):
return self
def __exit__(self, t, v, tb):
if t is not None:
self.kill()

View File

@ -0,0 +1,111 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import logging
import mutils
try:
import maya.cmds
except Exception:
import traceback
traceback.print_exc()
logger = logging.getLogger(__name__)
def saveSelectionSet(path, objects, metadata=None):
"""
Convenience function for saving a selection set to the given disc location.
:type path: str
:type objects: list[str]
:type metadata: dict or None
:type args: list
:type kwargs: dict
:rtype: SelectionSet
"""
selectionSet = SelectionSet.fromObjects(objects)
if metadata:
selectionSet.updateMetadata(metadata)
selectionSet.save(path)
return selectionSet
class SelectionSet(mutils.TransferObject):
def load(self, objects=None, namespaces=None, **kwargs):
"""
Load/Select the transfer objects to the given objects or namespaces.
:type objects: list[str] or None
:type namespaces: list[str] or None
:type kwargs:
"""
validNodes = []
dstObjects = objects
srcObjects = self.objects()
self.validate(namespaces=namespaces)
matches = mutils.matchNames(
srcObjects,
dstObjects=dstObjects,
dstNamespaces=namespaces
)
for srcNode, dstNode in matches:
# Support for wild cards eg: ['*_control'].
if "*" in dstNode.name():
validNodes.append(dstNode.name())
else:
# Remove the first pipe in-case the object has a parent.
dstNode.stripFirstPipe()
# Try to get the short name. Much faster than the long
# name when selecting objects.
try:
dstNode = dstNode.toShortName()
except mutils.NoObjectFoundError as error:
logger.debug(error)
continue
except mutils.MoreThanOneObjectFoundError as error:
logger.debug(error)
validNodes.append(dstNode.name())
if validNodes:
maya.cmds.select(validNodes, **kwargs)
# Return the focus to the Maya window
maya.cmds.setFocus("MayaWindow")
else:
text = "No objects match when loading data. " \
"Turn on debug mode to see more details."
raise mutils.NoMatchFoundError(text)
def select(self, objects=None, namespaces=None, **kwargs):
"""
Convenience method for any classes inheriting SelectionSet.
:type objects: str
:type namespaces: list[str]
:rtype: None
"""
SelectionSet.load(self, objects=objects, namespaces=namespaces, **kwargs)

View File

@ -0,0 +1,40 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
from mutils.tests.run import run

View File

@ -0,0 +1,84 @@
//Maya ASCII 2013 scene
//Name: anim.ma
//Last modified: Wed, Aug 20, 2014 07:33:27 PM
//Codeset: UTF-8
requires maya "2013";
requires "stereoCamera" "10.0";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya batch mode";
fileInfo "version" "2013 Service Pack 2P12 x64";
fileInfo "cutIdentifier" "201304120319-868747";
fileInfo "osv" "Linux 3.5.4-2.10-desktop #1 SMP PREEMPT Fri Oct 5 14:56:49 CEST 2012 x86_64";
createNode animCurveTA -n "CURVE1";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
createNode animCurveTU -n "CURVE2";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "CURVE3";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
createNode animCurveTL -n "CURVE4";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
createNode animCurveTL -n "CURVE5";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
createNode animCurveTU -n "CURVE6";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
createNode animCurveTU -n "CURVE7";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 10;
createNode animCurveTU -n "CURVE8";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
createNode animCurveTU -n "CURVE9";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "CURVE10";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
createNode animCurveTU -n "CURVE11";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
createNode animCurveTA -n "CURVE12";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
createNode animCurveTU -n "CURVE13";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
createNode animCurveTU -n "CURVE14";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
createNode animCurveTU -n "CURVE15";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
createNode animCurveTU -n "CURVE16";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "CURVE18";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 15;
// End

View File

@ -0,0 +1,166 @@
{
"metadata": {
"angularUnit": "deg",
"description": "test shot",
"user": "testuser",
"startTime": 1,
"mayaSceneFile": "/norman/work/krathjen/git/sandbox/site-packages/mutils/tests/data/test_anim.ma",
"timeUnit": "film",
"cTime": 646464451,
"mayaVersion": "2013 Service Pack 2P12 x64",
"linearUnit": "cm",
"version": "1.0.0",
"endTime": 48
}
,
"objects": {
"srcSphere:offset": {
"attrs": {}
},
"srcSphere:sphere": {
"attrs": {
"rotateX": {
"curve": "CURVE1",
"type": "doubleAngle",
"value": 45.0
},
"testEnum": {
"curve": "CURVE2",
"type": "enum",
"value": 1
},
"translateX": {
"curve": "CURVE3",
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"curve": "CURVE4",
"type": "doubleLinear",
"value": 8.0
},
"translateZ": {
"curve": "CURVE5",
"type": "doubleLinear",
"value": -12.0
},
"rotateY": {
"type": "doubleAngle",
"value": 50.0
},
"testFloat": {
"curve": "CURVE6",
"type": "double",
"value": 0.66600000000000004
},
"testAnimated": {
"curve": "CURVE7",
"type": "double",
"value": 0.0
},
"scaleX": {
"curve": "CURVE8",
"type": "double",
"value": 0.25
},
"scaleY": {
"type": "double",
"value": 4.6600000000000001
},
"visibility": {
"curve": "CURVE9",
"type": "bool",
"value": true
},
"testString": {
"type": "string",
"value": "Hello world"
},
"testVectorX": {
"curve": "CURVE10",
"type": "double",
"value": 0.20000000000000001
},
"testVectorY": {
"curve": "CURVE11",
"type": "double",
"value": 1.3999999999999999
},
"rotateZ": {
"curve": "CURVE12",
"type": "doubleAngle",
"value": 90.0
},
"testVectorZ": {
"curve": "CURVE13",
"type": "double",
"value": 2.6000000000000001
},
"scaleZ": {
"curve": "CURVE14",
"type": "double",
"value": 0.5
},
"testInteger": {
"curve": "CURVE15",
"type": "long",
"value": 5
},
"testBoolean": {
"curve": "CURVE16",
"type": "bool",
"value": true
},
"testConnect": {
"type": "double",
"value": 8.0
}
}
},
"srcSphere:lockedNode": {
"attrs": {
"translateX": {
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"type": "doubleLinear",
"value": 5.0
},
"translateZ": {
"curve": "CURVE18",
"type": "doubleLinear",
"value": 0.0
},
"scaleX": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 1.0
},
"visibility": {
"type": "bool",
"value": true
},
"rotateX": {
"type": "doubleAngle",
"value": 0.0
},
"rotateY": {
"type": "doubleAngle",
"value": 0.0
},
"rotateZ": {
"type": "doubleAngle",
"value": 0.0
},
"scaleZ": {
"type": "double",
"value": 1.0
}
}
}
}
}

View File

@ -0,0 +1,354 @@
//Maya ASCII 2017 scene
//Name: sphere.ma
//Last modified: Sun, Feb 11, 2018 03:47:35 AM
//Codeset: 1252
requires maya "2017";
requires "stereoCamera" "10.0";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2017";
fileInfo "version" "2017";
fileInfo "cutIdentifier" "201606150345-997974";
fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n";
createNode transform -s -n "persp";
rename -uid "E076660C-4F85-B186-64D1-46849E688491";
setAttr ".v" no;
setAttr ".t" -type "double3" 133.3110926639115 16.134754006216241 19.317795622267052 ;
setAttr ".r" -type "double3" -8.7383527296081347 79.400000000001739 0 ;
createNode camera -s -n "perspShape" -p "persp";
rename -uid "00E21AC0-4731-C2C0-2E71-409F5D47F930";
setAttr -k off ".v" no;
setAttr ".fl" 34.999999999999993;
setAttr ".coi" 114.68216434604706;
setAttr ".imn" -type "string" "persp";
setAttr ".den" -type "string" "persp_depth";
setAttr ".man" -type "string" "persp_mask";
setAttr ".hc" -type "string" "viewSet -p %camera";
createNode transform -s -n "top";
rename -uid "882E7E2C-450F-3325-2BB3-E09C8E2DEA5D";
setAttr ".v" no;
setAttr ".t" -type "double3" 0 100.1 0 ;
setAttr ".r" -type "double3" -89.999999999999986 0 0 ;
createNode camera -s -n "topShape" -p "top";
rename -uid "12B4F816-4EEE-299F-7183-A58F890C1FD5";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "top";
setAttr ".den" -type "string" "top_depth";
setAttr ".man" -type "string" "top_mask";
setAttr ".hc" -type "string" "viewSet -t %camera";
setAttr ".o" yes;
createNode transform -s -n "front";
rename -uid "FD0E4029-44A6-7FDE-9CFF-FDBF36FCE708";
setAttr ".v" no;
setAttr ".t" -type "double3" 2.0350096678112575 0.39361762628711539 100.1 ;
createNode camera -s -n "frontShape" -p "front";
rename -uid "8997F15C-4C97-598E-A50F-DA88CA1063E6";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 61.766282942468983;
setAttr ".imn" -type "string" "front";
setAttr ".den" -type "string" "front_depth";
setAttr ".man" -type "string" "front_mask";
setAttr ".hc" -type "string" "viewSet -f %camera";
setAttr ".o" yes;
createNode transform -s -n "side";
rename -uid "CC57D42B-44BD-C01F-AB99-E6B928031F2B";
setAttr ".v" no;
setAttr ".t" -type "double3" 100.1 0 0 ;
setAttr ".r" -type "double3" 0 89.999999999999986 0 ;
createNode camera -s -n "sideShape" -p "side";
rename -uid "B98CA35F-4DFD-36DE-7461-189C98891637";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "side";
setAttr ".den" -type "string" "side_depth";
setAttr ".man" -type "string" "side_mask";
setAttr ".hc" -type "string" "viewSet -s %camera";
setAttr ".o" yes;
createNode transform -n "group";
rename -uid "BECCB461-41D0-BD8A-CC79-3591B57B0D18";
addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message";
createNode transform -n "offset" -p "group";
rename -uid "16BDF72C-4277-8CD9-B837-22ACC6FF5F01";
setAttr -l on ".v";
setAttr -l on ".tx";
setAttr -l on ".ty";
setAttr -l on ".tz";
setAttr -l on ".rx";
setAttr -l on ".ry";
setAttr -l on ".rz";
setAttr -l on ".sx";
setAttr -l on ".sy";
setAttr -l on ".sz";
createNode transform -n "lockedNode" -p "offset";
rename -uid "C7E5AB1E-4BA2-E4D0-551E-FCA465DB50D6";
lockNode -l 1 ;
createNode transform -n "sphere" -p "lockedNode";
rename -uid "6D95DBB5-4D74-05BF-A95F-59887E9E743D";
addAttr -ci true -sn "testVector" -ln "testVector" -at "double3" -nc 3;
addAttr -ci true -sn "testVectorX" -ln "testVectorX" -at "double" -p "testVector";
addAttr -ci true -sn "testVectorY" -ln "testVectorY" -at "double" -p "testVector";
addAttr -ci true -sn "testVectorZ" -ln "testVectorZ" -at "double" -p "testVector";
addAttr -ci true -uac -sn "testColor" -ln "testColor" -at "float3" -nc 3;
addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor";
addAttr -ci true -sn "testGreen" -ln "testGreen" -at "float" -p "testColor";
addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor";
addAttr -ci true -sn "testString" -ln "testString" -dt "string";
addAttr -ci true -sn "testEnum" -ln "testEnum" -min 0 -max 2 -en "Apple:Lemon:Banana"
-at "enum";
addAttr -ci true -sn "testFloat" -ln "testFloat" -min 0 -max 10 -at "double";
addAttr -ci true -sn "testBoolean" -ln "testBoolean" -min 0 -max 1 -at "bool";
addAttr -ci true -sn "testInteger" -ln "testInteger" -min 0 -max 10 -at "long";
addAttr -ci true -sn "testLocked" -ln "testLocked" -min 0 -max 10 -at "double";
addAttr -ci true -sn "testHidden" -ln "testHidden" -min 0 -max 10 -at "double";
addAttr -ci true -sn "testConnect" -ln "testConnect" -at "double";
addAttr -ci true -sn "testAnimated" -ln "testAnimated" -at "double";
addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message";
addAttr -ci true -sn "testLimit" -ln "testLimit" -dv 5 -min -10 -max 10 -at "double";
addAttr -ci true -sn "testNonKeyable" -ln "testNonKeyable" -at "double";
addAttr -uap -ci true -k true -sn "testProxy" -ln "testProxy" -dv 1 -at "double";
setAttr -k on ".testVector";
setAttr -k on ".testVectorX";
setAttr -k on ".testVectorY";
setAttr -k on ".testVectorZ";
setAttr -k on ".testString";
setAttr -k on ".testEnum" 2;
setAttr -k on ".testFloat";
setAttr -k on ".testBoolean";
setAttr -k on ".testInteger";
setAttr -l on -k on ".testLocked";
setAttr -k on ".testConnect";
setAttr -k on ".testAnimated";
setAttr -k on ".testLimit" 10;
setAttr -cb on ".testNonKeyable";
createNode mesh -n "sphereShape" -p "sphere";
rename -uid "A54E9E87-47A6-32A9-85C4-AFBAA8C21840";
setAttr -k off ".v";
setAttr ".vir" yes;
setAttr ".vif" yes;
setAttr ".uvst[0].uvsn" -type "string" "map1";
setAttr ".cuvs" -type "string" "map1";
setAttr ".dcc" -type "string" "Ambient+Diffuse";
setAttr ".covm[0]" 0 1 1;
setAttr ".cdvm[0]" 0 1 1;
setAttr ".ugsdt" no;
setAttr ".vnm" 0;
createNode transform -n "pCube1";
rename -uid "EB3530D0-4207-A5AE-6925-9D94CBDDD1F9";
setAttr ".t" -type "double3" 0 0 -29.719509228177799 ;
createNode mesh -n "pCubeShape1" -p "pCube1";
rename -uid "7E4B2133-4E80-F102-7998-A9B732FEACD1";
setAttr -k off ".v";
setAttr ".vir" yes;
setAttr ".vif" yes;
setAttr ".uvst[0].uvsn" -type "string" "map1";
setAttr ".cuvs" -type "string" "map1";
setAttr ".dcc" -type "string" "Ambient+Diffuse";
setAttr ".covm[0]" 0 1 1;
setAttr ".cdvm[0]" 0 1 1;
createNode lightLinker -s -n "lightLinker1";
rename -uid "BB27B0F0-4683-C766-9E0B-D2AFAEB1AFF6";
setAttr -s 2 ".lnk";
setAttr -s 2 ".slnk";
createNode displayLayerManager -n "layerManager";
rename -uid "1270B817-40F6-0E8E-D20B-FD9B9195A9EE";
createNode displayLayer -n "defaultLayer";
rename -uid "23B6DA10-4D2D-10C6-9FAF-749F161B9716";
createNode renderLayerManager -n "renderLayerManager";
rename -uid "1308789F-439F-925D-3094-0B8AA9FBE17D";
createNode renderLayer -n "defaultRenderLayer";
rename -uid "7827EACA-45F4-FC44-3C4C-368439DEC2B0";
setAttr ".g" yes;
createNode polySphere -n "srcPolySphere";
rename -uid "1B369F70-4317-2F4F-4C28-E18C566DC198";
setAttr ".r" 4.1417806816985845;
createNode script -n "sceneConfigurationScriptNode";
rename -uid "B0BF38E3-48B8-4929-20D7-45BD7DF0B488";
setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 ";
setAttr ".st" 6;
createNode animCurveTU -n "sphere_testAnimated";
rename -uid "3A08FC92-43C1-C2D8-F4D3-98813CAFADB9";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 10;
createNode shapeEditorManager -n "shapeEditorManager";
rename -uid "76FE07E3-4101-0D2E-BA83-308EDB6BAFB5";
createNode poseInterpolatorManager -n "poseInterpolatorManager";
rename -uid "E4F59164-433D-3B5A-9EB0-858BC8193BA6";
createNode polyCube -n "polyCube1";
rename -uid "440FB0CB-44F5-D535-6B4E-6088139890E3";
setAttr ".cuv" 4;
createNode objectSet -n "lockedSet";
rename -uid "452516C3-40E5-8508-BCB2-8A8F6B2C0F4C";
setAttr ".ihi" 0;
setAttr -l on ".dsm";
createNode script -n "uiConfigurationScriptNode";
rename -uid "5F07C60B-437F-3FFF-82B2-9ABBA913F194";
setAttr ".b" -type "string" (
"// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n"
+ " -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n"
+ " -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n"
+ "\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n"
+ " -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n"
+ " -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n"
+ " -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n"
+ " -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n"
+ " -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n"
+ " -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n"
+ " -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n"
+ " -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n"
+ " -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n"
+ " -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n"
+ " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n"
+ "\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n"
+ " -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n"
+ " -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n"
+ " -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n"
+ " -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n"
+ " -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n"
+ " -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n"
+ " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n"
+ " -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n"
+ " -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n"
+ " -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n"
+ " -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1531\n -height 1022\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n"
+ " modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n"
+ " -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n"
+ " -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1531\n -height 1022\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n"
+ "\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 0\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n"
+ " -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n"
+ " -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 0\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n"
+ " -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n"
+ " -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n"
+ " -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n"
+ " -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 1\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n"
+ " -resultSamples 0.96\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n -valueLinesToggle 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n"
+ " -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n"
+ " -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n"
+ " -displayValues 0\n -autoFit 1\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 0.96\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n -valueLinesToggle 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n"
+ "\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n"
+ " -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n"
+ " -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n"
+ " -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n"
+ " -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n"
+ " -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"timeEditorPanel\" -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n"
+ "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n"
+ " clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"sequenceEditorPanel\" -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n"
+ " -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperGraphPanel\" -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n"
+ " -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n"
+ " -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"visorPanel\" -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n"
+ "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"createNodePanel\" -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"polyTexturePlacementPanel\" -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n"
+ "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"renderWindowPanel\" -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tshapePanel -unParent -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n"
+ "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tposePanel -unParent -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynRelEdPanel\" -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"relationshipPanel\" -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"referenceEditorPanel\" -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"componentEditorPanel\" -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynPaintScriptedPanelType\" -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"scriptEditorPanel\" -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\tif ($useSceneConfig) {\n\t\tscriptedPanel -e -to $panelName;\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"profilerPanel\" -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"contentBrowserPanel\" -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n"
+ " -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n"
+ " -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n"
+ "\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n"
+ " -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n"
+ "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"Stereo\" -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels `;\nstring $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n"
+ " -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n"
+ " -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n"
+ " -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\nstring $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n"
+ " -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n"
+ " -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n"
+ " -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n"
+ "\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperShadePanel\" -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n"
+ " -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n"
+ " -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n"
+ " if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n"
+ "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1531\\n -height 1022\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n"
+ "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1531\\n -height 1022\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n"
+ "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n setFocus `paneLayout -q -p1 $gMainPane`;\n sceneUIReplacement -deleteRemaining;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n");
setAttr ".st" 3;
select -ne :time1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".o" 1;
setAttr ".unw" 1;
select -ne :hardwareRenderingGlobals;
setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ;
setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 ;
setAttr ".vac" 2;
select -ne :renderPartition;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".st";
select -ne :renderGlobalsList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
select -ne :defaultShaderList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 4 ".s";
select -ne :postProcessList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".p";
select -ne :defaultRenderingList1;
select -ne :initialShadingGroup;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".dsm";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :initialParticleSE;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :defaultRenderGlobals;
setAttr ".ep" 1;
select -ne :defaultResolution;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -av ".w" 640;
setAttr -av ".h" 480;
setAttr -k on ".pa" 1;
setAttr -k on ".al";
setAttr -av ".dar" 1.3333332538604736;
setAttr -k on ".ldar";
setAttr -k on ".off";
setAttr -k on ".fld";
setAttr -k on ".zsl";
select -ne :defaultLightSet;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :defaultColorMgtGlobals;
setAttr ".cme" no;
select -ne :hardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".ctrs" 256;
setAttr ".btrs" 512;
connectAttr "sphere.msg" "group.testMessage" -l on;
connectAttr "sphere.ty" "sphere.testConnect";
connectAttr "sphere_testAnimated.o" "sphere.testAnimated";
connectAttr "group.msg" "sphere.testMessage" -l on;
connectAttr "pCube1.sz" "sphere.testProxy";
connectAttr "srcPolySphere.out" "sphereShape.i";
connectAttr "polyCube1.out" "pCubeShape1.i";
relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
connectAttr "layerManager.dli[0]" "defaultLayer.id";
connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid";
connectAttr "sphere.iog" "lockedSet.dsm" -l on -na;
connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na;
connectAttr "sphereShape.iog" ":initialShadingGroup.dsm" -na;
connectAttr "pCubeShape1.iog" ":initialShadingGroup.dsm" -na;
// End of sphere.ma

View File

@ -0,0 +1,187 @@
//Maya ASCII 2013 scene
//Name: test.ma
//Last modified: Thu, Jun 26, 2014 01:46:47 PM
//Codeset: UTF-8
requires maya "2013";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2013";
fileInfo "version" "2013 Service Pack 2P12 x64";
fileInfo "cutIdentifier" "201304120319-868747";
fileInfo "osv" "Linux 3.5.4-2.10-desktop #1 SMP PREEMPT Fri Oct 5 14:56:49 CEST 2012 x86_64";
createNode animCurveTA -n "DELETE_NODE_rotateX";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.rotateX";
createNode animCurveTU -n "DELETE_NODE_testEnum";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testEnum";
createNode animCurveTL -n "DELETE_NODE_translateX";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.translateX";
createNode animCurveTL -n "DELETE_NODE_translateY";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.translateY";
createNode animCurveTL -n "DELETE_NODE_translateZ";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.translateZ";
createNode animCurveTA -n "DELETE_NODE_rotateY";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 25 10 -82.269409864294204;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.rotateY";
createNode animCurveTU -n "DELETE_NODE_testFloat";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testFloat";
createNode animCurveTU -n "DELETE_NODE_testAnimated";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 10;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testAnimated";
createNode animCurveTU -n "DELETE_NODE_scaleX";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.scaleX";
createNode animCurveTU -n "DELETE_NODE_scaleY";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.5 10 2.5775116688782669;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.scaleY";
createNode animCurveTU -n "DELETE_NODE_visibility";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.visibility";
createNode animCurveTU -n "DELETE_NODE_testVectorX";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testVectorX";
createNode animCurveTU -n "DELETE_NODE_testVectorY";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testVectorY";
createNode animCurveTA -n "DELETE_NODE_rotateZ";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.rotateZ";
createNode animCurveTU -n "DELETE_NODE_testVectorZ";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testVectorZ";
createNode animCurveTU -n "DELETE_NODE_scaleZ";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.scaleZ";
createNode animCurveTU -n "DELETE_NODE_testInteger";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testInteger";
createNode animCurveTU -n "DELETE_NODE_testBoolean";
addAttr -ci true -sn "fullname" -ln "fullname" -dt "string";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testBoolean";
select -ne :time1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".o" 10;
setAttr ".unw" 10;
select -ne :renderPartition;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".st";
select -ne :initialShadingGroup;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".dsm";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :initialParticleSE;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :defaultShaderList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".s";
select -ne :postProcessList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".p";
select -ne :defaultRenderingList1;
setAttr -s 3 ".r";
select -ne :renderGlobalsList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
select -ne :defaultResolution;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -av ".w";
setAttr -av ".h";
setAttr -k on ".pa" 1;
setAttr -k on ".al";
setAttr -av ".dar";
setAttr -k on ".ldar";
setAttr -k on ".off";
setAttr -k on ".fld";
setAttr -k on ".zsl";
select -ne :defaultLightSet;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :hardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".ctrs" 256;
setAttr ".btrs" 512;
select -ne :hardwareRenderingGlobals;
setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ;
setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 ;
select -ne :defaultHardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".fn" -type "string" "im";
setAttr ".res" -type "string" "ntsc_4d 646 485 1.333";
// End of test.ma

View File

@ -0,0 +1,429 @@
//Maya ASCII 2014 scene
//Name: test_anim.ma
//Last modified: Sat, Mar 14, 2015 04:31:24 AM
//Codeset: 1252
file -rdi 1 -ns "srcSphere" -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
file -rdi 1 -ns "dstSphere" -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
file -r -ns "srcSphere" -dr 1 -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
file -r -ns "dstSphere" -dr 1 -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
requires maya "2014";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2014";
fileInfo "version" "2014 x64";
fileInfo "cutIdentifier" "201303010241-864206";
fileInfo "osv" "Microsoft Windows 7 Ultimate Edition, 64-bit Windows 7 Service Pack 1 (Build 7601)\n";
createNode transform -s -n "persp";
setAttr ".v" no;
setAttr ".t" -type "double3" -123.17900131274617 74.628663135067598 32.661032572240735 ;
setAttr ".r" -type "double3" -30.338352727390017 -72.599999999996271 0 ;
createNode camera -s -n "perspShape" -p "persp";
setAttr -k off ".v" no;
setAttr ".fl" 34.999999999999993;
setAttr ".coi" 150.42418693917088;
setAttr ".imn" -type "string" "persp";
setAttr ".den" -type "string" "persp_depth";
setAttr ".man" -type "string" "persp_mask";
setAttr ".hc" -type "string" "viewSet -p %camera";
createNode transform -s -n "top";
setAttr ".v" no;
setAttr ".t" -type "double3" 0 100.1 0 ;
setAttr ".r" -type "double3" -89.999999999999986 0 0 ;
createNode camera -s -n "topShape" -p "top";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "top";
setAttr ".den" -type "string" "top_depth";
setAttr ".man" -type "string" "top_mask";
setAttr ".hc" -type "string" "viewSet -t %camera";
setAttr ".o" yes;
createNode transform -s -n "front";
setAttr ".v" no;
setAttr ".t" -type "double3" 2.0350096678112575 0.39361762628711539 100.1 ;
createNode camera -s -n "frontShape" -p "front";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 61.766282942468983;
setAttr ".imn" -type "string" "front";
setAttr ".den" -type "string" "front_depth";
setAttr ".man" -type "string" "front_mask";
setAttr ".hc" -type "string" "viewSet -f %camera";
setAttr ".o" yes;
createNode transform -s -n "side";
setAttr ".v" no;
setAttr ".t" -type "double3" 100.1 0 0 ;
setAttr ".r" -type "double3" 0 89.999999999999986 0 ;
createNode camera -s -n "sideShape" -p "side";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "side";
setAttr ".den" -type "string" "side_depth";
setAttr ".man" -type "string" "side_mask";
setAttr ".hc" -type "string" "viewSet -s %camera";
setAttr ".o" yes;
createNode lightLinker -s -n "lightLinker1";
setAttr -s 2 ".lnk";
setAttr -s 2 ".slnk";
createNode displayLayerManager -n "layerManager";
createNode displayLayer -n "defaultLayer";
createNode renderLayerManager -n "renderLayerManager";
createNode renderLayer -n "defaultRenderLayer";
setAttr ".g" yes;
createNode script -n "sceneConfigurationScriptNode";
setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 ";
setAttr ".st" 6;
createNode reference -n "srcSphereRN";
setAttr -s 16 ".phl";
setAttr ".phl[1]" 0;
setAttr ".phl[2]" 0;
setAttr ".phl[3]" 0;
setAttr ".phl[4]" 0;
setAttr ".phl[5]" 0;
setAttr ".phl[6]" 0;
setAttr ".phl[7]" 0;
setAttr ".phl[8]" 0;
setAttr ".phl[9]" 0;
setAttr ".phl[10]" 0;
setAttr ".phl[11]" 0;
setAttr ".phl[12]" 0;
setAttr ".phl[13]" 0;
setAttr ".phl[14]" 0;
setAttr ".phl[15]" 0;
setAttr ".phl[16]" 0;
setAttr ".ed" -type "dataReferenceEdits"
"srcSphereRN"
"srcSphereRN" 0
"srcSphereRN" 45
1 |srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere
"testStatic" "testStatic" " -ci 1 -at \"double\""
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "visibility" " 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translate" " -type \"double3\" 0 5 0"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotate" " -type \"double3\" 0 0 0"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "scale" " -type \"double3\" 1 1 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"translate" " -type \"double3\" 0 8 -12"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"translateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotate" " -type \"double3\" 45 50 90"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotateX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotateY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scale" " -type \"double3\" 0.25 4.66 0.5"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scaleX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scaleY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scaleZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVector" " -k 1 -type \"double3\" 0.2 1.4 2.6"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVector" " -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVectorX" " -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVectorY" " -av -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVectorZ" " -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testColor" " -type \"float3\" 0.18 0.6 0.18"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testString" " -k 1 -type \"string\" \"Hello world\""
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testStatic" " -k 1 0"
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.translateZ"
"srcSphereRN.placeHolderList[1]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorX"
"srcSphereRN.placeHolderList[2]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorY"
"srcSphereRN.placeHolderList[3]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorZ"
"srcSphereRN.placeHolderList[4]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testEnum"
"srcSphereRN.placeHolderList[5]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testFloat"
"srcSphereRN.placeHolderList[6]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testBoolean"
"srcSphereRN.placeHolderList[7]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testInteger"
"srcSphereRN.placeHolderList[8]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateY"
"srcSphereRN.placeHolderList[9]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateX"
"srcSphereRN.placeHolderList[10]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateZ"
"srcSphereRN.placeHolderList[11]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateX"
"srcSphereRN.placeHolderList[12]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateZ"
"srcSphereRN.placeHolderList[13]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleX"
"srcSphereRN.placeHolderList[14]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleZ"
"srcSphereRN.placeHolderList[15]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.visibility"
"srcSphereRN.placeHolderList[16]" "";
setAttr ".ptag" -type "string" "";
lockNode -l 1 ;
createNode reference -n "dstSphereRN";
setAttr ".ed" -type "dataReferenceEdits"
"dstSphereRN"
"dstSphereRN" 0;
setAttr ".ptag" -type "string" "";
lockNode -l 1 ;
createNode animCurveTU -n "srcSphere:sphere_visibility";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "srcSphere:sphere_translateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
createNode animCurveTL -n "srcSphere:sphere_translateY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
createNode animCurveTL -n "srcSphere:sphere_translateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
createNode animCurveTA -n "srcSphere:sphere_rotateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
createNode animCurveTA -n "srcSphere:sphere_rotateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
createNode animCurveTU -n "srcSphere:sphere_scaleX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
createNode animCurveTU -n "srcSphere:sphere_scaleZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
createNode animCurveTU -n "srcSphere:sphere_testVectorX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
createNode animCurveTU -n "srcSphere:sphere_testVectorY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
createNode animCurveTU -n "srcSphere:sphere_testVectorZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
createNode animCurveTU -n "srcSphere:sphere_testEnum";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "srcSphere:sphere_testFloat";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
createNode animCurveTU -n "srcSphere:sphere_testBoolean";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "srcSphere:sphere_testInteger";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
createNode animCurveTL -n "dstSphere:sphere_translateY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
createNode animCurveTL -n "lockedNode_translateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 15;
createNode animCurveTU -n "sphere_testInteger";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
createNode animCurveTU -n "sphere_testEnum";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "sphere_translateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
createNode animCurveTL -n "sphere_translateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
createNode animCurveTU -n "sphere_testFloat";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
createNode animCurveTU -n "sphere_scaleX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
createNode animCurveTU -n "sphere_testVectorZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
createNode animCurveTU -n "sphere_scaleZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
createNode animCurveTA -n "sphere_rotateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
createNode animCurveTU -n "sphere_testVectorY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
createNode animCurveTA -n "sphere_rotateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
createNode animCurveTU -n "sphere_visibility";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "sphere_testVectorX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
createNode animCurveTU -n "sphere_testBoolean";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "lockedNode_translateZ1";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 15;
createNode reference -n "sharedReferenceNode";
setAttr ".ed" -type "dataReferenceEdits"
"sharedReferenceNode";
select -ne :time1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".o" 1;
setAttr ".unw" 1;
select -ne :renderPartition;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".st";
select -ne :initialShadingGroup;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".dsm";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :initialParticleSE;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :defaultShaderList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".s";
select -ne :postProcessList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".p";
select -ne :defaultRenderingList1;
setAttr -s 6 ".r";
select -ne :renderGlobalsList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
select -ne :defaultRenderGlobals;
setAttr ".ep" 1;
select -ne :defaultResolution;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -av ".w" 640;
setAttr -av ".h" 480;
setAttr -k on ".pa" 1;
setAttr -k on ".al";
setAttr -av ".dar" 1.3333332538604736;
setAttr -k on ".ldar";
setAttr -k on ".off";
setAttr -k on ".fld";
setAttr -k on ".zsl";
select -ne :defaultLightSet;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :hardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".ctrs" 256;
setAttr ".btrs" 512;
select -ne :hardwareRenderingGlobals;
setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ;
setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 ;
select -ne :defaultHardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".fn" -type "string" "im";
setAttr ".res" -type "string" "ntsc_4d 646 485 1.333";
select -ne :ikSystem;
setAttr -s 4 ".sol";
connectAttr "lockedNode_translateZ.o" "srcSphereRN.phl[1]";
connectAttr "srcSphere:sphere_testVectorX.o" "srcSphereRN.phl[2]";
connectAttr "srcSphere:sphere_testVectorY.o" "srcSphereRN.phl[3]";
connectAttr "srcSphere:sphere_testVectorZ.o" "srcSphereRN.phl[4]";
connectAttr "srcSphere:sphere_testEnum.o" "srcSphereRN.phl[5]";
connectAttr "srcSphere:sphere_testFloat.o" "srcSphereRN.phl[6]";
connectAttr "srcSphere:sphere_testBoolean.o" "srcSphereRN.phl[7]";
connectAttr "srcSphere:sphere_testInteger.o" "srcSphereRN.phl[8]";
connectAttr "srcSphere:sphere_translateY.o" "srcSphereRN.phl[9]";
connectAttr "srcSphere:sphere_translateX.o" "srcSphereRN.phl[10]";
connectAttr "srcSphere:sphere_translateZ.o" "srcSphereRN.phl[11]";
connectAttr "srcSphere:sphere_rotateX.o" "srcSphereRN.phl[12]";
connectAttr "srcSphere:sphere_rotateZ.o" "srcSphereRN.phl[13]";
connectAttr "srcSphere:sphere_scaleX.o" "srcSphereRN.phl[14]";
connectAttr "srcSphere:sphere_scaleZ.o" "srcSphereRN.phl[15]";
connectAttr "srcSphere:sphere_visibility.o" "srcSphereRN.phl[16]";
relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
connectAttr "layerManager.dli[0]" "defaultLayer.id";
connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid";
connectAttr "sharedReferenceNode.sr" "dstSphereRN.sr";
connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na;
// End of test_anim.ma

View File

@ -0,0 +1,29 @@
//Maya ASCII 2016 scene
//Name: animation.ma
//Last modified: Tue, Aug 09, 2016 08:47:07 AM
//Codeset: 1252
requires maya "2016";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2016";
fileInfo "version" "2016";
fileInfo "cutIdentifier" "201502261600-953408";
fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n";
createNode animCurveTU -n "CURVE1";
rename -uid "B3A2D98C-465C-F630-EA7F-7A960B6B0B4D";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 10;
createNode animCurveTU -n "CURVE2";
rename -uid "3A3C753F-43CD-18A5-3E19-E9B3F445D832";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 10 ".ktv[0:9]" 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 8 10 8;
setAttr -s 10 ".kit[9]" 1;
setAttr -s 10 ".kot[0:9]" 1 18 18 18 18 18 18 18
18 18;
setAttr -s 10 ".kix[9]" 1;
setAttr -s 10 ".kiy[9]" 0;
setAttr -s 10 ".kox[0:9]" 1 1 1 1 1 1 1 1 1 1;
setAttr -s 10 ".koy[0:9]" 0 0 0 0 0 0 0 0 0 0;
// End

View File

@ -0,0 +1,224 @@
{
"metadata": {
"mayaSceneFile": "C:/Users/hovel/Dropbox/git/site-packages/studiolibrary/packages/mutils/tests/data/test_bake_connected.ma",
"angularUnit": "deg",
"ctime": "1518341545",
"endFrame": 10,
"linearUnit": "cm",
"version": "1.0.0",
"user": "Hovel",
"startFrame": 1,
"timeUnit": "film",
"mayaVersion": "2017"
}
,
"objects": {
"srcSphere:offset": {
"attrs": {}
},
"srcSphere:group": {
"attrs": {
"translateX": {
"curve": "CURVE1",
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"curve": "CURVE2",
"type": "doubleLinear",
"value": 0.0
},
"translateZ": {
"curve": "CURVE3",
"type": "doubleLinear",
"value": 18.1320010846965
},
"scaleX": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 1.0
},
"visibility": {
"type": "bool",
"value": true
},
"rotateX": {
"type": "doubleAngle",
"value": 0.0
},
"rotateY": {
"type": "doubleAngle",
"value": 0.0
},
"rotateZ": {
"type": "doubleAngle",
"value": 0.0
},
"scaleZ": {
"type": "double",
"value": 1.0
}
}
},
"srcSphere:sphere": {
"attrs": {
"testInteger": {
"curve": "CURVE5",
"type": "long",
"value": 5
},
"testProxy": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 4.66
},
"testLimit": {
"type": "double",
"value": 10.0
},
"testConnect": {
"curve": "CURVE6",
"type": "double",
"value": 8.0
},
"testEnum": {
"curve": "CURVE7",
"type": "enum",
"value": 1
},
"scaleX": {
"curve": "CURVE8",
"type": "double",
"value": 0.4295852781463779
},
"testString": {
"type": "string",
"value": "Hello world"
},
"scaleZ": {
"curve": "CURVE9",
"type": "double",
"value": 0.8591705562927558
},
"rotateX": {
"curve": "CURVE10",
"type": "doubleAngle",
"value": 30.81018202226841
},
"rotateY": {
"type": "doubleAngle",
"value": 50.0
},
"rotateZ": {
"curve": "CURVE11",
"type": "doubleAngle",
"value": 149.70880463068096
},
"translateX": {
"curve": "CURVE12",
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"curve": "CURVE13",
"type": "doubleLinear",
"value": 8.0
},
"translateZ": {
"curve": "CURVE14",
"type": "doubleLinear",
"value": 11.214436147065292
},
"visibility": {
"curve": "CURVE15",
"type": "bool",
"value": true
},
"testFloat": {
"curve": "CURVE16",
"type": "double",
"value": 0.666
},
"testAnimated": {
"curve": "CURVE17",
"type": "double",
"value": 10.0
},
"testVectorX": {
"curve": "CURVE18",
"type": "double",
"value": 0.2
},
"testVectorY": {
"curve": "CURVE19",
"type": "double",
"value": 1.4
},
"testVectorZ": {
"curve": "CURVE20",
"type": "double",
"value": 2.6
},
"testBoolean": {
"curve": "CURVE21",
"type": "bool",
"value": true
}
}
},
"srcSphere:lockedNode": {
"attrs": {
"translateX": {
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"type": "doubleLinear",
"value": 5.0
},
"translateZ": {
"curve": "CURVE23",
"type": "doubleLinear",
"value": 15.0
},
"scaleX": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 1.0
},
"visibility": {
"type": "bool",
"value": true
},
"rotateX": {
"curve": "CURVE24",
"type": "doubleAngle",
"value": 0.0
},
"rotateY": {
"curve": "CURVE25",
"type": "doubleAngle",
"value": -69.84190849889626
},
"rotateZ": {
"curve": "CURVE26",
"type": "doubleAngle",
"value": 0.0
},
"scaleZ": {
"type": "double",
"value": 1.0
}
}
}
}
}

View File

@ -0,0 +1,636 @@
//Maya ASCII 2013 scene
//Name: test_bake_connections.ma
//Last modified: Wed, Aug 20, 2014 02:40:58 PM
//Codeset: UTF-8
file -rdi 1 -ns "srcSphere" -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
file -rdi 1 -ns "dstSphere" -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
file -r -ns "srcSphere" -dr 1 -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
file -r -ns "dstSphere" -dr 1 -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
requires maya "2013";
requires "stereoCamera" "10.0";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2013";
fileInfo "version" "2013 Service Pack 2P12 x64";
fileInfo "cutIdentifier" "201304120319-868747";
fileInfo "osv" "Linux 3.5.4-2.10-desktop #1 SMP PREEMPT Fri Oct 5 14:56:49 CEST 2012 x86_64";
createNode transform -s -n "persp";
setAttr ".v" no;
setAttr ".t" -type "double3" 7.1985912106548611 102.16300347609724 -144.90732864886502 ;
setAttr ".r" -type "double3" -30.938352727397543 -178.19999999999578 0 ;
createNode camera -s -n "perspShape" -p "persp";
setAttr -k off ".v" no;
setAttr ".fl" 34.999999999999993;
setAttr ".coi" 163.53638497594133;
setAttr ".imn" -type "string" "persp";
setAttr ".den" -type "string" "persp_depth";
setAttr ".man" -type "string" "persp_mask";
setAttr ".hc" -type "string" "viewSet -p %camera";
createNode transform -s -n "top";
setAttr ".v" no;
setAttr ".t" -type "double3" 0 100.1 0 ;
setAttr ".r" -type "double3" -89.999999999999986 0 0 ;
createNode camera -s -n "topShape" -p "top";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "top";
setAttr ".den" -type "string" "top_depth";
setAttr ".man" -type "string" "top_mask";
setAttr ".hc" -type "string" "viewSet -t %camera";
setAttr ".o" yes;
createNode transform -s -n "front";
setAttr ".v" no;
setAttr ".t" -type "double3" 2.0350096678112575 0.39361762628711539 100.1 ;
createNode camera -s -n "frontShape" -p "front";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 61.766282942468983;
setAttr ".imn" -type "string" "front";
setAttr ".den" -type "string" "front_depth";
setAttr ".man" -type "string" "front_mask";
setAttr ".hc" -type "string" "viewSet -f %camera";
setAttr ".o" yes;
createNode transform -s -n "side";
setAttr ".v" no;
setAttr ".t" -type "double3" 100.1 0 0 ;
setAttr ".r" -type "double3" 0 89.999999999999986 0 ;
createNode camera -s -n "sideShape" -p "side";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "side";
setAttr ".den" -type "string" "side_depth";
setAttr ".man" -type "string" "side_mask";
setAttr ".hc" -type "string" "viewSet -s %camera";
setAttr ".o" yes;
createNode transform -n "locator1";
createNode locator -n "locatorShape1" -p "locator1";
setAttr -k off ".v";
createNode transform -n "locator2";
setAttr ".t" -type "double3" 0 0 18.132001084696501 ;
setAttr ".s" -type "double3" 4.1257198596207596 4.1257198596207596 4.1257198596207596 ;
createNode locator -n "locatorShape2" -p "locator2";
setAttr -k off ".v";
createNode transform -n "srcSphereRNfosterParent1";
createNode orientConstraint -n "lockedNode_orientConstraint1" -p "srcSphereRNfosterParent1";
addAttr -ci true -k true -sn "w0" -ln "locator1W0" -dv 1 -min 0 -at "double";
setAttr -k on ".nds";
setAttr -k off ".v";
setAttr -k off ".tx";
setAttr -k off ".ty";
setAttr -k off ".tz";
setAttr -k off ".rx";
setAttr -k off ".ry";
setAttr -k off ".rz";
setAttr -k off ".sx";
setAttr -k off ".sy";
setAttr -k off ".sz";
setAttr ".erp" yes;
setAttr ".lr" -type "double3" 0 -69.84190849889626 0 ;
setAttr -k on ".w0";
createNode lightLinker -s -n "lightLinker1";
setAttr -s 2 ".lnk";
setAttr -s 2 ".slnk";
createNode displayLayerManager -n "layerManager";
createNode displayLayer -n "defaultLayer";
createNode renderLayerManager -n "renderLayerManager";
createNode renderLayer -n "defaultRenderLayer";
setAttr ".g" yes;
createNode script -n "sceneConfigurationScriptNode";
setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 ";
setAttr ".st" 6;
createNode reference -n "srcSphereRN";
setAttr -s 22 ".phl";
setAttr ".phl[1]" 0;
setAttr ".phl[2]" 0;
setAttr ".phl[3]" 0;
setAttr ".phl[4]" 0;
setAttr ".phl[5]" 0;
setAttr ".phl[6]" 0;
setAttr ".phl[7]" 0;
setAttr ".phl[8]" 0;
setAttr ".phl[9]" 0;
setAttr ".phl[10]" 0;
setAttr ".phl[11]" 0;
setAttr ".phl[12]" 0;
setAttr ".phl[13]" 0;
setAttr ".phl[14]" 0;
setAttr ".phl[15]" 0;
setAttr ".phl[16]" 0;
setAttr ".phl[17]" 0;
setAttr ".phl[18]" 0;
setAttr ".phl[19]" 0;
setAttr ".phl[20]" 0;
setAttr ".phl[21]" 0;
setAttr ".phl[22]" 0;
setAttr ".ed" -type "dataReferenceEdits"
"srcSphereRN"
"srcSphereRN" 0
"srcSphereRN" 50
0 "|srcSphereRNfosterParent1|lockedNode_orientConstraint1" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode"
"-s -r "
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "visibility" " 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translate" " -type \"double3\" 0 5 15"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotate" " -type \"double3\" 0 -69.841908 0"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "scale" " -type \"double3\" 1 1 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"translate" " -type \"double3\" 0 8 11.214436"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"translateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotate" " -type \"double3\" 30.810182 50 149.708805"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotateX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotateY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scale" " -type \"double3\" 0.429585 4.66 0.859171"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scaleX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scaleY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scaleZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVector" " -k 1 -type \"double3\" 0.2 1.4 2.6"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVector" " -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVectorX" " -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVectorY" " -av -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVectorZ" " -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testColor" " -type \"float3\" 0.18 0.6 0.18"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testString" " -k 1 -type \"string\" \"Hello world\""
5 4 "srcSphereRN" "|srcSphere:group.translate" "srcSphereRN.placeHolderList[1]"
""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.translateZ"
"srcSphereRN.placeHolderList[2]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.rotateX"
"srcSphereRN.placeHolderList[3]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.rotateY"
"srcSphereRN.placeHolderList[4]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.rotateZ"
"srcSphereRN.placeHolderList[5]" ""
5 3 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.rotateOrder"
"srcSphereRN.placeHolderList[6]" ""
5 3 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.parentInverseMatrix"
"srcSphereRN.placeHolderList[7]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorX"
"srcSphereRN.placeHolderList[8]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorY"
"srcSphereRN.placeHolderList[9]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorZ"
"srcSphereRN.placeHolderList[10]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testEnum"
"srcSphereRN.placeHolderList[11]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testFloat"
"srcSphereRN.placeHolderList[12]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testBoolean"
"srcSphereRN.placeHolderList[13]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testInteger"
"srcSphereRN.placeHolderList[14]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateY"
"srcSphereRN.placeHolderList[15]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateX"
"srcSphereRN.placeHolderList[16]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateZ"
"srcSphereRN.placeHolderList[17]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateX"
"srcSphereRN.placeHolderList[18]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateZ"
"srcSphereRN.placeHolderList[19]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleX"
"srcSphereRN.placeHolderList[20]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleZ"
"srcSphereRN.placeHolderList[21]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.visibility"
"srcSphereRN.placeHolderList[22]" "";
setAttr ".ptag" -type "string" "";
lockNode -l 1 ;
createNode reference -n "dstSphereRN";
setAttr ".ed" -type "dataReferenceEdits"
"dstSphereRN"
"dstSphereRN" 0;
setAttr ".ptag" -type "string" "";
lockNode -l 1 ;
createNode animCurveTU -n "srcSphere:sphere_visibility";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "srcSphere:sphere_translateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
createNode animCurveTL -n "srcSphere:sphere_translateY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
createNode animCurveTL -n "srcSphere:sphere_translateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
createNode animCurveTA -n "srcSphere:sphere_rotateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
createNode animCurveTA -n "srcSphere:sphere_rotateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
createNode animCurveTU -n "srcSphere:sphere_scaleX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
createNode animCurveTU -n "srcSphere:sphere_scaleZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
createNode animCurveTU -n "srcSphere:sphere_testVectorX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
createNode animCurveTU -n "srcSphere:sphere_testVectorY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
createNode animCurveTU -n "srcSphere:sphere_testVectorZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
createNode animCurveTU -n "srcSphere:sphere_testEnum";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "srcSphere:sphere_testFloat";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
createNode animCurveTU -n "srcSphere:sphere_testBoolean";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "srcSphere:sphere_testInteger";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
createNode animCurveTL -n "dstSphere:sphere_translateY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
createNode animCurveTL -n "lockedNode_translateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 15;
createNode animCurveTU -n "sphere_testInteger";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
createNode animCurveTU -n "sphere_testEnum";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "sphere_translateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
createNode animCurveTL -n "sphere_translateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
createNode animCurveTU -n "sphere_testFloat";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
createNode animCurveTU -n "sphere_scaleX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
createNode animCurveTU -n "sphere_testVectorZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
createNode animCurveTU -n "sphere_scaleZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
createNode animCurveTA -n "sphere_rotateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
createNode animCurveTU -n "sphere_testVectorY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
createNode animCurveTA -n "sphere_rotateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
createNode animCurveTU -n "sphere_visibility";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "sphere_testVectorX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
createNode animCurveTU -n "sphere_testBoolean";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "lockedNode_translateZ1";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 15;
createNode reference -n "sharedReferenceNode";
setAttr ".ed" -type "dataReferenceEdits"
"sharedReferenceNode";
createNode animCurveTU -n "locator1_visibility";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 5 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "locator1_translateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 5 11.661339872825151 10 11.661339872825151;
createNode animCurveTL -n "locator1_translateY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 5 13.237957579056641 10 13.237957579056641;
createNode animCurveTL -n "locator1_translateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 5 11.944644232286457 10 11.944644232286457;
createNode animCurveTA -n "locator1_rotateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 5 0 10 0;
createNode animCurveTA -n "locator1_rotateY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 5 0 10 -69.84190849889626;
createNode animCurveTA -n "locator1_rotateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 5 0 10 0;
createNode animCurveTU -n "locator1_scaleX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 5 4.0680107858594825 10 4.0680107858594825;
createNode animCurveTU -n "locator1_scaleY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 5 4.0680107858594825 10 4.0680107858594825;
createNode animCurveTU -n "locator1_scaleZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 5 4.0680107858594825 10 4.0680107858594825;
select -ne :time1;
setAttr -av -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -k on ".o" 13;
setAttr -k on ".unw" 13;
setAttr -k on ".etw";
setAttr -k on ".tps";
setAttr -k on ".tms";
lockNode -l 1 ;
select -ne :renderPartition;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 2 ".st";
setAttr -cb on ".an";
setAttr -cb on ".pt";
lockNode -l 1 ;
select -ne :initialShadingGroup;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -av -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 2 ".dsm";
setAttr -k on ".mwc";
setAttr -cb on ".an";
setAttr -cb on ".il";
setAttr -cb on ".vo";
setAttr -cb on ".eo";
setAttr -cb on ".fo";
setAttr -cb on ".epo";
setAttr -k on ".ro" yes;
lockNode -l 1 ;
select -ne :initialParticleSE;
setAttr -av -k on ".cch";
setAttr -cb on ".ihi";
setAttr -av -k on ".nds";
setAttr -cb on ".bnm";
setAttr -k on ".mwc";
setAttr -cb on ".an";
setAttr -cb on ".il";
setAttr -cb on ".vo";
setAttr -cb on ".eo";
setAttr -cb on ".fo";
setAttr -cb on ".epo";
setAttr -k on ".ro" yes;
select -ne :defaultShaderList1;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 2 ".s";
select -ne :postProcessList1;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 2 ".p";
select -ne :defaultRenderingList1;
setAttr -s 6 ".r";
select -ne :renderGlobalsList1;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
select -ne :defaultResolution;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -av ".w";
setAttr -av ".h";
setAttr -k on ".pa" 1;
setAttr -k on ".al";
setAttr -av ".dar";
setAttr -k on ".ldar";
setAttr -k on ".off";
setAttr -k on ".fld";
setAttr -k on ".zsl";
select -ne :defaultLightSet;
setAttr -k on ".cch";
setAttr -k on ".ihi";
setAttr -av -k on ".nds";
setAttr -k on ".bnm";
setAttr -k on ".mwc";
setAttr -k on ".an";
setAttr -k on ".il";
setAttr -k on ".vo";
setAttr -k on ".eo";
setAttr -k on ".fo";
setAttr -k on ".epo";
setAttr -k on ".ro" yes;
select -ne :defaultObjectSet;
setAttr ".ro" yes;
lockNode -l 1 ;
select -ne :hardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr ".ctrs" 256;
setAttr ".btrs" 512;
setAttr -k off ".fbfm";
setAttr -k off -cb on ".ehql";
setAttr -k off -cb on ".eams";
setAttr -k off -cb on ".eeaa";
setAttr -k off -cb on ".engm";
setAttr -k off -cb on ".mes";
setAttr -k off -cb on ".emb";
setAttr -av -k off -cb on ".mbbf";
setAttr -k off -cb on ".mbs";
setAttr -k off -cb on ".trm";
setAttr -k off -cb on ".tshc";
setAttr -k off ".enpt";
setAttr -k off -cb on ".clmt";
setAttr -k off -cb on ".tcov";
setAttr -k off -cb on ".lith";
setAttr -k off -cb on ".sobc";
setAttr -k off -cb on ".cuth";
setAttr -k off -cb on ".hgcd";
setAttr -k off -cb on ".hgci";
setAttr -k off -cb on ".mgcs";
setAttr -k off -cb on ".twa";
setAttr -k off -cb on ".twz";
setAttr -k on ".hwcc";
setAttr -k on ".hwdp";
setAttr -k on ".hwql";
setAttr -k on ".hwfr";
select -ne :hardwareRenderingGlobals;
setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ;
setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 ;
select -ne :defaultHardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -av -k on ".rp";
setAttr -k on ".cai";
setAttr -k on ".coi";
setAttr -cb on ".bc";
setAttr -av -k on ".bcb";
setAttr -av -k on ".bcg";
setAttr -av -k on ".bcr";
setAttr -k on ".ei";
setAttr -k on ".ex";
setAttr -av -k on ".es";
setAttr -av -k on ".ef";
setAttr -av -k on ".bf";
setAttr -k on ".fii";
setAttr -av -k on ".sf";
setAttr -k on ".gr";
setAttr -k on ".li";
setAttr -k on ".ls";
setAttr -k on ".mb";
setAttr -k on ".ti";
setAttr -k on ".txt";
setAttr -k on ".mpr";
setAttr -k on ".wzd";
setAttr ".fn" -type "string" "im";
setAttr -k on ".if";
setAttr ".res" -type "string" "ntsc_4d 646 485 1.333";
setAttr -k on ".as";
setAttr -k on ".ds";
setAttr -k on ".lm";
setAttr -k on ".fir";
setAttr -k on ".aap";
setAttr -k on ".gh";
setAttr -cb on ".sd";
lockNode -l 1 ;
connectAttr "locator2.t" "srcSphereRN.phl[1]";
connectAttr "lockedNode_translateZ.o" "srcSphereRN.phl[2]";
connectAttr "lockedNode_orientConstraint1.crx" "srcSphereRN.phl[3]";
connectAttr "lockedNode_orientConstraint1.cry" "srcSphereRN.phl[4]";
connectAttr "lockedNode_orientConstraint1.crz" "srcSphereRN.phl[5]";
connectAttr "srcSphereRN.phl[6]" "lockedNode_orientConstraint1.cro";
connectAttr "srcSphereRN.phl[7]" "lockedNode_orientConstraint1.cpim";
connectAttr "srcSphere:sphere_testVectorX.o" "srcSphereRN.phl[8]";
connectAttr "srcSphere:sphere_testVectorY.o" "srcSphereRN.phl[9]";
connectAttr "srcSphere:sphere_testVectorZ.o" "srcSphereRN.phl[10]";
connectAttr "srcSphere:sphere_testEnum.o" "srcSphereRN.phl[11]";
connectAttr "srcSphere:sphere_testFloat.o" "srcSphereRN.phl[12]";
connectAttr "srcSphere:sphere_testBoolean.o" "srcSphereRN.phl[13]";
connectAttr "srcSphere:sphere_testInteger.o" "srcSphereRN.phl[14]";
connectAttr "srcSphere:sphere_translateY.o" "srcSphereRN.phl[15]";
connectAttr "srcSphere:sphere_translateX.o" "srcSphereRN.phl[16]";
connectAttr "srcSphere:sphere_translateZ.o" "srcSphereRN.phl[17]";
connectAttr "srcSphere:sphere_rotateX.o" "srcSphereRN.phl[18]";
connectAttr "srcSphere:sphere_rotateZ.o" "srcSphereRN.phl[19]";
connectAttr "srcSphere:sphere_scaleX.o" "srcSphereRN.phl[20]";
connectAttr "srcSphere:sphere_scaleZ.o" "srcSphereRN.phl[21]";
connectAttr "srcSphere:sphere_visibility.o" "srcSphereRN.phl[22]";
connectAttr "locator1_rotateX.o" "locator1.rx";
connectAttr "locator1_rotateY.o" "locator1.ry";
connectAttr "locator1_rotateZ.o" "locator1.rz";
connectAttr "locator1_visibility.o" "locator1.v";
connectAttr "locator1_translateX.o" "locator1.tx";
connectAttr "locator1_translateY.o" "locator1.ty";
connectAttr "locator1_translateZ.o" "locator1.tz";
connectAttr "locator1_scaleX.o" "locator1.sx";
connectAttr "locator1_scaleY.o" "locator1.sy";
connectAttr "locator1_scaleZ.o" "locator1.sz";
connectAttr "locator1.r" "lockedNode_orientConstraint1.tg[0].tr";
connectAttr "locator1.ro" "lockedNode_orientConstraint1.tg[0].tro";
connectAttr "locator1.pm" "lockedNode_orientConstraint1.tg[0].tpm";
connectAttr "lockedNode_orientConstraint1.w0" "lockedNode_orientConstraint1.tg[0].tw"
;
relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
connectAttr "layerManager.dli[0]" "defaultLayer.id";
connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid";
connectAttr "srcSphereRNfosterParent1.msg" "srcSphereRN.fp";
connectAttr "sharedReferenceNode.sr" "dstSphereRN.sr";
connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na;
// End of test_bake_connections.ma

View File

@ -0,0 +1,100 @@
//Maya ASCII 2016 scene
//Name: animation.ma
//Last modified: Tue, Aug 09, 2016 08:47:07 AM
//Codeset: 1252
requires maya "2016";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2016";
fileInfo "version" "2016";
fileInfo "cutIdentifier" "201502261600-953408";
fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n";
createNode animCurveTU -n "CURVE1";
rename -uid "B4FA69EE-4158-445F-5AB5-769D92B60EE3";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
createNode animCurveTU -n "CURVE2";
rename -uid "CA0863B5-4680-36D0-E9A3-83A0A33EC51B";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "CURVE3";
rename -uid "436929BD-4536-FD91-F836-FA9961D739F5";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
createNode animCurveTU -n "CURVE4";
rename -uid "9E217B7B-4585-8318-49F7-249A1ACBA95B";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
createNode animCurveTA -n "CURVE5";
rename -uid "5649AD20-440E-7866-8CAB-B08834F07905";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
createNode animCurveTA -n "CURVE6";
rename -uid "19E0B15E-449C-F085-5151-10BFD6772FE1";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
createNode animCurveTL -n "CURVE7";
rename -uid "1FE3DC07-4819-A244-0BC3-B8A3B3EF1275";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
createNode animCurveTL -n "CURVE8";
rename -uid "00984994-4BA2-5907-9C38-D1BE8279B667";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
createNode animCurveTL -n "CURVE9";
rename -uid "40524ED9-44E0-043B-4F9E-00ABB81FF2FA";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
createNode animCurveTU -n "CURVE10";
rename -uid "240A5025-4AA3-D27B-CBD9-3D98E97E7B2A";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "CURVE11";
rename -uid "4541CB45-4FD7-656E-2626-0394702423B3";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
createNode animCurveTU -n "CURVE12";
rename -uid "55FC02E9-4D2D-FF69-A838-978CC1CA83B4";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 10;
createNode animCurveTU -n "CURVE13";
rename -uid "CBF4DD9D-4839-361A-70F2-6990E98D9C30";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
createNode animCurveTU -n "CURVE14";
rename -uid "1A7FD955-44FC-DA80-17C8-F8B2936C2A64";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
createNode animCurveTU -n "CURVE15";
rename -uid "3F957170-4D7E-FD98-8F3E-6086609AB97F";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
createNode animCurveTU -n "CURVE16";
rename -uid "2EC19608-4057-B2F8-7796-27BB84CC1532";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "CURVE18";
rename -uid "75AC48FC-4740-40A9-B0B6-AFB0FB0FAD85";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 15;
// End

View File

@ -0,0 +1,177 @@
{
"metadata": {
"mayaSceneFile": "C:/Users/hovel/Dropbox/git/site-packages/studiolibrary/packages/mutils/tests/data/test_anim.ma",
"angularUnit": "deg",
"ctime": "1518341545",
"endFrame": 10,
"linearUnit": "cm",
"version": "1.0.0",
"user": "Hovel",
"startFrame": 1,
"timeUnit": "film",
"mayaVersion": "2017"
}
,
"objects": {
"srcSphere:offset": {
"attrs": {}
},
"srcSphere:sphere": {
"attrs": {
"testInteger": {
"curve": "CURVE1",
"type": "long",
"value": 5
},
"testProxy": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 4.66
},
"testLimit": {
"type": "double",
"value": 10.0
},
"testConnect": {
"type": "double",
"value": 8.0
},
"testEnum": {
"curve": "CURVE2",
"type": "enum",
"value": 1
},
"scaleX": {
"curve": "CURVE3",
"type": "double",
"value": 0.25
},
"testString": {
"type": "string",
"value": "Hello world"
},
"scaleZ": {
"curve": "CURVE4",
"type": "double",
"value": 0.5
},
"rotateX": {
"curve": "CURVE5",
"type": "doubleAngle",
"value": 45.0
},
"rotateY": {
"type": "doubleAngle",
"value": 50.0
},
"rotateZ": {
"curve": "CURVE6",
"type": "doubleAngle",
"value": 90.0
},
"testStatic": {
"type": "double",
"value": 0.0
},
"translateX": {
"curve": "CURVE7",
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"curve": "CURVE8",
"type": "doubleLinear",
"value": 8.0
},
"translateZ": {
"curve": "CURVE9",
"type": "doubleLinear",
"value": -12.0
},
"visibility": {
"curve": "CURVE10",
"type": "bool",
"value": true
},
"testFloat": {
"curve": "CURVE11",
"type": "double",
"value": 0.666
},
"testAnimated": {
"curve": "CURVE12",
"type": "double",
"value": 0.0
},
"testVectorX": {
"curve": "CURVE13",
"type": "double",
"value": 0.2
},
"testVectorY": {
"curve": "CURVE14",
"type": "double",
"value": 1.4
},
"testVectorZ": {
"curve": "CURVE15",
"type": "double",
"value": 2.6
},
"testBoolean": {
"curve": "CURVE16",
"type": "bool",
"value": true
}
}
},
"srcSphere:lockedNode": {
"attrs": {
"translateX": {
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"type": "doubleLinear",
"value": 5.0
},
"translateZ": {
"curve": "CURVE18",
"type": "doubleLinear",
"value": 0.0
},
"scaleX": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 1.0
},
"visibility": {
"type": "bool",
"value": true
},
"rotateX": {
"type": "doubleAngle",
"value": 0.0
},
"rotateY": {
"type": "doubleAngle",
"value": 0.0
},
"rotateZ": {
"type": "doubleAngle",
"value": 0.0
},
"scaleZ": {
"type": "double",
"value": 1.0
}
}
}
}
}

View File

@ -0,0 +1,100 @@
//Maya ASCII 2016 scene
//Name: animation.ma
//Last modified: Tue, Aug 09, 2016 08:47:07 AM
//Codeset: 1252
requires maya "2016";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2016";
fileInfo "version" "2016";
fileInfo "cutIdentifier" "201502261600-953408";
fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n";
createNode animCurveTU -n "CURVE1";
rename -uid "44F21FB5-4121-8FAA-4E5A-2795D8DB1C98";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
createNode animCurveTU -n "CURVE2";
rename -uid "89D65122-4A81-C08C-8F60-A8A69D8BDDFF";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "CURVE3";
rename -uid "394F9F8B-44A0-7AEE-3FF8-43BE62C0DDC8";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
createNode animCurveTU -n "CURVE4";
rename -uid "CF90746B-43BD-0210-E0FC-05A5368FC36F";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
createNode animCurveTA -n "CURVE5";
rename -uid "C88B0183-4A49-7472-1F9B-75861AB915A8";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
createNode animCurveTA -n "CURVE6";
rename -uid "70CBACAA-40C4-7C42-B9F5-0BB67E97595D";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
createNode animCurveTL -n "CURVE7";
rename -uid "9A9A4A91-42EF-2651-3696-91ACC6F098B6";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
createNode animCurveTL -n "CURVE8";
rename -uid "CBDCAEFF-4D9E-5162-0CAC-7C8CE46E91F2";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
createNode animCurveTL -n "CURVE9";
rename -uid "B745DFCE-4739-96FC-C827-1494F35ED50D";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
createNode animCurveTU -n "CURVE10";
rename -uid "0A53795D-45F0-B3C3-E5F2-AAB7665A9E8E";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "CURVE11";
rename -uid "7DC24CA9-48A1-3B3A-8278-5A81D70CA4E9";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
createNode animCurveTU -n "CURVE12";
rename -uid "400DED74-4D52-543D-91D4-0881D938C5C9";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 10;
createNode animCurveTU -n "CURVE13";
rename -uid "5527A666-49BE-9277-3936-12B07312A901";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
createNode animCurveTU -n "CURVE14";
rename -uid "DF0B2F0E-49A4-61C0-521D-0A8497BF2753";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
createNode animCurveTU -n "CURVE15";
rename -uid "20CAFE14-4EBD-6A5D-458C-5B82383EC0F2";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
createNode animCurveTU -n "CURVE16";
rename -uid "7996F54C-49E2-85E5-D444-CBB553D75344";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "CURVE18";
rename -uid "C516D5DD-4FA0-4AEC-8E33-0ABF26EF9D60";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 15;
// End

View File

@ -0,0 +1,177 @@
{
"metadata": {
"mayaSceneFile": "C:/Users/hovel/Dropbox/git/site-packages/studiolibrary/packages/mutils/tests/data/test_anim.ma",
"angularUnit": "deg",
"ctime": "1518341546",
"endFrame": 10,
"linearUnit": "cm",
"version": "1.0.0",
"user": "Hovel",
"startFrame": 1,
"timeUnit": "film",
"mayaVersion": "2017"
}
,
"objects": {
"srcSphere:offset": {
"attrs": {}
},
"srcSphere:sphere": {
"attrs": {
"testInteger": {
"curve": "CURVE1",
"type": "long",
"value": 5
},
"testProxy": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 4.66
},
"testLimit": {
"type": "double",
"value": 10.0
},
"testConnect": {
"type": "double",
"value": 8.0
},
"testEnum": {
"curve": "CURVE2",
"type": "enum",
"value": 1
},
"scaleX": {
"curve": "CURVE3",
"type": "double",
"value": 0.25
},
"testString": {
"type": "string",
"value": "Hello world"
},
"scaleZ": {
"curve": "CURVE4",
"type": "double",
"value": 0.5
},
"rotateX": {
"curve": "CURVE5",
"type": "doubleAngle",
"value": 45.0
},
"rotateY": {
"type": "doubleAngle",
"value": 50.0
},
"rotateZ": {
"curve": "CURVE6",
"type": "doubleAngle",
"value": 90.0
},
"testStatic": {
"type": "double",
"value": 0.0
},
"translateX": {
"curve": "CURVE7",
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"curve": "CURVE8",
"type": "doubleLinear",
"value": 8.0
},
"translateZ": {
"curve": "CURVE9",
"type": "doubleLinear",
"value": -12.0
},
"visibility": {
"curve": "CURVE10",
"type": "bool",
"value": true
},
"testFloat": {
"curve": "CURVE11",
"type": "double",
"value": 0.666
},
"testAnimated": {
"curve": "CURVE12",
"type": "double",
"value": 0.0
},
"testVectorX": {
"curve": "CURVE13",
"type": "double",
"value": 0.2
},
"testVectorY": {
"curve": "CURVE14",
"type": "double",
"value": 1.4
},
"testVectorZ": {
"curve": "CURVE15",
"type": "double",
"value": 2.6
},
"testBoolean": {
"curve": "CURVE16",
"type": "bool",
"value": true
}
}
},
"srcSphere:lockedNode": {
"attrs": {
"translateX": {
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"type": "doubleLinear",
"value": 5.0
},
"translateZ": {
"curve": "CURVE18",
"type": "doubleLinear",
"value": 0.0
},
"scaleX": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 1.0
},
"visibility": {
"type": "bool",
"value": true
},
"rotateX": {
"type": "doubleAngle",
"value": 0.0
},
"rotateY": {
"type": "doubleAngle",
"value": 0.0
},
"rotateZ": {
"type": "doubleAngle",
"value": 0.0
},
"scaleZ": {
"type": "double",
"value": 1.0
}
}
}
}
}

View File

@ -0,0 +1,100 @@
//Maya ASCII 2016 scene
//Name: animation.ma
//Last modified: Tue, Aug 09, 2016 08:47:08 AM
//Codeset: 1252
requires maya "2016";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2016";
fileInfo "version" "2016";
fileInfo "cutIdentifier" "201502261600-953408";
fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n";
createNode animCurveTU -n "CURVE1";
rename -uid "07400D46-41EF-56B5-ABE2-FCB3FDC705F2";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
createNode animCurveTU -n "CURVE2";
rename -uid "E2B997BA-4A97-2EF7-C65E-E7BD483688D6";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "CURVE3";
rename -uid "2AF61E8F-4817-A910-3417-6B9823CED36D";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
createNode animCurveTU -n "CURVE4";
rename -uid "61ED901E-4BFA-A417-6F1A-A89854BAE1F9";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
createNode animCurveTA -n "CURVE5";
rename -uid "25E543E0-4233-B654-6DC2-C980CC9ED600";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
createNode animCurveTA -n "CURVE6";
rename -uid "3921DD56-44E6-E6D7-DB1B-C28209F3157E";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
createNode animCurveTL -n "CURVE7";
rename -uid "5EE5D458-498D-AD10-196B-0F99DE4A9F97";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
createNode animCurveTL -n "CURVE8";
rename -uid "81FBC4EF-479F-58C1-D24D-859C16E01BA1";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
createNode animCurveTL -n "CURVE9";
rename -uid "898B5C26-448D-366F-0E63-5082268110FB";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
createNode animCurveTU -n "CURVE10";
rename -uid "139725A4-4C9A-C99F-2E9F-AF91BC3F67E9";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "CURVE11";
rename -uid "1A5281F1-4252-087B-1631-9998C170D33B";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
createNode animCurveTU -n "CURVE12";
rename -uid "3B543491-429F-763A-0075-4EB85B2E50AB";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 10;
createNode animCurveTU -n "CURVE13";
rename -uid "8532CE01-49F8-571C-2D65-A98F3427EBF0";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
createNode animCurveTU -n "CURVE14";
rename -uid "D9767D2E-4DFC-F089-183D-789D8B697CF1";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
createNode animCurveTU -n "CURVE15";
rename -uid "73706920-4309-DAEE-AE70-CAAF4C1D68FB";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
createNode animCurveTU -n "CURVE16";
rename -uid "70D851D4-43F8-72F5-0327-E28AEB0F174C";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "CURVE18";
rename -uid "716232B6-4903-7906-472A-569BBA3146DA";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 15;
// End

View File

@ -0,0 +1,177 @@
{
"metadata": {
"mayaSceneFile": "C:/Users/hovel/Dropbox/git/site-packages/studiolibrary/packages/mutils/tests/data/test_anim.ma",
"angularUnit": "deg",
"ctime": "1518341546",
"endFrame": 10,
"linearUnit": "cm",
"version": "1.0.0",
"user": "Hovel",
"startFrame": 1,
"timeUnit": "film",
"mayaVersion": "2017"
}
,
"objects": {
"srcSphere:offset": {
"attrs": {}
},
"srcSphere:sphere": {
"attrs": {
"testInteger": {
"curve": "CURVE1",
"type": "long",
"value": 5
},
"testProxy": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 4.66
},
"testLimit": {
"type": "double",
"value": 10.0
},
"testConnect": {
"type": "double",
"value": 8.0
},
"testEnum": {
"curve": "CURVE2",
"type": "enum",
"value": 1
},
"scaleX": {
"curve": "CURVE3",
"type": "double",
"value": 0.25
},
"testString": {
"type": "string",
"value": "Hello world"
},
"scaleZ": {
"curve": "CURVE4",
"type": "double",
"value": 0.5
},
"rotateX": {
"curve": "CURVE5",
"type": "doubleAngle",
"value": 45.0
},
"rotateY": {
"type": "doubleAngle",
"value": 50.0
},
"rotateZ": {
"curve": "CURVE6",
"type": "doubleAngle",
"value": 90.0
},
"testStatic": {
"type": "double",
"value": 0.0
},
"translateX": {
"curve": "CURVE7",
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"curve": "CURVE8",
"type": "doubleLinear",
"value": 8.0
},
"translateZ": {
"curve": "CURVE9",
"type": "doubleLinear",
"value": -12.0
},
"visibility": {
"curve": "CURVE10",
"type": "bool",
"value": true
},
"testFloat": {
"curve": "CURVE11",
"type": "double",
"value": 0.666
},
"testAnimated": {
"curve": "CURVE12",
"type": "double",
"value": 0.0
},
"testVectorX": {
"curve": "CURVE13",
"type": "double",
"value": 0.2
},
"testVectorY": {
"curve": "CURVE14",
"type": "double",
"value": 1.4
},
"testVectorZ": {
"curve": "CURVE15",
"type": "double",
"value": 2.6
},
"testBoolean": {
"curve": "CURVE16",
"type": "bool",
"value": true
}
}
},
"srcSphere:lockedNode": {
"attrs": {
"translateX": {
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"type": "doubleLinear",
"value": 5.0
},
"translateZ": {
"curve": "CURVE18",
"type": "doubleLinear",
"value": 0.0
},
"scaleX": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 1.0
},
"visibility": {
"type": "bool",
"value": true
},
"rotateX": {
"type": "doubleAngle",
"value": 0.0
},
"rotateY": {
"type": "doubleAngle",
"value": 0.0
},
"rotateZ": {
"type": "doubleAngle",
"value": 0.0
},
"scaleZ": {
"type": "double",
"value": 1.0
}
}
}
}
}

View File

@ -0,0 +1,748 @@
//Maya ASCII 2014 scene
//Name: test_mirror_tables.ma
//Last modified: Thu, Sep 11, 2014 08:35:27 PM
//Codeset: 1252
requires maya "2014";
requires -nodeType "mentalrayFramebuffer" -nodeType "mentalrayOutputPass" -nodeType "mentalrayRenderPass"
-nodeType "mentalrayUserBuffer" -nodeType "mentalraySubdivApprox" -nodeType "mentalrayCurveApprox"
-nodeType "mentalraySurfaceApprox" -nodeType "mentalrayDisplaceApprox" -nodeType "mentalrayOptions"
-nodeType "mentalrayGlobals" -nodeType "mentalrayItemsList" -nodeType "mentalrayShader"
-nodeType "mentalrayUserData" -nodeType "mentalrayText" -nodeType "mentalrayTessellation"
-nodeType "mentalrayPhenomenon" -nodeType "mentalrayLightProfile" -nodeType "mentalrayVertexColors"
-nodeType "mentalrayIblShape" -nodeType "mapVizShape" -nodeType "mentalrayCCMeshProxy"
-nodeType "cylindricalLightLocator" -nodeType "discLightLocator" -nodeType "rectangularLightLocator"
-nodeType "sphericalLightLocator" -nodeType "abcimport" -nodeType "mia_physicalsun"
-nodeType "mia_physicalsky" -nodeType "mia_material" -nodeType "mia_material_x" -nodeType "mia_roundcorners"
-nodeType "mia_exposure_simple" -nodeType "mia_portal_light" -nodeType "mia_light_surface"
-nodeType "mia_exposure_photographic" -nodeType "mia_exposure_photographic_rev" -nodeType "mia_lens_bokeh"
-nodeType "mia_envblur" -nodeType "mia_ciesky" -nodeType "mia_photometric_light"
-nodeType "mib_texture_vector" -nodeType "mib_texture_remap" -nodeType "mib_texture_rotate"
-nodeType "mib_bump_basis" -nodeType "mib_bump_map" -nodeType "mib_passthrough_bump_map"
-nodeType "mib_bump_map2" -nodeType "mib_lookup_spherical" -nodeType "mib_lookup_cube1"
-nodeType "mib_lookup_cube6" -nodeType "mib_lookup_background" -nodeType "mib_lookup_cylindrical"
-nodeType "mib_texture_lookup" -nodeType "mib_texture_lookup2" -nodeType "mib_texture_filter_lookup"
-nodeType "mib_texture_checkerboard" -nodeType "mib_texture_polkadot" -nodeType "mib_texture_polkasphere"
-nodeType "mib_texture_turbulence" -nodeType "mib_texture_wave" -nodeType "mib_reflect"
-nodeType "mib_refract" -nodeType "mib_transparency" -nodeType "mib_continue" -nodeType "mib_opacity"
-nodeType "mib_twosided" -nodeType "mib_refraction_index" -nodeType "mib_dielectric"
-nodeType "mib_ray_marcher" -nodeType "mib_illum_lambert" -nodeType "mib_illum_phong"
-nodeType "mib_illum_ward" -nodeType "mib_illum_ward_deriv" -nodeType "mib_illum_blinn"
-nodeType "mib_illum_cooktorr" -nodeType "mib_illum_hair" -nodeType "mib_volume"
-nodeType "mib_color_alpha" -nodeType "mib_color_average" -nodeType "mib_color_intensity"
-nodeType "mib_color_interpolate" -nodeType "mib_color_mix" -nodeType "mib_color_spread"
-nodeType "mib_geo_cube" -nodeType "mib_geo_torus" -nodeType "mib_geo_sphere" -nodeType "mib_geo_cone"
-nodeType "mib_geo_cylinder" -nodeType "mib_geo_square" -nodeType "mib_geo_instance"
-nodeType "mib_geo_instance_mlist" -nodeType "mib_geo_add_uv_texsurf" -nodeType "mib_photon_basic"
-nodeType "mib_light_infinite" -nodeType "mib_light_point" -nodeType "mib_light_spot"
-nodeType "mib_light_photometric" -nodeType "mib_cie_d" -nodeType "mib_blackbody"
-nodeType "mib_shadow_transparency" -nodeType "mib_lens_stencil" -nodeType "mib_lens_clamp"
-nodeType "mib_lightmap_write" -nodeType "mib_lightmap_sample" -nodeType "mib_amb_occlusion"
-nodeType "mib_fast_occlusion" -nodeType "mib_map_get_scalar" -nodeType "mib_map_get_integer"
-nodeType "mib_map_get_vector" -nodeType "mib_map_get_color" -nodeType "mib_map_get_transform"
-nodeType "mib_map_get_scalar_array" -nodeType "mib_map_get_integer_array" -nodeType "mib_fg_occlusion"
-nodeType "mib_bent_normal_env" -nodeType "mib_glossy_reflection" -nodeType "mib_glossy_refraction"
-nodeType "builtin_bsdf_architectural" -nodeType "builtin_bsdf_architectural_comp"
-nodeType "builtin_bsdf_carpaint" -nodeType "builtin_bsdf_ashikhmin" -nodeType "builtin_bsdf_lambert"
-nodeType "builtin_bsdf_mirror" -nodeType "builtin_bsdf_phong" -nodeType "contour_store_function"
-nodeType "contour_store_function_simple" -nodeType "contour_contrast_function_levels"
-nodeType "contour_contrast_function_simple" -nodeType "contour_shader_simple" -nodeType "contour_shader_silhouette"
-nodeType "contour_shader_maxcolor" -nodeType "contour_shader_curvature" -nodeType "contour_shader_factorcolor"
-nodeType "contour_shader_depthfade" -nodeType "contour_shader_framefade" -nodeType "contour_shader_layerthinner"
-nodeType "contour_shader_widthfromcolor" -nodeType "contour_shader_widthfromlightdir"
-nodeType "contour_shader_widthfromlight" -nodeType "contour_shader_combi" -nodeType "contour_only"
-nodeType "contour_composite" -nodeType "contour_ps" -nodeType "mi_metallic_paint"
-nodeType "mi_metallic_paint_x" -nodeType "mi_bump_flakes" -nodeType "mi_car_paint_phen"
-nodeType "mi_metallic_paint_output_mixer" -nodeType "mi_car_paint_phen_x" -nodeType "physical_lens_dof"
-nodeType "physical_light" -nodeType "dgs_material" -nodeType "dgs_material_photon"
-nodeType "dielectric_material" -nodeType "dielectric_material_photon" -nodeType "oversampling_lens"
-nodeType "path_material" -nodeType "parti_volume" -nodeType "parti_volume_photon"
-nodeType "transmat" -nodeType "transmat_photon" -nodeType "mip_rayswitch" -nodeType "mip_rayswitch_advanced"
-nodeType "mip_rayswitch_environment" -nodeType "mip_card_opacity" -nodeType "mip_motionblur"
-nodeType "mip_motion_vector" -nodeType "mip_matteshadow" -nodeType "mip_cameramap"
-nodeType "mip_mirrorball" -nodeType "mip_grayball" -nodeType "mip_gamma_gain" -nodeType "mip_render_subset"
-nodeType "mip_matteshadow_mtl" -nodeType "mip_binaryproxy" -nodeType "mip_rayswitch_stage"
-nodeType "mip_fgshooter" -nodeType "mib_ptex_lookup" -nodeType "misss_physical"
-nodeType "misss_physical_phen" -nodeType "misss_fast_shader" -nodeType "misss_fast_shader_x"
-nodeType "misss_fast_shader2" -nodeType "misss_fast_shader2_x" -nodeType "misss_skin_specular"
-nodeType "misss_lightmap_write" -nodeType "misss_lambert_gamma" -nodeType "misss_call_shader"
-nodeType "misss_set_normal" -nodeType "misss_fast_lmap_maya" -nodeType "misss_fast_simple_maya"
-nodeType "misss_fast_skin_maya" -nodeType "misss_fast_skin_phen" -nodeType "misss_fast_skin_phen_d"
-nodeType "misss_mia_skin2_phen" -nodeType "misss_mia_skin2_phen_d" -nodeType "misss_lightmap_phen"
-nodeType "misss_mia_skin2_surface_phen" -nodeType "surfaceSampler" -nodeType "mib_data_bool"
-nodeType "mib_data_int" -nodeType "mib_data_scalar" -nodeType "mib_data_vector"
-nodeType "mib_data_color" -nodeType "mib_data_string" -nodeType "mib_data_texture"
-nodeType "mib_data_shader" -nodeType "mib_data_bool_array" -nodeType "mib_data_int_array"
-nodeType "mib_data_scalar_array" -nodeType "mib_data_vector_array" -nodeType "mib_data_color_array"
-nodeType "mib_data_string_array" -nodeType "mib_data_texture_array" -nodeType "mib_data_shader_array"
-nodeType "mib_data_get_bool" -nodeType "mib_data_get_int" -nodeType "mib_data_get_scalar"
-nodeType "mib_data_get_vector" -nodeType "mib_data_get_color" -nodeType "mib_data_get_string"
-nodeType "mib_data_get_texture" -nodeType "mib_data_get_shader" -nodeType "mib_data_get_shader_bool"
-nodeType "mib_data_get_shader_int" -nodeType "mib_data_get_shader_scalar" -nodeType "mib_data_get_shader_vector"
-nodeType "mib_data_get_shader_color" -nodeType "user_ibl_env" -nodeType "user_ibl_rect"
-nodeType "mia_material_x_passes" -nodeType "mi_metallic_paint_x_passes" -nodeType "mi_car_paint_phen_x_passes"
-nodeType "misss_fast_shader_x_passes" -dataType "byteArray" "Mayatomr" "2014.0 - 3.11.1.4 ";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2014";
fileInfo "version" "2014 x64";
fileInfo "cutIdentifier" "201303010241-864206";
fileInfo "osv" "Microsoft Windows 7 Ultimate Edition, 64-bit Windows 7 Service Pack 1 (Build 7601)\n";
createNode transform -s -n "persp";
setAttr ".v" no;
setAttr ".t" -type "double3" 22.248422999787756 12.500732575524742 10.391306855519792 ;
setAttr ".r" -type "double3" -28.538352729610519 64.599999999998701 -3.7075007778321079e-015 ;
createNode camera -s -n "perspShape" -p "persp";
setAttr -k off ".v" no;
setAttr ".fl" 34.999999999999993;
setAttr ".coi" 27.199165290100083;
setAttr ".imn" -type "string" "persp";
setAttr ".den" -type "string" "persp_depth";
setAttr ".man" -type "string" "persp_mask";
setAttr ".hc" -type "string" "viewSet -p %camera";
createNode transform -s -n "top";
setAttr ".v" no;
setAttr ".t" -type "double3" 0 100.1 0 ;
setAttr ".r" -type "double3" -89.999999999999986 0 0 ;
createNode camera -s -n "topShape" -p "top";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "top";
setAttr ".den" -type "string" "top_depth";
setAttr ".man" -type "string" "top_mask";
setAttr ".hc" -type "string" "viewSet -t %camera";
setAttr ".o" yes;
createNode transform -s -n "front";
setAttr ".v" no;
setAttr ".t" -type "double3" 0 0 100.1 ;
createNode camera -s -n "frontShape" -p "front";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "front";
setAttr ".den" -type "string" "front_depth";
setAttr ".man" -type "string" "front_mask";
setAttr ".hc" -type "string" "viewSet -f %camera";
setAttr ".o" yes;
createNode transform -s -n "side";
setAttr ".v" no;
setAttr ".t" -type "double3" 100.1 0 0 ;
setAttr ".r" -type "double3" 0 89.999999999999986 0 ;
createNode camera -s -n "sideShape" -p "side";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "side";
setAttr ".den" -type "string" "side_depth";
setAttr ".man" -type "string" "side_mask";
setAttr ".hc" -type "string" "viewSet -s %camera";
setAttr ".o" yes;
createNode transform -n "Group";
createNode transform -n "Group2" -p "Group";
createNode transform -n "cubeR" -p "Group2";
setAttr ".t" -type "double3" -5 0 0 ;
createNode mesh -n "cubeRShape" -p "cubeR";
setAttr -k off ".v";
setAttr ".vir" yes;
setAttr ".vif" yes;
setAttr ".uvst[0].uvsn" -type "string" "map1";
setAttr ".cuvs" -type "string" "map1";
setAttr ".dcc" -type "string" "Ambient+Diffuse";
setAttr ".covm[0]" 0 1 1;
setAttr ".cdvm[0]" 0 1 1;
createNode transform -n "cubeL" -p "Group2";
setAttr ".t" -type "double3" 5 -1.7155814546566843 0 ;
createNode mesh -n "cubeLShape" -p "cubeL";
setAttr -k off ".v";
setAttr ".vir" yes;
setAttr ".vif" yes;
setAttr ".uvst[0].uvsn" -type "string" "map1";
setAttr -s 14 ".uvst[0].uvsp[0:13]" -type "float2" 0.375 0 0.625 0 0.375
0.25 0.625 0.25 0.375 0.5 0.625 0.5 0.375 0.75 0.625 0.75 0.375 1 0.625 1 0.875 0
0.875 0.25 0.125 0 0.125 0.25;
setAttr ".cuvs" -type "string" "map1";
setAttr ".dcc" -type "string" "Ambient+Diffuse";
setAttr ".covm[0]" 0 1 1;
setAttr ".cdvm[0]" 0 1 1;
setAttr -s 8 ".vt[0:7]" -0.5 -0.5 0.5 0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5
-0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5;
setAttr -s 12 ".ed[0:11]" 0 1 0 2 3 0 4 5 0 6 7 0 0 2 0 1 3 0 2 4 0
3 5 0 4 6 0 5 7 0 6 0 0 7 1 0;
setAttr -s 6 -ch 24 ".fc[0:5]" -type "polyFaces"
f 4 0 5 -2 -5
mu 0 4 0 1 3 2
f 4 1 7 -3 -7
mu 0 4 2 3 5 4
f 4 2 9 -4 -9
mu 0 4 4 5 7 6
f 4 3 11 -1 -11
mu 0 4 6 7 9 8
f 4 -12 -10 -8 -6
mu 0 4 1 10 11 3
f 4 10 4 6 8
mu 0 4 12 0 2 13;
setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ;
setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ;
setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ;
createNode transform -n "Group3" -p "Group";
setAttr ".t" -type "double3" 0 0 -2.8742420497365515 ;
createNode transform -n "R_cube" -p "Group3";
setAttr ".t" -type "double3" -5 -0.71903628511057072 0 ;
createNode mesh -n "R_cubeShape" -p "R_cube";
setAttr -k off ".v";
setAttr ".vir" yes;
setAttr ".vif" yes;
setAttr ".uvst[0].uvsn" -type "string" "map1";
setAttr -s 14 ".uvst[0].uvsp[0:13]" -type "float2" 0.375 0 0.625 0 0.375
0.25 0.625 0.25 0.375 0.5 0.625 0.5 0.375 0.75 0.625 0.75 0.375 1 0.625 1 0.875 0
0.875 0.25 0.125 0 0.125 0.25;
setAttr ".cuvs" -type "string" "map1";
setAttr ".dcc" -type "string" "Ambient+Diffuse";
setAttr ".covm[0]" 0 1 1;
setAttr ".cdvm[0]" 0 1 1;
setAttr -s 8 ".vt[0:7]" -0.5 -0.5 0.5 0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5
-0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5;
setAttr -s 12 ".ed[0:11]" 0 1 0 2 3 0 4 5 0 6 7 0 0 2 0 1 3 0 2 4 0
3 5 0 4 6 0 5 7 0 6 0 0 7 1 0;
setAttr -s 6 -ch 24 ".fc[0:5]" -type "polyFaces"
f 4 0 5 -2 -5
mu 0 4 0 1 3 2
f 4 1 7 -3 -7
mu 0 4 2 3 5 4
f 4 2 9 -4 -9
mu 0 4 4 5 7 6
f 4 3 11 -1 -11
mu 0 4 6 7 9 8
f 4 -12 -10 -8 -6
mu 0 4 1 10 11 3
f 4 10 4 6 8
mu 0 4 12 0 2 13;
setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ;
setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ;
setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ;
createNode transform -n "L_cube" -p "Group3";
setAttr ".t" -type "double3" 2.1362195941342836 4.3031875715542744 0 ;
setAttr -av ".tx";
setAttr -av ".ty";
createNode mesh -n "L_cubeShape" -p "L_cube";
setAttr -k off ".v";
setAttr ".vir" yes;
setAttr ".vif" yes;
setAttr ".uvst[0].uvsn" -type "string" "map1";
setAttr -s 14 ".uvst[0].uvsp[0:13]" -type "float2" 0.375 0 0.625 0 0.375
0.25 0.625 0.25 0.375 0.5 0.625 0.5 0.375 0.75 0.625 0.75 0.375 1 0.625 1 0.875 0
0.875 0.25 0.125 0 0.125 0.25;
setAttr ".cuvs" -type "string" "map1";
setAttr ".dcc" -type "string" "Ambient+Diffuse";
setAttr ".covm[0]" 0 1 1;
setAttr ".cdvm[0]" 0 1 1;
setAttr -s 8 ".vt[0:7]" -0.5 -0.5 0.5 0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5
-0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5;
setAttr -s 12 ".ed[0:11]" 0 1 0 2 3 0 4 5 0 6 7 0 0 2 0 1 3 0 2 4 0
3 5 0 4 6 0 5 7 0 6 0 0 7 1 0;
setAttr -s 6 -ch 24 ".fc[0:5]" -type "polyFaces"
f 4 0 5 -2 -5
mu 0 4 0 1 3 2
f 4 1 7 -3 -7
mu 0 4 2 3 5 4
f 4 2 9 -4 -9
mu 0 4 4 5 7 6
f 4 3 11 -1 -11
mu 0 4 6 7 9 8
f 4 -12 -10 -8 -6
mu 0 4 1 10 11 3
f 4 10 4 6 8
mu 0 4 12 0 2 13;
setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ;
setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ;
setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ;
createNode mentalrayItemsList -s -n "mentalrayItemsList";
createNode mentalrayGlobals -s -n "mentalrayGlobals";
createNode mentalrayOptions -s -n "miDefaultOptions";
addAttr -ci true -m -sn "stringOptions" -ln "stringOptions" -at "compound" -nc
3;
addAttr -ci true -sn "name" -ln "name" -dt "string" -p "stringOptions";
addAttr -ci true -sn "value" -ln "value" -dt "string" -p "stringOptions";
addAttr -ci true -sn "type" -ln "type" -dt "string" -p "stringOptions";
addAttr -ci true -sn "miSamplesQualityR" -ln "miSamplesQualityR" -dv 0.25 -min 0.01
-max 9999999.9000000004 -smn 0.1 -smx 2 -at "double";
addAttr -ci true -sn "miSamplesQualityG" -ln "miSamplesQualityG" -dv 0.25 -min 0.01
-max 9999999.9000000004 -smn 0.1 -smx 2 -at "double";
addAttr -ci true -sn "miSamplesQualityB" -ln "miSamplesQualityB" -dv 0.25 -min 0.01
-max 9999999.9000000004 -smn 0.1 -smx 2 -at "double";
addAttr -ci true -sn "miSamplesQualityA" -ln "miSamplesQualityA" -dv 0.25 -min 0.01
-max 9999999.9000000004 -smn 0.1 -smx 2 -at "double";
addAttr -ci true -sn "miSamplesMin" -ln "miSamplesMin" -dv 1 -min 0.1 -at "double";
addAttr -ci true -sn "miSamplesMax" -ln "miSamplesMax" -dv 100 -min 0.1 -at "double";
addAttr -ci true -sn "miSamplesErrorCutoffR" -ln "miSamplesErrorCutoffR" -min 0
-max 1 -at "double";
addAttr -ci true -sn "miSamplesErrorCutoffG" -ln "miSamplesErrorCutoffG" -min 0
-max 1 -at "double";
addAttr -ci true -sn "miSamplesErrorCutoffB" -ln "miSamplesErrorCutoffB" -min 0
-max 1 -at "double";
addAttr -ci true -sn "miSamplesErrorCutoffA" -ln "miSamplesErrorCutoffA" -min 0
-max 1 -at "double";
addAttr -ci true -sn "miSamplesPerObject" -ln "miSamplesPerObject" -min 0 -max 1
-at "bool";
addAttr -ci true -sn "miRastShadingSamples" -ln "miRastShadingSamples" -dv 1 -min
0.25 -at "double";
addAttr -ci true -sn "miRastSamples" -ln "miRastSamples" -dv 3 -min 1 -at "long";
addAttr -ci true -sn "miContrastAsColor" -ln "miContrastAsColor" -min 0 -max 1 -at "bool";
addAttr -ci true -sn "miProgMaxTime" -ln "miProgMaxTime" -min 0 -at "long";
addAttr -ci true -sn "miProgSubsampleSize" -ln "miProgSubsampleSize" -dv 4 -min
1 -at "long";
addAttr -ci true -sn "miTraceCameraMotionVectors" -ln "miTraceCameraMotionVectors"
-min 0 -max 1 -at "bool";
addAttr -ci true -sn "miTraceCameraClip" -ln "miTraceCameraClip" -min 0 -max 1 -at "bool";
setAttr -s 45 ".stringOptions";
setAttr ".stringOptions[0].name" -type "string" "rast motion factor";
setAttr ".stringOptions[0].value" -type "string" "1.0";
setAttr ".stringOptions[0].type" -type "string" "scalar";
setAttr ".stringOptions[1].name" -type "string" "rast transparency depth";
setAttr ".stringOptions[1].value" -type "string" "8";
setAttr ".stringOptions[1].type" -type "string" "integer";
setAttr ".stringOptions[2].name" -type "string" "rast useopacity";
setAttr ".stringOptions[2].value" -type "string" "true";
setAttr ".stringOptions[2].type" -type "string" "boolean";
setAttr ".stringOptions[3].name" -type "string" "importon";
setAttr ".stringOptions[3].value" -type "string" "false";
setAttr ".stringOptions[3].type" -type "string" "boolean";
setAttr ".stringOptions[4].name" -type "string" "importon density";
setAttr ".stringOptions[4].value" -type "string" "1.0";
setAttr ".stringOptions[4].type" -type "string" "scalar";
setAttr ".stringOptions[5].name" -type "string" "importon merge";
setAttr ".stringOptions[5].value" -type "string" "0.0";
setAttr ".stringOptions[5].type" -type "string" "scalar";
setAttr ".stringOptions[6].name" -type "string" "importon trace depth";
setAttr ".stringOptions[6].value" -type "string" "0";
setAttr ".stringOptions[6].type" -type "string" "integer";
setAttr ".stringOptions[7].name" -type "string" "importon traverse";
setAttr ".stringOptions[7].value" -type "string" "true";
setAttr ".stringOptions[7].type" -type "string" "boolean";
setAttr ".stringOptions[8].name" -type "string" "shadowmap pixel samples";
setAttr ".stringOptions[8].value" -type "string" "3";
setAttr ".stringOptions[8].type" -type "string" "integer";
setAttr ".stringOptions[9].name" -type "string" "ambient occlusion";
setAttr ".stringOptions[9].value" -type "string" "false";
setAttr ".stringOptions[9].type" -type "string" "boolean";
setAttr ".stringOptions[10].name" -type "string" "ambient occlusion rays";
setAttr ".stringOptions[10].value" -type "string" "256";
setAttr ".stringOptions[10].type" -type "string" "integer";
setAttr ".stringOptions[11].name" -type "string" "ambient occlusion cache";
setAttr ".stringOptions[11].value" -type "string" "false";
setAttr ".stringOptions[11].type" -type "string" "boolean";
setAttr ".stringOptions[12].name" -type "string" "ambient occlusion cache density";
setAttr ".stringOptions[12].value" -type "string" "1.0";
setAttr ".stringOptions[12].type" -type "string" "scalar";
setAttr ".stringOptions[13].name" -type "string" "ambient occlusion cache points";
setAttr ".stringOptions[13].value" -type "string" "64";
setAttr ".stringOptions[13].type" -type "string" "integer";
setAttr ".stringOptions[14].name" -type "string" "irradiance particles";
setAttr ".stringOptions[14].value" -type "string" "false";
setAttr ".stringOptions[14].type" -type "string" "boolean";
setAttr ".stringOptions[15].name" -type "string" "irradiance particles rays";
setAttr ".stringOptions[15].value" -type "string" "256";
setAttr ".stringOptions[15].type" -type "string" "integer";
setAttr ".stringOptions[16].name" -type "string" "irradiance particles interpolate";
setAttr ".stringOptions[16].value" -type "string" "1";
setAttr ".stringOptions[16].type" -type "string" "integer";
setAttr ".stringOptions[17].name" -type "string" "irradiance particles interppoints";
setAttr ".stringOptions[17].value" -type "string" "64";
setAttr ".stringOptions[17].type" -type "string" "integer";
setAttr ".stringOptions[18].name" -type "string" "irradiance particles indirect passes";
setAttr ".stringOptions[18].value" -type "string" "0";
setAttr ".stringOptions[18].type" -type "string" "integer";
setAttr ".stringOptions[19].name" -type "string" "irradiance particles scale";
setAttr ".stringOptions[19].value" -type "string" "1.0";
setAttr ".stringOptions[19].type" -type "string" "scalar";
setAttr ".stringOptions[20].name" -type "string" "irradiance particles env";
setAttr ".stringOptions[20].value" -type "string" "true";
setAttr ".stringOptions[20].type" -type "string" "boolean";
setAttr ".stringOptions[21].name" -type "string" "irradiance particles env rays";
setAttr ".stringOptions[21].value" -type "string" "256";
setAttr ".stringOptions[21].type" -type "string" "integer";
setAttr ".stringOptions[22].name" -type "string" "irradiance particles env scale";
setAttr ".stringOptions[22].value" -type "string" "1";
setAttr ".stringOptions[22].type" -type "string" "integer";
setAttr ".stringOptions[23].name" -type "string" "irradiance particles rebuild";
setAttr ".stringOptions[23].value" -type "string" "true";
setAttr ".stringOptions[23].type" -type "string" "boolean";
setAttr ".stringOptions[24].name" -type "string" "irradiance particles file";
setAttr ".stringOptions[24].value" -type "string" "";
setAttr ".stringOptions[24].type" -type "string" "string";
setAttr ".stringOptions[25].name" -type "string" "geom displace motion factor";
setAttr ".stringOptions[25].value" -type "string" "1.0";
setAttr ".stringOptions[25].type" -type "string" "scalar";
setAttr ".stringOptions[26].name" -type "string" "contrast all buffers";
setAttr ".stringOptions[26].value" -type "string" "true";
setAttr ".stringOptions[26].type" -type "string" "boolean";
setAttr ".stringOptions[27].name" -type "string" "finalgather normal tolerance";
setAttr ".stringOptions[27].value" -type "string" "25.842";
setAttr ".stringOptions[27].type" -type "string" "scalar";
setAttr ".stringOptions[28].name" -type "string" "trace camera clip";
setAttr ".stringOptions[28].value" -type "string" "false";
setAttr ".stringOptions[28].type" -type "string" "boolean";
setAttr ".stringOptions[29].name" -type "string" "unified sampling";
setAttr ".stringOptions[29].value" -type "string" "true";
setAttr ".stringOptions[29].type" -type "string" "boolean";
setAttr ".stringOptions[30].name" -type "string" "samples quality";
setAttr ".stringOptions[30].value" -type "string" "0.5 0.5 0.5 0.5";
setAttr ".stringOptions[30].type" -type "string" "color";
setAttr ".stringOptions[31].name" -type "string" "samples min";
setAttr ".stringOptions[31].value" -type "string" "1.0";
setAttr ".stringOptions[31].type" -type "string" "scalar";
setAttr ".stringOptions[32].name" -type "string" "samples max";
setAttr ".stringOptions[32].value" -type "string" "100.0";
setAttr ".stringOptions[32].type" -type "string" "scalar";
setAttr ".stringOptions[33].name" -type "string" "samples error cutoff";
setAttr ".stringOptions[33].value" -type "string" "0.0 0.0 0.0 0.0";
setAttr ".stringOptions[33].type" -type "string" "color";
setAttr ".stringOptions[34].name" -type "string" "samples per object";
setAttr ".stringOptions[34].value" -type "string" "false";
setAttr ".stringOptions[34].type" -type "string" "boolean";
setAttr ".stringOptions[35].name" -type "string" "progressive";
setAttr ".stringOptions[35].value" -type "string" "false";
setAttr ".stringOptions[35].type" -type "string" "boolean";
setAttr ".stringOptions[36].name" -type "string" "progressive max time";
setAttr ".stringOptions[36].value" -type "string" "0";
setAttr ".stringOptions[36].type" -type "string" "integer";
setAttr ".stringOptions[37].name" -type "string" "progressive subsampling size";
setAttr ".stringOptions[37].value" -type "string" "1";
setAttr ".stringOptions[37].type" -type "string" "integer";
setAttr ".stringOptions[38].name" -type "string" "iray";
setAttr ".stringOptions[38].value" -type "string" "false";
setAttr ".stringOptions[38].type" -type "string" "boolean";
setAttr ".stringOptions[39].name" -type "string" "light relative scale";
setAttr ".stringOptions[39].value" -type "string" "0.31831";
setAttr ".stringOptions[39].type" -type "string" "scalar";
setAttr ".stringOptions[40].name" -type "string" "trace camera motion vectors";
setAttr ".stringOptions[40].value" -type "string" "false";
setAttr ".stringOptions[40].type" -type "string" "boolean";
setAttr ".stringOptions[41].name" -type "string" "ray differentials";
setAttr ".stringOptions[41].value" -type "string" "true";
setAttr ".stringOptions[41].type" -type "string" "boolean";
setAttr ".stringOptions[42].name" -type "string" "environment lighting mode";
setAttr ".stringOptions[42].value" -type "string" "off";
setAttr ".stringOptions[42].type" -type "string" "string";
setAttr ".stringOptions[43].name" -type "string" "environment lighting quality";
setAttr ".stringOptions[43].value" -type "string" "0.167";
setAttr ".stringOptions[43].type" -type "string" "scalar";
setAttr ".stringOptions[44].name" -type "string" "environment lighting shadow";
setAttr ".stringOptions[44].value" -type "string" "transparent";
setAttr ".stringOptions[44].type" -type "string" "string";
createNode mentalrayFramebuffer -s -n "miDefaultFramebuffer";
createNode lightLinker -s -n "lightLinker1";
setAttr -s 2 ".lnk";
setAttr -s 2 ".slnk";
createNode displayLayerManager -n "layerManager";
createNode displayLayer -n "defaultLayer";
createNode renderLayerManager -n "renderLayerManager";
createNode renderLayer -n "defaultRenderLayer";
setAttr ".g" yes;
createNode polyCube -n "polyCube1";
setAttr ".cuv" 4;
createNode script -n "uiConfigurationScriptNode";
setAttr ".b" -type "string" (
"// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n"
+ " -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n"
+ " -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n"
+ " -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n"
+ "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n"
+ " -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n"
+ " -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n"
+ " -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n"
+ " -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n"
+ " $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n"
+ " -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n"
+ " -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n"
+ " -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n"
+ " -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n"
+ " -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n"
+ " -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n"
+ " -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n"
+ " modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n"
+ " -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n"
+ " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n"
+ " -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n"
+ " -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n"
+ " -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n"
+ " -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n"
+ " -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n"
+ " -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n"
+ " -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n"
+ " -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n"
+ " -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n"
+ " -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n"
+ " -showUpstreamCurves 1\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n"
+ " -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n"
+ " -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n"
+ " -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n"
+ " -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n"
+ " -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n"
+ "\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n"
+ " -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n"
+ " -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n"
+ " -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"sequenceEditorPanel\" -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n"
+ " -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperGraphPanel\" -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n"
+ " -showConnectionToSelected 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n"
+ " -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperShadePanel\" -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"visorPanel\" -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif (\"\" == $panelName) {\n"
+ "\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -ignoreAssets 1\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -keyReleaseCommand \"nodeEdKeyReleaseCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -island 0\n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n"
+ " -syncedSelection 1\n -extendToShapes 1\n $editorName;;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -ignoreAssets 1\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -keyReleaseCommand \"nodeEdKeyReleaseCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -island 0\n -showNamespace 1\n"
+ " -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -syncedSelection 1\n -extendToShapes 1\n $editorName;;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"createNodePanel\" -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Texture Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"polyTexturePlacementPanel\" -l (localizedPanelLabel(\"UV Texture Editor\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Texture Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"renderWindowPanel\" -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"blendShapePanel\" (localizedPanelLabel(\"Blend Shape\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tblendShapePanel -unParent -l (localizedPanelLabel(\"Blend Shape\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n"
+ "\t\tblendShapePanel -edit -l (localizedPanelLabel(\"Blend Shape\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynRelEdPanel\" -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"relationshipPanel\" -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"referenceEditorPanel\" -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"componentEditorPanel\" -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynPaintScriptedPanelType\" -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"scriptEditorPanel\" -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\tif ($useSceneConfig) {\n\t\tscriptedPanel -e -to $panelName;\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n"
+ "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 1\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 8192\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -maxConstantTransparency 1\\n -rendererName \\\"base_OpenGL_Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n"
+ "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 1\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 8192\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -maxConstantTransparency 1\\n -rendererName \\\"base_OpenGL_Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n"
+ "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n setFocus `paneLayout -q -p1 $gMainPane`;\n sceneUIReplacement -deleteRemaining;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n");
setAttr ".st" 3;
createNode script -n "sceneConfigurationScriptNode";
setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 ";
setAttr ".st" 6;
createNode animCurveTU -n "L_cube_visibility";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr ".ktv[0]" 3 1;
setAttr ".kot[0]" 5;
createNode animCurveTL -n "L_cube_translateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 3 5;
createNode animCurveTL -n "L_cube_translateY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 3 2.3775028017191246;
createNode animCurveTL -n "L_cube_translateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 3 0;
createNode animCurveTA -n "L_cube_rotateX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 3 0;
createNode animCurveTA -n "L_cube_rotateY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 3 0;
createNode animCurveTA -n "L_cube_rotateZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 3 0;
createNode animCurveTU -n "L_cube_scaleX";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 3 1;
createNode animCurveTU -n "L_cube_scaleY";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 3 1;
createNode animCurveTU -n "L_cube_scaleZ";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr ".ktv[0]" 3 1;
select -ne :time1;
setAttr -av -k on ".cch";
setAttr -k on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -k on ".o" 12;
setAttr ".unw" 12;
select -ne :renderPartition;
setAttr -k on ".cch";
setAttr -k on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 2 ".st";
setAttr -k on ".an";
setAttr -k on ".pt";
select -ne :initialShadingGroup;
setAttr -k on ".cch";
setAttr -k on ".ihi";
setAttr -av -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 4 ".dsm";
setAttr -k on ".mwc";
setAttr -k on ".an";
setAttr -k on ".il";
setAttr -k on ".vo";
setAttr -k on ".eo";
setAttr -k on ".fo";
setAttr -k on ".epo";
setAttr ".ro" yes;
setAttr -cb on ".mimt";
setAttr -cb on ".miop";
setAttr -cb on ".mise";
setAttr -cb on ".mism";
setAttr -cb on ".mice";
setAttr -av -cb on ".micc";
setAttr -cb on ".mica";
setAttr -cb on ".micw";
setAttr -cb on ".mirw";
select -ne :initialParticleSE;
setAttr -k on ".cch";
setAttr -k on ".ihi";
setAttr -av -k on ".nds";
setAttr -cb on ".bnm";
setAttr -k on ".mwc";
setAttr -k on ".an";
setAttr -k on ".il";
setAttr -k on ".vo";
setAttr -k on ".eo";
setAttr -k on ".fo";
setAttr -k on ".epo";
setAttr ".ro" yes;
setAttr -cb on ".mimt";
setAttr -cb on ".miop";
setAttr -cb on ".mise";
setAttr -cb on ".mism";
setAttr -cb on ".mice";
setAttr -av -cb on ".micc";
setAttr -cb on ".mica";
setAttr -av -cb on ".micw";
setAttr -cb on ".mirw";
select -ne :defaultShaderList1;
setAttr -k on ".cch";
setAttr -k on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 2 ".s";
select -ne :postProcessList1;
setAttr -k on ".cch";
setAttr -k on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 2 ".p";
select -ne :defaultRenderingList1;
select -ne :renderGlobalsList1;
setAttr -k on ".cch";
setAttr -k on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
select -ne :defaultResolution;
setAttr ".pa" 1;
select -ne :defaultLightSet;
setAttr -k on ".cch";
setAttr -k on ".ihi";
setAttr -k on ".nds";
setAttr -k on ".bnm";
setAttr -k on ".mwc";
setAttr -k on ".an";
setAttr -k on ".il";
setAttr -k on ".vo";
setAttr -k on ".eo";
setAttr -k on ".fo";
setAttr -k on ".epo";
setAttr -k on ".ro" yes;
select -ne :defaultObjectSet;
setAttr ".ro" yes;
select -ne :hardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr ".ctrs" 256;
setAttr ".btrs" 512;
setAttr -k off ".fbfm";
setAttr -k off -cb on ".ehql";
setAttr -k off -cb on ".eams";
setAttr -k off -cb on ".eeaa";
setAttr -k off -cb on ".engm";
setAttr -k off -cb on ".mes";
setAttr -k off -cb on ".emb";
setAttr -av -k off -cb on ".mbbf";
setAttr -k off -cb on ".mbs";
setAttr -k off -cb on ".trm";
setAttr -k off -cb on ".tshc";
setAttr -k off ".enpt";
setAttr -k off -cb on ".clmt";
setAttr -k off -cb on ".tcov";
setAttr -k off -cb on ".lith";
setAttr -k off -cb on ".sobc";
setAttr -k off -cb on ".cuth";
setAttr -k off -cb on ".hgcd";
setAttr -k off -cb on ".hgci";
setAttr -k off -cb on ".mgcs";
setAttr -k off -cb on ".twa";
setAttr -k off -cb on ".twz";
setAttr -k on ".hwcc";
setAttr -k on ".hwdp";
setAttr -k on ".hwql";
setAttr -k on ".hwfr";
select -ne :hardwareRenderingGlobals;
setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ;
setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 ;
select -ne :defaultHardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -k on ".rp";
setAttr -k on ".cai";
setAttr -k on ".coi";
setAttr -cb on ".bc";
setAttr -av -k on ".bcb";
setAttr -av -k on ".bcg";
setAttr -av -k on ".bcr";
setAttr -k on ".ei";
setAttr -k on ".ex";
setAttr -av -k on ".es";
setAttr -av -k on ".ef";
setAttr -av -k on ".bf";
setAttr -k on ".fii";
setAttr -av -k on ".sf";
setAttr -k on ".gr";
setAttr -k on ".li";
setAttr -k on ".ls";
setAttr -k on ".mb";
setAttr -k on ".ti";
setAttr -k on ".txt";
setAttr -k on ".mpr";
setAttr -k on ".wzd";
setAttr ".fn" -type "string" "im";
setAttr -k on ".if";
setAttr ".res" -type "string" "ntsc_4d 646 485 1.333";
setAttr -k on ".as";
setAttr -k on ".ds";
setAttr -k on ".lm";
setAttr -k on ".fir";
setAttr -k on ".aap";
setAttr -k on ".gh";
setAttr -cb on ".sd";
connectAttr "polyCube1.out" "cubeRShape.i";
connectAttr "L_cube_visibility.o" "L_cube.v";
connectAttr "L_cube_translateX.o" "L_cube.tx";
connectAttr "L_cube_translateY.o" "L_cube.ty";
connectAttr "L_cube_translateZ.o" "L_cube.tz";
connectAttr "L_cube_rotateX.o" "L_cube.rx";
connectAttr "L_cube_rotateY.o" "L_cube.ry";
connectAttr "L_cube_rotateZ.o" "L_cube.rz";
connectAttr "L_cube_scaleX.o" "L_cube.sx";
connectAttr "L_cube_scaleY.o" "L_cube.sy";
connectAttr "L_cube_scaleZ.o" "L_cube.sz";
connectAttr ":mentalrayGlobals.msg" ":mentalrayItemsList.glb";
connectAttr ":miDefaultOptions.msg" ":mentalrayItemsList.opt" -na;
connectAttr ":miDefaultFramebuffer.msg" ":mentalrayItemsList.fb" -na;
connectAttr ":miDefaultOptions.msg" ":mentalrayGlobals.opt";
connectAttr ":miDefaultFramebuffer.msg" ":mentalrayGlobals.fb";
relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
connectAttr "layerManager.dli[0]" "defaultLayer.id";
connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid";
connectAttr "cubeRShape.iog" ":initialShadingGroup.dsm" -na;
connectAttr "cubeLShape.iog" ":initialShadingGroup.dsm" -na;
connectAttr "R_cubeShape.iog" ":initialShadingGroup.dsm" -na;
connectAttr "L_cubeShape.iog" ":initialShadingGroup.dsm" -na;
connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na;
// End of test_mirror_tables.ma

View File

@ -0,0 +1,797 @@
//Maya ASCII 2017 scene
//Name: test_non_unique_names.ma
//Last modified: Sat, Feb 04, 2017 11:58:36 PM
//Codeset: 1252
file -rdi 1 -ns "srcSphere" -rfn "srcSphereRN" -typ "mayaAscii" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
file -r -ns "srcSphere" -dr 1 -rfn "srcSphereRN" -typ "mayaAscii" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
requires maya "2017";
requires "stereoCamera" "10.0";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2017";
fileInfo "version" "2017";
fileInfo "cutIdentifier" "201606150345-997974";
fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n";
createNode transform -s -n "persp";
rename -uid "DDAA8254-4753-78D5-6AAE-159C81EDC3F9";
setAttr ".v" no;
setAttr ".t" -type "double3" -123.17900131274617 74.628663135067598 32.661032572240735 ;
setAttr ".r" -type "double3" -30.338352727390017 -72.599999999996271 0 ;
createNode camera -s -n "perspShape" -p "persp";
rename -uid "27F094E9-49EE-F1D7-052F-24B6AD29870D";
setAttr -k off ".v" no;
setAttr ".fl" 34.999999999999993;
setAttr ".coi" 150.42418693917088;
setAttr ".imn" -type "string" "persp";
setAttr ".den" -type "string" "persp_depth";
setAttr ".man" -type "string" "persp_mask";
setAttr ".hc" -type "string" "viewSet -p %camera";
createNode transform -s -n "top";
rename -uid "E6DDBE5E-414D-598C-1652-DDA9896B2C18";
setAttr ".v" no;
setAttr ".t" -type "double3" 0 100.1 0 ;
setAttr ".r" -type "double3" -89.999999999999986 0 0 ;
createNode camera -s -n "topShape" -p "top";
rename -uid "BA963D24-4FDB-8DA9-9320-68A3D19A3033";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "top";
setAttr ".den" -type "string" "top_depth";
setAttr ".man" -type "string" "top_mask";
setAttr ".hc" -type "string" "viewSet -t %camera";
setAttr ".o" yes;
createNode transform -s -n "front";
rename -uid "56938C00-4FC9-9BB5-7BA8-22B2465F51AC";
setAttr ".v" no;
setAttr ".t" -type "double3" 2.0350096678112575 0.39361762628711539 100.1 ;
createNode camera -s -n "frontShape" -p "front";
rename -uid "25B2B187-477B-D3AA-AC82-5C9C5B6BD4DA";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 61.766282942468983;
setAttr ".imn" -type "string" "front";
setAttr ".den" -type "string" "front_depth";
setAttr ".man" -type "string" "front_mask";
setAttr ".hc" -type "string" "viewSet -f %camera";
setAttr ".o" yes;
createNode transform -s -n "side";
rename -uid "D0276B16-4FEE-5998-5D3D-E7AA9047C23C";
setAttr ".v" no;
setAttr ".t" -type "double3" 100.1 0 0 ;
setAttr ".r" -type "double3" 0 89.999999999999986 0 ;
createNode camera -s -n "sideShape" -p "side";
rename -uid "52D7FE6B-4C52-8DC6-B4BD-73870EB09DB0";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "side";
setAttr ".den" -type "string" "side_depth";
setAttr ".man" -type "string" "side_mask";
setAttr ".hc" -type "string" "viewSet -s %camera";
setAttr ".o" yes;
createNode transform -n "group";
rename -uid "E0D02B96-4B6D-0116-B834-3A8B17F2574B";
addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message";
createNode transform -n "offset" -p "group";
rename -uid "53E00748-4BAE-DC3E-72DA-C39AC1FABCA1";
setAttr -l on ".v";
setAttr -l on ".tx";
setAttr -l on ".ty";
setAttr -l on ".tz";
setAttr -l on ".rx";
setAttr -l on ".ry";
setAttr -l on ".rz";
setAttr -l on ".sx";
setAttr -l on ".sy";
setAttr -l on ".sz";
createNode transform -n "lockedNode" -p "|group|offset";
rename -uid "C77C5FBF-4DA8-7E08-F3BE-AC9D0D00D0FC";
createNode transform -n "sphere" -p "|group|offset|lockedNode";
rename -uid "8066C85B-4E94-344B-173A-698197FBAF5E";
addAttr -ci true -sn "testVector" -ln "testVector" -at "double3" -nc 3;
addAttr -ci true -sn "testVectorX" -ln "testVectorX" -at "double" -p "testVector";
addAttr -ci true -sn "testVectorY" -ln "testVectorY" -at "double" -p "testVector";
addAttr -ci true -sn "testVectorZ" -ln "testVectorZ" -at "double" -p "testVector";
addAttr -ci true -uac -sn "testColor" -ln "testColor" -at "float3" -nc 3;
addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor";
addAttr -ci true -sn "testGreen" -ln "testGreen" -at "float" -p "testColor";
addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor";
addAttr -ci true -sn "testString" -ln "testString" -dt "string";
addAttr -ci true -sn "testEnum" -ln "testEnum" -min 0 -max 2 -en "Apple:Lemon:Banana"
-at "enum";
addAttr -ci true -sn "testFloat" -ln "testFloat" -min 0 -max 10 -at "double";
addAttr -ci true -sn "testBoolean" -ln "testBoolean" -min 0 -max 1 -at "bool";
addAttr -ci true -sn "testInteger" -ln "testInteger" -min 0 -max 10 -at "long";
addAttr -ci true -sn "testLocked" -ln "testLocked" -min 0 -max 10 -at "double";
addAttr -ci true -sn "testHidden" -ln "testHidden" -min 0 -max 10 -at "double";
addAttr -ci true -sn "testConnect" -ln "testConnect" -at "double";
addAttr -ci true -sn "testAnimated" -ln "testAnimated" -at "double";
addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message";
addAttr -ci true -sn "testLimit" -ln "testLimit" -min -10 -max 10 -at "double";
addAttr -ci true -sn "testNonKeyable" -ln "testNonKeyable" -at "double";
setAttr -k on ".testVector";
setAttr -k on ".testVectorX";
setAttr -k on ".testVectorY";
setAttr -k on ".testVectorZ";
setAttr -k on ".testString";
setAttr -k on ".testEnum" 2;
setAttr -k on ".testFloat";
setAttr -k on ".testBoolean";
setAttr -k on ".testInteger";
setAttr -l on -k on ".testLocked";
setAttr -k on ".testConnect";
setAttr -k on ".testAnimated";
setAttr -k on ".testLimit";
setAttr -cb on ".testNonKeyable";
createNode mesh -n "sphereShape" -p "|group|offset|lockedNode|sphere";
rename -uid "31DEDCCA-419C-842A-2745-C2BADE15FAD3";
setAttr -k off ".v";
setAttr ".vir" yes;
setAttr ".vif" yes;
setAttr ".uvst[0].uvsn" -type "string" "map1";
setAttr ".cuvs" -type "string" "map1";
setAttr ".dcc" -type "string" "Ambient+Diffuse";
setAttr ".covm[0]" 0 1 1;
setAttr ".cdvm[0]" 0 1 1;
setAttr ".ugsdt" no;
setAttr ".vnm" 0;
createNode transform -n "group1";
rename -uid "3BD55A1F-4D3B-0600-E76E-A3B8DDB90A9E";
addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message";
createNode transform -n "offset" -p "group1";
rename -uid "DB0A4EF6-440F-3E67-85E1-F6A0FC8B3359";
setAttr -l on ".v";
setAttr -l on ".tx";
setAttr -l on ".ty";
setAttr -l on ".tz";
setAttr -l on ".rx";
setAttr -l on ".ry";
setAttr -l on ".rz";
setAttr -l on ".sx";
setAttr -l on ".sy";
setAttr -l on ".sz";
createNode transform -n "lockedNode" -p "|group1|offset";
rename -uid "425F552C-4C6B-094E-065C-43BF75DE749F";
createNode transform -n "sphere" -p "|group1|offset|lockedNode";
rename -uid "D9F1C1EE-4A3B-CC6C-E2F6-D0AD5B44CB13";
addAttr -ci true -sn "testVector" -ln "testVector" -at "double3" -nc 3;
addAttr -ci true -sn "testVectorX" -ln "testVectorX" -at "double" -p "testVector";
addAttr -ci true -sn "testVectorY" -ln "testVectorY" -at "double" -p "testVector";
addAttr -ci true -sn "testVectorZ" -ln "testVectorZ" -at "double" -p "testVector";
addAttr -ci true -uac -sn "testColor" -ln "testColor" -at "float3" -nc 3;
addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor";
addAttr -ci true -sn "testGreen" -ln "testGreen" -at "float" -p "testColor";
addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor";
addAttr -ci true -sn "testString" -ln "testString" -dt "string";
addAttr -ci true -sn "testEnum" -ln "testEnum" -min 0 -max 2 -en "Apple:Lemon:Banana"
-at "enum";
addAttr -ci true -sn "testFloat" -ln "testFloat" -min 0 -max 10 -at "double";
addAttr -ci true -sn "testBoolean" -ln "testBoolean" -min 0 -max 1 -at "bool";
addAttr -ci true -sn "testInteger" -ln "testInteger" -min 0 -max 10 -at "long";
addAttr -ci true -sn "testLocked" -ln "testLocked" -min 0 -max 10 -at "double";
addAttr -ci true -sn "testHidden" -ln "testHidden" -min 0 -max 10 -at "double";
addAttr -ci true -sn "testConnect" -ln "testConnect" -at "double";
addAttr -ci true -sn "testAnimated" -ln "testAnimated" -at "double";
addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message";
setAttr -k on ".testVector";
setAttr -k on ".testVectorX";
setAttr -k on ".testVectorY";
setAttr -k on ".testVectorZ";
setAttr -k on ".testString";
setAttr -k on ".testEnum" 2;
setAttr -k on ".testFloat";
setAttr -k on ".testBoolean";
setAttr -k on ".testInteger";
setAttr -l on -k on ".testLocked";
setAttr -k on ".testConnect";
setAttr -k on ".testAnimated";
createNode mesh -n "sphereShape" -p "|group1|offset|lockedNode|sphere";
rename -uid "4D2BA5B2-42B9-056B-13C8-D285A9FBD044";
setAttr -k off ".v";
setAttr ".vir" yes;
setAttr ".vif" yes;
setAttr ".uvst[0].uvsn" -type "string" "map1";
setAttr ".cuvs" -type "string" "map1";
setAttr ".dcc" -type "string" "Ambient+Diffuse";
setAttr ".covm[0]" 0 1 1;
setAttr ".cdvm[0]" 0 1 1;
setAttr ".ugsdt" no;
setAttr ".vnm" 0;
createNode lightLinker -s -n "lightLinker1";
rename -uid "548C9C33-497A-C6D1-8D06-98B89D3D62D8";
setAttr -s 2 ".lnk";
setAttr -s 2 ".slnk";
createNode displayLayerManager -n "layerManager";
rename -uid "82379A41-4D50-EE15-B9ED-688E288FD51B";
createNode displayLayer -n "defaultLayer";
rename -uid "3283B76B-49A2-D9EB-14C2-4C827D163B8F";
createNode renderLayerManager -n "renderLayerManager";
rename -uid "72986805-4CFF-9FD5-4A52-5F9D8DBB9B59";
createNode renderLayer -n "defaultRenderLayer";
rename -uid "F62FFC33-4D56-2BEB-B85F-A6A272377F4C";
setAttr ".g" yes;
createNode script -n "sceneConfigurationScriptNode";
rename -uid "7FD6986F-4794-3763-3E36-59852AA535BF";
setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 ";
setAttr ".st" 6;
createNode reference -n "srcSphereRN";
rename -uid "236A7996-4E4A-8901-858E-DDBE7FC55F9A";
setAttr -s 16 ".phl";
setAttr ".phl[1]" 0;
setAttr ".phl[2]" 0;
setAttr ".phl[3]" 0;
setAttr ".phl[4]" 0;
setAttr ".phl[5]" 0;
setAttr ".phl[6]" 0;
setAttr ".phl[7]" 0;
setAttr ".phl[8]" 0;
setAttr ".phl[9]" 0;
setAttr ".phl[10]" 0;
setAttr ".phl[11]" 0;
setAttr ".phl[12]" 0;
setAttr ".phl[13]" 0;
setAttr ".phl[14]" 0;
setAttr ".phl[15]" 0;
setAttr ".phl[16]" 0;
setAttr ".ed" -type "dataReferenceEdits"
"srcSphereRN"
"srcSphereRN" 0
"srcSphereRN" 43
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "visibility" " 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translate" " -type \"double3\" 0 5 0"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotate" " -type \"double3\" 0 0 0"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "scale" " -type \"double3\" 1 1 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"translate" " -type \"double3\" 0 8 -12"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"translateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotate" " -type \"double3\" 45 50 90"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotateX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotateY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"rotateZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scale" " -type \"double3\" 0.25 4.66 0.5"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scaleX" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scaleY" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"scaleZ" " -av"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVector" " -k 1 -type \"double3\" 0.2 1.4 2.6"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVector" " -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVectorX" " -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVectorY" " -av -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testVectorZ" " -k 1"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testColor" " -type \"float3\" 0.18000000999999999 0.60000001999999997 0.18000000999999999"
2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere"
"testString" " -k 1 -type \"string\" \"Hello world\""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.translateZ"
"srcSphereRN.placeHolderList[1]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorX"
"srcSphereRN.placeHolderList[2]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorY"
"srcSphereRN.placeHolderList[3]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorZ"
"srcSphereRN.placeHolderList[4]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testEnum"
"srcSphereRN.placeHolderList[5]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testFloat"
"srcSphereRN.placeHolderList[6]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testBoolean"
"srcSphereRN.placeHolderList[7]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testInteger"
"srcSphereRN.placeHolderList[8]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateY"
"srcSphereRN.placeHolderList[9]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateX"
"srcSphereRN.placeHolderList[10]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateZ"
"srcSphereRN.placeHolderList[11]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateX"
"srcSphereRN.placeHolderList[12]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateZ"
"srcSphereRN.placeHolderList[13]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleX"
"srcSphereRN.placeHolderList[14]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleZ"
"srcSphereRN.placeHolderList[15]" ""
5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.visibility"
"srcSphereRN.placeHolderList[16]" "";
setAttr ".ptag" -type "string" "";
lockNode -l 1 ;
createNode animCurveTU -n "srcSphere:sphere_visibility";
rename -uid "25B7A44D-46CB-EE48-EBD0-1E9ADC4681DE";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "srcSphere:sphere_translateX";
rename -uid "D13498C8-4E35-AB33-9DA8-D0B1AB09A06C";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
createNode animCurveTL -n "srcSphere:sphere_translateY";
rename -uid "30A68F0C-473D-C3BD-68EE-1A97C506CB8A";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
createNode animCurveTL -n "srcSphere:sphere_translateZ";
rename -uid "591EE7E4-471A-2A88-0F1D-48A0CA2F575E";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
createNode animCurveTA -n "srcSphere:sphere_rotateX";
rename -uid "7DAF1ACE-4BF1-C12E-BD6B-A5A56B35773F";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
createNode animCurveTA -n "srcSphere:sphere_rotateZ";
rename -uid "86BF49D8-4C94-99EC-28F6-2EA727F428F4";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
createNode animCurveTU -n "srcSphere:sphere_scaleX";
rename -uid "9C679B5C-4862-3674-978A-D484AEE966E3";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
createNode animCurveTU -n "srcSphere:sphere_scaleZ";
rename -uid "F8AEC957-4DD2-855F-9D56-69B153BA1F5C";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
createNode animCurveTU -n "srcSphere:sphere_testVectorX";
rename -uid "D3E850E5-45D3-3797-2452-828BC0F88BF5";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
createNode animCurveTU -n "srcSphere:sphere_testVectorY";
rename -uid "411854EA-4881-2F52-8A0C-DCB3502416B8";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
createNode animCurveTU -n "srcSphere:sphere_testVectorZ";
rename -uid "502BF718-4050-BBE2-991E-77BE7C123CAA";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
createNode animCurveTU -n "srcSphere:sphere_testEnum";
rename -uid "8CF62262-46FF-9062-6DED-C4AA2B2CCE2E";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "srcSphere:sphere_testFloat";
rename -uid "498C6886-4FDB-563B-723A-A8A9474E9570";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
createNode animCurveTU -n "srcSphere:sphere_testBoolean";
rename -uid "143ED449-4120-35D8-6BC9-A98C802C5CA3";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "srcSphere:sphere_testInteger";
rename -uid "E96551ED-459B-4C0A-CDDA-44A263050285";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
createNode animCurveTL -n "dstSphere:sphere_translateY";
rename -uid "20E5403E-4B3D-0674-161A-91A6924D0559";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 8 10 8;
createNode animCurveTL -n "lockedNode_translateZ";
rename -uid "B63F154D-4C27-9666-D375-138ED9037730";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 15;
createNode animCurveTU -n "sphere_testInteger";
rename -uid "97499943-4659-497E-3F90-61B92034A6C4";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 5 10 5;
createNode animCurveTU -n "sphere_testEnum";
rename -uid "B071F69A-4FC0-DA63-9FFE-4A94AA5979B4";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "sphere_translateX";
rename -uid "0768FFC8-4267-269E-B230-439D662AADFE";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 0;
createNode animCurveTL -n "sphere_translateZ";
rename -uid "4C1A73F4-461D-F4BA-D731-D4B281F14C48";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292;
createNode animCurveTU -n "sphere_testFloat";
rename -uid "4CE18D96-4C85-2A00-A762-A7A94AE1606A";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666;
createNode animCurveTU -n "sphere_scaleX";
rename -uid "866CDCF6-4F4D-103D-63EC-729E61A6D480";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792;
createNode animCurveTU -n "sphere_testVectorZ";
rename -uid "AEBEFB59-4872-F7FD-CADC-EAA305119536";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6;
createNode animCurveTU -n "sphere_scaleZ";
rename -uid "EFB25E16-44ED-32F9-943A-ED8A845F4D39";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585;
createNode animCurveTA -n "sphere_rotateX";
rename -uid "19C44183-45EF-1073-AE60-D0AC778E182D";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841;
createNode animCurveTU -n "sphere_testVectorY";
rename -uid "B55F1B53-48D5-A874-A1E0-C0B71E545F06";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4;
createNode animCurveTA -n "sphere_rotateZ";
rename -uid "07252CD5-4363-F661-068A-66B3EF78D16A";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096;
createNode animCurveTU -n "sphere_visibility";
rename -uid "F78C1BCC-435D-D057-01ED-D1B15A6BE60B";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTU -n "sphere_testVectorX";
rename -uid "9FAF8611-4755-AE77-1A60-4FA5FF5469C7";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2;
createNode animCurveTU -n "sphere_testBoolean";
rename -uid "55CCB691-471C-1916-5F57-D78DFC7CE524";
setAttr ".tan" 9;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 1 10 1;
setAttr -s 2 ".kot[0:1]" 5 5;
createNode animCurveTL -n "lockedNode_translateZ1";
rename -uid "12CDCBC7-41D0-13DA-F2E6-04B9FC31CE19";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 15;
createNode renderLayerManager -n "dstSphere:renderLayerManager";
rename -uid "88F08ACE-4F04-45CD-ED01-1DAC296CF287";
createNode renderLayer -n "dstSphere:defaultRenderLayer";
rename -uid "97E29F6D-495A-42D8-7A95-BDADCBE099F0";
setAttr ".g" yes;
createNode animCurveTU -n "sphere_testAnimated";
rename -uid "A38AFFD7-4BB6-7949-58F0-1DA330C26C51";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 10;
createNode polySphere -n "srcPolySphere";
rename -uid "9DC42CA0-4D9A-CAA0-B1D3-56A34DA33DDA";
setAttr ".r" 4.1417806816985845;
createNode animCurveTU -n "sphere_testAnimated1";
rename -uid "4785293F-43CF-7E0E-6273-0A9CE9B8C052";
setAttr ".tan" 18;
setAttr ".wgt" no;
setAttr -s 2 ".ktv[0:1]" 1 0 10 10;
createNode polySphere -n "srcPolySphere1";
rename -uid "22D3CF49-4D45-E0C1-99E9-98949F65BC37";
setAttr ".r" 4.1417806816985845;
createNode shapeEditorManager -n "shapeEditorManager";
rename -uid "4E61DE05-49DE-4ABA-D703-36AE442A88AD";
createNode poseInterpolatorManager -n "poseInterpolatorManager";
rename -uid "A2E4EC6B-4BE3-25B3-9E39-BCB3468204D9";
createNode script -n "uiConfigurationScriptNode";
rename -uid "5DFFAA9C-4881-F956-58D0-CE9DBC5970AC";
setAttr ".b" -type "string" (
"// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n"
+ " -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n"
+ " -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n"
+ " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n"
+ " -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n"
+ " -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n"
+ " -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n"
+ " modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n"
+ " -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n"
+ " -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n"
+ " -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n"
+ " -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n"
+ " -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n"
+ " -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n"
+ " -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n"
+ " -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n"
+ " -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n"
+ " -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n"
+ " -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n"
+ " -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n"
+ " -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n"
+ " -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n"
+ " -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 2058\n -height 1022\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n"
+ "\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n"
+ " -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n"
+ " -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 2058\n -height 1022\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n"
+ " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n"
+ " -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n"
+ " -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n"
+ " -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n"
+ " -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n"
+ " -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n"
+ " -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n"
+ "\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n"
+ " -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n"
+ " -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n"
+ " -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 1\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 0.96\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n"
+ " -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n -valueLinesToggle 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n"
+ " -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n"
+ " -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 1\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 0.96\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n"
+ " -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n -valueLinesToggle 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n"
+ " -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n"
+ " -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n"
+ " -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n"
+ " -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n"
+ " -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n"
+ " -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"timeEditorPanel\" -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n"
+ "\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n"
+ " -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"sequenceEditorPanel\" -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n"
+ "\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperGraphPanel\" -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n"
+ " hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n"
+ " -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n"
+ " -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"visorPanel\" -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"createNodePanel\" -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"polyTexturePlacementPanel\" -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"renderWindowPanel\" -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tshapePanel -unParent -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tposePanel -unParent -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels ;\n"
+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynRelEdPanel\" -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"relationshipPanel\" -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"referenceEditorPanel\" -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"componentEditorPanel\" -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynPaintScriptedPanelType\" -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"scriptEditorPanel\" -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"profilerPanel\" -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"contentBrowserPanel\" -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"Stereo\" -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels `;\nstring $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n"
+ " -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n"
+ " -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n"
+ " -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\nstring $editorName = ($panelName+\"Editor\");\n"
+ " stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n"
+ " -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n"
+ " -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n"
+ " -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n"
+ " -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n"
+ " -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n"
+ "\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n"
+ " -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n"
+ "\t\t}\n\t}\n\tif ($useSceneConfig) {\n\t\toutlinerPanel -e -to $panelName;\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperShadePanel\" -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n"
+ " -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n"
+ " -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n"
+ " if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n"
+ "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 2058\\n -height 1022\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n"
+ "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 2058\\n -height 1022\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n"
+ "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n setFocus `paneLayout -q -p1 $gMainPane`;\n sceneUIReplacement -deleteRemaining;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n");
setAttr ".st" 3;
select -ne :time1;
setAttr -av -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -k on ".o" 1;
setAttr -k on ".unw" 1;
setAttr -k on ".etw";
setAttr -k on ".tps";
setAttr -k on ".tms";
lockNode -l 1 ;
select -ne :hardwareRenderingGlobals;
setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ;
setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 ;
select -ne :renderPartition;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 2 ".st";
setAttr -cb on ".an";
setAttr -cb on ".pt";
lockNode -l 1 ;
select -ne :renderGlobalsList1;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
select -ne :defaultShaderList1;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 4 ".s";
select -ne :postProcessList1;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 2 ".p";
select -ne :defaultRenderingList1;
setAttr -s 3 ".r";
select -ne :initialShadingGroup;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -av -k on ".nds";
setAttr -cb on ".bnm";
setAttr -s 3 ".dsm";
setAttr -k on ".mwc";
setAttr -cb on ".an";
setAttr -cb on ".il";
setAttr -cb on ".vo";
setAttr -cb on ".eo";
setAttr -cb on ".fo";
setAttr -cb on ".epo";
setAttr -k on ".ro" yes;
lockNode -l 1 ;
select -ne :initialParticleSE;
setAttr -av -k on ".cch";
setAttr -cb on ".ihi";
setAttr -av -k on ".nds";
setAttr -cb on ".bnm";
setAttr -k on ".mwc";
setAttr -cb on ".an";
setAttr -cb on ".il";
setAttr -cb on ".vo";
setAttr -cb on ".eo";
setAttr -cb on ".fo";
setAttr -cb on ".epo";
setAttr -k on ".ro" yes;
select -ne :defaultRenderGlobals;
setAttr ".ep" 1;
select -ne :defaultResolution;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -av ".w" 640;
setAttr -av ".h" 480;
setAttr -k on ".pa" 1;
setAttr -k on ".al";
setAttr -av ".dar" 1.3333332538604736;
setAttr -k on ".ldar";
setAttr -k on ".off";
setAttr -k on ".fld";
setAttr -k on ".zsl";
select -ne :defaultLightSet;
setAttr -k on ".cch";
setAttr -k on ".ihi";
setAttr -av -k on ".nds";
setAttr -k on ".bnm";
setAttr -k on ".mwc";
setAttr -k on ".an";
setAttr -k on ".il";
setAttr -k on ".vo";
setAttr -k on ".eo";
setAttr -k on ".fo";
setAttr -k on ".epo";
setAttr -k on ".ro" yes;
select -ne :defaultObjectSet;
setAttr ".ro" yes;
lockNode -l 1 ;
select -ne :defaultColorMgtGlobals;
setAttr ".cme" no;
select -ne :hardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -cb on ".ihi";
setAttr -k on ".nds";
setAttr -cb on ".bnm";
setAttr ".ctrs" 256;
setAttr ".btrs" 512;
setAttr -k off ".fbfm";
setAttr -k off -cb on ".ehql";
setAttr -k off -cb on ".eams";
setAttr -k off -cb on ".eeaa";
setAttr -k off -cb on ".engm";
setAttr -k off -cb on ".mes";
setAttr -k off -cb on ".emb";
setAttr -av -k off -cb on ".mbbf";
setAttr -k off -cb on ".mbs";
setAttr -k off -cb on ".trm";
setAttr -k off -cb on ".tshc";
setAttr -k off ".enpt";
setAttr -k off -cb on ".clmt";
setAttr -k off -cb on ".tcov";
setAttr -k off -cb on ".lith";
setAttr -k off -cb on ".sobc";
setAttr -k off -cb on ".cuth";
setAttr -k off -cb on ".hgcd";
setAttr -k off -cb on ".hgci";
setAttr -k off -cb on ".mgcs";
setAttr -k off -cb on ".twa";
setAttr -k off -cb on ".twz";
setAttr -k on ".hwcc";
setAttr -k on ".hwdp";
setAttr -k on ".hwql";
setAttr -k on ".hwfr";
select -ne :ikSystem;
setAttr -k on ".cch";
setAttr -k on ".ihi";
setAttr -k on ".nds";
setAttr -k on ".bnm";
setAttr -av ".gsn";
setAttr -k on ".gsv";
setAttr -s 4 ".sol";
connectAttr "lockedNode_translateZ.o" "srcSphereRN.phl[1]";
connectAttr "srcSphere:sphere_testVectorX.o" "srcSphereRN.phl[2]";
connectAttr "srcSphere:sphere_testVectorY.o" "srcSphereRN.phl[3]";
connectAttr "srcSphere:sphere_testVectorZ.o" "srcSphereRN.phl[4]";
connectAttr "srcSphere:sphere_testEnum.o" "srcSphereRN.phl[5]";
connectAttr "srcSphere:sphere_testFloat.o" "srcSphereRN.phl[6]";
connectAttr "srcSphere:sphere_testBoolean.o" "srcSphereRN.phl[7]";
connectAttr "srcSphere:sphere_testInteger.o" "srcSphereRN.phl[8]";
connectAttr "srcSphere:sphere_translateY.o" "srcSphereRN.phl[9]";
connectAttr "srcSphere:sphere_translateX.o" "srcSphereRN.phl[10]";
connectAttr "srcSphere:sphere_translateZ.o" "srcSphereRN.phl[11]";
connectAttr "srcSphere:sphere_rotateX.o" "srcSphereRN.phl[12]";
connectAttr "srcSphere:sphere_rotateZ.o" "srcSphereRN.phl[13]";
connectAttr "srcSphere:sphere_scaleX.o" "srcSphereRN.phl[14]";
connectAttr "srcSphere:sphere_scaleZ.o" "srcSphereRN.phl[15]";
connectAttr "srcSphere:sphere_visibility.o" "srcSphereRN.phl[16]";
connectAttr "|group|offset|lockedNode|sphere.msg" "group.testMessage" -l on;
connectAttr "|group|offset|lockedNode|sphere.ty" "|group|offset|lockedNode|sphere.testConnect"
;
connectAttr "sphere_testAnimated.o" "|group|offset|lockedNode|sphere.testAnimated"
;
connectAttr "group.msg" "|group|offset|lockedNode|sphere.testMessage" -l on;
connectAttr "srcPolySphere.out" "|group|offset|lockedNode|sphere|sphereShape.i";
connectAttr "|group1|offset|lockedNode|sphere.msg" "group1.testMessage" -l on;
connectAttr "|group1|offset|lockedNode|sphere.ty" "|group1|offset|lockedNode|sphere.testConnect"
;
connectAttr "sphere_testAnimated1.o" "|group1|offset|lockedNode|sphere.testAnimated"
;
connectAttr "group1.msg" "|group1|offset|lockedNode|sphere.testMessage" -l on;
connectAttr "srcPolySphere1.out" "|group1|offset|lockedNode|sphere|sphereShape.i"
;
relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
connectAttr "layerManager.dli[0]" "defaultLayer.id";
connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid";
connectAttr "dstSphere:renderLayerManager.rlmi[0]" "dstSphere:defaultRenderLayer.rlid"
;
connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na;
connectAttr "dstSphere:defaultRenderLayer.msg" ":defaultRenderingList1.r" -na;
connectAttr "|group|offset|lockedNode|sphere|sphereShape.iog" ":initialShadingGroup.dsm"
-na;
connectAttr "|group1|offset|lockedNode|sphere|sphereShape.iog" ":initialShadingGroup.dsm"
-na;
// End of test_non_unique_names.ma

View File

@ -0,0 +1,151 @@
{
"metadata": {
"mayaSceneFile": "C:/Users/hovel/Dropbox/git/site-packages/studiolibrary/packages/mutils/tests/data/test_non_unique_names.ma",
"version": "1.0.0",
"user": "Hovel",
"mayaVersion": "2017",
"ctime": "1518341544"
}
,
"objects": {
"srcSphere:offset": {
"attrs": {}
},
"srcSphere:sphere": {
"attrs": {
"testInteger": {
"type": "long",
"value": 5
},
"testProxy": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 4.66
},
"testLimit": {
"type": "double",
"value": 10.0
},
"testConnect": {
"type": "double",
"value": 8.0
},
"testEnum": {
"type": "enum",
"value": 1
},
"scaleX": {
"type": "double",
"value": 0.25
},
"testString": {
"type": "string",
"value": "Hello world"
},
"scaleZ": {
"type": "double",
"value": 0.5
},
"rotateX": {
"type": "doubleAngle",
"value": 45.0
},
"rotateY": {
"type": "doubleAngle",
"value": 50.0
},
"rotateZ": {
"type": "doubleAngle",
"value": 90.0
},
"translateX": {
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"type": "doubleLinear",
"value": 8.0
},
"translateZ": {
"type": "doubleLinear",
"value": -12.0
},
"visibility": {
"type": "bool",
"value": true
},
"testFloat": {
"type": "double",
"value": 0.666
},
"testAnimated": {
"type": "double",
"value": 0.0
},
"testVectorX": {
"type": "double",
"value": 0.2
},
"testVectorY": {
"type": "double",
"value": 1.4
},
"testVectorZ": {
"type": "double",
"value": 2.6
},
"testBoolean": {
"type": "bool",
"value": true
}
}
},
"srcSphere:lockedNode": {
"attrs": {
"translateX": {
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"type": "doubleLinear",
"value": 5.0
},
"translateZ": {
"type": "doubleLinear",
"value": 0.0
},
"scaleX": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 1.0
},
"visibility": {
"type": "bool",
"value": true
},
"rotateX": {
"type": "doubleAngle",
"value": 0.0
},
"rotateY": {
"type": "doubleAngle",
"value": 0.0
},
"rotateZ": {
"type": "doubleAngle",
"value": 0.0
},
"scaleZ": {
"type": "double",
"value": 1.0
}
}
}
}
}

View File

@ -0,0 +1 @@
{'end': 24, 'description': 'eded', 'scene': '', 'start': 1, 'mtime': '1391012417', 'owner': 'tlhomme', 'ctime': '1391012417'}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,34 @@
{'srcSphere:sphere': {
'rotateX': ('doubleAngle', 45.0),
'testEnum': ('enum', 1),
'translateX': ('doubleLinear', 0.0),
'translateY': ('doubleLinear', 8.0),
'translateZ': ('doubleLinear', -12.0),
'rotateY': ('doubleAngle', 50.0),
'testFloat': ('double', 0.66600000000000004),
'testAnimated': ('double', 0.0),
'scaleX': ('double', 0.25),
'scaleY': ('double', 4.6600000000000001),
'visibility': ('bool', True),
'testString': ('string', u'Hello world'),
'testVectorX': ('double', 0.20000000000000001),
'testVectorY': ('double', 1.3999999999999999),
'rotateZ': ('doubleAngle', 90.0),
'testVectorZ': ('double', 2.6000000000000001),
'scaleZ': ('double', 0.5),
'testInteger': ('long', 5),
'testBoolean': ('bool', True),
'testConnect': ('double', 8.0)
},
'srcSphere:lockedNode': {
'translateX': ('doubleLinear', 0.0),
'translateY': ('doubleLinear', 5.0),
'translateZ': ('doubleLinear', 0.0),
'scaleX': ('double', 1.0),
'scaleY': ('double', 1.0),
'visibility': ('bool', True),
'rotateX': ('doubleAngle', 0.0),
'rotateY': ('doubleAngle', 0.0),
'rotateZ': ('doubleAngle', 0.0),
'scaleZ': ('double', 1.0)
}}

View File

@ -0,0 +1,269 @@
//Maya ASCII 2012 scene
//Name: test_pose_attributes.ma
//Last modified: Sun, May 11, 2014 11:20:29 AM
//Codeset: 1252
file -rdi 1 -ns "srcSphere" -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
file -rdi 1 -ns "dstSphere" -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
file -r -ns "srcSphere" -dr 1 -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
file -r -ns "dstSphere" -dr 1 -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma";
requires maya "2011";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2014";
fileInfo "version" "2014 x64";
fileInfo "cutIdentifier" "201303010241-864206";
fileInfo "osv" "Microsoft Windows 7 Ultimate Edition, 64-bit Windows 7 Service Pack 1 (Build 7601)\n";
createNode transform -s -n "persp";
setAttr ".v" no;
setAttr ".t" -type "double3" -28.491244113009635 26.169676127690515 68.655966560486604 ;
setAttr ".r" -type "double3" -16.538352729583153 -22.60000000001666 4.306379281917478e-016 ;
createNode camera -s -n "perspShape" -p "persp";
setAttr -k off ".v" no;
setAttr ".fl" 34.999999999999993;
setAttr ".coi" 76.176692107312178;
setAttr ".imn" -type "string" "persp";
setAttr ".den" -type "string" "persp_depth";
setAttr ".man" -type "string" "persp_mask";
setAttr ".hc" -type "string" "viewSet -p %camera";
createNode transform -s -n "top";
setAttr ".v" no;
setAttr ".t" -type "double3" 0 100.1 0 ;
setAttr ".r" -type "double3" -89.999999999999986 0 0 ;
createNode camera -s -n "topShape" -p "top";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "top";
setAttr ".den" -type "string" "top_depth";
setAttr ".man" -type "string" "top_mask";
setAttr ".hc" -type "string" "viewSet -t %camera";
setAttr ".o" yes;
createNode transform -s -n "front";
setAttr ".v" no;
setAttr ".t" -type "double3" 2.0350096678112575 0.39361762628711539 100.1 ;
createNode camera -s -n "frontShape" -p "front";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 61.766282942468983;
setAttr ".imn" -type "string" "front";
setAttr ".den" -type "string" "front_depth";
setAttr ".man" -type "string" "front_mask";
setAttr ".hc" -type "string" "viewSet -f %camera";
setAttr ".o" yes;
createNode transform -s -n "side";
setAttr ".v" no;
setAttr ".t" -type "double3" 100.1 0 0 ;
setAttr ".r" -type "double3" 0 89.999999999999986 0 ;
createNode camera -s -n "sideShape" -p "side";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 100.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "side";
setAttr ".den" -type "string" "side_depth";
setAttr ".man" -type "string" "side_mask";
setAttr ".hc" -type "string" "viewSet -s %camera";
setAttr ".o" yes;
createNode lightLinker -s -n "lightLinker1";
setAttr -s 2 ".lnk";
setAttr -s 2 ".slnk";
createNode displayLayerManager -n "layerManager";
createNode displayLayer -n "defaultLayer";
createNode renderLayerManager -n "renderLayerManager";
createNode renderLayer -n "defaultRenderLayer";
setAttr ".g" yes;
createNode script -n "uiConfigurationScriptNode";
setAttr ".b" -type "string" (
"// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n"
+ " -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n"
+ " -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n"
+ " -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n"
+ "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n"
+ " -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n"
+ " -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels `;\n"
+ "\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n"
+ " -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n"
+ " -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n"
+ " $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n"
+ " -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n"
+ " -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n"
+ " -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n"
+ " -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n"
+ " -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n"
+ " -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n"
+ " -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n"
+ " modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n"
+ " -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n"
+ " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 0\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 0\n -hairSystems 0\n -follicles 0\n -nCloths 0\n -nParticles 0\n -nRigids 0\n -dynamicConstraints 0\n -locators 1\n -manipulators 1\n -pluginShapes 1\n"
+ " -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 0\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n"
+ " -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n"
+ " -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 0\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 0\n -hairSystems 0\n -follicles 0\n -nCloths 0\n -nParticles 0\n -nRigids 0\n -dynamicConstraints 0\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n"
+ " -strokes 1\n -motionTrails 1\n -clipGhosts 0\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 1\n -showReferenceNodes 1\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n"
+ " -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n"
+ " -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 1\n -showReferenceNodes 1\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n"
+ " -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n"
+ " -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\tif ($useSceneConfig) {\n\t\toutlinerPanel -e -to $panelName;\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 1\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 1\n"
+ " -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n"
+ " -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n"
+ " -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 1\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 1\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n"
+ " -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n"
+ " -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -stackedCurves 0\n"
+ " -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n"
+ " -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n"
+ " -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 0\n -selectionWindow 0 0 0 0 \n"
+ " $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n"
+ " -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n $editorName;\n"
+ "\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 0\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n"
+ " clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"integer\" \n -manageSequencer 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"integer\" \n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n"
+ "\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"sequenceEditorPanel\" -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n"
+ " -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperGraphPanel\" -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 1\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n"
+ " -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n"
+ " -orientation \"horiz\" \n -mergeConnections 1\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n"
+ "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperShadePanel\" -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"visorPanel\" -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n"
+ "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -ignoreAssets 1\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -keyReleaseCommand \"nodeEdKeyReleaseCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n"
+ " -island 0\n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -syncedSelection 1\n -extendToShapes 1\n $editorName;;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -ignoreAssets 1\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -keyReleaseCommand \"nodeEdKeyReleaseCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n"
+ " -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -island 0\n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -syncedSelection 1\n -extendToShapes 1\n $editorName;;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"createNodePanel\" -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Texture Editor\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"polyTexturePlacementPanel\" -l (localizedPanelLabel(\"UV Texture Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Texture Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"renderWindowPanel\" -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"blendShapePanel\" (localizedPanelLabel(\"Blend Shape\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tblendShapePanel -unParent -l (localizedPanelLabel(\"Blend Shape\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tblendShapePanel -edit -l (localizedPanelLabel(\"Blend Shape\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynRelEdPanel\" -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"relationshipPanel\" -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"referenceEditorPanel\" -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"componentEditorPanel\" -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynPaintScriptedPanelType\" -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n"
+ "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"scriptEditorPanel\" -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\tif ($useSceneConfig) {\n\t\tscriptedPanel -e -to $panelName;\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"Stereo\" -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels `;\nstring $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n"
+ " -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n"
+ " -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n"
+ " -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\n"
+ "string $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n"
+ " -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n"
+ " -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n"
+ " stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-defaultImage \"vacantCell.xpm\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n"
+ "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"wireframe\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 1\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 8192\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -maxConstantTransparency 1\\n -rendererName \\\"base_OpenGL_Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 0\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -fluids 0\\n -hairSystems 0\\n -follicles 0\\n -nCloths 0\\n -nParticles 0\\n -nRigids 0\\n -dynamicConstraints 0\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 0\\n -greasePencils 1\\n -shadows 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n"
+ "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"wireframe\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 1\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 8192\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -maxConstantTransparency 1\\n -rendererName \\\"base_OpenGL_Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 0\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -fluids 0\\n -hairSystems 0\\n -follicles 0\\n -nCloths 0\\n -nParticles 0\\n -nRigids 0\\n -dynamicConstraints 0\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 0\\n -greasePencils 1\\n -shadows 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n"
+ "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n setFocus `paneLayout -q -p1 $gMainPane`;\n sceneUIReplacement -deleteRemaining;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 1 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n");
setAttr ".st" 3;
createNode script -n "sceneConfigurationScriptNode";
setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 ";
setAttr ".st" 6;
createNode reference -n "srcSphereRN";
setAttr ".ed" -type "dataReferenceEdits"
"srcSphereRN"
"srcSphereRN" 0
"srcSphereRN" 14
2 "|srcSphere:group|srcSphere:sphere" "translate" " -type \"double3\" 0 8 -12"
2 "|srcSphere:group|srcSphere:sphere" "rotate" " -type \"double3\" 45 25 90"
2 "|srcSphere:group|srcSphere:sphere" "scale" " -type \"double3\" 0.25 1.5 0.5"
2 "|srcSphere:group|srcSphere:sphere" "testVector" " -k 1 -type \"double3\" 0.2 1.4 2.6"
2 "|srcSphere:group|srcSphere:sphere" "testVector" " -k 1"
2 "|srcSphere:group|srcSphere:sphere" "testVectorX" " -k 1"
2 "|srcSphere:group|srcSphere:sphere" "testVectorY" " -k 1"
2 "|srcSphere:group|srcSphere:sphere" "testVectorZ" " -k 1"
2 "|srcSphere:group|srcSphere:sphere" "testColor" " -type \"float3\" 0.18 0.6 0.18"
2 "|srcSphere:group|srcSphere:sphere" "testString" " -k 1 -type \"string\" \"Hello world\""
2 "|srcSphere:group|srcSphere:sphere" "testEnum" " -k 1 1"
2 "|srcSphere:group|srcSphere:sphere" "testFloat" " -k 1 0.666"
2 "|srcSphere:group|srcSphere:sphere" "testBoolean" " -k 1 1"
2 "|srcSphere:group|srcSphere:sphere" "testInteger" " -k 1 5";
setAttr ".ptag" -type "string" "";
lockNode -l 1 ;
createNode reference -n "dstSphereRN";
setAttr ".ed" -type "dataReferenceEdits"
"dstSphereRN"
"dstSphereRN" 0
"dstSphereRN" 13
2 "|dstSphere:group|dstSphere:sphere" "visibility" " 1"
2 "|dstSphere:group|dstSphere:sphere" "translate" " -type \"double3\" 0 0 0"
2 "|dstSphere:group|dstSphere:sphere" "rotate" " -type \"double3\" 0 0 0"
2 "|dstSphere:group|dstSphere:sphere" "scale" " -type \"double3\" 1 1 1"
2 "|dstSphere:group|dstSphere:sphere" "testVector" " -k 1 -type \"double3\" 0 0 0"
2 "|dstSphere:group|dstSphere:sphere" "testVector" " -k 1"
2 "|dstSphere:group|dstSphere:sphere" "testVectorX" " -k 1"
2 "|dstSphere:group|dstSphere:sphere" "testVectorY" " -k 1"
2 "|dstSphere:group|dstSphere:sphere" "testVectorZ" " -k 1"
2 "|dstSphere:group|dstSphere:sphere" "testEnum" " -k 1 2"
2 "|dstSphere:group|dstSphere:sphere" "testFloat" " -k 1 0"
2 "|dstSphere:group|dstSphere:sphere" "testBoolean" " -k 1 0"
2 "|dstSphere:group|dstSphere:sphere" "testInteger" " -k 1 0";
setAttr ".ptag" -type "string" "";
lockNode -l 1 ;
select -ne :time1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".o" 1;
setAttr ".unw" 1;
select -ne :renderPartition;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".st";
select -ne :initialShadingGroup;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".dsm";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :initialParticleSE;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :defaultShaderList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".s";
select -ne :postProcessList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -s 2 ".p";
select -ne :defaultRenderingList1;
setAttr -s 3 ".r";
select -ne :renderGlobalsList1;
setAttr -k on ".cch";
setAttr -k on ".nds";
select -ne :defaultResolution;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -av ".w";
setAttr -av ".h";
setAttr -k on ".pa" 1;
setAttr -k on ".al";
setAttr -av ".dar";
setAttr -k on ".ldar";
setAttr -k on ".off";
setAttr -k on ".fld";
setAttr -k on ".zsl";
select -ne :defaultLightSet;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr -k on ".mwc";
setAttr ".ro" yes;
select -ne :hardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".ctrs" 256;
setAttr ".btrs" 512;
select -ne :hardwareRenderingGlobals;
setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ;
setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 ;
select -ne :defaultHardwareRenderGlobals;
setAttr -k on ".cch";
setAttr -k on ".nds";
setAttr ".fn" -type "string" "im";
setAttr ".res" -type "string" "ntsc_4d 646 485 1.333";
relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
connectAttr "layerManager.dli[0]" "defaultLayer.id";
connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid";
connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na;
// End of test_pose_attributes.ma

View File

@ -0,0 +1,151 @@
{
"metadata": {
"mayaSceneFile": "C:/Users/hovel/Dropbox/git/site-packages/studiolibrary/packages/mutils/tests/data/test_pose.ma",
"version": "1.0.0",
"user": "Hovel",
"mayaVersion": "2017",
"ctime": "1518341544"
}
,
"objects": {
"srcSphere:offset": {
"attrs": {}
},
"srcSphere:sphere": {
"attrs": {
"testInteger": {
"type": "long",
"value": 5
},
"testProxy": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 1.5
},
"testLimit": {
"type": "double",
"value": 10.0
},
"testConnect": {
"type": "double",
"value": 8.0
},
"testEnum": {
"type": "enum",
"value": 1
},
"scaleX": {
"type": "double",
"value": 0.25
},
"testString": {
"type": "string",
"value": "Hello world"
},
"scaleZ": {
"type": "double",
"value": 0.5
},
"rotateX": {
"type": "doubleAngle",
"value": 45.0
},
"rotateY": {
"type": "doubleAngle",
"value": 25.0
},
"rotateZ": {
"type": "doubleAngle",
"value": 90.0
},
"translateX": {
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"type": "doubleLinear",
"value": 8.0
},
"translateZ": {
"type": "doubleLinear",
"value": -12.0
},
"visibility": {
"type": "bool",
"value": true
},
"testFloat": {
"type": "double",
"value": 0.666
},
"testAnimated": {
"type": "double",
"value": 0.0
},
"testVectorX": {
"type": "double",
"value": 0.2
},
"testVectorY": {
"type": "double",
"value": 1.4
},
"testVectorZ": {
"type": "double",
"value": 2.6
},
"testBoolean": {
"type": "bool",
"value": true
}
}
},
"srcSphere:lockedNode": {
"attrs": {
"translateX": {
"type": "doubleLinear",
"value": 0.0
},
"translateY": {
"type": "doubleLinear",
"value": 0.0
},
"translateZ": {
"type": "doubleLinear",
"value": 0.0
},
"scaleX": {
"type": "double",
"value": 1.0
},
"scaleY": {
"type": "double",
"value": 1.0
},
"visibility": {
"type": "bool",
"value": true
},
"rotateX": {
"type": "doubleAngle",
"value": 0.0
},
"rotateY": {
"type": "doubleAngle",
"value": 0.0
},
"rotateZ": {
"type": "doubleAngle",
"value": 0.0
},
"scaleZ": {
"type": "double",
"value": 1.0
}
}
}
}
}

View File

@ -0,0 +1 @@
{'owner': 'hovel', 'ctime': '1437148163', 'mtime': '1437148163'}

View File

@ -0,0 +1,75 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
"""
# Example:
# RUN TEST SUITE
import mutils.tests
reload(mutils.tests)
mutils.tests.run()
"""
import unittest
import logging
logging.basicConfig(
filemode='w',
level=logging.DEBUG,
format='%(levelname)s: %(funcName)s: %(message)s',
)
def testSuite():
"""
Return a test suite containing all the tests.
:rtype: unittest.TestSuite
"""
import test_pose
import test_anim
import test_match
import test_utils
import test_attribute
import test_mirrortable
suite = unittest.TestSuite()
s = unittest.makeSuite(test_pose.TestPose, 'test')
suite.addTest(s)
s = unittest.makeSuite(test_anim.TestAnim, 'test')
suite.addTest(s)
s = unittest.makeSuite(test_utils.TestUtils, 'test')
suite.addTest(s)
s = unittest.makeSuite(test_match.TestMatch, 'test')
suite.addTest(s)
s = unittest.makeSuite(test_attribute.TestAttribute, 'test')
suite.addTest(s)
s = unittest.makeSuite(test_mirrortable.TestMirrorTable, 'test')
suite.addTest(s)
return suite
def run():
"""
Call from within Maya to run all valid tests.
"""
import mutils.animation
mutils.animation.FIX_SAVE_ANIM_REFERENCE_LOCKED_ERROR = True
tests = unittest.TextTestRunner()
tests.run(testSuite())

View File

@ -0,0 +1,125 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import unittest
import mutils
import test_base
class TestAnim(test_base.TestBase):
def setUp(self):
"""
"""
def save(self, bakeConnected=False):
"""
Test saving the animation to disc.
"""
self.open()
anim = mutils.Animation.fromObjects(self.srcObjects)
anim.save(self.dstPath, bakeConnected=bakeConnected)
# def test_older_version(self):
# """
# Test animation parser for an older animation format
# """
# srcPath = self.dataPath("test_older_version.anim")
# a = mutils.Animation.fromPath(srcPath)
def test_load_replace_completely(self):
"""
Test loading the animation with replace completely option.
"""
self.srcPath = self.dataPath("test_anim.ma")
self.dstPath = self.dataPath("test_load_replace_completely.anim")
self.save()
anim = mutils.Animation.fromPath(self.dstPath)
anim.load(self.dstObjects)
self.assertEqualAnimation()
def test_bake_connected(self):
"""
Test saving animation with the option bake connected.
"""
srcPath = self.dataPath("test_bake_connected.ma")
dstPath = self.dataPath("test_bake_connected.anim")
srcObjects = [
"srcSphere:group",
"srcSphere:lockedNode",
"srcSphere:offset",
"srcSphere:sphere"
]
dstObjects = [
"dstSphere:group",
"dstSphere:lockedNode",
"dstSphere:offset",
"dstSphere:sphere"
]
self.open(path=srcPath)
anim = mutils.Animation.fromObjects(srcObjects)
anim.save(dstPath, bakeConnected=True)
anim = mutils.Animation.fromPath(dstPath)
anim.load(dstObjects)
self.assertEqualAnimation()
def test_load_replace(self):
"""
Test loading the animation with the option Replace.
"""
self.srcPath = self.dataPath("test_anim.ma")
self.dstPath = self.dataPath("test_load_replace.anim")
self.save()
anim = mutils.Animation.fromPath(self.dstPath)
anim.load(self.dstObjects, option=mutils.PasteOption.Replace, startFrame=5)
def test_load_insert(self):
"""
Test loading the animation with the option Insert.
"""
self.srcPath = self.dataPath("test_anim.ma")
self.dstPath = self.dataPath("test_load_insert.anim")
self.save()
anim = mutils.Animation.fromPath(self.dstPath)
anim.load(self.dstObjects, option=mutils.PasteOption.Insert, startFrame=5)
def testSuite():
"""
Return the test suite for the test case.
:rtype: unittest.TestSuite
"""
suite = unittest.TestSuite()
s = unittest.makeSuite(TestAnim, 'test')
suite.addTest(s)
return suite
def run():
"""
Call from within Maya to run all valid tests.
"""
tests = unittest.TextTestRunner()
tests.run(testSuite())

View File

@ -0,0 +1,168 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
"""
# Example:
import mutils.tests.test_attribute
reload(mutils.tests.test_attribute)
mutils.tests.test_attribute.run()
"""
import os
import unittest
import maya.cmds
import mutils
class TestAttribute(unittest.TestCase):
def setUp(self):
"""
Open an existing maya test scene for testing.
"""
dirname = os.path.dirname(mutils.__file__)
dirname = os.path.join(dirname, "tests", "data")
path = os.path.join(dirname, "sphere.ma")
maya.cmds.file(
path,
open=True,
force=True,
ignoreVersion=True,
executeScriptNodes=False,
)
def test_attribute_limit(self):
"""
Test the attribute limit when setting the attribute value.
"""
range_ = (-100, 100)
maya.cmds.cutKey("sphere", cl=True, time=range_, f=range_, at="testLimit")
attr = mutils.Attribute("sphere", "testLimit")
attr.set(200)
value = maya.cmds.getAttr("sphere.testLimit")
assert value == 10, "Maximum attibute limit was ignored when setting the attribute value"
def test_attribute_limit2(self):
"""
Test the maximum attribute limit when setting a keyframe.
"""
attr = mutils.Attribute("sphere", "testLimit")
attr.setKeyframe(200)
value = maya.cmds.keyframe("sphere.testLimit", query=True, eval=True)[0]
assert value == 10, "Maximum attibute limit was ignored when setting animation keyframe"
def test_attribute_limit3(self):
"""
Test the minimum attribute limit when setting a keyframe.
"""
attr = mutils.Attribute("sphere", "testLimit")
attr.setKeyframe(-200)
value = maya.cmds.keyframe("sphere.testLimit", query=True, eval=True)[0]
assert value == -10, "Minimum attibute limit was ignored when setting animation keyframe"
def test_non_keyable(self):
"""
Test if non-keyable attributes can be keyed.
"""
range_ = (-100, 100)
maya.cmds.cutKey("sphere", cl=True, time=range_, f=range_, at="testNonKeyable")
attr = mutils.Attribute("sphere", "testNonKeyable")
attr.setKeyframe(200)
value = maya.cmds.keyframe("sphere.testNonKeyable", query=True, eval=True)
assert value is None, "Non keyable attribute was keyed"
def test_anim_curve(self):
"""
Test if get anim curve returns the right value.
"""
msg = "Incorrect anim curve was returned when using attr.animCurve "
attr = mutils.Attribute("sphere", "testFloat")
curve = attr.animCurve()
assert curve is None, msg + "1"
attr = mutils.Attribute("sphere", "testConnected")
curve = attr.animCurve()
assert curve is None, msg + "2"
attr = mutils.Attribute("sphere", "testAnimated")
curve = attr.animCurve()
assert curve == "sphere_testAnimated", msg + "3"
def test_set_anim_curve(self):
"""
Test if set anim curve
"""
msg = "No anim curve was set"
attr = mutils.Attribute("sphere", "testAnimated")
srcCurve = attr.animCurve()
attr = mutils.Attribute("sphere", "testFloat")
attr.setAnimCurve(srcCurve, time=(1, 15), option="replace")
curve = attr.animCurve()
assert curve is not None, msg
attr = mutils.Attribute("sphere", "testFloat")
attr.setAnimCurve(srcCurve, time=(15, 15), option="replaceCompletely")
curve = attr.animCurve()
assert curve is not None, msg
def test_set_static_keyframe(self):
"""
Test set static keyframes
"""
msg = "The inserted static keys have different values"
attr = mutils.Attribute("sphere", "testAnimated", cache=False)
attr.setStaticKeyframe(value=2, time=(4, 6), option="replace")
maya.cmds.currentTime(4)
value1 = attr.value()
maya.cmds.currentTime(6)
value2 = attr.value()
assert value1 == value2, msg
def testSuite():
"""
Return the test suite for the TestAttribute.
:rtype: unittest.TestSuite
"""
suite = unittest.TestSuite()
s = unittest.makeSuite(TestAttribute, 'test')
suite.addTest(s)
return suite
def run():
"""
Call from within Maya to run all valid tests.
Example:
import mutils.tests.test_attribute
reload(mutils.tests.test_attribute)
mutils.tests.test_attribute.run()
"""
tests = unittest.TextTestRunner()
tests.run(testSuite())

View File

@ -0,0 +1,143 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import os
import unittest
import maya.cmds
import mutils
TEST_DATA_DIR = os.path.join(os.path.dirname(mutils.__file__), "tests", "data")
class TestBase(unittest.TestCase):
def __init__(self, *args):
"""
:type args: list
"""
unittest.TestCase.__init__(self, *args)
self.srcPath = os.path.join(TEST_DATA_DIR, "test_pose.ma")
self.dstPath = os.path.join(TEST_DATA_DIR, "test_pose.pose")
self.srcObjects = [
"srcSphere:lockedNode",
"srcSphere:offset",
"srcSphere:sphere",
]
self.dstObjects = [
"dstSphere:lockedNode",
"dstSphere:offset",
"dstSphere:sphere",
]
self.srcNamespaces = ["srcSphere"]
self.dstNamespaces = ["dstSphere"]
def dataDir(self):
"""
Return the location on disc to the test data.
:rtype: str
"""
return os.path.join(os.path.dirname(mutils.__file__), "tests", "data")
def dataPath(self, fileName):
"""
Return data location with the given fileName.
:rtype: str
"""
return os.path.join(self.dataDir(), fileName)
def open(self, path=None):
"""
Open the specified file in Maya.
:type path: str | None
"""
if path is None:
path = self.srcPath
maya.cmds.file(
path,
open=True,
force=True,
ignoreVersion=True,
executeScriptNodes=False,
)
def listAttr(self, srcObjects=None, dstObjects=None):
"""
Return the source & destination attributes for the given objects.
:rtype: list[(mutils.Attribute, mutils.Attribute)]
"""
attrs = []
srcObjects = srcObjects or self.srcObjects
dstObjects = dstObjects or self.dstObjects
for i, srcObj in enumerate(srcObjects):
srcObj = srcObjects[i]
dstObj = dstObjects[i]
srcAttrs = maya.cmds.listAttr(srcObj, keyable=True, unlocked=True, scalar=True) or []
for srcAttr in srcAttrs:
srcAttribute = mutils.Attribute(srcObj, srcAttr)
dstAttribute = mutils.Attribute(dstObj, srcAttr)
attrs.append((srcAttribute, dstAttribute))
return attrs
def assertEqualAnimation(
self,
srcObjects=None,
dstObjects=None,
):
"""
Test that the animation for the given objects is equal.
If the animation curves do not compare equal, the test will fail.
:type srcObjects: list[str] | None
:type dstObjects: list[str] | None
"""
for frame in [1, 10, 24]:
maya.cmds.currentTime(frame)
self.assertEqualAttributeValues(srcObjects, dstObjects)
def assertEqualAttributeValues(
self,
srcObjects=None,
dstObjects=None,
):
"""
Test that the attribute values for the given objects are equal.
If the values do not compare equal, the test will fail.
:type srcObjects: list[str] | None
:type dstObjects: list[str] | None
"""
for srcAttribute, dstAttribute in self.listAttr(srcObjects, dstObjects):
if not dstAttribute.exists():
continue
msg = "Attribute value is not equal! {0} != {1}"
msg = msg.format(srcAttribute.fullname(), dstAttribute.fullname())
self.assertEqual(srcAttribute.value(), dstAttribute.value(), msg)

View File

@ -0,0 +1,230 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import mutils
import test_base
class TestMatch(test_base.TestBase):
def setUp(self):
"""
"""
pass
def matchNames(self, expectedResult, srcObjects=None, dstObjects=None, dstNamespaces=None):
"""
"""
result = []
for srcNode, dstNode in mutils.matchNames(srcObjects, dstObjects=dstObjects, dstNamespaces=dstNamespaces):
result.append((srcNode.name(), dstNode.name()))
if result != expectedResult:
raise Exception("Result does not match the expected result: %s != %s" % (str(result), expectedResult))
def test_match0(self):
"""
Test no matches
"""
srcObjects = ["control2", "control1", "control3"]
dstObjects = ["control4", "control5", "control6"]
expectedResult = []
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)
def test_match1(self):
"""
Test simple match
"""
srcObjects = ["control2", "control1", "control3"]
dstObjects = ["control1", "control2", "control3"]
expectedResult = [("control2", "control2"),
("control1", "control1"),
("control3", "control3")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)
def test_match2(self):
"""
"""
srcObjects = ["control1"]
dstObjects = ["character1:control1", "character2:control1"]
expectedResult = [("control1", "character1:control1"),
("control1", "character2:control1")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)
def test_match3(self):
"""
"""
srcObjects = ["control1"]
dstNamespaces = ["character1", "character2"]
expectedResult = [("control1", "character1:control1"),
("control1", "character2:control1")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces)
def test_match4(self):
"""
"""
srcObjects = ["character1:control1"]
dstNamespaces = [""]
expectedResult = [("character1:control1", "control1")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces)
def test_match5(self):
"""
Test namespace
Test short name
Test multiple namespaces in source objects
"""
srcObjects = ["character1:control1", "character1:control2"]
dstNamespaces = ["character2"]
expectedResult = [("character1:control1", "character2:control1"),
("character1:control2", "character2:control2")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces)
def test_match6(self):
"""
Test namespace
Test long name
Test namespace in source objects
Test namespace that is not in source objects
"""
srcObjects = ["character1:group1|character1:control1", "character1:group2|character1:control1"]
dstNamespaces = ["character2"]
expectedResult = [("character1:group1|character1:control1", "character2:group1|character2:control1"),
("character1:group2|character1:control1", "character2:group2|character2:control1")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces)
def test_match7(self):
"""
Test namespace
Test multiple namespaces in source objects
Test only one destination namespace
"""
srcObjects = ["character1:control1", "character2:control1"]
dstNamespaces = ["character2"]
expectedResult = [("character2:control1", "character2:control1")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces)
def test_match8(self):
"""
Test multiple namespaces in source objects
Test namespace that is not in source objects
"""
srcObjects = ["character1:control1", "character2:control1"]
dstNamespaces = ["character3"]
expectedResult = [("character1:control1", "character3:control1")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces)
def test_match9(self):
"""
"""
srcObjects = ["character1:group1|character1:control1",
"character1:group1|character1:control2"]
dstObjects = ["group1|control1",
"group1|control2"]
expectedResult = [("character1:group1|character1:control1", "group1|control1"),
("character1:group1|character1:control2", "group1|control2")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)
def test_match10(self):
"""
WARNING: The expected result is a little strange.
It will always match source objects without a namespace first.
expectedResult = [("group1|control1", "character2:group1|character2:control1")]
NOT
expectedResult = [("character1:group1|character1:control1", "character2:group1|character2:control1")]
"""
srcObjects = ["character1:group1|character1:control1",
"group1|control1"]
dstNamespaces = ["character2"]
expectedResult = [("group1|control1", "character2:group1|character2:control1")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces)
def test_match11(self):
"""
Match long name to short name.
"""
srcObjects = ["|grpEyeAllLf|grpLidTpLf|ctlLidTpLf"]
dstObjects = ["ctlLidTpLf"]
expectedResult = [("|grpEyeAllLf|grpLidTpLf|ctlLidTpLf", "ctlLidTpLf")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)
def test_match12(self):
"""
Match short name to long name.
"""
srcObjects = ["ctlLidTpLf"]
dstObjects = ["|grpEyeAllLf|grpLidTpLf|ctlLidTpLf"]
expectedResult = [("ctlLidTpLf", "|grpEyeAllLf|grpLidTpLf|ctlLidTpLf")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)
def test_match13(self):
"""
Match short name to long name with namespace.
"""
srcObjects = ["ctlLidTpLf"]
dstObjects = ["|malcolm:grpEyeAllLf|malcolm:grpLidTpLf|malcolm:ctlLidTpLf"]
expectedResult = [("ctlLidTpLf", "|malcolm:grpEyeAllLf|malcolm:grpLidTpLf|malcolm:ctlLidTpLf")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)
def test_match14(self):
"""
Match long name to short name with namespace.
"""
srcObjects = ["|malcolm:grpEyeAllLf|malcolm:grpLidTpLf|malcolm:ctlLidTpLf"]
dstObjects = ["ctlLidTpLf"]
expectedResult = [("|malcolm:grpEyeAllLf|malcolm:grpLidTpLf|malcolm:ctlLidTpLf", "ctlLidTpLf")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)
def test_match15(self):
"""
Testing multiple source namespace to only one destination namespace. They should not merge.
"""
srcObjects = ["character1:group1|character1:control1",
"character2:group1|character2:control2"]
dstObjects = ["group1|control1",
"group1|control2"]
expectedResult = [("character1:group1|character1:control1", "group1|control1")]
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)
def test_match16(self):
"""
Testing multiple source namespace and destination namespaces
"""
srcObjects = ["character1:group1|character1:control1",
"character2:group1|character2:control1",
"character3:group1|character3:control1"]
dstObjects = ["character3:group1|character3:control1",
"character1:group1|character1:control1",
"character2:group1|character2:control1"]
expectedResult = [('character1:group1|character1:control1', 'character1:group1|character1:control1'),
('character3:group1|character3:control1', 'character3:group1|character3:control1'),
('character2:group1|character2:control1', 'character2:group1|character2:control1')]
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)
def test_match17(self):
"""
Testing multiple source namespace and destination namespaces.
"""
srcObjects = ["character1:group1|character1:control1",
"group1|control1",
"character3:group1|character3:control1"]
dstObjects = ["character3:group1|character3:control1",
"character1:group1|character1:control1",
"group1|control1"]
expectedResult = [('group1|control1', 'group1|control1'),
('character1:group1|character1:control1', 'character1:group1|character1:control1'),
('character3:group1|character3:control1', 'character3:group1|character3:control1')]
self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects)

View File

@ -0,0 +1,238 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import unittest
from mutils.mirrortable import MirrorTable
class TestMirrorTable(unittest.TestCase):
def test_find_left_side(self):
"""
Test the clamp range command
"""
msg = "Cannot find the left side from the given objects"
objects = ["Character3_Ctrl_LeftForeArm"]
assert "Left" == MirrorTable.findLeftSide(objects), msg
objects = ["r_cool_ik", "l_arm_cool_l"]
assert "l_*" == MirrorTable.findLeftSide(objects), msg
objects = ["r_cool_ik", "Character:l_arm_cool_ik"]
assert "l_*" == MirrorTable.findLeftSide(objects), msg
objects = ["r_cool_ik", "Group|l_arm_cool_ik"]
assert "l_*" == MirrorTable.findLeftSide(objects), msg
objects = ["r_cool_ik", "Group|arm_cool_l"]
assert "*_l" == MirrorTable.findLeftSide(objects), msg
objects = ["leftArm1_ArmCon"]
assert "left*" == MirrorTable.findLeftSide(objects), msg
objects = ["LLegCON", "LhandCON"]
assert "L*" == MirrorTable.findLeftSide(objects), msg
objects = ["r_cool_ik", "Group|left_arm_cool_ik"]
assert "left*" == MirrorTable.findLeftSide(objects), msg
objects = ["r_cool_ik", "Group|ctlHandLf"]
assert "*Lf" == MirrorTable.findLeftSide(objects), msg
objects = ["r_cool_ik", "malcolm:ctlArmIkLf"]
assert "*Lf" == MirrorTable.findLeftSide(objects), msg
objects = ["r_cool_ik", "IKExtraLegFront_L|IKLegFront_L"]
assert "*_L" == MirrorTable.findLeftSide(objects), msg
def test_find_right_side(self):
"""
Test the clamp range command
"""
msg = "Cannot find the right side from the given objects"
objects = ["Character3_Ctrl_RightForeArm"]
assert "Right" == MirrorTable.findRightSide(objects), msg
objects = ["l_car_ik", "r_arm_car_r"]
assert "r_*" == MirrorTable.findRightSide(objects), msg
objects = ["l_car_ik", "Character:r_arm_car_r"]
assert "r_*" == MirrorTable.findRightSide(objects), msg
objects = ["l_car_ik", "Group|r_arm_car_r"]
assert "r_*" == MirrorTable.findRightSide(objects), msg
objects = ["l_car_ik", "arm_car_r"]
assert "*_r" == MirrorTable.findRightSide(objects), msg
objects = ["l_car_ik", "Group|right_arm_car_ik"]
assert "right*" == MirrorTable.findRightSide(objects), msg
objects = ["CHR1:RIG:RLegCON", "CHR1:RIG:RhandCON"]
assert "R*" == MirrorTable.findRightSide(objects), msg
objects = ["RLegCON", "RhandCON"]
assert "R*" == MirrorTable.findRightSide(objects), msg
objects = ["l_car_ik", "Group|ctlHandRt"]
assert "*Rt" == MirrorTable.findRightSide(objects), msg
objects = ["l_car_ik", "malcolm:ctlArmIkRt"]
assert "*Rt" == MirrorTable.findRightSide(objects), msg
objects = ["l_car_ik", "IKExtraLegFront_R|IKLegFront_R"]
assert "*_R" == MirrorTable.findRightSide(objects), msg
objects = ["Rig_v01_ref:Rig_v01:leftArm1_UpperArmControl"]
assert "" == MirrorTable.findRightSide(objects), msg
def test_match_side(self):
msg = "Incorrect result from match side"
result = MirrorTable.matchSide("ctlArmIkRt", "*Rt")
assert result is True, msg
result = MirrorTable.matchSide("ctlArmIkRt", "Rt")
assert result is True, msg
result = MirrorTable.matchSide("CHR1:RIG:LRollCON", "L*")
assert result is True, msg
# This is no longer supported!
# result = MirrorTable.matchSide("CHR1:RIG:LRollCON", "RIG:L*")
# assert result is True, msg
result = MirrorTable.matchSide("Group|right_arm_car_ik", "right*")
assert result is True, msg
result = MirrorTable.matchSide("Group|IKLegFront_R", "*_R")
assert result is True, msg
def test_mirror_object(self):
msg = "Incorrect mirror name for object"
result = MirrorTable._mirrorObject("malcolm:ctlArmIkRt", "Rt", "Lf")
assert "malcolm:ctlArmIkLf" == result, msg
result = MirrorTable._mirrorObject("malcolm:ctlArmIkRt", "*Rt", "*Lf")
assert "malcolm:ctlArmIkLf" == result, msg
result = MirrorTable._mirrorObject("IKLegFront_R", "*_R", "*_L")
assert "IKLegFront_L" == result, msg
result = MirrorTable._mirrorObject("CHR1:RIG:RLegCON", "R*", "L*")
assert "CHR1:RIG:LLegCON" == result, msg
result = MirrorTable._mirrorObject("CHR1:RIG:RRollCON", "R*", "L*")
assert "CHR1:RIG:LRollCON" == result, msg
result = MirrorTable._mirrorObject("leftArm1_ArmCon", "left*", "right*")
assert "rightArm1_ArmCon" == result, msg
result = MirrorTable._mirrorObject("Rig:RArm1_UpperArmControl", "R*", "L*")
assert "Rig:LArm1_UpperArmControl" == result, msg
result = MirrorTable._mirrorObject("Group|Ch1:RIG:Offset|Ch1:RIG:RRoll", "R*", "L*")
assert "Group|Ch1:RIG:Offset|Ch1:RIG:LRoll" == result, msg
# This is no longer supported!
# result = MirrorTable._mirrorObject("Group|Ch1:RIG:RExtra|Ch1:RIG:RRoll", "RIG:R", "RIG:L")
# assert "Group|Ch1:RIG:LExtra|Ch1:RIG:LRoll" == result, msg
result = MirrorTable._mirrorObject("Group|Ch1:RIG:RExtra|Ch1:RIG:RRoll", "R*", "L*")
assert "Group|Ch1:RIG:LExtra|Ch1:RIG:LRoll" == result, msg
result = MirrorTable._mirrorObject("hand_R0_ctl", "_R", "_L")
assert "hand_L0_ctl" == result, msg
result = MirrorTable._mirrorObject("Lyle_R001:hand_R0_ctl", "_R", "_L")
assert "Lyle_R001:hand_L0_ctl" == result, msg
result = MirrorTable._mirrorObject("Lyle_R001:other_R0_ctl|Lyle_R001:hand_R0_ctl", "_R", "_L")
assert "Lyle_R001:other_L0_ctl|Lyle_R001:hand_L0_ctl" == result, msg
result = MirrorTable._mirrorObject("Character1:LfootRoll", "L*", "R*")
assert "Character1:RfootRoll" == result, msg
result = MirrorTable._mirrorObject("Group|LyleCharacter1:LfootRollExtra|LyleCharacter1:LfootRoll", "R*", "L*")
assert "Group|LyleCharacter1:RfootRollExtra|LyleCharacter1:RfootRoll" == result, msg
result = MirrorTable._mirrorObject("Character3_Ctrl_RightForeArm", "Right", "Left")
assert "Character3_Ctrl_LeftForeArm" == result, msg
result = MirrorTable._mirrorObject("r_arm_car_r", "r_*", "l_*")
assert "l_arm_car_r" == result, msg
result = MirrorTable._mirrorObject("Character:r_arm_car_r", "r_*", "l_*")
assert "Character:l_arm_car_r" == result, msg
result = MirrorTable._mirrorObject("Group|r_arm_car_r", "r_*", "l_*")
assert "Group|l_arm_car_r" == result, msg
result = MirrorTable._mirrorObject("arm_car_r", "*_r", "*_l")
assert "arm_car_l" == result, msg
result = MirrorTable._mirrorObject("Group|right_arm_car_ik", "right*", "left*")
assert "Group|left_arm_car_ik" == result, msg
result = MirrorTable._mirrorObject("CHR1:RIG:RLegCON", "R*", "L*")
assert "CHR1:RIG:LLegCON" == result, msg
result = MirrorTable._mirrorObject("RhandCON", "R*", "L*")
assert "LhandCON" == result, msg
result = MirrorTable._mirrorObject("Group|ctlHandRt", "*Rt", "*Lt")
assert "Group|ctlHandLt" == result, msg
result = MirrorTable._mirrorObject("malcolm:ctlArmIkRt", "*Rt", "*Lt")
assert "malcolm:ctlArmIkLt" == result, msg
result = MirrorTable._mirrorObject("IKExtraLegFront_R|IKLegFront_R", "*_R", "*_L")
assert "IKExtraLegFront_L|IKLegFront_L" == result, msg
result = MirrorTable._mirrorObject("Rig_v01_ref:Rig_v01:leftArm1_UpperArmControl", "_R", "_L")
assert None == result, msg
def testSuite():
"""
Return the test suite for this module.
:rtype: unittest.TestSuite
"""
suite = unittest.TestSuite()
s = unittest.makeSuite(TestMirrorTable, 'test')
suite.addTest(s)
return suite
def run():
"""
Call from within Maya to run all valid tests.
Example:
import mutils.tests.test_attribute
reload(mutils.tests.test_attribute)
mutils.tests.test_attribute.run()
"""
tests = unittest.TextTestRunner()
tests.run(testSuite())
if __name__ == "__main__":
run()

View File

@ -0,0 +1,157 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
"""
# Example:
import mutils.tests.test_pose
reload(mutils.tests.test_pose)
mutils.tests.test_pose.run()
"""
import unittest
import maya.cmds
import mutils
import test_base
class TestPose(test_base.TestBase):
def setUp(self):
"""
"""
self.srcPath = self.dataPath("test_pose.ma")
self.dstPath = self.dataPath("test_pose.pose")
def test_save(self):
"""
Test saving a pose to disc.
"""
self.open()
pose = mutils.Pose.fromObjects(self.srcObjects)
pose.save(self.dstPath)
def test_load(self):
"""
Test load the pose from disc.
"""
self.open()
pose = mutils.Pose.fromPath(self.dstPath)
pose.load(self.dstObjects)
self.assertEqualAttributeValues()
def test_older_version(self):
"""
Test parsing an older pose format
"""
srcPath = self.dataPath("test_older_version.dict")
pose = mutils.Pose.fromPath(srcPath)
print(pose.objects())
def test_non_unique_names(self):
"""
Test loading a pose to objects that do not have unique names.
"""
srcPath = self.dataPath("test_non_unique_names.ma")
dstPath = self.dataPath("test_non_unique_names.pose")
srcObjects = [
"srcSphere:offset",
"srcSphere:lockedNode",
"srcSphere:sphere",
]
dstObjects = [
'group|offset',
'group|offset|lockedNode',
'group|offset|lockedNode|sphere',
]
self.open(path=srcPath)
pose = mutils.Pose.fromObjects(srcObjects)
pose.save(dstPath)
pose = mutils.Pose.fromPath(dstPath)
pose.load(dstObjects)
self.assertEqualAttributeValues(srcObjects, dstObjects)
def test_blend(self):
"""
Test pose blending for float values when loading a pose.
"""
self.open()
for blend in [10, 30, 70, 90]:
dstObjects = {}
for srcAttribute, dstAttribute in self.listAttr():
if srcAttribute.type == "float":
values = (srcAttribute.value(), dstAttribute.value())
dstObjects[dstAttribute.fullname()] = values
pose = mutils.Pose.fromPath(self.dstPath)
pose.load(self.dstObjects, blend=blend)
for dstFullname in dstObjects.keys():
srcValue, dstValue = dstObjects[dstFullname]
value = (srcValue - dstValue) * (blend/100.00)
value = dstValue + value
dstValue = maya.cmds.getAttr(dstFullname)
msg = 'Incorrect value for {0} {1} != {2}'
msg = msg.format(dstFullname, value, dstValue)
self.assertEqual(value, maya.cmds.getAttr(dstFullname), msg)
def test_select(self):
"""
Test selecting the controls from the pose.
"""
self.open()
pose = mutils.Pose.fromPath(self.dstPath)
pose.select(namespaces=self.dstNamespaces)
selection = maya.cmds.ls(selection=True)
for dstName in self.dstObjects:
msg = "Did not select {0}".format(dstName)
self.assertIn(dstName, selection, msg)
def test_count(self):
"""
Test the object count within in pose.
"""
self.open()
pose = mutils.Pose.fromPath(self.dstPath)
self.assertEqual(pose.objectCount(), len(self.srcObjects))
def testSuite():
"""
Return the test suite for the test case.
:rtype: unittest.TestSuite
"""
suite = unittest.TestSuite()
s = unittest.makeSuite(TestPose, 'test')
suite.addTest(s)
return suite
def run():
"""
Call from within Maya to run all valid tests.
"""
tests = unittest.TextTestRunner()
tests.run(testSuite())

View File

@ -0,0 +1,72 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import unittest
import mutils.animation
class TestUtils(unittest.TestCase):
def test_clamp_range(self):
"""
Test the clamp range command
"""
msg = "Incorrect clamp range"
# Test clamp range on both min and max
clampRange = mutils.animation.clampRange((15, 35), (20, 30))
assert (20, 30) == clampRange, msg
# Test clamp range on min time
clampRange = mutils.animation.clampRange((10, 25), (20, 30))
assert (20, 25) == clampRange, msg
# Test clamp range on man time
clampRange = mutils.animation.clampRange((25, 40), (20, 30))
assert (25, 30) == clampRange, msg
# Test min out of bounds error
def test_exception():
clampRange = mutils.animation.clampRange((5, 15), (20, 30))
self.assertRaises(mutils.animation.OutOfBoundsError, test_exception)
# Test max out of bounds error
def test_exception():
clampRange = mutils.animation.clampRange((65, 95), (20, 30))
self.assertRaises(mutils.animation.OutOfBoundsError, test_exception)
def testSuite():
"""
Return the test suite for this module.
:rtype: unittest.TestSuite
"""
suite = unittest.TestSuite()
s = unittest.makeSuite(TestUtils, 'test')
suite.addTest(s)
return suite
def run():
"""
Call from within Maya to run all valid tests.
Example:
import mutils.tests.test_attribute
reload(mutils.tests.test_attribute)
mutils.tests.test_attribute.run()
"""
tests = unittest.TextTestRunner()
tests.run(testSuite())

View File

@ -0,0 +1,403 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
"""
Base object for saving poses, animation, selection sets and mirror tables.
Example:
import mutils
t = mutils.TransferObject.fromPath("/tmp/pose.json")
t = mutils.TransferObject.fromObjects(["object1", "object2"])
t.load(selection=True)
t.load(objects=["obj1", "obj2"])
t.load(namespaces=["namespace1", "namespace2"])
t.save("/tmp/pose.json")
t.read("/tmp/pose.json")
"""
import os
import abc
import json
import time
import locale
import getpass
import logging
from studiovendor import six
import mutils
try:
import maya.cmds
except Exception:
import traceback
traceback.print_exc()
logger = logging.getLogger(__name__)
class TransferObject(object):
@classmethod
def fromPath(cls, path):
"""
Return a new transfer instance for the given path.
:type path: str
:rtype: TransferObject
"""
t = cls()
t.setPath(path)
t.read()
return t
@classmethod
def fromObjects(cls, objects, **kwargs):
"""
Return a new transfer instance for the given objects.
:type objects: list[str]
:rtype: TransferObject
"""
t = cls(**kwargs)
for obj in objects:
t.add(obj)
return t
@staticmethod
def readJson(path):
"""
Read the given json path
:type path: str
:rtype: dict
"""
with open(path, "r") as f:
data = f.read() or "{}"
data = json.loads(data)
return data
@staticmethod
def readList(path):
"""
Legacy method for reading older .list file type.
:rtype: dict
"""
with open(path, "r") as f:
data = f.read()
data = eval(data, {})
result = {}
for obj in data:
result.setdefault(obj, {})
return {"objects": result}
@staticmethod
def readDict(path):
"""
Legacy method for reading older .dict file type.
:rtype: dict
"""
with open(path, "r") as f:
data = f.read()
data = eval(data, {})
result = {}
for obj in data:
result.setdefault(obj, {"attrs": {}})
for attr in data[obj]:
typ, val = data[obj][attr]
result[obj]["attrs"][attr] = {"type": typ, "value": val}
return {"objects": result}
def __init__(self):
self._path = None
self._namespaces = None
self._data = {"metadata": {}, "objects": {}}
def path(self):
"""
Return the disc location for the transfer object.
:rtype: str
"""
return self._path
def setPath(self, path):
"""
Set the disc location for loading and saving the transfer object.
:type path: str
"""
dictPath = path.replace(".json", ".dict")
listPath = path.replace(".json", ".list")
if not os.path.exists(path):
if os.path.exists(dictPath):
path = dictPath
elif os.path.exists(listPath):
path = listPath
self._path = path
def validate(self, **kwargs):
"""
Validate the given kwargs for the current IO object.
:type kwargs: dict
"""
namespaces = kwargs.get("namespaces")
if namespaces is not None:
sceneNamespaces = mutils.namespace.getAll() + [":"]
for namespace in namespaces:
if namespace and namespace not in sceneNamespaces:
msg = 'The namespace "{0}" does not exist in the scene! ' \
"Please choose a namespace which exists."
msg = msg.format(namespace)
raise ValueError(msg)
def mtime(self):
"""
Return the modification datetime of self.path().
:rtype: float
"""
return os.path.getmtime(self.path())
def ctime(self):
"""
Return the creation datetime of self.path().
:rtype: float
"""
return os.path.getctime(self.path())
def data(self):
"""
Return all the data for the transfer object.
:rtype: dict
"""
return self._data
def setData(self, data):
"""
Set the data for the transfer object.
:type data:
"""
self._data = data
def owner(self):
"""
Return the user who created this item.
:rtype: str
"""
return self.metadata().get("user", "")
def description(self):
"""
Return the user description for this item.
:rtype: str
"""
return self.metadata().get("description", "")
def objects(self):
"""
Return all the object data.
:rtype: dict
"""
return self.data().get("objects", {})
def object(self, name):
"""
Return the data for the given object name.
:type name: str
:rtype: dict
"""
return self.objects().get(name, {})
def createObjectData(self, name):
"""
Create the object data for the given object name.
:type name: str
:rtype: dict
"""
return {}
def namespaces(self):
"""
Return the namespaces contained in the transfer object
:rtype: list[str]
"""
if self._namespaces is None:
group = mutils.groupObjects(self.objects())
self._namespaces = group.keys()
return self._namespaces
def objectCount(self):
"""
Return the number of objects in the transfer object.
:rtype: int
"""
return len(self.objects() or [])
def add(self, objects):
"""
Add the given objects to the transfer object.
:type objects: str | list[str]
"""
if isinstance(objects, six.string_types):
objects = [objects]
for name in objects:
self.objects()[name] = self.createObjectData(name)
def remove(self, objects):
"""
Remove the given objects to the transfer object.
:type objects: str | list[str]
"""
if isinstance(objects, six.string_types):
objects = [objects]
for obj in objects:
del self.objects()[obj]
def setMetadata(self, key, value):
"""
Set the given key and value in the metadata.
:type key: str
:type value: int | str | float | dict
"""
self.data()["metadata"][key] = value
def updateMetadata(self, metadata):
"""
Update the given key and value in the metadata.
:type metadata: dict
"""
self.data()["metadata"].update(metadata)
def metadata(self):
"""
Return the current metadata for the transfer object.
Example: print(self.metadata())
Result # {
"User": "",
"Scene": "",
"Reference": {"filename": "", "namespace": ""},
"Description": "",
}
:rtype: dict
"""
return self.data().get("metadata", {})
def read(self, path=""):
"""
Return the data from the path set on the Transfer object.
:type path: str
:rtype: dict
"""
path = path or self.path()
if path.endswith(".dict"):
data = self.readDict(path)
elif path.endswith(".list"):
data = self.readList(path)
else:
data = self.readJson(path)
self.setData(data)
@abc.abstractmethod
def load(self, *args, **kwargs):
pass
@mutils.showWaitCursor
def save(self, path):
"""
Save the current metadata and object data to the given path.
:type path: str
:rtype: None
"""
logger.info("Saving pose: %s" % path)
user = getpass.getuser()
if user:
user = six.text_type(user)
ctime = str(time.time()).split(".")[0]
references = mutils.getReferenceData(self.objects())
self.setMetadata("user", user)
self.setMetadata("ctime", ctime)
self.setMetadata("version", "1.0.0")
self.setMetadata("references", references)
self.setMetadata("mayaVersion", maya.cmds.about(v=True))
self.setMetadata("mayaSceneFile", maya.cmds.file(q=True, sn=True))
# Move the metadata information to the top of the file
metadata = {"metadata": self.metadata()}
data = self.dump(metadata)[:-1] + ","
# Move the objects information to after the metadata
objects = {"objects": self.objects()}
data += self.dump(objects)[1:]
# Create the given directory if it doesn't exist
dirname = os.path.dirname(path)
if not os.path.exists(dirname):
os.makedirs(dirname)
with open(path, "w") as f:
f.write(str(data))
logger.info("Saved pose: %s" % path)
def dump(self, data=None):
"""
:type data: str | dict
:rtype: str
"""
if data is None:
data = self.data()
return json.dumps(data, indent=2)

View File

@ -0,0 +1,30 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
__version__ = "2.16.0"
def version():
"""
Return the current version of the Studio Library
:rtype: str
"""
return __version__
from studiolibrary import config
from studiolibrary import resource
from studiolibrary.utils import *
from studiolibrary.library import Library
from studiolibrary.libraryitem import LibraryItem
from studiolibrary.main import main

View File

@ -0,0 +1,94 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import os
import json
_config = None
def get(*args):
"""
Get values from the config.
:rtype: str
"""
global _config
if not _config:
_config = read(paths())
return _config.get(*args)
def set(key, value):
global _config
if not _config:
_config = read(paths())
_config[key] = value
def paths():
"""
Return all possible config paths.
:rtype: list[str]
"""
cwd = os.path.dirname(__file__)
paths_ = [os.path.join(cwd, "config", "default.json")]
path = os.environ.get("STUDIO_LIBRARY_CONFIG_PATH")
path = path or os.path.join(cwd, "config", "config.json")
if not os.path.exists(path):
cwd = os.path.dirname(os.path.dirname(cwd))
path = os.path.join(cwd, "config", "config.json")
if os.path.exists(path):
paths_.append(path)
return paths_
def read(paths):
"""
Read all paths and overwrite the keys with each successive file.
A custom config parser for passing JSON files.
We use this instead of the standard ConfigParser as the JSON format
can support list and dict types.
This parser can also support comments using the following style "//"
:type paths: list[str]
:rtype: dict
"""
conf = {}
for path in paths:
lines = []
with open(path) as f:
for line in f.readlines():
if not line.strip().startswith('//'):
lines.append(line)
data = '\n'.join(lines)
if data:
conf.update(json.loads(data))
return conf

View File

@ -0,0 +1,61 @@
// This is the default config file and should NOT be changed.
//
// There are two ways to create a custom config.
//
// 1. You can create a "config.json" at repo/config/config.json.
// This file will override any keys in this default.json file
// and will be ignored by git.
//
// 2. The other way is to create an environment variable with the name
// STUDIO_LIBRARY_CONFIG_PATH. The value of this variable should be the
// full path to your config.json file.
//
// 3. Or you could use code to modify the config before loading the window.
// import studiolibrary
// studiolibrary.config.set("recursiveSearchDepth", 6)
// studiolibrary.main()
{
// The database path is used for caching the library items.
// You can use environment variables within the path. eg: {HOME}
"databasePath": "{root}/.studiolibrary/database.json",
// The temp location used for saving out items and thumbnails
"tempPath": "{temp}/StudioLibrary/{user}",
// The metadata path used for each item. Used for tags, item color etc
// eg: /library/data/animation/nemo/.metadata
"metadataPath": "{path}/.studiolibrary/metadata.json",
// Used for saving persistent user data
"settingsPath": "{local}/StudioLibrary/LibraryWidget.json",
// The maximum walking depth from the root directory
"recursiveSearchDepth": 5,
// A list of paths to ignore when walking the root directory
"ignorePaths": ["/."],
// The command used to show a path in the file explorer
//"showInFolderCmd": "konqueror \"{path}\"&",
// Enables the scale factor option in the setting dialog
// This might be useful when using high-DPI devices like a 4k monitor
"scaleFactorEnabled": true,
// Check if there are any new versions available on start up
"checkForUpdatesEnabled": true,
// A list of the default item plugins
"itemRegistry": [
// This is an example item for development
// "studiolibrarymaya.exampleitem.ExampleItem",
// The maya file item is in development
// "studiolibrarymaya.mayafileitem.MayaFileItem",
"studiolibrarymaya.poseitem.PoseItem",
"studiolibrarymaya.animitem.AnimItem",
"studiolibrarymaya.mirroritem.MirrorItem",
"studiolibrarymaya.setsitem.SetsItem",
"studiolibrary.folderitem.FolderItem"
]
}

View File

@ -0,0 +1,364 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import os
from datetime import datetime
from studiovendor.Qt import QtGui
from studiovendor.Qt import QtCore
from studiovendor.Qt import QtWidgets
import studioqt
import studiolibrary
import studiolibrary.widgets
class FolderItem(studiolibrary.LibraryItem):
NAME = "Folder"
TYPE = "Folder"
MENU_ORDER = 0 # Show at the top of the menu
SYNC_ORDER = 100 # Last item to run when syncing
LOAD_WIDGET_CLASS = studiolibrary.widgets.PreviewWidget
ENABLE_NESTED_ITEMS = True
ICON_PATH = studiolibrary.resource.get("icons", "folder.svg")
TYPE_ICON_PATH = "" # Don't show a type icon for the folder item
THUMBNAIL_PATH = studiolibrary.resource.get("icons", "folder_item.png")
DEFAULT_ICON_COLOR = "rgba(150,150,150,100)"
DEFAULT_ICON_COLORS = [
"rgb(239, 112, 99)",
"rgb(239, 207, 103)",
"rgb(136, 200, 101)",
"rgb(111, 183, 239)",
"rgb(199, 142, 220)",
DEFAULT_ICON_COLOR,
]
DEFAULT_ICONS = [
"folder.svg",
"user.svg",
"character.svg",
"users.svg",
"inbox.svg",
"favorite.svg",
"shot.svg",
"asset.svg",
"assets.svg",
"cloud.svg",
"book.svg",
"archive.svg",
"circle.svg",
"share.svg",
"tree.svg",
"environment.svg",
"vehicle.svg",
"trash.svg",
"layers.svg",
"database.svg",
"video.svg",
"face.svg",
"hand.svg",
"globe.svg",
]
_THUMBNAIL_ICON_CACHE = {}
@classmethod
def match(cls, path):
"""
Return True if the given path is supported by the item.
:type path: str
:rtype: bool
"""
if os.path.isdir(path):
return True
def itemData(self):
"""
Reimplementing this method to set a trash folder icon.
:rtype: dict
"""
data = super(FolderItem, self).itemData()
if self.path().endswith("Trash") and not data.get("icon"):
data["icon"] = "trash.svg"
return data
def updateMetadata(self, metadata):
"""
Overriding this method to support updating the library widget directly.
:type metadata: dict
"""
super(FolderItem, self).updateMetadata(metadata)
if self.libraryWindow():
self.libraryWindow().setFolderData(self.path(), self.itemData())
self.updateIcon()
def doubleClicked(self):
"""Overriding this method to show the items contained in the folder."""
self.libraryWindow().selectFolderPath(self.path())
def createOverwriteMenu(self, menu):
"""
Overwriting this method to ignore/hide the overwrite menu action.
:type menu: QtWidgets.QMenu
"""
pass
def _showPreviewFromMenu(self):
self.libraryWindow().itemsWidget().clearSelection()
self.showPreviewWidget(self.libraryWindow())
def contextEditMenu(self, menu, items=None):
"""
Called when creating the context menu for the item.
:type menu: QtWidgets.QMenu
:type items: list[FolderItem] or None
"""
super(FolderItem, self).contextEditMenu(menu, items=items)
action = QtWidgets.QAction("Show in Preview", menu)
action.triggered.connect(self._showPreviewFromMenu)
menu.addAction(action)
menu.addSeparator()
action = studiolibrary.widgets.colorpicker.ColorPickerAction(menu)
action.picker().setColors(self.DEFAULT_ICON_COLORS)
action.picker().colorChanged.connect(self.setIconColor)
action.picker().setCurrentColor(self.iconColor())
action.picker().menuButton().hide()
menu.addAction(action)
iconName = self.itemData().get("icon", "")
action = studiolibrary.widgets.iconpicker.IconPickerAction(menu)
action.picker().setIcons(self.DEFAULT_ICONS)
action.picker().setCurrentIcon(iconName)
action.picker().iconChanged.connect(self.setCustomIcon)
action.picker().menuButton().hide()
menu.addAction(action)
def iconColor(self):
"""
Get the icon color for the folder item.
:rtype: str
"""
return self.itemData().get("color", "")
def setIconColor(self, color):
"""
Set the icon color for the folder item.
:type color: str
"""
if color == self.DEFAULT_ICON_COLOR:
color = ""
self.updateMetadata({"color": color})
def customIconPath(self):
"""
Get the icon for the folder item.
:rtype: str
"""
return self.itemData().get("icon", "")
def setCustomIcon(self, name):
"""
Set the icon for the folder item.
:type name: str
"""
if name == "folder.svg":
name = ""
self.updateMetadata({"icon": name})
def thumbnailIcon(self):
"""
Overriding this method add support for dynamic icon colors.
:rtype: QtGui.QIcon
"""
customPath = self.customIconPath()
if customPath and "/" not in customPath and "\\" not in customPath:
customPath = studiolibrary.resource.get("icons", customPath)
color = self.iconColor()
if not color:
color = self.DEFAULT_ICON_COLOR
key = customPath + color
icon = self._THUMBNAIL_ICON_CACHE.get(key)
if not icon:
color1 = studioqt.Color.fromString(color)
pixmap1 = studioqt.Pixmap(self.THUMBNAIL_PATH)
pixmap1.setColor(color1)
pixmap1 = pixmap1.scaled(
128,
128,
QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation
)
color2 = studioqt.Color.fromString("rgba(255,255,255,150)")
pixmap2 = studioqt.Pixmap(customPath)
pixmap2.setColor(color2)
pixmap2 = pixmap2.scaled(
64,
64,
QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation
)
x = (128 - pixmap2.width()) / 2
y = (128 - pixmap2.height()) / 2
painter = QtGui.QPainter(pixmap1)
painter.drawPixmap(x, y+5, pixmap2)
painter.end()
icon = studioqt.Icon(pixmap1)
self._THUMBNAIL_ICON_CACHE[key] = icon
return self._THUMBNAIL_ICON_CACHE.get(key)
def loadValidator(self, **kwargs):
"""
The validator used for validating the load arguments.
:type kwargs: dict
"""
if kwargs.get("fieldChanged") == "color":
self.setIconColor(kwargs.get("color"))
if kwargs.get("fieldChanged") == "icon":
self.setCustomIcon(kwargs.get("icon"))
def loadSchema(self):
"""
Get the info to display to user.
:rtype: list[dict]
"""
created = os.stat(self.path()).st_ctime
created = datetime.fromtimestamp(created).strftime("%Y-%m-%d %H:%M %p")
modified = os.stat(self.path()).st_mtime
modified = datetime.fromtimestamp(modified).strftime("%Y-%m-%d %H:%M %p")
iconName = self.itemData().get("icon", "")
return [
{
"name": "infoGroup",
"title": "Info",
"value": True,
"type": "group",
"persistent": True,
"persistentKey": "BaseItem",
},
{
"name": "name",
"value": self.name()
},
{
"name": "path",
"value": self.path()
},
{
"name": "created",
"value": created,
},
{
"name": "modified",
"value": modified,
},
{
"name": "optionsGroup",
"title": "Options",
"type": "group",
},
{
"name": "color",
"type": "color",
"value": self.iconColor(),
"layout": "vertical",
"label": {"visible": False},
"colors": self.DEFAULT_ICON_COLORS,
},
{
"name": "icon",
"type": "iconPicker",
"value": iconName,
"layout": "vertical",
"label": {"visible": False},
"items": self.DEFAULT_ICONS,
}
]
@classmethod
def showSaveWidget(cls, libraryWindow):
"""
Show the dialog for creating a new folder.
:rtype: None
"""
path = libraryWindow.selectedFolderPath() or libraryWindow.path()
name, button = studiolibrary.widgets.MessageBox.input(
libraryWindow,
"Create folder",
"Create a new folder with the name:",
buttons=[
("Create", QtWidgets.QDialogButtonBox.AcceptRole),
("Cancel", QtWidgets.QDialogButtonBox.RejectRole)
]
)
name = name.strip()
if name and button == "Create":
path = os.path.join(path, name)
item = cls(path, libraryWindow=libraryWindow)
item.safeSave()
if libraryWindow:
libraryWindow.refresh()
libraryWindow.selectFolderPath(path)
def save(self, *args, **kwargs):
"""Adding this method to avoid NotImpementedError."""
pass

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,866 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import os
import shutil
import logging
from functools import partial
from studiovendor.Qt import QtGui
from studiovendor.Qt import QtCore
from studiovendor.Qt import QtWidgets
import studiolibrary
import studiolibrary.widgets
import studiolibrary.librarywindow
import studioqt
logger = logging.getLogger(__name__)
class ItemError(Exception):
""""""
class ItemSaveError(ItemError):
""""""
class ItemLoadError(ItemError):
""""""
class LibraryItemSignals(QtCore.QObject):
""""""
saved = QtCore.Signal(object)
saving = QtCore.Signal(object)
loaded = QtCore.Signal(object)
copied = QtCore.Signal(object, object, object)
deleted = QtCore.Signal(object)
renamed = QtCore.Signal(object, object, object)
dataChanged = QtCore.Signal(object)
# Note: We will be changing the base class in the near future
class LibraryItem(studiolibrary.widgets.Item):
NAME = ""
TYPE = ""
THUMBNAIL_PATH = studiolibrary.resource.get("icons", "thumbnail.png")
EXTENSION = ""
EXTENSIONS = []
ENABLE_DELETE = False
ENABLE_NESTED_ITEMS = False
SYNC_ORDER = 10
MENU_ORDER = 10
SAVE_WIDGET_CLASS = None
LOAD_WIDGET_CLASS = None
_libraryItemSignals = LibraryItemSignals()
saved = _libraryItemSignals.saved
saving = _libraryItemSignals.saving
loaded = _libraryItemSignals.loaded
copied = _libraryItemSignals.renamed
renamed = _libraryItemSignals.renamed
deleted = _libraryItemSignals.deleted
dataChanged = _libraryItemSignals.dataChanged
def createItemData(self):
"""
Called when syncing the given path with the library cache.
:rtype: dict
"""
path = self.path()
itemData = dict(self.readMetadata())
dirname, basename, extension = studiolibrary.splitPath(path)
name = os.path.basename(path)
category = os.path.basename(dirname) or dirname
modified = ""
if os.path.exists(path):
modified = os.path.getmtime(path)
itemData.update({
"name": name,
"path": path,
"type": self.TYPE or extension,
"folder": dirname,
"category": category,
"modified": modified,
"__class__": self.__class__.__module__ + "." + self.__class__.__name__
})
return itemData
@classmethod
def createAction(cls, menu, libraryWindow):
"""
Return the action to be displayed when the user
ks the "plus" icon.
:type menu: QtWidgets.QMenu
:type libraryWindow: studiolibrary.LibraryWindow
:rtype: QtCore.QAction
"""
if cls.NAME:
icon = QtGui.QIcon(cls.ICON_PATH)
callback = partial(cls.showSaveWidget, libraryWindow)
action = QtWidgets.QAction(icon, cls.NAME, menu)
action.triggered.connect(callback)
return action
@classmethod
def showSaveWidget(cls, libraryWindow, item=None):
"""
Show the create widget for creating a new item.
:type libraryWindow: studiolibrary.LibraryWindow
:type item: studiolibrary.LibraryItem or None
"""
item = item or cls()
widget = cls.SAVE_WIDGET_CLASS(item=item)
libraryWindow.setCreateWidget(widget)
@classmethod
def isValidPath(cls, path):
"""
This method has been deprecated.
Please use LibraryItem.match(cls, path)
:type path: str
:rtype: bool
"""
return cls.match(path)
@classmethod
def match(cls, path):
"""
Return True if the given path location is supported by the item.
:type path: str
:rtype: bool
"""
extensions = cls.EXTENSIONS
if not extensions and cls.EXTENSION:
extensions = [cls.EXTENSION]
for ext in extensions:
if path.endswith(ext):
return True
return False
def __init__(
self,
path="",
library=None,
libraryWindow=None,
):
"""
The LibraryItem class provides an item for use with the LibraryWindow.
:type path: str
:type library: studiolibrary.Library or None
:type libraryWindow: studiolibrary.LibraryWindow or None
"""
super(LibraryItem, self).__init__()
self._path = path
self._modal = None
self._library = None
self._metadata = None
self._libraryWindow = None
self._readOnly = False
self._ignoreExistsDialog = False
if libraryWindow:
self.setLibraryWindow(libraryWindow)
if library:
self.setLibrary(library)
# if path:
# self.setPath(path)
def setReadOnly(self, readOnly):
"""
Set the item to read only.
:type readOnly: bool
"""
self._readOnly = readOnly
def isReadOnly(self):
"""
Check if the item is read only.
:rtype: bool
"""
if self.isLocked():
return True
return self._readOnly
def isLocked(self):
"""
Check if the item has been locked by the window.
:rtype: bool
"""
locked = False
if self.libraryWindow():
locked = self.libraryWindow().isLocked()
return locked
def isDeletable(self):
"""
Check if the item is deletable.
:rtype: bool
"""
if self.isLocked():
return False
return self.ENABLE_DELETE
def overwrite(self):
"""
Show the save widget with the input fields populated.
"""
self._ignoreExistsDialog = True
widget = self.showSaveWidget(self.libraryWindow(), item=self)
def loadSchema(self):
"""
Get the options used to load the item.
:rtype: list[dict]
"""
return []
def loadValidator(self, **kwargs):
"""
Validate the current load options.
:type kwargs: dict
:rtype: list[dict]
"""
return []
def load(self, *args, **kwargs):
"""
Reimplement this method for loading item data.
:type args: list
:type kwargs: dict
"""
raise NotImplementedError("The load method has not been implemented!")
def id(self):
"""
Return the unique id for the item.
:rtype: str
"""
return self.path()
def showToastMessage(self, text):
"""
A convenience method for showing the toast widget with the given text.
:type text: str
"""
if self.libraryWindow():
self.libraryWindow().showToastMessage(text)
def showErrorDialog(self, title, text):
"""
Convenience method for showing an error dialog to the user.
:type title: str
:type text: str
:rtype: QMessageBox.StandardButton or None
"""
if self.libraryWindow():
self.libraryWindow().showErrorMessage(text)
button = None
if not self._modal:
self._modal = True
try:
button = studiolibrary.widgets.MessageBox.critical(self.libraryWindow(), title, text)
finally:
self._modal = False
return button
def showExceptionDialog(self, title, error):
"""
Convenience method for showing a question dialog to the user.
:type title: str
:type error: Exception
:rtype: QMessageBox.StandardButton
"""
logger.exception(error)
return self.showErrorDialog(title, error)
def showQuestionDialog(self, title, text):
"""
Convenience method for showing a question dialog to the user.
:type title: str
:type text: str
:rtype: QMessageBox.StandardButton
"""
return studiolibrary.widgets.MessageBox.question(self.libraryWindow(), title, text)
def thumbnailPath(self):
"""
Return the thumbnail location on disc for this item.
:rtype: str
"""
thumbnailPath = self.path() + "/thumbnail.jpg"
if os.path.exists(thumbnailPath):
return thumbnailPath
thumbnailPath = thumbnailPath.replace(".jpg", ".png")
if os.path.exists(thumbnailPath):
return thumbnailPath
return self.THUMBNAIL_PATH
def isTHUMBNAIL_PATH(self):
"""
Check if the thumbnail path is the default path.
:rtype: bool
"""
return self.thumbnailPath() == self.THUMBNAIL_PATH
def showPreviewWidget(self, libraryWindow):
"""
Show the preview Widget for the item instance.
:type libraryWindow: studiolibrary.LibraryWindow
"""
widget = self.previewWidget(libraryWindow)
libraryWindow.setPreviewWidget(widget)
def previewWidget(self, libraryWindow):
"""
Return the widget to be shown when the user clicks on the item.
:type libraryWindow: studiolibrary.LibraryWindow
:rtype: QtWidgets.QWidget or None
"""
widget = None
if self.LOAD_WIDGET_CLASS:
widget = self.LOAD_WIDGET_CLASS(item=self)
return widget
def contextEditMenu(self, menu, items=None):
"""
Called when the user would like to edit the item from the menu.
The given menu is shown as a submenu of the main context menu.
:type menu: QtWidgets.QMenu
:type items: list[LibraryItem] or None
"""
# Adding a blank icon fixes the text alignment issue when using Qt 5.12.+
icon = studiolibrary.resource.icon("blank")
action = QtWidgets.QAction("Rename", menu)
action.triggered.connect(self.showRenameDialog)
action.setIcon(icon)
menu.addAction(action)
action = QtWidgets.QAction("Move to", menu)
action.triggered.connect(self.showMoveDialog)
menu.addAction(action)
action = QtWidgets.QAction("Copy Path", menu)
action.triggered.connect(self.copyPathToClipboard)
menu.addAction(action)
if self.libraryWindow():
action = QtWidgets.QAction("Select Folder", menu)
action.triggered.connect(self.selectFolder)
menu.addAction(action)
action = QtWidgets.QAction("Show in Folder", menu)
action.triggered.connect(self.showInFolder)
menu.addAction(action)
if self.isDeletable():
menu.addSeparator()
action = QtWidgets.QAction("Delete", menu)
action.triggered.connect(self.showDeleteDialog)
menu.addAction(action)
self.createOverwriteMenu(menu)
def createOverwriteMenu(self, menu):
"""
Create a menu or action to trigger the overwrite method.
:type menu: QtWidgets.QMenu
"""
if not self.isReadOnly():
menu.addSeparator()
action = QtWidgets.QAction("Overwrite", menu)
action.triggered.connect(self.overwrite)
menu.addAction(action)
def copyPathToClipboard(self):
"""Copy the item path to the system clipboard."""
cb = QtWidgets.QApplication.clipboard()
cb.clear(mode=cb.Clipboard)
cb.setText(self.path(), mode=cb.Clipboard)
def contextMenu(self, menu, items=None):
"""
Called when the user right clicks on the item.
:type menu: QtWidgets.QMenu
:type items: list[LibraryItem]
:rtype: None
"""
pass
def showInFolder(self):
"""Open the file explorer at the given path location."""
path = self.path()
studiolibrary.showInFolder(path)
def selectFolder(self):
"""select the folder in the library widget"""
if self.libraryWindow():
path = '/'.join(studiolibrary.normPath(self.path()).split('/')[:-1])
self.libraryWindow().selectFolderPath(path)
def url(self):
"""Used by the mime data when dragging/dropping the item."""
return QtCore.QUrl("file:///" + self.path())
def setLibraryWindow(self, libraryWindow):
"""
Set the library widget containing the item.
:rtype: studiolibrary.LibraryWindow or None
"""
self._libraryWindow = libraryWindow
def libraryWindow(self):
"""
Return the library widget containing the item.
:rtype: studiolibrary.LibraryWindow or None
"""
return self._libraryWindow
def setLibrary(self, library):
"""
Set the library model for the item.
:type library: studiolibrary.Library
"""
self._library = library
def library(self):
"""
Return the library model for the item.
:rtype: studiolibrary.Library or None
"""
if not self._library and self.libraryWindow():
return self.libraryWindow().library()
return self._library
def setIconPath(self, path):
"""
Set the icon path for the current item.
:type path: str
:rtype: None
"""
self._iconPath = path
def iconPath(self):
"""
Return the icon path for the current item.
:rtype: None
"""
return self._iconPath
def mimeText(self):
"""
:rtype: str
"""
return self.path()
def path(self):
"""
Get the path for the item.
:rtype: str
"""
return self._path
def setPath(self, path):
"""
Set the path for the item.
:rtype: str
"""
self._path = studiolibrary.normPath(path)
def setMetadata(self, metadata):
"""
Set the given metadata for the item.
:type metadata: dict
"""
self._metadata = metadata
def metadata(self):
"""
Get the metadata for the item from disc.
:rtype: dict
"""
return self._metadata
def updateMetadata(self, metadata):
"""
Update the current metadata from disc with the given metadata.
:type metadata: dict
"""
metadata_ = self.readMetadata()
metadata_.update(metadata)
self.saveMetadata(metadata_)
def saveMetadata(self, metadata):
"""
Save the given metadata to disc.
:type metadata: dict
"""
formatString = studiolibrary.config.get('metadataPath')
path = studiolibrary.formatPath(formatString, self.path())
studiolibrary.saveJson(path, metadata)
self.setMetadata(metadata)
self.syncItemData(emitDataChanged=False)
self.dataChanged.emit(self)
def readMetadata(self):
"""
Read the metadata for the item from disc.
:rtype: dict
"""
if self._metadata is None:
formatString = studiolibrary.config.get('metadataPath')
path = studiolibrary.formatPath(formatString, self.path())
if os.path.exists(path):
self._metadata = studiolibrary.readJson(path)
else:
self._metadata = {}
return self._metadata
def syncItemData(self, emitDataChanged=True):
"""Sync the item data to the database."""
data = self.createItemData()
self.setItemData(data)
if self.library():
self.library().saveItemData([self], emitDataChanged=emitDataChanged)
def saveSchema(self):
"""
Get the schema used for saving the item.
:rtype: list[dict]
"""
return []
def saveValidator(self, **fields):
"""
Validate the given save fields.
:type fields: dict
:rtype: list[dict]
"""
return []
@studioqt.showWaitCursor
def safeSave(self, *args, **kwargs):
"""
Safe save the item.
"""
dst = self.path()
if dst and not dst.endswith(self.EXTENSION):
dst += self.EXTENSION
self.setPath(dst)
logger.debug(u'Item Saving: {0}'.format(dst))
self.saving.emit(self)
if os.path.exists(dst):
if self._ignoreExistsDialog:
self._moveToTrash()
else:
self.showAlreadyExistsDialog()
tmp = studiolibrary.createTempPath(self.__class__.__name__)
self.setPath(tmp)
self.save(*args, **kwargs)
shutil.move(tmp, dst)
self.setPath(dst)
self.syncItemData()
if self.libraryWindow():
self.libraryWindow().selectItems([self])
self.saved.emit(self)
logger.debug(u'Item Saved: {0}'.format(dst))
def save(self, *args, **kwargs):
"""
Save the item io data to the given path.
:type args: list
:type kwargs: dict
"""
raise NotImplementedError("The save method has not been implemented!")
# -----------------------------------------------------------------
# Support for copy and rename
# -----------------------------------------------------------------
def delete(self):
"""
Delete the item from disc and the library model.
:rtype: None
"""
studiolibrary.removePath(self.path())
if self.library():
self.library().removePath(self.path())
self.deleted.emit(self)
def copy(self, dst):
"""
Make a copy/duplicate the current item to the given destination.
:type dst: str
:rtype: None
"""
src = self.path()
dst = studiolibrary.copyPath(src, dst)
if self.library():
self.library().copyPath(src, dst)
self.copied.emit(self, src, dst)
if self.libraryWindow():
self.libraryWindow().refresh()
def move(self, dst):
"""
Move the current item to the given destination.
:type dst: str
:rtype: None
"""
self.rename(dst)
def rename(self, dst, extension=None):
"""
Rename the current path to the given destination path.
:type dst: str
:type extension: bool or None
:rtype: None
"""
extension = extension or self.EXTENSION
if dst and extension not in dst:
dst += extension
src = self.path()
# Rename the path on the filesystem
dst = studiolibrary.renamePath(src, dst)
# Rename the path inside the library database
if self.library():
self.library().renamePath(src, dst)
self._path = dst
self.syncItemData()
self.renamed.emit(self, src, dst)
def showRenameDialog(self, parent=None):
"""
Show the rename dialog.
:type parent: QtWidgets.QWidget
"""
select = False
if self.libraryWindow():
parent = parent or self.libraryWindow()
select = self.libraryWindow().selectedFolderPath() == self.path()
name, button = studiolibrary.widgets.MessageBox.input(
parent,
"Rename item",
"Rename the current item to:",
inputText=self.name(),
buttons=[
("Rename", QtWidgets.QDialogButtonBox.AcceptRole),
("Cancel", QtWidgets.QDialogButtonBox.RejectRole)
]
)
if button == "Rename":
try:
self.rename(name)
if select:
self.libraryWindow().selectFolderPath(self.path())
except Exception as error:
self.showExceptionDialog("Rename Error", error)
raise
return button
def showMoveDialog(self, parent=None):
"""
Show the move to browser dialog.
:type parent: QtWidgets.QWidget
"""
title = "Move To..."
path = os.path.dirname(os.path.dirname(self.path()))
dst = QtWidgets.QFileDialog.getExistingDirectory(None, title, path)
if dst:
dst = "{}/{}".format(dst, os.path.basename(self.path()))
try:
self.move(dst)
except Exception as error:
self.showExceptionDialog("Move Error", error)
raise
def showDeleteDialog(self):
"""
Show the delete item dialog.
:rtype: None
"""
text = 'Are you sure you want to delete this item?'
button = self.showQuestionDialog("Delete Item", text)
if button == QtWidgets.QDialogButtonBox.Yes:
try:
self.delete()
except Exception as error:
self.showExceptionDialog("Delete Error", error)
raise
def showAlreadyExistsDialog(self):
"""
Show a warning dialog if the item already exists on save.
:rtype: None
"""
if not self.libraryWindow():
raise ItemSaveError("Item already exists!")
title = "Item already exists"
text = 'Would you like to move the existing item "{}" to the trash?'
text = text.format(os.path.basename(self.path()))
buttons = [
QtWidgets.QDialogButtonBox.Yes,
QtWidgets.QDialogButtonBox.Cancel
]
try:
QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.ArrowCursor)
button = self.libraryWindow().showQuestionDialog(title, text, buttons)
finally:
QtWidgets.QApplication.restoreOverrideCursor()
if button == QtWidgets.QDialogButtonBox.Yes:
self._moveToTrash()
else:
raise ItemSaveError("You cannot save over an existing item.")
return button
# -----------------------------------------------------------------
# Support for painting the type icon
# -----------------------------------------------------------------
def _moveToTrash(self):
"""
Move the current item to the trash.
This method should only be used when saving.
"""
path = self.path()
library = self.library()
item = studiolibrary.LibraryItem(path, library=library)
self.libraryWindow().moveItemsToTrash([item])
# self.setPath(path)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,58 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import studioqt
import studiolibrary
def main(*args, **kwargs):
"""
Convenience method for creating/showing a library widget instance.
return studiolibrary.LibraryWindow.instance(
name="",
path="",
show=True,
lock=False,
superusers=None,
lockRegExp=None,
unlockRegExp=None
)
:rtype: studiolibrary.LibraryWindow
"""
# Reload all Studio Library modules when Shift is pressed.
# This is for developers to test their changes in a DCC application.
if studioqt.isShiftModifier():
import studiolibrary
studiolibrary.reload()
# Register all the items from the config file.
import studiolibrary
studiolibrary.registerItems()
if studiolibrary.isMaya():
from studiolibrarymaya import mayalibrarywindow
libraryWindow = mayalibrarywindow.MayaLibraryWindow.instance(*args, **kwargs)
else:
from studiolibrary import librarywindow
libraryWindow = librarywindow.LibraryWindow.instance(*args, **kwargs)
return libraryWindow
if __name__ == "__main__":
# Run the Studio Library in a QApplication instance
import studioqt
with studioqt.app():
studiolibrary.main()

View File

@ -0,0 +1,74 @@
# Copyright 2020 by Kurt Rathjen. All Rights Reserved.
#
# This library is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. This library is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import os
from studioqt import Icon
from studioqt import Pixmap
from . import utils
PATH = os.path.abspath(__file__)
DIRNAME = os.path.dirname(PATH)
RESOURCE_DIRNAME = os.path.join(DIRNAME, "resource")
def get(*args):
"""
This is a convenience function for returning the resource path.
:rtype: str
"""
path = os.path.join(RESOURCE_DIRNAME, *args)
return utils.normPath(path)
def icon(*args, **kwargs):
"""
Return an Icon object from the given resource name.
:rtype: str
"""
path = get("icons", *args)
return Icon(pixmap(path, **kwargs))
def pixmap(name, scope="icons", extension="png", color=None):
"""
Return a Pixmap object from the given resource name.
:type name: str
:type scope: str
:type extension: str
:type color: str
:rtype: QtWidgets.QPixmap
"""
if name.endswith(".svg"):
extension = ""
path = ""
if os.path.exists(name):
path = name
elif extension:
path = get(scope, name + "." + extension)
if not os.path.exists(path):
path = get(scope, name + ".svg")
p = Pixmap(path)
if color:
p.setColor(color)
return p

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z"/></svg>

After

Width:  |  Height:  |  Size: 344 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M69.4 210.6C89.8 126.5 165.6 64 256 64c71.1 0 133.1 38.6 166.3 96H368c-8.8 0-16 7.2-16 16s7.2 16 16 16h80.7H464c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16s-16 7.2-16 16v60.6C408.8 75.5 337.5 32 256 32C149.6 32 60.5 106.2 37.7 205.6C35.5 215.2 43.1 224 53 224c7.9 0 14.6-5.7 16.5-13.4zm373.2 90.9C422.2 385.5 346.4 448 256 448c-71.1 0-133.1-38.6-166.3-96h54.5c8.8 0 16-7.2 16-16s-7.2-16-16-16H63.3 48.2c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V371.8C103.4 436.6 174.7 480 256 480c106.4 0 195.5-74.2 218.3-173.6c2.2-9.6-5.4-18.4-15.3-18.4c-7.9 0-14.6 5.7-16.5 13.4z"/></svg>

After

Width:  |  Height:  |  Size: 823 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"/></svg>

After

Width:  |  Height:  |  Size: 374 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z"/></svg>

After

Width:  |  Height:  |  Size: 687 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M0 80c0-8.8 7.2-16 16-16H432c8.8 0 16 7.2 16 16s-7.2 16-16 16H16C7.2 96 0 88.8 0 80zM0 240c0-8.8 7.2-16 16-16H432c8.8 0 16 7.2 16 16s-7.2 16-16 16H16c-8.8 0-16-7.2-16-16zM448 400c0 8.8-7.2 16-16 16H16c-8.8 0-16-7.2-16-16s7.2-16 16-16H432c8.8 0 16 7.2 16 16z"/></svg>

After

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM272 160l26.66 53.33L352 240l-53.34 26.67L272 320l-26.66-53.33L192 240l53.34-26.67L272 160zM160 96l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16zm220.8 352H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z"/></svg>

After

Width:  |  Height:  |  Size: 479 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Some files were not shown because too many files have changed in this diff Show More