Skip to content

Instantly share code, notes, and snippets.

@madoodia
Created March 1, 2016 11:04
Show Gist options
  • Save madoodia/1ec33c8c7c12794c0242 to your computer and use it in GitHub Desktop.
Save madoodia/1ec33c8c7c12794c0242 to your computer and use it in GitHub Desktop.
# madoodia@gmail.com
# --------------------
import pyblish.api
from maya import cmds, mel
def _get_has_history():
invalid = []
for node in cmds.ls(type='mesh'):
if len(cmds.listHistory(node)) > 1:
invalid.append(node)
continue
return invalid
class ClearHistoryAction(pyblish.api.Action):
label = "Clear History"
on = "failed"
icon = "hand-o-up"
def process(self, instance):
"""Repair by deleting the history of meshes"""
invalid = _get_has_history()
for each in invalid:
cmds.select(each, r=True)
mel.eval("DeleteHistory;")
self.log.info("Success on deleting history of %s" % each)
class ValidateHistory(pyblish.api.InstancePlugin):
"""Your model have History or not..!?"""
order = pyblish.api.ValidatorOrder
families = ['anr.model']
hosts = ['maya']
optional = True
label = "Detect History"
version = (0, 0, 2)
actions = [
pyblish.api.Category("Clear History"),
ClearHistoryAction
]
def process(self, instance):
invalid = _get_has_history()
if invalid:
raise RuntimeError(
"Meshes found in instance[{0}] with history: {1}".format(instance, invalid))
# def repair(self, instance):
# """Repair by deleting the empty layers"""
# invalid = self._get_has_history()
# for each in invalid:
# cmds.select(each, r=True)
# mel.eval("DeleteHistory;")
# self.log.info("Success on deleting history of %s" % each)
@BigRoy
Copy link

BigRoy commented Mar 1, 2016

Make sure you only check the objects in the instance. Here's some updated code:

import pyblish.api
from maya import cmds, mel


def _get_has_history(instance):
    """Return meshes in instance with history"""
    invalid = []
    for node in cmds.ls(instance, type='mesh'):
        if len(cmds.listHistory(node)) > 1:
            invalid.append(node)
            continue
    return invalid


class ClearHistoryAction(pyblish.api.Action):
    label = "Clear History"
    on = "failed"
    icon = "hand-o-up"

    def process(self, instance):
        """Repair by deleting the history of meshes"""
        invalid = _get_has_history(instance)
        for each in invalid:
            cmds.select(each, r=True)
            mel.eval("DeleteHistory;")
            self.log.info("Success on deleting history of %s" % each)


class ValidateHistory(pyblish.api.InstancePlugin):
    """Your model have History or not..!?"""

    order = pyblish.api.ValidatorOrder
    families = ['anr.model']
    hosts = ['maya']
    optional = True
    label = "Detect History"
    version = (0, 0, 2)

    actions = [
        pyblish.api.Category("Clear History"),
        ClearHistoryAction
    ]

    def process(self, instance):
        invalid = _get_has_history(instance)

        if invalid:
            raise RuntimeError(
                "Meshes found in instance[{0}] with history: {1}".format(instance, invalid))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment