def testSetCurrentMode( self ) : self.assertEqual( hou.updateModeSetting(), hou.updateMode.AutoUpdate ) with IECoreHoudini.UpdateMode( hou.updateMode.AutoUpdate ) : self.assertEqual( hou.updateModeSetting(), hou.updateMode.AutoUpdate ) self.assertEqual( hou.updateModeSetting(), hou.updateMode.AutoUpdate )
def testRaising( self ) : self.assertEqual( hou.updateModeSetting(), hou.updateMode.AutoUpdate ) try : with IECoreHoudini.UpdateMode( hou.updateMode.Manual ) : raise RuntimeError, "This error is intentional" except RuntimeError: self.assertEqual( hou.updateModeSetting(), hou.updateMode.AutoUpdate )
def _addRemoveParm( self, parm, add=True): ## does this expect a parm name obk or path?! node_path = parm.node().path() cur_take = curTake() cur_update_mode = hou.updateModeSetting() hou.setUpdateMode(hou.updateMode.Manual) setCurTake(self) remove_flag = '' if add != True: remove_flag = '-u ' hscript_cmd = 'takeinclude ' + remove_flag + node_path + ' ' + parm.name( ) hscript_cmd_results = hou.hscript(hscript_cmd) if _takeErr(hscript_cmd_results[1]): result = hscript_cmd_results[1] else: result = None setCurTake(cur_take) hou.setUpdateMode(cur_update_mode) return result
def restore_update_mode(update_mode): """Set a UI update mode and restore the current mode on exit. >>> with restore_update_mode(hou.updateMode.Manual): ... # do some stuff while it is in manual mode ... Original update mode restored after with :param update_mode: The update mode to set for the duration. :type update_mode: hou.updateMode :return: """ import hou # Get the current update mode so it can be restored. current = hou.updateModeSetting() # Set the desired mode. hou.ui.setUpdateMode(update_mode) try: yield finally: # Restore the update mode. hou.ui.setUpdateMode(current)
def addParmsFromTake(self, take, overwrite_existing=True): '''Include parameters from the specified Take in this Take.''' cur_take = curTake() cur_update_mode = hou.updateModeSetting() hou.setUpdateMode(hou.updateMode.Manual) setCurTake(self) force_flag = '' if overwrite_existing == True: force_flag = '-f ' source = take.name() hscript_cmd = 'takemerge ' + force_flag + ' ' + self._name + ' ' + source hscript_cmd_results = hou.hscript(hscript_cmd) if _takeErr(hscript_cmd_results[1]): result = hscript_cmd_results[1] else: result = None setCurTake(cur_take) hou.setUpdateMode(cur_update_mode) return result
def setupMutationFromMarkedWedges(marked_idx_list, wedge_anchor_node): print "\n\nSetup Starting...\n" idx_list = marked_idx_list wedge_node = wedge_anchor_node num_wedges = len(idx_list) #get current update mode update_mode_set = hou.updateModeSetting() #set update mode to manual hou.setUpdateMode(hou.updateMode.Manual) #set auto takes on hou.hscript("takeautomode on") #get root take roottake = hou.takes.rootTake() print "Root Take: {}".format(roottake.name()) #cook pdg node first pdgnode = wedge_node.getPDGNode() #generate static items first to be able to access wedge_node.generateStaticItems() time.sleep(1.5) work_items = pdgnode.staticWorkItems #remove all existing takes first takes = roottake.children() for take in takes: take.destroy() #convert wedges to takes for idx in idx_list: take = roottake.addChildTake(idx) hou.takes.setCurrentTake(take) selectWedgeIndex(idx, wedge_node, work_items) #return to root take hou.takes.setCurrentTake(roottake) #reset update mode hou.setUpdateMode(update_mode_set) #set auto takes off hou.hscript("takeautomode off") print "\nSuccessfully converted Wedges to Takes\n" #create new wedge node in same Topnet as wedge_anchor_node topnet = wedge_node.parent() new_wedge_node = topnet.createNode("wedge", "wedge_base_from_marked") new_wedge_node.setPosition(wedge_node.position()) new_wedge_node.move([-5, 0]) #new_wedge_node.setSelected(1, clear_all_selected=True) remove_takes = True convertTakesToWedge(new_wedge_node, remove_takes)
def manual(): """setup scene to manual mode """ help(manual) import hou mode = hou.updateModeSetting().name() if mode == 'AutoUpdate': hou.setUpdateMode(hou.updateMode.Manual) if mode == 'Manual': hou.setUpdateMode(hou.updateMode.AutoUpdate)
def exit(): """ change scene mode in manual, save, and exit """ help(exit) import hou mode = hou.updateModeSetting().name() if mode == 'AutoUpdate': hou.setUpdateMode(hou.updateMode.Manual) hou.hipFile.save(file_name=None, save_to_recent_files=True) hou.exit(exit_code=0, suppress_save_prompt=False)
def __init__(self,nodes): super(live_renamer,self).__init__(hou.qt.mainWindow()) self.nodes=nodes self.updateMode=hou.updateModeSetting() hou.setUpdateMode(hou.updateMode.Manual) self.storeNames() self.configure_dialog() self.widgets() self.layout() self.connections()
def updateModeToggle(): ''' Toggle cook mode between 'auto update' and 'manual'. Author: Sean ''' mode = hou.updateModeSetting().name() if mode == 'AutoUpdate': hou.setUpdateMode( hou.updateMode.Manual ) if mode == 'Manual': hou.setUpdateMode( hou.updateMode.AutoUpdate )
def open(): """change scene mode in manual, save, and open open windows""" help(open) import hou mode = hou.updateModeSetting().name() if mode == 'AutoUpdate': hou.setUpdateMode(hou.updateMode.Manual) hou.hipFile.save(file_name=None, save_to_recent_files=True) f = hou.ui.selectFile() hou.hipFile.load(f)
def jump_to(self): if str(hou.updateModeSetting()) == 'updateMode.Manual': pass else: hou.ui.displayMessage('设置 updateMode 为 Manual', buttons=('确认', ), title='') hou.setUpdateMode(hou.updateMode.Manual) sl = self.tableWidget.selectedIndexes() try: rs = sl[0].row() node_path = self.tableWidget.item(rs, 2).text() hou.node(node_path).setCurrent(1, 1) except: pass
def quatreCinqSix(): """ set the houdini desktop """ help(quatreCinqSix) import hou #decrire la configuration du desktop avec python # close treeView close python open spreadsheet,chage parameter to python desktops_dict = dict((d.name(), d) for d in hou.ui.desktops()) desktops_dict['Technical2'].setAsCurrent() mode = hou.updateModeSetting().name() if mode == 'AutoUpdate': hou.setUpdateMode(hou.updateMode.Manual)
def updateMode(update_mode): """Context manager for setting the interface's update mode. update_mode should be one of hou.updateMode """ import hou # Get the current update mode so it can be restored. current = hou.updateModeSetting() # Set the desired mode. hou.ui.setUpdateMode(update_mode) try: yield finally: # Restore the update mode. hou.ui.setUpdateMode(current)
def addAllParmsOfNode(self, node): '''Include all parameters from specified Node in this Take''' node_path = node.path() cur_take = curTake() cur_update_mode = hou.updateModeSetting() hou.setUpdateMode(hou.updateMode.Manual) setCurTake(self) hscript_cmd = 'takeinclude ' + node_path + ' *' hscript_cmd_results = hou.hscript(hscript_cmd) if _takeErr(hscript_cmd_results[1]): result = hscript_cmd_results[1] else: result = None setCurTake(cur_take) hou.setUpdateMode(cur_update_mode) return result
def _addRemoveFlag(self, node,flag, add=True): cur_take = curTake() cur_update_mode = hou.updateModeSetting() hou.setUpdateMode(hou.updateMode.Manual) setCurTake(self) remove_flag = '' if add != True: remove_flag = '-u ' hscript_cmd = 'takeinclude ' + remove_flag + '-' + flag + ' ' + node.path() hscript_cmd_results = hou.hscript(hscript_cmd) if _takeErr(hscript_cmd_results[1]): result = hscript_cmd_results[1] else: result = None setCurTake(cur_take) hou.setUpdateMode(cur_update_mode) return result
def _addRemoveParm(self, parm, add=True): ## does this expect a parm name obk or path?! node_path = parm.node().path() cur_take = curTake() cur_update_mode = hou.updateModeSetting() hou.setUpdateMode(hou.updateMode.Manual) setCurTake(self) remove_flag = '' if add != True: remove_flag = '-u ' hscript_cmd = 'takeinclude ' + remove_flag + node_path + ' ' + parm.name() hscript_cmd_results = hou.hscript(hscript_cmd) if _takeErr(hscript_cmd_results[1]): result = hscript_cmd_results[1] else: result = None setCurTake(cur_take) hou.setUpdateMode(cur_update_mode) return result
def _addRemoveFlag(self, node, flag, add=True): cur_take = curTake() cur_update_mode = hou.updateModeSetting() hou.setUpdateMode(hou.updateMode.Manual) setCurTake(self) remove_flag = '' if add != True: remove_flag = '-u ' hscript_cmd = 'takeinclude ' + remove_flag + '-' + flag + ' ' + node.path( ) hscript_cmd_results = hou.hscript(hscript_cmd) if _takeErr(hscript_cmd_results[1]): result = hscript_cmd_results[1] else: result = None setCurTake(cur_take) hou.setUpdateMode(cur_update_mode) return result
def toggle_manualupdate(): mode = hou.updateModeSetting().name() if mode == 'AutoUpdate': hou.setUpdateMode(hou.updateMode.Manual) if mode == 'Manual': hou.setUpdateMode(hou.updateMode.AutoUpdate)
def hipIncrementVersion(self): # SETTINGS ================== setToFirstFrame = True # Sets playback frame of saved file to first frame (does not affect open file) setToManualUpdate = False # Sets update mode of saved file to manual (does not affect open file) autoversion = True # If no versioning exists, create a new version autoversionzfill = 3 # digit padding for autoversioning debug = 0 # print some items to console # =========================== orighip = hou.hipFile.name() hipname = hou.hipFile.basename() # hipfile = hipname.split(".")[0] # version which works for filenames with periods hipfile = os.path.splitext(hipname)[0] # check current filename for version prefix and split accordingly # Uses regex so a filename like myfile_verycool_v001.hip will get picked up correctly (not match the first _v) versionSections = "" versionType = "" if len(re.findall('_v(?=\d+)', hipfile)) > 0: versionSections = re.split('_v(?=\d+)', hipfile, 1) versionType = "_v" elif len(re.findall('_V(?=\d+)', hipfile)) > 0: versionSections = re.split('_V(?=\d+)', hipfile, 1) versionType = "_V" # if no version prefix found, create it if versionSections == "": if (autoversion): versionSections = [hipfile, "0" * autoversionzfill] versionType = "_v" orighip = orighip.replace( hipfile, hipfile + versionType + "0" * autoversionzfill) print "No version found in hip name - Autoversioning" else: print "No version found in hip name - Exiting" return 1 # regex - match numbers after version splitter. Match until non-numeric value is hit. match = re.match('\d+', versionSections[1]) if match: versionNumber = match.group(0) else: print "Problem encountered matching version number - Exiting" return 1 # Create new filename oldVersion = versionType + versionNumber if debug: print "Old version: " + oldVersion newVersion = versionType + str(int(versionNumber) + 1).zfill( len(versionNumber)) newhip = orighip.replace(oldVersion, newVersion) if debug: print "New file: " + newhip # Save the file confirm = 0 if os.path.isfile(newhip): text = "Overwrite existing hip file?" confirm = hou.ui.displayMessage(text, buttons=("Yes", "No"), severity=hou.severityType.Message, title="New Hip") if confirm == 0: # update mode and frame settings updateMode = hou.updateModeSetting() frame = hou.frame() if (setToManualUpdate): hou.setUpdateMode(hou.updateMode.Manual) if (setToFirstFrame): # hou.setFrame(1) hou.setFrame(hou.playbar.playbackRange()[0]) hou.hipFile.save(newhip) # reset update mode and frame hou.setUpdateMode(updateMode) hou.setFrame(frame)
def __init__(self): self._current = hou.updateModeSetting()
def __enter__(self): hou.setUpdateMode(hou.updateMode.Manual) hou.updateModeSetting()
def refreshToManualOrAutoSwitch(): mode = hou.updateModeSetting().name() if mode == 'AutoUpdate': hou.setUpdateMode(hou.updateMode.Manual) if mode == 'Manual': hou.setUpdateMode(hou.updateMode.AutoUpdate)
def __exit__(self, exc_type, exc_val, exc_tb): hou.setUpdateMode(self._current) hou.updateModeSetting()
def convertTakesToWedge(wedge_node, remove_takes): print "\n\nStarting to convert Takes to TOP Wedge...\n" print "_" * 100 print "\n" wedge = wedge_node rem_takes = remove_takes #get current update mode update_mode_set = hou.updateModeSetting() #set update mode to manual hou.setUpdateMode(hou.updateMode.Manual) #get takelist and sort, get take number roottake = hou.takes.rootTake() takes = roottake.children() takelist = [] for take in takes: takelist.append(take.name()) #takelist = sorted(takelist) num_takes = len(takelist) print "Root Take: {}".format(roottake.name()) print "Number of Child Takes / Wedge Count: {}".format(num_takes) print "Takelist: " + str(takelist) + "\n" #check if child takes present if num_takes > 0: #collect all edited parms in takes takeparm_list = [] for takename in takelist: take = hou.takes.findTake(takename) #print "Takename: " + take.name() takeparms = take.parmTuples() for takeparm in takeparms: if takeparm not in takeparm_list: takeparm_list.append(takeparm) #print "Take Parameter appended to list: " + str(takeparm) num_takeparms = len(takeparm_list) print "{} edited Parameters found in Takes\n".format(num_takeparms) print "\nProcessing all edited Parameters in Takes." print "This might take up to a couple of minutes for very complex setups..." #set inital parms parm_wedgecount = wedge.parm("wedgecount") parm_wedgecount.set(num_takes) parm_wedgeattribs = wedge.parm("wedgeattributes") parm_wedgeattribs.set(num_takeparms) parm_preservenum = wedge.parm("preservenum") parm_preservenum.set(1) parm_previewselection = wedge.parm("previewselection") parm_previewselection.set(1) #edit interface wo hide wedge attribute parms for preformance parm_group = wedge.parmTemplateGroup() attribs_parm_temp = parm_group.find("wedgeattributes") attribs_parm_temp_clone = attribs_parm_temp.clone() new_parm_folder = hou.FolderParmTemplate( "parent_folder", "Wedge Attributes (Hidden)", folder_type=hou.folderType.Collapsible, default_value=0, ends_tab_group=False) parm_group.remove(attribs_parm_temp) new_parm_folder.addParmTemplate(attribs_parm_temp_clone) parm_group.append(new_parm_folder) wedge.setParmTemplateGroup(parm_group) #fill in takeparms i = 1 for takeparm in takeparm_list: #print takeparm #list of parm tuples!!! takeparm_path = takeparm.node().path() + "/" + takeparm.name() takeparm_type = type(takeparm[0].eval()) takeparm_is_tuple = len(takeparm) > 1 #print takeparm.eval() #print takeparm_type #print "Is Tuple: " + str(takeparm_is_tuple) #set parm_name = wedge.parm("name" + str(i)) parm_name.set(takeparm.name() + "_" + str(i)) parm_exportchannel = wedge.parm("exportchannel" + str(i)) parm_exportchannel.set(1) parm_channel = wedge.parm("channel" + str(i)) parm_channel.set(takeparm_path) parm_type = wedge.parm("type" + str(i)) if takeparm_type == float and takeparm_is_tuple == False: parm_type.set(0) if takeparm_type == float and takeparm_is_tuple == True: parm_type.set(1) if takeparm_type == int and takeparm_is_tuple == False: parm_type.set(2) if takeparm_type == int and takeparm_is_tuple == True: parm_type.set(3) if takeparm_type == str: parm_type.set(4) parm_wedgetype = wedge.parm("wedgetype" + str(i)) parm_wedgetype.set(2) parm_values = wedge.parm("values" + str(i)) parm_values.set(num_takes) #incr i += 1 #iterate over takes again, actually set them active and evaluate & set corresponding parms in wedge root_take = hou.takes.rootTake() t = 1 for takename in takelist: take = hou.takes.findTake(takename) #print "Set to Take: " + take.name() hou.takes.setCurrentTake(take) #fill in takeparms again with evalueted values from takes i = 1 for takeparm in takeparm_list: #takeparm attribs takeparm_path = takeparm.node().path() + "/" + takeparm.name() takeparm_type = type(takeparm[0].eval()) takeparm_size = len(takeparm) takeparm_is_tuple = takeparm_size > 1 #check type and set valname accordingly if takeparm_type == float and takeparm_is_tuple == False: valname = "floatvalue" if takeparm_type == float and takeparm_is_tuple == True: valname = "floatvector" if takeparm_type == int and takeparm_is_tuple == False: valname = "intvalue" if takeparm_type == int and takeparm_is_tuple == True: valname = "intvector" if takeparm_type == str: valname = "strvalue" #if tuple and size is 3 append 0 so it matches size of vector4 tuples in wedge node parm_val = wedge.parmTuple(valname + str(i) + "_" + str(t)) if takeparm_size == 3: val_t = takeparm.eval() val_l = list(val_t) val_l.append(0) val = tuple(val_l) else: val = takeparm.eval() #include parm_val in take so its editable take.addParmTuple(parm_val) #go back to root take hou.takes.setCurrentTake(root_take) #set value parm_val.set(val) #go back to current take hou.takes.setCurrentTake(take) #exclude parm_val in take to clear take.removeParmTuple(parm_val) #incr i += 1 #incr t += 1 #remove takes if chosen if rem_takes == True: #print "Take deleted" take.destroy() hou.takes.setCurrentTake(root_take) #print "\nReset to Root Take" #select node wedge.setSelected(on=True, clear_all_selected=True) wedge.setCurrent(1) print "\n" print "_" * 100 print "Takes successfully converted to TOP Wedge." print "Creating Node UI, this might take another couple seconds." print "_" * 100 print "\n" * 2 #exception when no child takes found else: raise Exception("No Child Takes found.") #reset update mode hou.setUpdateMode(update_mode_set)
# directly taken from a sidefx forum post import hou mode = hou.updateModeSetting().name() if mode == 'AutoUpdate': hou.setUpdateMode(hou.updateMode.Manual) if mode == 'Manual': hou.setUpdateMode(hou.updateMode.AutoUpdate)
def toggleUpdateMode(): mode = hou.updateModeSetting() if mode != hou.updateMode.AutoUpdate: hou.setUpdateMode(hou.updateMode.AutoUpdate) else: hou.setUpdateMode(hou.updateMode.Manual)
def __init__(self, mode): self.__mode = mode self.__prevMode = hou.updateModeSetting()