예제 #1
0
	def testUndo( self ) :

		# check our custom knob undoes in the same way as
		# standard knobs

		n = nuke.createNode( "ieObject" )
		n2 = nuke.createNode( "Blur" )

		self.assertEqual( n.knob( "object" ).getValue(), None )
		self.assertEqual( n2.knob( "size" ).getValue(), 0 )

		self.assertEqual( nuke.Undo.disabled(), True )

		with IECoreNuke.UndoEnabled() :

			self.assertEqual( nuke.Undo.disabled(), False )

			with IECoreNuke.UndoBlock() :

				n.knob( "object" ).setValue( IECore.IntData( 10 ) )
				self.assertEqual( n.knob( "object" ).getValue(), IECore.IntData( 10 ) )

				n2.knob( "size" ).setValue( 10 )
				self.assertEqual( n2.knob( "size" ).getValue(), 10 )

		self.assertEqual( nuke.Undo.disabled(), True )

		self.assertEqual( n.knob( "object" ).getValue(), IECore.IntData( 10 ) )
		self.assertEqual( n2.knob( "size" ).getValue(), 10 )

		nuke.undo()

		self.assertEqual( n2.knob( "size" ).getValue(), 0 )
		self.assertEqual( n.knob( "object" ).getValue(), None )
예제 #2
0
	def testUndo( self ) :

		# check our custom knob undoes in the same way as
		# standard knobs

		n = nuke.createNode( "ieObject" )
		n2 = nuke.createNode( "Blur" )

		self.assertEqual( n.knob( "object" ).getValue(), None )
		self.assertEqual( n2.knob( "size" ).getValue(), 0 )

		self.assertEqual( nuke.Undo.disabled(), True )

		with IECoreNuke.UndoEnabled() :

			self.assertEqual( nuke.Undo.disabled(), False )

			with IECoreNuke.UndoBlock() :

				n.knob( "object" ).setValue( IECore.IntData( 10 ) )
				self.assertEqual( n.knob( "object" ).getValue(), IECore.IntData( 10 ) )

				n2.knob( "size" ).setValue( 10 )
				self.assertEqual( n2.knob( "size" ).getValue(), 10 )

		self.assertEqual( nuke.Undo.disabled(), True )

		self.assertEqual( n.knob( "object" ).getValue(), IECore.IntData( 10 ) )
		self.assertEqual( n2.knob( "size" ).getValue(), 10 )

		nuke.undo()

		self.assertEqual( n2.knob( "size" ).getValue(), 0 )
		self.assertEqual( n.knob( "object" ).getValue(), None )
예제 #3
0
def undoRedoTest(node):
  import nuke
  # ANT: I'm unsure why we need this Undo.enable() call
  # The documentation gives no obvious clues,  "Undoes the previous disable()" !!!
  # PG: The undo system is only enable when Nuke start in GUI mode.
  # In terminal mode it's disabled.
  # It's very important to to call nuke.Undo.enable() only when is needed,
  # other wise undo/redo an operation could be not done properly
  if nuke.Undo.disabled() == True:
    nuke.Undo.enable()

  # Test Flow: Create a  Node > nuke.undo() > Assert No Node > nuke.redo() > Assert  Node comes back as expected
  nuke.tprint('Creating', node)
  nodeToCheck = "{}1_0".format(node)
  originalNode = nuke.createNode("{}1_0".format(node))


  numNodesBeforeUndo = len(nuke.allNodes(nodeToCheck))
  nuke.tprint("Number of %s's after creation, before Undo is %s" % (node , numNodesBeforeUndo))

  nuke.tprint("Calling nuke.undo()")
  nuke.undo()

  numNodesAfterUndo = len(nuke.allNodes(nodeToCheck))
  nuke.tprint("Number of %s's after nuke.undo() is %s" % (node ,numNodesAfterUndo))

  # First assert that the Undo has removed the  node we created
  if numNodesAfterUndo != 0:
    nuke.tprint("Undo failed to remove the %s node! There were %s %s nodes after calling nuke.undo()" %(node, numNodesAfterUndo, node))
    sys.exit(1)
  else:
    nuke.tprint("Asserted that Undo removed the node as expected.")

  nuke.tprint("Calling nuke.redo()")
  nuke.redo()

  NodesAfterRedo = nuke.allNodes(nodeToCheck)
  numNodesAfterRedo = len(NodesAfterRedo)

  nuke.tprint("Number of %s's after nuke.redo() is %s" % (node, numNodesAfterRedo))

  # Second assert that the Redo put the original  node back
  if numNodesAfterRedo != 1:
    nuke.tprint("Failed to Restore the %s node! There were %s %s nodes after calling nuke.undo()" % (node ,numNodesAfterUndo, node))
    sys.exit(1)
  else:
    restoredNode = NodesAfterRedo[0]
    nuke.tprint("Asserted that Redo restored a %s node.. now assert it's the same!..." % (node))

  # Third assert - the  Node after Redo is identical to the original  node
  if restoredNode != originalNode:
    nuke.tprint("Redo failed to restore the original %s node! (original %s, restored %s)" % (node, (str(originalNode), str(restoredNode))))
    sys.exit(1)
  else:
    nuke.tprint("Asserted the restored %s node is identical the original after Redo!..." % (node))
    # If we're here, we've passed all the asserts. Exit with zero exit status
    nuke.tprint("All tests for UndoRedoSingleNode passed. Exiting with zero exit status")
