def doIt(self, args): self.parseArguments(args) sel = om.MGlobal.getActiveSelectionList() __, vertices = sel.getComponent(0) fn_vertices = om.MFnSingleIndexedComponent(vertices) self.verts = fn_vertices.getElements() self.path = sel.getDagPath(0) self.mesh = om.MFnMesh(self.path) self.colors = self.mesh.getVertexColors() self.sourceCols = self.mesh.getVertexColors() self.redoIt()
def redoIt(self): for v in self.verts: self.colors[v].r = self.sourceCols[v].b self.mesh.setVertexColor(self.colors[v], v) def undoIt(self): for v in self.verts: self.mesh.setVertexColor(self.sourceCols[v], v)
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/32ee3511-374b-4a10-9786-618e1de289fb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
import sysimport osimport jsonimport mathimport maya.cmds as cmdsimport maya.mel as melimport maya.api.OpenMaya as om
inChFlagShort = '-fc'inChFlagLong = '-fromChannel'outChFlagShort = '-tc'outChFlagLong = '-toChannel'addChFlagShort = '-add'addChFlagLong = '-addChannel'
def maya_useNewAPI(): """ The presence of this function tells Maya that the plugin produces, and expects to be passed, objects created using the Maya Python API 2.0. """ pass
class CopyChannels(om.MPxCommand): kPluginCmdName = "copyChannels"
def __init__(self): om.MPxCommand.__init__(self) self.channels = '' self.verts = [] self.sourceCols = None #self.schema = {'r': 0,'g': 1,'b': 2,'a': 3}
@staticmethod def cmdCreator(): return CopyChannels()
def isUndoable(self): return True
def doIt(self, args): if self.parseArguments(args) is False: print("Problem with args") return self.parseArguments(args) self.extractChannelPairs() sel = om.MGlobal.getActiveSelectionList() if sel.isEmpty(): return
__, vertices = sel.getComponent(0) fn_vertices = om.MFnSingleIndexedComponent(vertices) self.verts = fn_vertices.getElements() self.path = sel.getDagPath(0) self.mesh = om.MFnMesh(self.path)
self.vertexCount = self.mesh.numVertices
self.colors = self.mesh.getVertexColors()
self.sourceCols = self.mesh.getVertexColors() self.redoIt()
def redoIt(self): for v in self.verts: self.colors[v].r = self.sourceCols[v].b self.mesh.setVertexColor(self.colors[v], v)
def undoIt(self): for v in self.verts: self.mesh.setVertexColor(self.sourceCols[v], v)
def parseArguments(self, args):
argData = om.MArgParser(self.syntax(), args)
if argData.isFlagSet(inChFlagShort): self.channels = argData.flagArgumentString(inChFlagShort, 0) else: print("Flag {} is missing".format(inChFlagLong)) return False if argData.isFlagSet(addChFlagShort): self.addToChannel = argData.flagArgumentBool(addChFlagShort, 0) else: self.addToChannel = False return True
def extractChannelPairs(self): self.channelPairs = self.channels.split('_')[1:] for ch in self.channelPairs: print(ch)
def syntaxCreator(): syntax = om.MSyntax()
syntax.useSelectionAsDefault(True) syntax.setObjectType(om.MSyntax.kSelectionList) syntax.addFlag(inChFlagShort, inChFlagLong, om.MSyntax.kString) #syntax.addFlag(outChFlagShort, outChFlagLong, om.MSyntax.kString) syntax.addFlag(addChFlagShort, addChFlagLong, om.MSyntax.kDouble)
return syntax
commands = [ CopyChannels]
def initializePlugin(plugin):
pluginFn = om.MFnPlugin(plugin) for cmd in commands: try: pluginFn.registerCommand(cmd.kPluginCmdName, cmd.cmdCreator, syntaxCreator) except: sys.stderr.write("Failed to register command: %s\n" % cmd.kPluginCmdName) raise
def uninitializePlugin(plugin): pluginFn = om.MFnPlugin(plugin) for cmd in commands: try: pluginFn.deregisterCommand(cmd.kPluginCmdName) except: sys.stderr.write("Failed to unregister command: %s\n" % cmd.kPluginCmdName ) raise
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
It is important to notice that the command does not store a pointer to an MObject, but rather uses an MDagPath to reference the curve for undo and redo. An MObject is not guaranteed to be valid the next time your command is executed. As a result, if you had used an MObject, Maya would likely core dump when performing your undoIt() or redoIt(). An MDagPath however, being simply a description of the path to the curve, is guaranteed to be correct whenever your command is executed.
class CopyChannels(om.MPxCommand): kPluginCmdName = "copyChannels"
def __init__(self): om.MPxCommand.__init__(self) self.channels = '' self.verts = [] self.sourceCols = None
self.sel = None self.path = om.MDagPath()
#self.schema = {'r': 0,'g': 1,'b': 2,'a': 3}
@staticmethod def cmdCreator(): return CopyChannels()
def isUndoable(self): return True
def doIt(self, args): if self.parseArguments(args) is False: print("Problem with args") return
self.sel = om.MGlobal.getActiveSelectionList() if self.sel.isEmpty(): return self.parseArguments(args) self.extractChannelPairs() self.path = self.sel.getDagPath(0) __, vertices = self.sel.getComponent(0)
fn_vertices = om.MFnSingleIndexedComponent(vertices) self.verts = fn_vertices.getElements()
self.redoIt()
def redoIt(self):
self.mesh = om.MFnMesh(self.path) self.vertexCount = self.mesh.numVertices
self.colors = self.mesh.getVertexColors() self.sourceCols = self.mesh.getVertexColors()
for v in self.verts: self.colors[v].r = self.sourceCols[v].b self.mesh.setVertexColor(self.colors[v], v)
def undoIt(self):
self.mesh = om.MFnMesh(self.path)
for v in self.verts: self.mesh.setVertexColor(self.sourceCols[v], v)