def save_dag_pos(preset): # Save current dag zoom and position as a preset on the active viewer zoom = nuke.zoom() pos = nuke.center() viewer = nuke.activeViewer() if not viewer: nuke.message( 'Error: please create a viewer to store the dag positions on...') return else: viewer = viewer.node() if 'dagpos' not in viewer.knobs(): viewer.addKnob( nuke.String_Knob( 'dagpos', 'dagpos', '0,0,0:0,0,0:0,0,0:0,0,0:0,0,0:0,0,0:0,0,0:0,0,0:0,0,0:0,0,0')) dagpos_knob = viewer['dagpos'] dagpos_knob.setFlag(nuke.STARTLINE) dagpos_knob.setEnabled(False) else: dagpos_knob = viewer['dagpos'] dagpos_vals = dagpos_knob.getValue().split(':') dagpos_vals.pop(preset - 1) new_dagpos = ','.join([str(zoom), str(pos[0]), str(pos[1])]) dagpos_vals.insert(preset - 1, new_dagpos) dagpos_knob.setValue(':'.join(dagpos_vals))
def DeepCollect(mode='collect'): '''collects or sets markers mode='collect': collects deep from markers mode='markers': sets markers ''' if mode == 'collect': markers = getMarker() node_collector = nuke.nodes.DeepMerge(note_font='bold', hide_input=True) k_tab = nuke.Tab_Knob('tb_user', 'DeepCollector') k_text = nuke.Text_Knob( 'tx_collector', 'Deeps Collected:', '\n'.join(['-' + n['tx_deepRead'].value() for n in markers])) k_text.setTooltip( '<b>Deeps Collected:</b>\n' + '\n'.join(['-' + n['tx_deepRead'].value()[:-8] for n in markers])) k_markers = nuke.String_Knob('tx_markers', 'DeepMarkers Collected', ','.join([m.name() for m in markers])) node_collector.addKnob(k_tab) node_collector.addKnob(k_text) node_collector.addKnob(k_markers) node_collector.setName('DeepCollector1') node_collector['autolabel'].setValue( "nuke.thisNode().name()+'\\ninputs: '+str(nuke.thisNode().inputs())" ) node_collector.setXYpos(*nuke.center()) for i, m in enumerate(markers): node_collector.setInput(i, m) print "Deep collected for %s" % node_collector.name() elif mode == 'markers': setMarkers()
def zoom(direction, factor=0.5): z = nuke.zoom() value = z * factor if direction == '+': v = z + value elif direction == '-': v = z - value nuke.zoom(v, nuke.center())
def node_under_cursor(): dag_widget = get_DAG_widget() dag_center = QtCore.QPoint(*nuke.center()) cursor_pos = QtGui.QCursor().pos() dag_widget_center = QtCore.QPoint((dag_widget.size().width()/ 2), (dag_widget.size().height()/2) ) cursor_pos_in_dag = dag_widget.mapFromGlobal(cursor_pos) new_node_pos = ((cursor_pos_in_dag - dag_widget_center) / nuke.zoom() + dag_center) return list(new_node_pos.toTuple())
def registerPos(description): ''' write item into nuke.ZOOOMDATA item must be next to last item which is the keyword for ending zooomdata ''' description=description.replace(" ", "_") if description !="": x = nuke.center()[0] y = nuke.center()[1] zooom = nuke.zoom() #format new zooomItem for nuke.ZOOOMDATA newZooomItem = "#"+description+",%d" % zooom +",%d" % x+",%d"% y +"\n" #create start and end if not set yet if len(nuke.ZOOOMDATA)==0: nuke.ZOOOMDATA.append(zooomStart+"\n") nuke.ZOOOMDATA.append(zooomEnd) nuke.ZOOOMDATA.insert( (len(nuke.ZOOOMDATA)-1), newZooomItem) else: pass
def run(self): # Store the current dag size and zoom original_zoom = nuke.zoom() original_center = nuke.center() # Calculate the total size of the DAG min_x, min_y, max_x, max_y = self.bbox zoom = self.zoom min_x -= int(self.margins / zoom) min_y -= int(self.margins / zoom) max_x += int(self.margins / zoom) max_y += int(self.margins / zoom) # Get the Dag Widget dag = self.dag # Check the size of the current widget, excluding the right side (because of minimap) capture_width = dag.width() - self.ignore_right capture_height = dag.height() # Calculate the number of tiles required to cover all image_width = int((max_x - min_x) * zoom) image_height = int((max_y - min_y) * zoom) horizontal_tiles = int(ceil(image_width / float(capture_width))) vertical_tiles = int(ceil(image_height / float(capture_height))) # Create a pixmap to store the results pixmap = QtGui.QPixmap(image_width, image_height) painter = QtGui.QPainter(pixmap) painter.setCompositionMode(painter.CompositionMode_SourceOver) # Move the dag so that the top left corner is in the top left corner, screenshot, paste in the pixmap, repeat for tile_x in range(horizontal_tiles): center_x = (min_x + capture_width / zoom * tile_x ) + (capture_width + self.ignore_right) / zoom / 2 for tile_y in range(vertical_tiles): center_y = (min_y + capture_height / zoom * tile_y) + capture_height / zoom / 2 nuke.executeInMainThread(nuke.zoom, (zoom, (center_x, center_y))) time.sleep(self.delay) nuke.executeInMainThread(grab_dag, (dag, painter, capture_width * tile_x, capture_height * tile_y)) time.sleep(self.delay) painter.end() nuke.executeInMainThread(nuke.zoom, (original_zoom, original_center)) save_sucessful = pixmap.save(self.path) if not save_sucessful: raise IOError("Failed to save PNG: %s" % self.path) self.successful = True
def setNodeValue(*files): # set view for stereo nukescripts.stereo.setViewsForStereo() #does has selected selectedNodes = nuke.selectedNodes() if selectedNodes : #get node's position in node graph x = selectedNodes[-1].xpos() + 100 y = selectedNodes[-1].ypos() + 100 #create write node writeNode = nuke.nodes.Write(channels = "rgba", colorspace = "default(sRGB)", file = files[0], file_type = "targa", xpos = x, ypos = y, inputs = [selectedNodes[-1]]) else : #if no selected node use the node graph center x, y = nuke.center() writeNode = nuke.nodes.Write(channels = "rgba", colorspace = "default(sRGB)", file = files[0], file_type = "targa", xpos = x, ypos = y) writeNode["compression"].setValue("none") if len(files) == 2: writeNode['file'].splitView('right') writeNode['file'].setValue(files[1]) return writeNode
def quickSave(slot): z = nuke.zoom() x = nuke.center()[0] y = nuke.center()[1] quickSaves[slot] = [z, x, y]
else : fullPath = uploadPath + "/c001" newSceneName = sceneName.replace(versionNumber, "c001") try: os.makedirs(fullPath) except Exception,e: print e else : fullPath = uploadPath + "/c001" try: os.makedirs(fullPath) except Exception,e: print e newSceneName = sceneName.replace(versionNumber, "c001") fullName = fullPath + "/" + newSceneName + format #does has selected selectedNodes = nuke.selectedNodes() if selectedNodes : #get node's position in node graph x = selectedNodes[-1].xpos() + 100 y = selectedNodes[-1].ypos() + 100 #create write node writeNode = nuke.nodes.Write(channels = "rgba", colorspace = "default(sRGB)", file = fullName, file_type = "targa", xpos = x, ypos = y, inputs = [selectedNodes[-1]]) else : #if no selected node use the node graph center x, y = nuke.center() writeNode = nuke.nodes.Write(channels = "rgba", colorspace = "default(sRGB)", file = fullName, file_type = "targa", xpos = x, ypos = y) writeNode["compression"].setValue("none") return writeNode