예제 #4
0
    def testModifyParametersAndUndo(self):

        fnOH = IECoreNuke.FnOpHolder.create("mult", "maths/multiply", 2)

        self.assertEqual(fnOH.node().knob("parm_a").getValue(), 1)
        self.assertEqual(fnOH.node().knob("parm_b").getValue(), 2)

        with IECoreNuke.UndoEnabled():

            with fnOH.parameterModificationContext() as parameters:

                parameters["a"].setNumericValue(10)
                parameters["b"].setNumericValue(20)

            self.assertEqual(fnOH.node().knob("parm_a").getValue(), 10)
            self.assertEqual(fnOH.node().knob("parm_b").getValue(), 20)

        nuke.undo()

        self.assertEqual(fnOH.node().knob("parm_a").getValue(), 1)
        self.assertEqual(fnOH.node().knob("parm_b").getValue(), 2)
예제 #5
0
	def testModifyParametersAndUndo( self ) :

		fnOH = IECoreNuke.FnOpHolder.create( "mult", "maths/multiply", 2 )

		self.assertEqual( fnOH.node().knob( "parm_a" ).getValue(), 1 )
		self.assertEqual( fnOH.node().knob( "parm_b" ).getValue(), 2 )

		with IECoreNuke.UndoEnabled() :

			with fnOH.parameterModificationContext() as parameters :

				parameters["a"].setNumericValue( 10 )
				parameters["b"].setNumericValue( 20 )

			self.assertEqual( fnOH.node().knob( "parm_a" ).getValue(), 10 )
			self.assertEqual( fnOH.node().knob( "parm_b" ).getValue(), 20 )

		nuke.undo()

		self.assertEqual( fnOH.node().knob( "parm_a" ).getValue(), 1 )
		self.assertEqual( fnOH.node().knob( "parm_b" ).getValue(), 2 )
예제 #6
0
def NetRender():
    temp = nuke.scriptSave()
    n = nuke.allNodes('Read')
    for node in n:
        path = node['file'].getValue()
        new = path[3:]
        newpath = '//work/stripe (s)/' + new
        node = node['file'].setValue(newpath)
    n = nuke.allNodes('Write')
    for node in n:
        path = node['file'].getValue()
        new = path[3:]
        newpath = '//work/stripe (s)/' + new
        node = node['file'].setValue(newpath)
    h = nuke.scriptSave('//Farm/mfarm/FarmRender/Render.nk')
    h = nuke.scriptSave('//Farm2/D/Farm2Render/Render.nk')
    j = nuke.undo()
