mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 08:24:53 +01:00
96 lines
3.5 KiB
Python
96 lines
3.5 KiB
Python
import os
|
|
|
|
import avalon.maya
|
|
import pype.api
|
|
|
|
from maya import cmds
|
|
|
|
|
|
class ExtractAssStandin(pype.api.Extractor):
|
|
"""Extract the content of the instance to a ass file
|
|
|
|
Things to pay attention to:
|
|
- If animation is toggled, are the frames correct
|
|
-
|
|
"""
|
|
|
|
label = "Ass Standin (.ass)"
|
|
hosts = ["maya"]
|
|
families = ["ass"]
|
|
asciiAss = False
|
|
|
|
def process(self, instance):
|
|
|
|
sequence = instance.data.get("exportSequence", False)
|
|
|
|
staging_dir = self.staging_dir(instance)
|
|
filename = "{}.ass".format(instance.name)
|
|
filenames = list()
|
|
file_path = os.path.join(staging_dir, filename)
|
|
|
|
# Write out .ass file
|
|
self.log.info("Writing: '%s'" % file_path)
|
|
with avalon.maya.maintained_selection():
|
|
self.log.info("Writing: {}".format(instance.data["setMembers"]))
|
|
cmds.select(instance.data["setMembers"], noExpand=True)
|
|
|
|
if sequence:
|
|
self.log.info("Extracting ass sequence")
|
|
|
|
# Collect the start and end including handles
|
|
start = instance.data.get("frameStart", 1)
|
|
end = instance.data.get("frameEnd", 1)
|
|
handles = instance.data.get("handles", 0)
|
|
step = instance.data.get("step", 0)
|
|
if handles:
|
|
start -= handles
|
|
end += handles
|
|
|
|
exported_files = cmds.arnoldExportAss(filename=file_path,
|
|
selected=True,
|
|
asciiAss=self.asciiAss,
|
|
shadowLinks=True,
|
|
lightLinks=True,
|
|
boundingBox=True,
|
|
startFrame=start,
|
|
endFrame=end,
|
|
frameStep=step
|
|
)
|
|
for file in exported_files:
|
|
filenames.append(os.path.split(file)[1])
|
|
self.log.info("Exported: {}".format(filenames))
|
|
else:
|
|
self.log.info("Extracting ass")
|
|
cmds.arnoldExportAss(filename=file_path,
|
|
selected=True,
|
|
asciiAss=False,
|
|
shadowLinks=True,
|
|
lightLinks=True,
|
|
boundingBox=True
|
|
)
|
|
self.log.info("Extracted {}".format(filename))
|
|
filenames = filename
|
|
optionals = [
|
|
"frameStart", "frameEnd", "step", "handles",
|
|
"handleEnd", "handleStart"
|
|
]
|
|
for key in optionals:
|
|
instance.data.pop(key, None)
|
|
|
|
if "representations" not in instance.data:
|
|
instance.data["representations"] = []
|
|
|
|
representation = {
|
|
'name': 'ass',
|
|
'ext': 'ass',
|
|
'files': filenames,
|
|
"stagingDir": staging_dir
|
|
}
|
|
|
|
if sequence:
|
|
representation['frameStart'] = start
|
|
|
|
instance.data["representations"].append(representation)
|
|
|
|
self.log.info("Extracted instance '%s' to: %s"
|
|
% (instance.name, staging_dir))
|