Thanks a lot, dean! Will try it later this evening.
Problem with crashing is that it does not print anyting (when I create node, it prints all the status messages one by one with correct values) When I connect/create new scene, maya just crashes...I haven't really noticed any print statement in script editor. But I will try to incorporate more substep printing to see what part of the checking procedure does the crashing. Will let you know about the progress. Thanks for your help, again! MaxtorAG 2008/9/25 Dean Edmonds <[EMAIL PROTECTED]> > > On Thu, Sep 25, 2008 at 7:16 AM, Mario Dubec <[EMAIL PROTECTED]> wrote: > > Ok, i will try that if statement at the beginning. > > > > It crashes either: > > 1. when i plug anything into it, correct or incorrect does not matter > > 2. when I have plugin loaded and try to create new scene in current Maya > > session > > No, I meant at what point in your compute() method does it crash. You > have a print statement at each stage. What's the last one to be > displayed before it crashes? > > > By moving it to connection methods, should I call them at the beginning > of > > compute? Or return some status from them? (like unknown parameter) Never > > used those :( I am quite new to API :( > > You don't need to call the connection methods at all. Maya will call > them whenever a connection is made to your node or broken. So you'd > want something like this: > > import maya.OpenMaya as om > import maya.OpenMayaFX as omfx > > class myNode(om.MPxNode): > particleNode = om.MObject() # to hold > particleNode attr > fluidNode = om.MObject() # to hold fluidNode > attr > debugMe = om.MObject() # to hold debugMe > attr > > def __init__(self): > self.particleNodeValid = False > self.fluidNodeValid = False > ompx.MPxNode.__init__(self) > > def connectionMade(self, myPlug, otherPlug, iAmSrc): > if not iAmSrc: > if myPlug == myNode.particleNode: > otherNode = otherPlug.node() > > # If the connection is to a particle > node, mark it valid. > if > otherNode.hasFn(om.MFn.kParticle): > self.particleNodeIsValid = > True > self.particleNodeFn = > omfx.MFnParticleSystem(otherNode) > else: > self.particleNodeIsValid = > False > self.particleNodeFn = None > > elif myPlug == myNode.fluidNode: > otherNode = otherPlug.node() > > # If the connection is to a fluid > node, mark it valid. > if otherNode.hasFn(om.MFn.kFluid): > self.fluidNodeIsValid = True > self.fluidNodeFn = > omfx.MFnFluid(otherNode) > else: > self.fluidNodeIsValid = > False > self.fluidNodeFn = None > > def connectionBroken(self, myPlug, otherPlug, iWasSrc): > if not iWasSrc: > if myPlug == myNode.particleNode: > self.particleNodeIsValid = False > self.particleNodeFn = None > elif myPlug == myNode.fluidNode: > self.fluidNodeIsValid = False > self.fluidNodeFn = None > > def compute(self, plug, block): > if plug == myNode.debugMe: > if self.particleNodeIsValid and > self.fluidNodeIsValid: > result = "both connected" > elif self.particleNodeIsValid: > result = "particle connected" > elif self.fluidNodeIsValid: > result = "fluid connected" > else > result = "neither connected" > > > block.outputValue(myNode.debugMe).setString(result) > return om.MStatus.kSuccess > > # This is not an attribute that I recognize, so let > Maya know that > it should handle it. > return om.MStatus.kUnknownParameter > > So you use connectionMade and connectionBroken to maintain a pair of > flags indicating which connections are currently valid. I've also got > them creating the corresponding function sets so that they'll be ready > for compute() to use when its needs them. If you find that it's still > crashing then try having compute() create the functionsets for itself. > > The compute() simply checks the flags to see what's valid and takes > action based on that. > > -- > -deane > > > > --~--~---------~--~----~------------~-------~--~----~ Yours, Maya-Python Club Team. -~----------~----~----~----~------~----~------~--~---