def Roto_to_WarpSpline_v2():
    try:
        rotoNode = nuke.selectedNode()
        if rotoNode.Class() not in ('Roto', 'RotoPaint'):
            if nuke.GUI:
                nuke.message( 'Unsupported node type. Selected Node must be Roto or RotoPaint' )
            return
    except:
        if nuke.GUI:
            nuke.message('Select a Roto or RotoPaint Node')
            return
    #===========================================================================
    # panel setup
    #===========================================================================
    p = nukescripts.panels.PythonPanel("RotoPaint to Splinewarp")
    k = nuke.String_Knob("framerange","FrameRange")
    k.setFlag(nuke.STARTLINE)    
    k.setTooltip("Set the framerange to bake the shapes, by default its the project start-end. Example: 10-20")
    p.addKnob(k)
    k.setValue("%s-%s" % (nuke.root().firstFrame(), nuke.root().lastFrame()))    
    k = nuke.Boolean_Knob("pin", "Break into Pin Points")
    k.setFlag(nuke.STARTLINE)
    k.setTooltip("This will break all the shapes into single points")
    p.addKnob(k)
    k = nuke.Boolean_Knob("mt", "MultiThread")
    k.setFlag(nuke.STARTLINE)
    k.setTooltip("This will speed up the script but without an accurate progress bar")
    p.addKnob(k)
    k.setValue(True)
    result = p.showModalDialog()    

    
    if result == 0:
        return # Canceled
    try:
        fRange = nuke.FrameRange(p.knobs()["framerange"].getText())
    except:
        if nuke.GUI:
            nuke.message( 'Framerange format is not correct, use startframe-endframe i.e.: 0-200' )
        return
    breakintopin = p.knobs()["pin"].value()
    multi = p.knobs()["mt"].value()
    #===========================================================================
    # end of panel
    #===========================================================================
    start_time = time.time()
#     task = nuke.ProgressTask('Roto to SplineWarp')
    rptsw_shapeList = []
    global cancel
    cancel = False
    if nuke.NUKE_VERSION_MAJOR > 6:
#         global cancel
        rptsw_shapeList = []
        nukescripts.node_copypaste()
        rotoNode = nuke.selectedNode()
        warpNode = nuke.createNode('SplineWarp3')
        warpNode.setName(rotoNode.name()+ "_" +  warpNode.name())
        warpCurve = warpNode['curves']
        warpRoot = warpCurve.rootLayer   
        rotoCurve = rotoNode['curves']
        rotoRoot = rotoCurve.rootLayer
        rptsw_shapeList = rptsw_walker(rotoRoot, rptsw_shapeList)  
        if breakintopin:
            breakshapesintoPin(rotoNode,fRange)  
            rptsw_shapeList = []
            rptsw_shapeList = rptsw_walker(rotoRoot, rptsw_shapeList)
        if cancel:
            return
        threadlist =[]
        n=0
        task = nuke.ProgressTask( 'Roto to SplineWarp' )
        bar = len(rptsw_shapeList) + 1
        for shape in rptsw_shapeList:
            if isinstance(shape[0], nuke.rotopaint.Shape):
                if multi and nuke.NUKE_VERSION_MAJOR != 11:
                    task.setMessage( 'Processing' + shape[0].name )
                    task.setProgress((int(n/bar*100)))
                    threading.Thread(None, bakeShapes, args=(shape, warpNode, fRange, rotoRoot, rptsw_shapeList, task)).start() 
                else:
                    bakeShapes(shape, warpNode,fRange, rotoRoot, rptsw_shapeList,task)
            n+=1
            
        #===========================================================================
        #  join existing threads (to wait completion before continue)
        #===========================================================================
        if multi and nuke.NUKE_VERSION_MAJOR != 11:
            main_thread = threading.currentThread()
            for t in threading.enumerate():
                if t is main_thread:
                    continue
                t.join()
            
        warpCurve.changed()
        warpNode.knob('toolbar_output_ab').setValue(1)
        warpNode.knob('boundary_bbox').setValue(0)
        #=======================================================================
        # theres a bug on Nuke 8 where the splinewarpnode UI do not update correctly with python created curves
        # this is a workaround
        #=======================================================================
        nukescripts.node_copypaste()
        nuke.show(nuke.selectedNode())
        nuke.selectedNode().knob('selected').setValue(False)
        #=======================================================================
        # end of workaround -
        #=======================================================================
        rptsw_shapeList = []
        nuke.delete(rotoNode)
        nuke.delete(warpNode)

    else:
        nuke.message( 'This version is for Nuke v7, use v1.1 with Nuke v6.3 from Nukepedia' )
    rptsw_shapeList = []
    if cancel:
        nuke.undo()
    print "Time elapsed:",time.time() - start_time, "seconds"