This commit is contained in:
2025-11-24 00:15:32 +08:00
parent 9f7667a475
commit 0eeeb54784
256 changed files with 49494 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,64 @@
# Studio Library
Studio Library 是一个免费的动画库工具,用于在 Autodesk Maya 中管理姿势和动画。
## 版本
Studio Library 2.20.2
## 官方信息
- **官网**: https://www.studiolibrary.com
- **GitHub**: https://github.com/krathjen/studiolibrary
- **作者**: Kurt Rathjen
## 功能特性
- 保存和加载动画姿势
- 管理动画片段
- 镜像姿势和动画
- 选择集管理
- 自定义缩略图
- 支持多个库
- 拖放操作
- 搜索和过滤
## 使用方法
### 在 Python 中启动
```python
import sys
import os
studiolibrary_path = r'h:\Workspace\Raw\Tools\Plugins\Maya\2023\scripts\animation_tools\studiolibrary'
if studiolibrary_path not in sys.path:
sys.path.insert(0, studiolibrary_path)
import studiolibrary
studiolibrary.main()
```
### 从工具架启动
点击动画工具架上的 **StudioLib** 按钮即可启动。
## 模块结构
此模块包含以下子模块:
- **studiolibrary**: 核心库模块
- **studiolibrarymaya**: Maya 集成模块
- **mutils**: Maya 工具函数
- **studioqt**: Qt 界面组件
- **studiovendor**: 第三方依赖
## 注意事项
- 首次使用需要设置库路径
- 支持 Maya 2017 及更高版本
- 需要 PySide2 或 PySide6Maya 自带)
## 许可证
GNU Lesser General Public License v3.0

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,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(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()
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(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(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()
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,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.20.2"
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,367 @@
# 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 updatePermissionsEnabled(self):
return True
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,913 @@
# 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
"""
import studiolibrary.library
path = self.path()
path = studiolibrary.latestVersionPath(path) or path
if studiolibrary.isVersionPath(path):
dirname = os.path.dirname(path)
name = os.path.basename(dirname)
dirname, basename, extension = studiolibrary.splitPath(dirname)
else:
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 = dict(self.readMetadata())
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 updatePermissionsEnabled(self):
return False
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 isVersionPath(self):
return studiolibrary.isVersionPath(self.path())
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")
enabled = not self.isVersionPath()
action = QtWidgets.QAction("Rename", menu)
action.setEnabled(enabled)
action.setIcon(icon)
action.triggered.connect(self.showRenameDialog)
menu.addAction(action)
action = QtWidgets.QAction("Move to", menu)
action.setEnabled(enabled)
action.triggered.connect(self.showMoveDialog)
menu.addAction(action)
action = QtWidgets.QAction("Copy Path", menu)
action.triggered.connect(self.copyPathToClipboard)
action.setEnabled(enabled)
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.setEnabled(enabled)
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():
enabled = not self.isVersionPath()
menu.addSeparator()
action = QtWidgets.QAction("Overwrite", menu)
action.setEnabled(enabled)
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)
if self.updatePermissionsEnabled():
self.library().updatePermissions(path)
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 studiolibrary.latestVersionPath(self.path()):
raise NameError("You can only save items that were "
"created using Studio Library version 2!")
elif 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)
if self.updatePermissionsEnabled():
self.library().updatePermissions(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
"""
if self.isVersionPath():
raise NameError("You can only rename items that were "
"created using Studio Library version 2!")
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
"""
if self.isVersionPath():
raise NameError("You can only move items that were "
"created using Studio Library version 2!")
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
"""
if self.isVersionPath():
raise NameError("You can only delete items that were "
"created using Studio Library version 2!")
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 self.isVersionPath():
raise NameError("You can only override items that were "
"created using Studio Library version 2!")
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

Binary file not shown.

After

Width:  |  Height:  |  Size: 705 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88zm-120 0c0-17.6 14.4-32 32-32 8.8 0 16-7.2 16-16s-7.2-16-16-16c-35.3 0-64 28.7-64 64 0 8.8 7.2 16 16 16s16-7.2 16-16z"/></svg>

After

Width:  |  Height:  |  Size: 538 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z"/></svg>

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 963 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"/></svg>

After

Width:  |  Height:  |  Size: 199 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"/></svg>

After

Width:  |  Height:  |  Size: 232 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z"/></svg>

After

Width:  |  Height:  |  Size: 787 B

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