def add_to_selection(nodes, kwargs): """Extends the current node selection with 'nodes', according to the modifier keys in kwargs. no modifier: replace selection shift: add to selection ctrl: remove from selection ctrl+shift: intersect with selection """ haz_shift = kwargs["shiftclick"] or kwargs['altclick'] haz_ctrl = kwargs["ctrlclick"] current = set(hou.selectedNodes()) sel = set(nodes) if haz_shift or haz_ctrl: # we got some modifier pressed if haz_shift: if haz_ctrl: # shift+ctrl: intersection sel = sel.intersection(current) else: # shift: union sel = sel.union(current) else: # ctrl: remove from selection sel = current.difference(sel) if sel is not None: hou.clearAllSelected() for n in sel: n.setSelected(True)
def add_to_selection(nodes, kwargs, selectMode=None, statMsg=None): """Extends the current node selection with 'nodes', according to the modifier keys in kwargs. no modifier: replace selection shift, alt: add to selection ctrl: remove from selection ctrl+shift: intersect with selection """ assert selectMode is None or type(selectMode) is str haz_shift = kwargs["shiftclick"] or kwargs['altclick'] haz_ctrl = kwargs["ctrlclick"] if selectMode is None: # determine select mode based on kwargs if haz_shift or haz_ctrl: # we got some modifier pressed if haz_shift: # shift: add (union), shift+ctrl: intersect selectMode = "intersect" if haz_ctrl else "add" else: # ctrl: remove from selection selectMode = "remove" else: selectMode = selectMode.lower() current = set(hou.selectedItems()) sel = set(nodes) sel_length_old = len(sel) if selectMode == "intersect": sel = sel.intersection(current) elif selectMode == "add": sel = sel.union(current) elif selectMode == "remove": sel = current.difference(sel) else: selectMode = "replace" if sel is not None: hou.clearAllSelected() for n in sel: n.setSelected(True) # report back msg0 = "Select (%s) %d matches: Now %d selected (was %d)" \ % ( selectMode.lower(), sel_length_old, len(sel), len(current), ) if statMsg: msg0 = msg0 + " " + str(statMsg) if "editor" in kwargs: kwargs["editor"].flashMessage("BUTTONS_reselect", msg0, FLASH_SECONDS) statmsg("%s (ALT: add to selection" ", CTRL:remove from selecton" ", CTRL+ALT:intersect with selection)" % msg0)
def doOnAccept(self, item): if (item is None): return try: hou.clearAllSelected() hpaste.stringToNodes(item.content(), ne=self.__nepane) except Exception as e: hou.ui.displayMessage("could not paste: %s" % e.message, severity=hou.severityType.Warning)
def doOnAccept(self,item): if(item is None):return try: try: #>h16 hou.clearAllSelected() except: #<=h15.5 hou.node("/obj").setSelected(False,clear_all_selected=True) hpaste.stringToNodes(item.content(), ne=self.__nepane, override_network_position=self.__savedNetworkViewPos) except Exception as e: hou.ui.displayMessage("could not paste: %s"%e.message,severity=hou.severityType.Warning)
def _select( items=None ): """ Author: Sean """ if items is None: return hou.clearAllSelected() for i in items: i.Selected = True
def load_asset_in_houdini(self, file_path): try: hou.clearAllSelected() self.pwd_for_load_nodes.loadItemsFromFile(file_path, True) with hou.undos.disabler(): self.move_nodes_to_clicked_position(hou.selectedItems(), self.pos_for_load_nodes) except hou.PermissionError as e: HaocUtils.show_message_box(self, e.instanceMessage()) except hou.OperationFailed as e: HaocUtils.show_message_box(self, e.description()) # If load failed it can be the asset damaged, so make it size 0 for nex time download open(file_path, 'w').close() except hou.LoadWarning as e: print e.description()
def add_to_selection(nodes, kwargs, selectMode=None): """Extends the current node selection with 'nodes', according to the modifier keys in kwargs. no modifier: replace selection shift, alt: add to selection ctrl: remove from selection ctrl+shift: intersect with selection """ assert selectMode is None or type(selectMode) is str haz_shift = kwargs["shiftclick"] or kwargs['altclick'] haz_ctrl = kwargs["ctrlclick"] if selectMode is None: # determine select mode based on kwargs if haz_shift or haz_ctrl: # we got some modifier pressed if haz_shift: # shift: add (union), shift+ctrl: intersect selectMode = "intersect" if haz_ctrl else "add" else: # ctrl: remove from selection selectMode = "remove" else: selectMode = selectMode.lower() current = set(hou.selectedItems()) sel = set(nodes) sel_length_old = len(sel) if selectMode == "intersect": sel = sel.intersection(current) elif selectMode == "add": sel = sel.union(current) elif selectMode == "remove": sel = current.difference(sel) else: selectMode = "replace" if sel is not None: hou.clearAllSelected() for n in sel: n.setSelected(True) # report back statmsg("Select (%s) %d nodes: Now %d selected (was %d)" % \ (selectMode.capitalize(), sel_length_old, len(sel), len(current), ) )
def createPreview(self, *args, **kwargs): """Creates a Playblast preview from currently open scene""" logger.debug("Func: createPreview") # pbSettings = self.loadPBSettings() # validFormats = cmds.playblast(format=True, q=True) # validCodecs = cmds.playblast(c=True, q=True) # # if not pbSettings["Format"] in validFormats: # msg = ("Format specified in project settings is not supported. Install {0}".format(pbSettings["Format"])) # cmds.warning(msg) # return -1, msg # # if not pbSettings["Codec"] in validCodecs: # msg = ("Codec specified in project settings is not supported. Install {0}".format(pbSettings["Codec"])) # cmds.warning(msg) # return -1, msg # extension = "jpg" openSceneInfo = self.getOpenSceneInfo() if not openSceneInfo: msg = "This is not a base scene. Scene must be saved as a base scene before playblasting." self._exception(360, msg) return selection = hou.selectedItems() hou.clearAllSelected() jsonInfo = self._loadJson(openSceneInfo["jsonFile"]) # scene_view = toolutils.sceneViewer() viewport = scene_view.curViewport() cam = viewport.camera() if cam: currentCam = cam.name() else: currentCam = 'persp' flip_options = scene_view.flipbookSettings().stash() # flip_options.output("E:\\test\\{0}_$F4.{1}".format(camName, "tga")) # flip_options.useResolution(True) # flip_options.resolution((221, 124)) # scene_view.flipbook(viewport, flip_options) versionName = self.getSceneFile() relVersionName = os.path.relpath(versionName, start=openSceneInfo["projectPath"]) playBlastDir = os.path.join(openSceneInfo["previewPath"], openSceneInfo["version"]) self._folderCheck(playBlastDir) playBlastFile = os.path.join(playBlastDir, "{0}_{1}_PB_$F4.{2}".format(self.niceName(versionName), currentCam, extension)) relPlayBlastFile = os.path.relpath(playBlastFile, start=openSceneInfo["projectPath"]) # if os.path.isfile(playBlastFile): try: os.remove(playBlastFile) except WindowsError: msg = "The file is open somewhere else" self._exception(202, msg) return flip_options.output(playBlastFile) # # ## CREATE A CUSTOM PANEL WITH DESIRED SETTINGS # # tempWindow = cmds.window(title="SM_Playblast", # widthHeight=(pbSettings["Resolution"][0] * 1.1, pbSettings["Resolution"][1] * 1.1), # tlc=(0, 0)) # # panel = pm.getPanel(wf=True) # # cmds.paneLayout() # # pbPanel = cmds.modelPanel(camera=currentCam) # cmds.showWindow(tempWindow) # cmds.setFocus(pbPanel) # # cmds.modelEditor(pbPanel, e=1, # allObjects=not pbSettings["PolygonOnly"], # da="smoothShaded", # displayTextures=pbSettings["DisplayTextures"], # wireframeOnShaded=pbSettings["WireOnShaded"], # grid=pbSettings["ShowGrid"], # useDefaultMaterial=pbSettings["UseDefaultMaterial"], # polymeshes=True, # imagePlane=True, # hud=True # ) # # cmds.camera(currentCam, e=True, overscan=True, displayFilmGate=False, displayResolution=False) # # ## get previous HUD States and turn them all off # hudPreStates = {} # HUDS = cmds.headsUpDisplay(lh=True) # for hud in HUDS: # hudPreStates[hud] = cmds.headsUpDisplay(hud, q=True, vis=True) # cmds.headsUpDisplay(hud, e=True, vis=False) # # ## clear the custom HUDS # customHuds = ['SMFrame', 'SMScene', 'SMCategory', 'SMFPS', 'SMCameraName', 'SMFrange'] # for hud in customHuds: # if cmds.headsUpDisplay(hud, ex=True): # cmds.headsUpDisplay(hud, rem=True) # # if pbSettings["ShowFrameNumber"]: # freeBl = cmds.headsUpDisplay(nfb=5) ## this is the next free block on section 5 # cmds.headsUpDisplay('SMFrame', s=5, b=freeBl, label="Frame", preset="currentFrame", dfs="large", # lfs="large") # if pbSettings["ShowSceneName"]: # freeBl = cmds.headsUpDisplay(nfb=5) ## this is the next free block on section 5 # cmds.headsUpDisplay('SMScene', s=5, b=freeBl, label="Scene: %s" % (self.niceName(versionName)), # lfs="large") # if pbSettings["ShowCategory"]: # freeBl = cmds.headsUpDisplay(nfb=5) ## this is the next free block on section 5 # cmds.headsUpDisplay('SMCategory', s=5, b=freeBl, label="Category: %s" % (jsonInfo["Category"]), # lfs="large") # if pbSettings["ShowFPS"]: # freeBl = cmds.headsUpDisplay(nfb=5) ## this is the next free block on section 5 # cmds.headsUpDisplay('SMFPS', s=5, b=freeBl, label="Time Unit: %s" % (cmds.currentUnit(q=True, time=True)), # lfs="large") # # # v1.1 SPECIFIC # try: # if pbSettings["ShowFrameRange"]: # freeBl = cmds.headsUpDisplay(nfb=5) ## this is the next free block on section 5 # cmds.headsUpDisplay('SMFrange', s=5, b=freeBl, # label="Frame Range: {} - {}".format(int(cmds.playbackOptions(q=True, minTime=True)), # int(cmds.playbackOptions(q=True, # maxTime=True))), # lfs="large") # except KeyError: # pass # # freeBl = cmds.headsUpDisplay(nfb=2) # cmds.headsUpDisplay('SMCameraName', s=2, b=freeBl, ba='center', dw=50, pre='cameraNames') # # ## Get the active sound # # aPlayBackSliderPython = mel.eval('$tmpVar=$gPlayBackSlider') # activeSound = cmds.timeControl(aPlayBackSliderPython, q=True, sound=True) # # ## Check here: http://download.autodesk.com/us/maya/2011help/pymel/generated/functions/pymel.core.windows/pymel.core.windows.headsUpDisplay.html # # print "playBlastFile", playBlastFile # normPB = os.path.normpath(playBlastFile) # # print "normPath", normPB ranges = self._getTimelineRanges() flip_options.frameRange((ranges[1], ranges[2])) flip_options.outputToMPlay(True) flip_options.useResolution(True) flip_options.resolution((pbSettings["Resolution"][0], pbSettings["Resolution"][1])) scene_view.flipbook(viewport, flip_options) # cmds.playblast(format=pbSettings["Format"], # filename=playBlastFile, # widthHeight=pbSettings["Resolution"], # percent=pbSettings["Percent"], # quality=pbSettings["Quality"], # compression=pbSettings["Codec"], # sound=activeSound, # uts=True) # ## remove window when pb is donw # cmds.deleteUI(tempWindow) # # # Get back to the original frame range if the codec is Quick Time # if pbSettings["Format"] == 'qt': # cmds.playbackOptions(maxTime=maxTime) # cmds.playbackOptions(animationEndTime=endTime) # # ## remove the custom HUdS # if pbSettings["ShowFrameNumber"]: # cmds.headsUpDisplay('SMFrame', rem=True) # if pbSettings["ShowSceneName"]: # cmds.headsUpDisplay('SMScene', rem=True) # if pbSettings["ShowCategory"]: # cmds.headsUpDisplay('SMCategory', rem=True) # if pbSettings["ShowFPS"]: # cmds.headsUpDisplay('SMFPS', rem=True) # try: # if pbSettings["ShowFrameRange"]: # cmds.headsUpDisplay('SMFrange', rem=True) # except KeyError: # pass # # cmds.headsUpDisplay('SMCameraName', rem=True) # # ## get back the previous state of HUDS # for hud in hudPreStates.keys(): # cmds.headsUpDisplay(hud, e=True, vis=hudPreStates[hud]) # pm.select(selection) ## find this version in the json data for version in jsonInfo["Versions"]: if relVersionName == version["RelativePath"]: # replace the houdini variable with first frame nonVarPBfile = relPlayBlastFile.replace("_$F4", "_0001") # version["Preview"][currentCam] = nonVarPBfile version["Preview"][currentCam] = relPlayBlastFile self._dumpJson(jsonInfo, openSceneInfo["jsonFile"])
def deselect(self): import hou hou.clearAllSelected()
def createPreview(self, *args, **kwargs): """Creates a Playblast preview from currently open scene""" logger.debug("Func: createPreview") # pbSettings = self.loadPBSettings() # extension = "jpg" openSceneInfo = self.getOpenSceneInfo() if not openSceneInfo: msg = "This is not a base scene. Scene must be saved as a base scene before playblasting." self._exception(360, msg) return selection = self._getSelection() hou.clearAllSelected() jsonInfo = self._loadJson(openSceneInfo["jsonFile"]) # scene_view = toolutils.sceneViewer() viewport = scene_view.curViewport() cam = viewport.camera() if cam: currentCam = cam.name() else: currentCam = 'persp' flip_options = scene_view.flipbookSettings().stash() versionName = self.getSceneFile() relVersionName = os.path.relpath(versionName, start=openSceneInfo["projectPath"]) playBlastDir = os.path.join(openSceneInfo["previewPath"], openSceneInfo["version"]) self._folderCheck(playBlastDir) playBlastFile = os.path.join( playBlastDir, "{0}_{1}_PB_$F4.{2}".format(self.niceName(versionName), currentCam, extension)) # relPlayBlastFile = os.path.relpath(playBlastFile, start=openSceneInfo["projectPath"]) # if os.path.isfile(playBlastFile): try: os.remove(playBlastFile) except WindowsError: msg = "The file is open somewhere else" self._exception(202, msg) return flip_options.output(playBlastFile) ranges = self._getTimelineRanges() flip_options.frameRange((ranges[1], ranges[2])) flip_options.outputToMPlay(not pbSettings["ConvertMP4"]) flip_options.useResolution(True) flip_options.resolution( (pbSettings["Resolution"][0], pbSettings["Resolution"][1])) scene_view.flipbook(viewport, flip_options) if pbSettings["ConvertMP4"]: nonVarPBfile = playBlastFile.replace("_$F4", "_0001") convertedFile = self._convertPreview(nonVarPBfile, overwrite=True, deleteAfter=True, crf=pbSettings["CrfValue"]) relPlayBlastFile = os.path.relpath( convertedFile, start=openSceneInfo["projectPath"]) os.startfile(convertedFile) else: relPlayBlastFile = os.path.relpath( playBlastFile, start=openSceneInfo["projectPath"]) ## find this version in the json data for version in jsonInfo["Versions"]: if relVersionName == version["RelativePath"]: # replace the houdini variable with first frame nonVarPBfile = relPlayBlastFile.replace("_$F4", "_0001") # version["Preview"][currentCam] = nonVarPBfile version["Preview"][currentCam] = relPlayBlastFile self._dumpJson(jsonInfo, openSceneInfo["jsonFile"])
def setShot(self): s = self.shots.selectedItems()[0] name = s.text(0) fr = map(int, re.findall(r'(\d+)', s.text(1))) combo_cam = s.text(2).rstrip() bundle = s.text(3).rstrip() take = s.text(4).rstrip() notes = s.text(5).rstrip() self.ln_name.setText(name) self.ln_begin.setText(str(fr[0])) self.ln_end.setText(str(fr[1])) self.combo_cam.setCurrentIndex(self.combo_cam.findText(combo_cam)) self.ln_notes.setText(notes) self.combo_bundle.setCurrentIndex(self.combo_bundle.findText(bundle)) self.combo_takes.setCurrentIndex(self.combo_takes.findText(take)) hou.playbar.setPlaybackRange(min(fr), max(fr)) hou.setFrame(min(fr)) if self.ch_flipbook.isChecked(): viewer = toolutils.sceneViewer() settings = viewer.flipbookSettings() settings.frameRange(fr) if combo_cam != 'Camera' and self.ch_cam.isChecked(): camera_node = hou.node(combo_cam) if camera_node: hou.ui.paneTabOfType(hou.paneTabType.SceneViewer, 0).curViewport().setCamera(camera_node) try: camera_node.parm('vcomment').eval() except: camera_node.addSpareParmTuple( hou.StringParmTemplate('vcomment', 'Viewport Comment', 1, '')) camera_node.parm('vcomment').set( 'Name: ' + name + '\n' + 'Camera: ' + combo_cam + ' ( ' + str(min(fr)) + '-' + str(max(fr)) + 'f ) ' + str(hou.fps()) + 'fps ' + str(camera_node.parm('resx').eval()) + 'x' + str(camera_node.parm('resy').eval()) + 'px\n' + 'Notes: ' + notes) camera_node.setCurrent(True, True) else: hou.ui.paneTabOfType(hou.paneTabType.SceneViewer, 0).curViewport().homeAll() if bundle != 'No Bundle': if self.ch_bundle.isChecked(): displNodes = hou.nodeBundle(bundle).nodes() hideNodes = hou.node('/obj').children() for n in hideNodes: try: n.setDisplayFlag(False) except: pass hou.clearAllSelected() for n in displNodes: try: n.setDisplayFlag(True) except: pass n.setSelected(1, clear_all_selected=0, show_asset_if_selected=0) if self.ch_hide.isChecked(): hou.clearAllSelected() nds = hou.nodeBundle(bundle).nodes() for n in nds: n.setSelected(1, clear_all_selected=0, show_asset_if_selected=0) self.hide(nds) if take != 'No Take': hou.takes.setCurrentTake(hou.takes.findTake(take)) else: hou.takes.setCurrentTake(hou.takes.rootTake())