def create_cook_button(geo):
    script='''
try:
    hou.node("./set_rig_alembic").cook(force=True)
except:
    print "Error while cooking set_rig_alembic"
try:
    hou.node("./set_model_alembic").cook(force=True)
except:
    print "Error while cooking set_model_alembic"
try:
    hou.node("./animated_rig").cook(force=True)
except:
    print "Error while cooking animated_rig"
try:
    hou.node("./animated_model").cook(force=True)
except:
    print "Error while cooking animated_model"
try:
    hou.node("./set_switch").cook(force=True)
except:
    print "Error while cooking set_switch"
try:
    hou.node("./shot_switch").cook(force=True)
except:
    print "Error while cooking shot_switch"
    '''
    hou_parm_template_group = geo.parmTemplateGroup()
    cook = hou.ButtonParmTemplate('cook', 'Refresh', script_callback=script, script_callback_language=hou.scriptLanguage.Python)
    trouble_shoot_folder = hou.FolderParmTemplate('trouble_shoot', 'Trouble Shooting', folder_type=hou.folderType.Tabs)
    trouble_shoot_folder.addParmTemplate(cook)
    hou_parm_template_group.append(trouble_shoot_folder)
    geo.setParmTemplateGroup(hou_parm_template_group)
    return geo
def hda_parameter_setup(hda, geo, project):
    parmGroup = hda.parmTemplateGroup()
    projectName = project.get_name().lower().replace(' ', '_')
    projectFolder = hou.FolderParmTemplate(projectName, project.get_name(), folder_type=hou.folderType.Tabs, default_value=0, ends_tab_group=False)

    source_menu = hou.MenuParmTemplate('source', 'Source', ('set', 'animated', 'object_space'), menu_labels=('Set', 'Animated', 'Object Space'), default_value=2)
    source_menu_index = hou.IntParmTemplate('source_index', 'Source Index', 1, is_hidden=True, default_expression=('ch("source")',))

    projectFolder.addParmTemplate(source_menu)
    projectFolder.addParmTemplate(source_menu_index)
    cook_script='hou.node("./' + geo.name() + '").parm("cook").pressButton()\nprint "Asset Refreshed"'
    projectFolder.addParmTemplate(create_shot_menu(hideWhen='source_index != 1', callback_script=cook_script))
    projectFolder.addParmTemplate(create_set_menu(hideWhen='source_index != 0', callback_script=cook_script))
    hide_toggle = hou.ToggleParmTemplate('hide', 'Hide')
    projectFolder.addParmTemplate(hide_toggle)
    recook = hou.ButtonParmTemplate('re_cook_hda', 'Reload', script_callback=cook_script, script_callback_language=hou.scriptLanguage.Python)
    projectFolder.addParmTemplate(recook)
    version = hou.IntParmTemplate('abcversion', 'Alembic Version', 1)
    projectFolder.addParmTemplate(version)
    lightlink = hou.StringParmTemplate("lightmask", "Light Mask", 1, default_value=(["*"]), string_type=hou.stringParmType.NodeReferenceList) #, menu_items=([]), menu_labels=([]), icon_names=([]))
    lightlink.setTags({"opfilter": "!!OBJ/LIGHT!!", "oprelative": "/"})
    projectFolder.addParmTemplate(lightlink)
    auto_archive = hou.properties.parmTemplate(get_latest_prman(),"ri_auto_archive")
    auto_archive.setDefaultValue(("exist",))
    projectFolder.addParmTemplate(auto_archive)
    parmGroup.addParmTemplate(projectFolder)
    hda.type().definition().setParmTemplateGroup(parmGroup)
    hda.parm("ri_auto_archive").set("force")

    return hda
示例#3
0
def pywy():
    """
    create a node to test code with python
    """

    help(pywy)

    import hou
    nodeSelect = hou.selectedNodes()
    pink = hou.Color((0.98, 0.275, 0.275))

    for node in nodeSelect:
        #create node from selected node
        pyNull = node.createOutputNode("null", "pythonRunCode")
        pyNull.setColor(pink)
        #prepa param
        parm_group = pyNull.parmTemplateGroup()
        parm_folder = hou.FolderParmTemplate("folder", "pywy")
        #button run code
        button = hou.ButtonParmTemplate("runcode", "Run_Code")
        button.setTags({
            "script_callback_language":
            "python",
            "script_callback":
            "exec(kwargs['node'].parm('pythonCode').eval())"
        })
        parm_folder.addParmTemplate(button)
        #multistring
        multistring = hou.StringParmTemplate("pythonCode", "PythonCode", 1)
        multistring.setTags({"editor": "1", "editorlang": "python"})
        parm_folder.addParmTemplate(multistring)
        #append param
        parm_group.append(parm_folder)
        pyNull.setParmTemplateGroup(parm_group)
示例#4
0
def add_repath_button(node_path):
    geo_node = hou.node(node_path)

    b = hou.ButtonParmTemplate('repath_abcs', 'Repath_abcs')
    b.setScriptCallbackLanguage(hou.scriptLanguage.Python)
    b.setScriptCallback(REPATH_WIDGET_SCRIPT.format(node_path))

    geo_node.addSpareParmFolder('REPATH ABCS')
    geo_node.addSpareParmTuple(b, ('REPATH ABCS', ))
示例#5
0
文件: wf_midi.py 项目: tws0002/qq
def parm_create_button(node, name, label, join, callback):

    new_template = hou.ButtonParmTemplate(
        name,
        label,
        join_with_next=join,
        script_callback=callback,
        script_callback_language=hou.scriptLanguage.Python)

    try:
        ptg = node.parmTemplateGroup()
        ptg.addParmTemplate(new_template)
        node.setParmTemplateGroup(ptg)
        existed = 0
    except:
        existed = 1
示例#6
0
def addResetButton(node, folder, apply_to_definition=False, move_to_top=False):
    """add a reset button to a given folder within the target node"""
    if apply_to_definition:
        if not node.isEditable():
            raise hou.Error("Cannot apply to definition, node is not editable")
        target = node.type().definition()
    else:
        target = node

    ptg = target.parmTemplateGroup()

    if isinstance(folder, str):
        split_path = folder.split("/")
        if len(split_path) == 1:
            f_path = findFolder(ptg, folder)
        elif len(split_path) > 1:
            f_path = tuple(split_path)
    elif isinstance(folder, tuple):
        f_path = folder

    print(f_path)

    f = ptg.findFolder(f_path)

    script = """for p in kwargs['node'].parmsInFolder({0}):
    p.revertToDefaults()""".format(f_path)

    button_name = "reset_" + "_".join(f.lower().replace(" ", "_")
                                      for f in f_path)

    button = hou.ButtonParmTemplate(button_name, "Reset " + f.label())
    button.setScriptCallback(script)
    button.setScriptCallbackLanguage(hou.scriptLanguage.Python)

    f.addParmTemplate(button)

    ptg.replace(ptg.findFolder(f_path), f)
    target.setParmTemplateGroup(ptg)

    if move_to_top:
        moveToTop(node.parm(button_name),
                  apply_to_definition=apply_to_definition)

    return node.parm(button_name)
示例#7
0
def importGeoAsset():
    """
    import all geo file from $HIP/geo/ in a new sop call geoImport
    """

    help(importGeoAsset)

    import hou
    import os

    #set path
    hipPath = hou.expandString('$HIP')
    path = hipPath + "/geo/"
    print(path)

    listPath = os.listdir(path)

    obj = hou.node("/obj")
    geoImport = obj.createNode("geo", "geoImport")

    file1 = hou.node("/obj/geoImport/file1")
    file1.destroy()

    for n in listPath:
        print(n)
        currentFile = geoImport.createNode("file", n)
        #set fileNames
        currentFile.setParms({"file": "$" + "HIP/geo/" + n})

    #reload geo callback
    #prepa param
    parm_group = geoImport.parmTemplateGroup()
    parm_folder = hou.FolderParmTemplate("folder", "reload")
    #button run code
    button = hou.ButtonParmTemplate("reload", "Reload")
    button.setTags({
        "script_callback_language": "python",
        "script_callback": "import y \ny.reloadGeo()"
    })
    parm_folder.addParmTemplate(button)
    #append param
    parm_group.append(parm_folder)
    geoImport.setParmTemplateGroup(parm_group)
示例#8
0
    def create_top(self,type,dir):
        top = hou.node('/obj').createNode('topnet','%s_to_jpg'%type)
        top.setComment('    缩略图生成中')
        top.setCurrent(True, True)
        top.moveToGoodPosition()
        group = top.parmTemplateGroup()
        destroy = hou.ButtonParmTemplate('del','自毁',script_callback='hou.pwd().destroy(disable_safety_checks=False)',script_callback_language=hou.scriptLanguage.Python)
        folder = group.findFolder('Scheduler')
        group.appendToFolder(folder,destroy)
        top.setParmTemplateGroup(group)
        print('会调用CPU核心数-1的资源进行缩略图转换.\n在转换完成前,请不要进行其他操作,防止意外发生XD')
        top.setGenericFlag(hou.nodeFlag.DisplayComment,True)
        localscheduler = top.children()[0]
        localscheduler.parm('maxprocsmenu').set('-1')
        top_path = top.path()
        filepattern = hou.node(top_path).createNode('filepattern')
        filepattern.parm('pattern').set('%s'%dir)
        attributefromstring = filepattern.createOutputNode('attributefromstring')
        attributefromstring.parm('sourcestring').set('`@filename`')
        attributefromstring.parm('useregex').set('on')
        attributefromstring.parm('matchstring').set('(.+?)\.')
        ropcomposite = attributefromstring.createOutputNode('ropcomposite')
        ropcomposite.parm('tres').set('specify')
        ropcomposite.parm('res1').set('400')
        ropcomposite.parm('res2').set('200')
        ropcomposite.parm('copoutput').set('`@directory`/Thumbnails/`@group0`.jpg')
        filerename = ropcomposite.createOutputNode('filerename')
        filerename.parm('pdg_workitemgeneration').set('3')
        filerename.parm('originalpath').set('`@directory`/`@group0`.%s'%type)
        filerename.parm('newpath').set('`@directory`/HDRIs/`@group0`.%s'%type)
        mapall = filerename.createOutputNode('mapall')
        pythonscript = mapall.createOutputNode('pythonscript')
        pythonscript.parm('pdg_workitemgeneration').set('3')
        pythonscript.parm('script').set('import hou\nprint ("\\n好耶,没报错\\n缩略图已成功创建完成,可以点击自毁按钮删除节点:)\\n\\nHDRI Browser内右键刷新缩略图")\nhou.pwd().parent().setComment(" 自毁程序:已在该节点参数面板就绪\\nHDRI内右键刷新缩略图")')
        top.layoutChildren()


        pythonscript.setGenericFlag(hou.nodeFlag.OutputForDisplay, 1)
        top.parm('cookbutton').pressButton()

        return top
    def addScriptBlock(self):
        """ ノードにスクリプトのテキストブロックと実行ボタンを追加する """

        script_block_prefix = 'scriptblock_'
        script_folder_label = 'Scripts'

        for node in hou.selectedNodes():
            group = node.parmTemplateGroup()

            # find 'Scripts' folder
            folder = group.findFolder(script_folder_label)

            if not folder:
                folder = hou.FolderParmTemplate(script_block_prefix + 'folder',
                                                script_folder_label)
                group.addParmTemplate(folder)

            # add snipet
            index = 0
            while group.find(script_block_prefix + 'snipet_' + str(index)):
                index += 1

            snipet = hou.StringParmTemplate(
                script_block_prefix + 'snipet_' + str(index), 'Python Script',
                1)
            snipet.setTags(dict(editor='1', editorlang='python'))
            snipet.setDefaultValue(("# node = kwargs['node']", ))
            group.appendToFolder(script_folder_label, snipet)

            # add execute button
            button = hou.ButtonParmTemplate(
                script_block_prefix + 'button_' + str(index), 'Exec')
            button.setScriptCallback(
                "exec(kwargs['node'].parm('{}').eval())".format(snipet.name()))
            button.setScriptCallbackLanguage(hou.scriptLanguage.Python)
            group.appendToFolder(script_folder_label, button)

            node.setParmTemplateGroup(group)
示例#10
0
    def _create_sgtk_parm_fields(self, node, hou=None):
        """
        Create the sgtk folder template.

        This contains the common parameters used by all node handlers.

        :param node: A :class:`hou.Node` instance.
        :param bool use_sgtk_default: Whether the "Use Shotgun" checkbox is to be
            checked by default.
        :param hou: The houdini module. We have to lazy load the houdini python
            module here, but not in the hooks, so use hook's imports and pass it
            for efficiency.
        """
        if not hou:
            import hou

        sgtk_templates = self._create_sgtk_parms(node)

        all_versions = hou.StringParmTemplate(self.SGTK_ALL_VERSIONS,
                                              "All Versions",
                                              1,
                                              is_hidden=True)
        sgtk_templates.append(all_versions)

        version = hou.MenuParmTemplate(
            self.SGTK_VERSION,
            "Version",
            tuple(),
            item_generator_script=self.generate_callback_script_str(
                "populate_versions"),
            item_generator_script_language=hou.scriptLanguage.Python,
            script_callback=self.generate_callback_script_str(
                "refresh_file_path_from_version"),
            script_callback_language=hou.scriptLanguage.Python,
        )
        version.setConditional(hou.parmCondType.DisableWhen,
                               "{ use_sgtk != 1 }")
        version.setJoinWithNext(True)
        sgtk_templates.append(version)

        refresh_button = hou.ButtonParmTemplate(
            self.SGTK_REFRESH_VERSIONS,
            "Refresh Versions",
            script_callback=self.generate_callback_script_str(
                "refresh_file_path_from_version"),
            script_callback_language=hou.scriptLanguage.Python,
        )
        refresh_button.setConditional(
            hou.parmCondType.DisableWhen,
            '{ use_sgtk != 1 } { sgtk_element == "" }')
        refresh_button.setJoinWithNext(True)
        sgtk_templates.append(refresh_button)

        resolved_version = hou.StringParmTemplate(self.SGTK_RESOLVED_VERSION,
                                                  "Resolved Version",
                                                  1,
                                                  default_value=("1", ))
        resolved_version.setConditional(hou.parmCondType.DisableWhen,
                                        "{ sgtk_version != -1 }")
        sgtk_templates.append(resolved_version)

        return sgtk_templates
def charAssetsToHDA():
    this = hou.node('.')
    importNode = hou.hipFile.importFBX(this.parm('char_fbx_file').eval(), suppress_save_prompt=True, merge_into_scene=True, import_cameras=False, import_joints_and_skin=True, import_geometry=True, import_lights=False, import_animation=False, import_materials=False, resample_animation=False, resample_interval=1.0, override_framerate=False,framerate=-1, hide_joints_attached_to_skin=True, convert_joints_to_zyx_rotation_order=False, material_mode=hou.fbxMaterialMode.FBXShaderNodes, compatibility_mode=hou.fbxCompatibilityMode.Maya, single_precision_vertex_caches=False, triangulate_nurbs=False, triangulate_patches=False, import_global_ambient_light=False, import_blend_deformers_as_blend_sops=False, segment_scale_already_baked_in=True, convert_file_paths_to_relative=False, unlock_geometry=True, unlock_deformations=True, import_nulls_as_subnets=False, import_into_object_subnet=True, convert_into_y_up_coordinate_system=False)
    fbxNode = importNode[0]   
    
    if fbxNode:
        # set up the parameters
        
        # CHOP mocap params
        hou_parm_template = hou.StringParmTemplate("fbxfile", "FBX File", 1, default_value=([""]), naming_scheme=hou.parmNamingScheme.Base1, string_type=hou.stringParmType.FileReference, menu_items=([]), menu_labels=([]), icon_names=([]), item_generator_script="", item_generator_script_language=hou.scriptLanguage.Python, menu_type=hou.menuType.StringReplace)
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Character']), create_missing_folders=True)
        
        hou_parm_template = hou.StringParmTemplate("fbxclip", "Clip", 1, default_value=([""]), naming_scheme=hou.parmNamingScheme.Base1, string_type=hou.stringParmType.Regular, menu_items=([]), menu_labels=([]), icon_names=([]), item_generator_script="opmenu -l CHOP/fbxagent/fbximport currentclip", item_generator_script_language=hou.scriptLanguage.Hscript, menu_type=hou.menuType.Normal)
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Character']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("mocapswitch", "Use Mocap?", default_value=False)
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Character']), create_missing_folders=True)
        
        # Alembic params
        hou_parm_template = hou.LabelParmTemplate("labelparm", "Alembic", column_labels=([""]))
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("use_cache", "Use Cache", default_value=False)
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.FloatParmTemplate("cache_scale", "Cache Scale", 1, default_value=([1]), min=0, max=10, min_is_strict=False, max_is_strict=False, look=hou.parmLook.Regular, naming_scheme=hou.parmNamingScheme.Base1)
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.MenuParmTemplate("trange", "Valid Frame Range", menu_items=(["off","normal","on"]), menu_labels=(["Render Current Frame","Render Frame Range","Render Frame Range Only (Strict)"]), default_value=0, icon_names=([]), item_generator_script="", item_generator_script_language=hou.scriptLanguage.Python, menu_type=hou.menuType.Normal)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.FloatParmTemplate("f", "Start/End/Inc", 3, default_value=([0, 0, 1]), default_expression=(["$FSTART","$FEND",""]), default_expression_language=([hou.scriptLanguage.Hscript,hou.scriptLanguage.Hscript,hou.scriptLanguage.Hscript]), min=0, max=10, min_is_strict=False, max_is_strict=False, look=hou.parmLook.Regular, naming_scheme=hou.parmNamingScheme.Base1)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.StringParmTemplate("cachefile", "Cache File", 1, default_value=(["$HIP/output.abc"]), naming_scheme=hou.parmNamingScheme.Base1, string_type=hou.stringParmType.FileReference, menu_items=([]), menu_labels=([]), icon_names=([]), item_generator_script="opmenu -l exportnet/alembic filename", item_generator_script_language=hou.scriptLanguage.Hscript, menu_type=hou.menuType.StringReplace)
        hou_parm_template.setTags({"autoscope": "0000000000000000", "filechooser_pattern": "*.abc"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ButtonParmTemplate("cache_btn", "Cache to Disk")
        hou_parm_template.setTags({"autoscope": "0000000000000000", "takecontrol": "always"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        #FBX params
        hou_parm_template = hou.SeparatorParmTemplate("sepparm")
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.LabelParmTemplate("labelparm2", "FBX", column_labels=([""]))
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.MenuParmTemplate("trange2", "Valid Frame Range", menu_items=(["off","normal","on"]), menu_labels=(["Render Current Frame","Render Frame Range","Render Frame Range Only (Strict)"]), default_value=0, icon_names=([]), item_generator_script="", item_generator_script_language=hou.scriptLanguage.Python, menu_type=hou.menuType.Normal)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.FloatParmTemplate("f4", "Start/End/Inc", 3, default_value=([0, 0, 1]), default_expression=(["$FSTART","$FEND",""]), default_expression_language=([hou.scriptLanguage.Hscript,hou.scriptLanguage.Hscript,hou.scriptLanguage.Hscript]), min=0, max=10, min_is_strict=False, max_is_strict=False, look=hou.parmLook.Regular, naming_scheme=hou.parmNamingScheme.Base1)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.StringParmTemplate("take", "Render With Take", 1, default_value=(["_current_"]), naming_scheme=hou.parmNamingScheme.Base1, string_type=hou.stringParmType.Regular, menu_items=([]), menu_labels=([]), icon_names=([]), item_generator_script="opmenu -l exportnet/filmboxfbx1 take", item_generator_script_language=hou.scriptLanguage.Hscript, menu_type=hou.menuType.Normal)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.StringParmTemplate("sopoutput", "Output File", 1, default_value=(["$HIP/out.fbx"]), naming_scheme=hou.parmNamingScheme.Base1, string_type=hou.stringParmType.FileReference, menu_items=([]), menu_labels=([]), icon_names=([]), item_generator_script="opmenu -l exportnet/filmboxfbx1 sopoutput", item_generator_script_language=hou.scriptLanguage.Hscript, menu_type=hou.menuType.StringReplace)
        hou_parm_template.setTags({"autoscope": "0000000000000000", "filechooser_mode": "write"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("mkpath", "Create Intermediate Directories", default_value=True, default_expression='on', default_expression_language=hou.scriptLanguage.Hscript)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("exportkind", "Export in ASCII Format", default_value=True, default_expression='on', default_expression_language=hou.scriptLanguage.Hscript)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.StringParmTemplate("sdkversion", "FBX SDK Version", 1, default_value=([""]), naming_scheme=hou.parmNamingScheme.Base1, string_type=hou.stringParmType.Regular, menu_items=([]), menu_labels=([]), icon_names=([]), item_generator_script="opmenu -l exportnet/filmboxfbx1 sdkversion", item_generator_script_language=hou.scriptLanguage.Hscript, menu_type=hou.menuType.Normal)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.MenuParmTemplate("vcformat", "Vertex Cache Format", menu_items=(["mayaformat","maxformat"]), menu_labels=(["Maya Compatible (MC)","3DS MAX Compatible (PC2)"]), default_value=0, icon_names=([]), item_generator_script="", item_generator_script_language=hou.scriptLanguage.Python, menu_type=hou.menuType.Normal)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.MenuParmTemplate("invisobj", "Export Invisible Objects", menu_items=(["nullnodes","fullnodes"]), menu_labels=(["As Hidden Null Nodes","As Hidden Full Nodes"]), default_value=0, icon_names=([]), item_generator_script="", item_generator_script_language=hou.scriptLanguage.Python, menu_type=hou.menuType.Normal)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.FloatParmTemplate("polylod", "Conversion Level of Detail", 1, default_value=([1]), min=0, max=5, min_is_strict=True, max_is_strict=False, look=hou.parmLook.Regular, naming_scheme=hou.parmNamingScheme.Base1)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("detectconstpointobjs", "Detect Constant Point Count Dynamic Objects", default_value=True, default_expression='on', default_expression_language=hou.scriptLanguage.Hscript)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("convertsurfaces", "Convert NURBS and Bezier Surfaces to Polygons", default_value=False, default_expression='off', default_expression_language=hou.scriptLanguage.Hscript)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("conservemem", "Conserve Memory at the Expense of Export Time", default_value=False, default_expression='off', default_expression_language=hou.scriptLanguage.Hscript)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("deformsasvcs", "Export Deforms as Vertex Caches", default_value=False, default_expression='off', default_expression_language=hou.scriptLanguage.Hscript)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("forceblendshape", "Force Blend Shape Export", default_value=False, default_expression='off', default_expression_language=hou.scriptLanguage.Hscript)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("forceskindeform", "Force Skin Deform Export", default_value=False, default_expression='off', default_expression_language=hou.scriptLanguage.Hscript)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ToggleParmTemplate("exportendeffectors", "Export End Effectors", default_value=True, default_expression='on', default_expression_language=hou.scriptLanguage.Hscript)
        hou_parm_template.setTags({"autoscope": "0000000000000000"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        hou_parm_template = hou.ButtonParmTemplate("execute", "Save to Disk")
        hou_parm_template.setTags({"autoscope": "0000000000000000", "takecontrol": "always"})
        fbxNode.addSpareParmTuple(hou_parm_template, in_folder=(['Cache']), create_missing_folders=True)
        
        children = fbxNode.children()
        fbxNodeName = fbxNode.name().rsplit('_', 1)
        
        charGeo = fbxNode.createNode('geo', fbxNodeName[0] + '_geo')
        if len(charGeo.children()) > 0:
            charGeo.children()[0].destroy() # older version of houdini had a lone file node

        ccache = charGeo.createNode('alembic', 'char_abc_cache')
        ccache.parm('fileName').set('`chs("../../cachefile")`')
        cscale = charGeo.createNode('xform', 'cache_scale')
        cscale.setFirstInput(ccache)
        cscale.parm('scale').setExpression('ch("../../cache_scale")')
        cswitch = charGeo.createNode('switch', 'cache_switch')
        cswitch.parm('input').setExpression('ch("../../use_cache")')
        
        exportNet = fbxNode.createNode('ropnet', 'exportnet')
        alembicRop = exportNet.createNode('alembic', 'alembic')
        alembicRop.parm('execute').setExpression('ch("../../cache_btn")')
        alembicRop.parm('trange').setExpression('ch("../../trange")')
        alembicRop.parm('f1').setExpression('ch("../../f1")')
        alembicRop.parm('f2').setExpression('ch("../../f2")')
        alembicRop.parm('f3').setExpression('ch("../../f3")')
        alembicRop.parm('use_sop_path').set(1)
        alembicRop.parm('sop_path').set('../../' + charGeo.name())
        alembicRop.parm('build_from_path').set(1)
        alembicRop.parm('path_attrib').set('path')
        alembicRop.parm('root').set('')

        fbxRop = exportNet.createNode('filmboxfbx', 'fbx')
        fbxRop.parm('startnode').set('`opfullpath("../../")`')
        fbxRop.parm('createsubnetroot').set(0)
        
        fbxRop.parm('trange').setExpression('ch("../../trange2")')
        fbxRop.parm('f1').setExpression('ch("../../f41")')
        fbxRop.parm('f2').setExpression('ch("../../f42")')
        fbxRop.parm('f3').setExpression('ch("../../f43")')
        fbxRop.parm('take').setExpression('ch("../../take")')
        fbxRop.parm('sopoutput').setExpression('ch("../../sopoutput")')
        fbxRop.parm('mkpath').setExpression('ch("../../mkpath")')
        fbxRop.parm('exportkind').setExpression('ch("../../exportkind")')
        fbxRop.parm('sdkversion').setExpression('ch("../../sdkversion")')
        fbxRop.parm('vcformat').setExpression('ch("../../vcformat")')
        fbxRop.parm('invisobj').setExpression('ch("../../invisobj")')
        fbxRop.parm('polylod').setExpression('ch("../../polylod")')
        fbxRop.parm('detectconstpointobjs').setExpression('ch("../../detectconstpointobjs")')
        fbxRop.parm('convertsurfaces').setExpression('ch("../../convertsurfaces")')
        fbxRop.parm('conservemem').setExpression('ch("../../conservemem")')
        fbxRop.parm('deformsasvcs').setExpression('ch("../../deformsasvcs")')
        fbxRop.parm('forceblendshape').setExpression('ch("../../forceblendshape")')
        fbxRop.parm('forceskindeform').setExpression('ch("../../forceskindeform")')
        fbxRop.parm('exportendeffectors').setExpression('ch("../../exportendeffectors")')
        fbxRop.parm('execute').setExpression('ch("../../execute")')
        
        rigBox = fbxNode.createNetworkBox()
        rigBox.setComment('Rig')
                        
        for child in children:
            # for the fbxchop we need to rename it and set up a bclip/agent network to
            # drive animation on the joints
            if child.type().name() == 'chopnet':
                child.destroy()
            
            if child.type().name() == 'null':
                 # we want to set CHOP expressions for nulls so they move the bones with our mocap CHOPs
                 if child.name() is not fbxNodeName[0]: # check to make sure this is not the root null
                    child.parmTuple('t').deleteAllKeyframes()
                    child.parmTuple('r').deleteAllKeyframes()
                    child.parm('rx').setExpression('chop("../CHOP/OUT/$OS:$CH")')
                    child.parm('ry').setExpression('chop("../CHOP/OUT/$OS:$CH")')
                    child.parm('rz').setExpression('chop("../CHOP/OUT/$OS:$CH")')
                    child.parm('tx').setExpression('chop("../CHOP/OUT/$OS:$CH")')
                    child.parm('ty').setExpression('chop("../CHOP/OUT/$OS:$CH")')
                    child.parm('tz').setExpression('chop("../CHOP/OUT/$OS:$CH")')
                    rigBox.addNode(child)
            
            if child.type().name() == 'bone':
                # add the bones to the rig net box
                rigBox.addNode(child)
                    
            if child.type().name() == 'geo':
                if child.name() is not charGeo.name():
                    # we want to convert these to a single geo pointing to a alembic
                    hou.copyNodesTo(child.children(), charGeo)
                    child.destroy()
        
        rigBox.fitAroundContents()
        
        # build the CHOP network
        child = fbxNode.createNode('chopnet', 'CHOP')
        
        #let's fetch the original tpose and place in in a bclip
        fetch = child.createNode('fetch')
        fetch.parm('rate').set(24)
        fetch.parm('nodepath').set('../../* ')
        
        bclip = fetch.clipData(True)
        fileName = this.parm('char_bclip_file').eval()
        
        f = open(hou.expandString(fileName), 'wb')
        f.write(bclip)
        
        f.close()
        
        fetch.destroy()
        
        tposeChop = child.createNode('file', 'tpose_clip')
        tposeChop.parm('file').set(fileName)
        agentChop = child.createNode('agent', 'mocap')
        agentChop.parm('clipname').set('`chs("../../fbxclip")`')
        switch = child.createNode('switch', 'switch')
        switch.parm('index').setExpression('ch("../../mocapswitch")')
        
        outChop = child.createNode('null', 'OUT')
        sopNode = child.createNode('sopnet', 'fbxagent')
        
        switch.setFirstInput(tposeChop)
        switch.setNextInput(agentChop)
        outChop.setFirstInput(switch)
        
        fbxImport = sopNode.createNode('agent', 'fbximport')
        fbxImport.parm('fbxfile').set('`chs("../../../fbxfile")`')
        
        fbxImport.parm('input').set(2)
        
        agentChop.parm('soppath').set('../fbxagent/fbximport')
        
        outChop.setDisplayFlag(True)
        #outChop.setRenderFlag(True)
        
        child.layoutChildren()
        
        # work on the character geo point all the captures to an alembic file
        overMerge = charGeo.createNode('merge', 'merge')
        
        alembic = charGeo.createNode('alembic', 'char_abc_geo')
        fileName = this.parm('char_abc_file').eval()
        alembic.parm('fileName').set(fileName)
        
        unpack = charGeo.createNode('unpack', 'unpack')
        unpack.setFirstInput(alembic)
        unpack.parm('transfer_attributes').set('path shop_materialpath')
        
        children = charGeo.children()
        for child in children:
            if child.type().name() == 'file':
                nodeName = child.name()   
                deleteNode = charGeo.createNode('delete', 'isolate_' + nodeName)
                deleteNode.parm('negate').set(1)
                deleteNode.parm('group').set('@path="/' + nodeName + '/*"')
                deleteNode.setFirstInput(unpack)
                if len(child.outputs()) > 0:
                    delOutput = child.outputs()[0]
                    delOutput.setFirstInput(deleteNode)
                
                child.destroy()
            elif child.type().name() == 'deform':
                child.destroy()
            elif child.type().name() == 'channel':
                child.destroy()
            elif child.type().name() == 'capture':
                child.setGenericFlag(hou.nodeFlag.Lock, False) 
            elif child.type().name() == 'captureoverride':
                overMerge.setNextInput(child)
        
        deform = charGeo.createNode('deform', 'deform')
        deform.setFirstInput(overMerge)
        cswitch.setFirstInput(deform)
        cswitch.setNextInput(cscale)
        
        cswitch.setDisplayFlag(True)
        cswitch.setRenderFlag(True)
        
        charGeo.layoutChildren()

        hdaNode = fbxNode.createDigitalAsset(this.parm('asset_name').eval(), this.parm('hda_location').eval(), this.parm('desc').eval())
        hdaDef = hdaNode.type().definition()
        hdaOptions = hdaDef.options()
        hdaDef.save(hdaDef.libraryFilePath(), hdaNode, hdaOptions)
示例#12
0
def CreateCanoeRenderTab(n):
    ptg = n.parmTemplateGroup()

    folder = hou.FolderParmTemplate("shortcuts", "CANOE")

    Render_Cam = hou.StringParmTemplate(
        "RS_renderCamera2",
        "Render Camera",
        1,
        default_value=(["/obj/RS_Cam"]),
        string_type=hou.stringParmType.NodeReference)
    Render_Cam.setTags({
        "autoscope": "0000000000000000",
        "opfilter": "!!OBJ/CAMERA!!",
        "oprelative": "."
    })
    folder.addParmTemplate(Render_Cam)

    Output = hou.StringParmTemplate(
        "RS_outputFileNamePrefix2",
        "Common File Prefix",
        1,
        default_value=(["$JOB/Render/001_InitRender/$F4.exr"]),
        string_type=hou.stringParmType.FileReference,
        item_generator_script="opmenu -l . RS_outputFileNamePrefix",
        item_generator_script_language=hou.scriptLanguage.Hscript,
        menu_type=hou.menuType.StringReplace)
    folder.addParmTemplate(Output)
    folder.addParmTemplate(hou.SeparatorParmTemplate("sep1"))

    arhive_toggle = hou.ToggleParmTemplate(
        "RS_archive_enable2",
        "Export .rs Proxy File",
        default_value=False,
        default_expression='off',
        default_expression_language=hou.scriptLanguage.Hscript)
    folder.addParmTemplate(arhive_toggle)

    archive = hou.StringParmTemplate(
        "RS_archive_file2",
        "Filename",
        1,
        default_value=(["$HIP/filename.$F4.rs"]),
        naming_scheme=hou.parmNamingScheme.Base1,
        string_type=hou.stringParmType.FileReference,
        item_generator_script="opmenu -l . RS_archive_file",
        item_generator_script_language=hou.scriptLanguage.Hscript,
        menu_type=hou.menuType.StringReplace)
    folder.addParmTemplate(archive)
    folder.addParmTemplate(hou.SeparatorParmTemplate("sep2"))

    Motion_toggle = hou.ToggleParmTemplate(
        "MotionBlurEnabled2",
        "Enable Motion Blur",
        default_value=False,
        default_expression='off',
        default_expression_language=hou.scriptLanguage.Hscript)
    folder.addParmTemplate(Motion_toggle)

    Fog_toggle = hou.ToggleParmTemplate(
        "VolLightingEnabled2",
        "Enable Global Fog",
        default_value=False,
        default_expression='off',
        default_expression_language=hou.scriptLanguage.Hscript)
    folder.addParmTemplate(Fog_toggle)

    AOV_toggle = hou.ToggleParmTemplate(
        "RS_aovAllAOVsDisabled2",
        "Disable All AOVs",
        default_value=True,
        default_expression='on',
        default_expression_language=hou.scriptLanguage.Hscript)
    folder.addParmTemplate(AOV_toggle)

    Tesselation_Toggle = hou.ToggleParmTemplate(
        "TessellationDisplacementEnable2",
        "Enable Tessellation And Displacement",
        default_value=True,
        default_expression='on',
        default_expression_language=hou.scriptLanguage.Hscript)
    folder.addParmTemplate(Tesselation_Toggle)

    folder.addParmTemplate(hou.SeparatorParmTemplate("sep3"))
    # Code for parameter template
    # Deadline Parameters
    deadline_priority = hou.IntParmTemplate("deadline_priority",
                                            "Deadline Priority",
                                            1,
                                            default_value=([50]),
                                            min=1,
                                            max=90,
                                            min_is_strict=True,
                                            max_is_strict=True)
    folder.addParmTemplate(deadline_priority)
    deadline_jobname = hou.StringParmTemplate("deadline_jobname",
                                              "Deadline Jobname",
                                              1,
                                              default_value=(["$HIPNAME"]))
    folder.addParmTemplate(deadline_jobname)

    DeadlineFastRender_btn = hou.ButtonParmTemplate(
        "submit_to_deadline_allGpus", "Deadline Render")
    DeadlineFastRender_btn.setScriptCallback(
        "import lz;lz.lzDeadline.submitRS2Deadline(hou.pwd(),one_task_per_gpu=False)"
    )
    DeadlineFastRender_btn.setScriptCallbackLanguage(hou.scriptLanguage.Python)
    folder.addParmTemplate(DeadlineFastRender_btn)

    DeadlineRender_btn = hou.ButtonParmTemplate(
        "submit_to_deadline", "Deadline Render (1f per GPU)")
    DeadlineRender_btn.setScriptCallback(
        "import lz;lz.lzDeadline.submitRS2Deadline(hou.pwd())")
    DeadlineRender_btn.setScriptCallbackLanguage(hou.scriptLanguage.Python)
    folder.addParmTemplate(DeadlineRender_btn)

    BatchProxy_btn = hou.ButtonParmTemplate("batch_proxy", "Batch Proxy")
    BatchProxy_btn.setScriptCallback(
        "import hou;hou.hipFile.save();import lz;lz.lzRS_Shelf.BatchProxy(hou.pwd())"
    )
    BatchProxy_btn.setScriptCallbackLanguage(hou.scriptLanguage.Python)
    folder.addParmTemplate(BatchProxy_btn)

    before = "RS_rrs2"
    ptg.insertAfter(before, folder)
    n.setParmTemplateGroup(ptg)

    parms = [
        "RS_renderCamera", "RS_outputFileNamePrefix", "RS_archive_enable",
        "RS_archive_file", "MotionBlurEnabled", "VolLightingEnabled",
        "RS_aovAllAOVsDisabled", "TessellationDisplacementEnable"
    ]

    for parm in parms:
        n.parm(parm).set(n.parm(parm + "2"))
示例#13
0
import hou
node = hou.selectedNodes()[0]
#node.parm('Pipeline Render').pressButton()

# ノードが持つparmTemplateGroup()(箱)を取得
group = node.parmTemplateGroup()

parm = hou.ButtonParmTemplate("pipelineRender", "Pipeline Render")
parm.setScriptCallback(
    'execfile(hou.getenv("LAUNCHER_LIB")+"/houdini/renderScripts/PipelineRender.py")'
)
parm.setScriptCallbackLanguage(hou.scriptLanguage.Python)

group.insertBefore('execute', parm)  #insert before execute button
#group.addParmTemplate(parm) # add to end

node.setParmTemplateGroup(group)
print 'added Pipeline Render Button'
示例#14
0
if subnet.canCreateDigitalAsset():
  asset = subnet.createDigitalAsset(
    name="Mesh_Repairer_Oz",
    min_num_inputs = 1,
    max_num_inputs = 1,
    ignore_external_references = True)
  parm_group = asset.parmTemplateGroup()
  # Input Folder
  inputs_folder = hou.FolderParmTemplate("inputs_folder", "Inputs", folder_type=hou.folderType.Tabs)
  inputs_folder.addParmTemplate(hou.ToggleParmTemplate("isPath", "Use Unique Path", 0, help="Check to change path to look for session file", script_callback='if not bool(hou.pwd().parm("isPath").eval()): hou.pwd().parm("repairPath").set("Using path to HIP")', script_callback_language = hou.scriptLanguage.Python))
  inputs_repair_path = hou.StringParmTemplate("repairPath", "Repairer Path", 1, default_value=("Using path to HIP",), help="Path to Mesh Repairer")
  inputs_repair_path.setConditional(hou.parmCondType.DisableWhen, "{ isPath == 0 }")
  inputs_folder.addParmTemplate(inputs_repair_path)
  input_control = 'repair_path = hou.pwd().parm("repairPath").eval() if bool(hou.pwd().parm("isPath").eval()) else hou.getenv("HIP");\
  hou.appendSessionModuleSource(open(repair_path + "/session.py", "r").read() if not "# -- Houdini Mesh Repairer -- #" in hou.sessionModuleSource() else "")'
  inputs_folder.addParmTemplate(hou.ButtonParmTemplate("inputs_init", "Initialize Repairer Session",
   script_callback = input_control, script_callback_language = hou.scriptLanguage.Python, help="Initialize Houdini session using Repairer Path"))

  inputs_folder.addParmTemplate(hou.ToggleParmTemplate("isSmooth", "Smooth Boundaries", 0,
    script_callback='hou.node(hou.pwd().path() + "/smooth_boundaries/smooth").parm("strength").set(int(hou.pwd().parm("inputs_smooth_factor").eval()) * int(hou.pwd().parm("isSmooth").eval()))',
    script_callback_language=hou.scriptLanguage.Python, help="Smooth input hole boundaries"))
  inputs_smooth_factor = hou.IntParmTemplate("inputs_smooth_factor", "Smooth Boundaries Factor", 
    1, default_value=(50,), min=0, max=100,
    min_is_strict=True, max_is_strict=False,
    script_callback='hou.node(hou.pwd().path() + "/smooth_boundaries/smooth").parm("strength").set(int(hou.pwd().parm("inputs_smooth_factor").eval()) * int(hou.pwd().parm("isSmooth").eval()))',
    script_callback_language=hou.scriptLanguage.Python, help="Intensity of pre-repair smoothing")
  inputs_smooth_factor.setConditional(hou.parmCondType.DisableWhen, "{ isSmooth == 0 }")
  inputs_folder.addParmTemplate(inputs_smooth_factor)
  inputs_folder.addParmTemplate(hou.ButtonParmTemplate("new", "Full Reparation", script_callback = "hou.session.repair()", script_callback_language = hou.scriptLanguage.Python, help="Begin New Reparation"))
  
  # Low Frequency Folder
  low_folder = hou.FolderParmTemplate("low folder", "Low Frequency", folder_type = hou.folderType.Tabs)
示例#15
0
def resizeFluidSops(kwargs):
    """ Select fluid and set it up to be resizeable.
    """
    sceneviewer = toolutils.activePane(kwargs)
    if not isinstance(sceneviewer, hou.SceneViewer):
        raise hou.Error("Invalid pane type for this operation.")

    # Select the target fluid box.
    fluidobjects = sceneviewer.selectDynamics(
        prompt="Select fluid box to resize.  Press Enter to complete.",
        allow_multisel=False)
    if len(fluidobjects) < 1:
        raise hou.Error(
            "No fluid container selected to set initial conditions.")
    fluidobject = fluidobjects[0]

    fluidnode = doptoolutils.getDopObjectCreator(fluidobject)
    if fluidnode is None:
        raise hou.Error("No fluid object node found.")
    """ Create and configure the reference container for resizing.
    """

    dopnet = doptoolutils.getCurrentDopNetwork()
    refobject = fluidnode.parent().parent().createNode(
        "geo", "fluid_resize_container", run_init_scripts=False)
    fluidfields = refobject.createNode("dopio", "fluidfields")
    fluidfields.parm("doppath").set(dopnet.path())
    fluidfields.setParmExpressions(
        {"defobj": "chs(\"" + fluidnode.path() + "/object_name\")"})
    fluidfields.parm("fields").set(2)
    fluidfields.parm("fieldname1").set("density")
    fluidfields.parm("fieldname2").set("vel")
    parms = refobject.parmTemplateGroup()
    parms.hideFolder("Transform", True)
    parms.hideFolder("Material", True)
    parms.hideFolder("Render", True)
    parms.hideFolder("Misc", True)
    ref_folder = hou.FolderParmTemplate("ref_folder", "Resize Container")
    ref_folder.addParmTemplate(
        hou.IntParmTemplate(
            "nptsperarea",
            "Scatter per Area",
            1,
            default_value=([5000]),
            min=1000,
            max=20000,
            help="Scatter points on simulated density to calculate bounds"))
    ref_folder.addParmTemplate(
        hou.FloatParmTemplate(
            "treshold",
            "Density Treshold",
            1,
            default_value=([0]),
            min=0,
            max=1,
            help="Delete density below this value prior to scattering points"))
    ref_folder.addParmTemplate(hou.SeparatorParmTemplate("sep1"))
    ref_folder.addParmTemplate(
        hou.LabelParmTemplate("merge_source", "Merge Sources"))
    ref_folder.addParmTemplate(
        hou.ButtonParmTemplate(
            "update",
            "Update sources",
            help="Push this to update ObjectMerge node inside",
            tags={
                "script_callback":
                "import adddoputils; adddoputils.updateSourcesButton()",
                "script_callback_language": "python"
            }))
    ref_folder.addParmTemplate(
        hou.IntParmTemplate(
            "source_activation",
            "All Sources Activation",
            1,
            default_value=([1]),
            min=0,
            max=1,
            min_is_strict=True,
            max_is_strict=True,
            help=
            "Activation of merging all of the listed sources and additional objects"
        ))
    ref_folder.addParmTemplate(
        hou.MenuParmTemplate(
            "xformtype", "Transform", "012",
            ("None", "Into This Object", "Into Specified Object"), 1))
    ref_folder.addParmTemplate(
        hou.StringParmTemplate("xformpath",
                               "Transform object",
                               1,
                               "",
                               hou.parmNamingScheme.Base1,
                               hou.stringParmType.NodeReference,
                               disable_when=("{ xformtype != 2 }")))

    sources_folder = hou.FolderParmTemplate(
        "source_folder",
        "Sources to Merge",
        folder_type=hou.folderType.MultiparmBlock)
    sources_folder.addParmTemplate(
        hou.ToggleParmTemplate("source_activation#",
                               "Source # Activation",
                               default_value=True))
    sources_folder.addParmTemplate(
        hou.StringParmTemplate("objpath#", "Object #", 1, "",
                               hou.parmNamingScheme.Base1,
                               hou.stringParmType.NodeReference))
    sources_folder.addParmTemplate(
        hou.StringParmTemplate("group#", "Group #", 1, "",
                               hou.parmNamingScheme.Base1,
                               hou.stringParmType.Regular))

    ref_folder.addParmTemplate(sources_folder)
    parms.append(ref_folder)
    refobject.setParmTemplateGroup(parms)

    keep_density = refobject.createNode("blast", "keep_density")
    keep_density.setFirstInput(fluidfields)
    keep_density.parm("group").set("@name==vel*")

    keep_vel = refobject.createNode("blast", "keep_vel")
    keep_vel.setFirstInput(fluidfields)
    keep_vel.parm("group").set("@name==density")

    # VOLUME VOP clamping density field below given treshold
    density_treshold = keep_density.createOutputNode("volumevop",
                                                     "density_treshold")

    vopglobals = density_treshold.node("volumevopglobal1")

    treshold = density_treshold.createNode("parameter", "treshold")
    treshold.parm("parmname").set("treshold")
    treshold.parm("parmlabel").set("Treshold")

    compare_density = density_treshold.createNode("compare", "compare_density")
    compare_density.parm("cmp").set("gte")
    compare_density.setInput(0, vopglobals, 1)
    compare_density.setInput(1, treshold, 0)

    twoway = compare_density.createOutputNode("twoway", "switch_density")
    twoway.setInput(1, vopglobals, 1)

    vop_output = density_treshold.node("volumevopoutput1")
    vop_output.setFirstInput(twoway, 0)
    density_treshold.setParmExpressions({"treshold": "ch(\"../treshold\")"})
    # End of VOLUME VOP

    scatter = refobject.createNode("scatter", "scatter")
    scatter.setFirstInput(density_treshold)
    scatter.parm("ptsperarea").set(1)
    scatter.setParmExpressions({"nptsperarea": "ch(\"../nptsperarea\")"})

    add_particles = scatter.createOutputNode("add", "add_particles")
    add_particles.parm("addparticlesystem").set(1)

    # VOP SOP adding velocity field to density-based pointcloud
    add_vel = refobject.createNode("vopsop", "add_vel")
    add_vel.parm("vex_numthreads").set(1)
    add_vel.setFirstInput(add_particles)
    add_vel.setInput(1, keep_vel, 0)

    globals = add_vel.node("global1")
    volumesamplex = add_vel.createNode("volumesample", "volumesample_x")
    volumesamplex.setInput(2, globals, 0)
    volumesamplex.parm("input_index").set(1)
    volumesamplex.parm("primnum").set(0)

    volumesampley = add_vel.createNode("volumesample", "volumesample_y")
    volumesampley.setInput(2, globals, 0)
    volumesampley.parm("input_index").set(1)
    volumesampley.parm("primnum").set(1)

    volumesamplez = add_vel.createNode("volumesample", "volumesample_z")
    volumesamplez.setInput(2, globals, 0)
    volumesamplez.parm("input_index").set(1)
    volumesamplez.parm("primnum").set(2)

    vel = volumesamplex.createOutputNode("floattovec", "vel")
    vel.setInput(1, volumesampley, 0)
    vel.setInput(2, volumesamplez, 0)

    vel_by_fps = vel.createOutputNode("divconst", "vel_by_fps")
    vel_by_fps.setParmExpressions({"divconst": "$FPS"})

    add_vector = globals.createOutputNode("add", "add_vector")
    add_vector.setNextInput(vel_by_fps, 0)

    vex_output = add_vel.node("output1")
    vex_output.setFirstInput(add_vector, 0)
    # End of VOP SOP

    merge1 = refobject.createNode("merge", "merge1")
    merge1.setFirstInput(add_particles)
    merge1.setInput(1, add_vel, 0)

    bound = merge1.createOutputNode("bound", "bound")

    # Box to switch from after first simulation frame
    initial_box = refobject.createNode("box", "initial_box")
    initial_box.setParmExpressions({
        "sizex":
        "ch(\"" + initial_box.relativePathTo(fluidnode) + "/sizex\")",
        "sizey":
        "ch(\"" + initial_box.relativePathTo(fluidnode) + "/sizey\")",
        "sizez":
        "ch(\"" + initial_box.relativePathTo(fluidnode) + "/sizez\")"
    })
    initial_box.setParmExpressions({
        "tx":
        "ch(\"" + initial_box.relativePathTo(fluidnode) + "/tx\")",
        "ty":
        "ch(\"" + initial_box.relativePathTo(fluidnode) + "/ty\")",
        "tz":
        "ch(\"" + initial_box.relativePathTo(fluidnode) + "/tz\")"
    })

    initial_switch = initial_box.createOutputNode("switch", "initial_switch")
    initial_switch.setParmExpressions({
        "input":
        "$F>ch(\"" + initial_switch.relativePathTo(fluidnode) +
        "/createframe\")",
    })
    initial_switch.setInput(1, bound, 0)

    # Null to switch to if merging of simulation sources is disabled
    no_active_source = refobject.createNode("null", "no_active_source")

    merge_source = refobject.createNode("object_merge", "merge_source")
    merge_source.setParmExpressions({
        "numobj": "ch(\"../source_folder\")",
        "xformtype": "ch(\"../xformtype\")"
    })
    merge_source.parm("xformpath").set("`chsop(\"../xformpath\")`")
    numobj = merge_source.parm("numobj").eval()

    source_switch = no_active_source.createOutputNode("switch",
                                                      "source_switch")
    source_switch.setParmExpressions({"input": "ch(\"../source_activation\")"})
    source_switch.setInput(1, merge_source, 0)

    merge2 = initial_switch.createOutputNode("merge", "merge2")
    merge2.setInput(1, source_switch, 0)

    bound = merge2.createOutputNode("bound", "bound")

    unroll_edges = bound.createOutputNode("ends", "unroll_edges")
    unroll_edges.parm("closeu").set(4)

    out = unroll_edges.createOutputNode("null", "OUT")

    density_treshold.layoutChildren()
    add_vel.layoutChildren()
    refobject.layoutChildren()

    out.setDisplayFlag(True)
    out.setRenderFlag(True)

    resize = resizeFluidToMatchSops(fluidnode, refobject)
    resize.setCurrent(True, True)
    sceneviewer.enterCurrentNodeState()
示例#16
0
    def populate_geo(self, parent_node, do_muscle=True):
        #promote a folder for the geometry and the subdivide
        #the geometry that is been brought to geo node should be lock
        #togle to turn on and off visibility of the geometry
        #promte rendering settings
        #todo color the node of the node that are related to bones
        #bone_color = hou.Color([0.4, 1.0, 1.0])
        muscle_color = hou.Color([0.667, 0.0, 0.0])



        geo = parent_node.createNode("geo", "geo_"+self.node.name())
        file_node = geo.node("file1")

        if self.node.parm("import_geometry").eval() == "geometry/the_autorig/will/use.bgeo":
            path_script = hou_rig.utils.__file__
            path_script = path_script.split("\\")[0:-2]
            path_script = "\\".join(path_script)
            path_script = path_script + "\\extras\\toon_character.bgeo"
            geometry_file = path_script

        else:
            geometry_file = self.node.parm("import_geometry").eval()

        file_node.parm("file").set(geometry_file)

        group_name = "right_side_group"
        mirror_group_name = "mirror_group"
        prim_grp = geo.createNode("group", "right_side_group")
        prim_grp.parm("crname").set(group_name)
        prim_grp.parm("entity").set(0)
        prim_grp.parm("groupop").set(2)
        prim_grp.parm("filter").setExpression("$TX < 0")
        prim_grp.setNextInput(file_node)

        mirror_grp = geo.createNode("group", "mirror_group")
        mirror_grp.parm("cnvfromtype").set(0)
        mirror_grp.parm("cnvtotype").set(1)
        mirror_grp.parm("convertg").set(group_name)
        mirror_grp.parm("cnvtname").set(mirror_group_name)
        mirror_grp.setNextInput(prim_grp)

        #HERE SHOULD BE A LIST OF THE DEFORMERS CREATED BY OTHER CLASSES
        #here should be the list of deformers for the extra regions
        list_of_deformers = "../../deformers_list_goes_here"

        capture = geo.createNode("capture", "capture_bones")
        capture.parm("extraregions").set(list_of_deformers)
        capture.parm("usecaptpose").set(1)
        capture.setNextInput(mirror_grp)

        capture_prox = geo.createNode("captureproximity", "captureproximity_bones")
        capture_prox.parm("extraregions").set(list_of_deformers)
        capture_prox.setNextInput(mirror_grp)

        switch_captures = geo.createNode("switch", "switch_capture_type")
        switch_captures.setNextInput(capture)
        switch_captures.setNextInput(capture_prox)

        viz = geo.createNode("visibility", "visibility_hide_right_side")
        viz.parm("group").set(group_name)
        viz.setNextInput(switch_captures)

        cap_paint_weight_bone_node = geo.createNode("capturelayerpaint", "capturelayerpaint_weights_bones")
        cap_paint_weight_bone_node.setNextInput(viz)

        # pre_deform = geo.createNode("deform", "pre_deform")
        # pre_deform.setNextInput(cap_paint_weight_bone_node)

        if do_muscle is True:
            capture_meta_node = geo.createNode("capturemeta", "capture_muscles")
            #here goes the list of muscles from the global variables
            #make sure we make the string with relative paths.
            capture_meta_node.parm("captobjects").set("")
            capture_meta_node.parm("captframe").setExpression("$F")
            capture_meta_node.parm("destroyweights").set(0)
            capture_meta_node.parm("visualize").set(1)
            capture_meta_node.setInput(0, cap_paint_weight_bone_node)
            capture_meta_node.setColor(muscle_color)

            cap_paint_weight_muscle_node = geo.createNode("capturelayerpaint", "capturelayerpaint_weights_muscles")
            cap_paint_weight_muscle_node.parm("capturetype").set(1)
            # here goes the list of muscles from the global variables.
            cap_paint_weight_muscle_node.parm("cregion").set("")
            cap_paint_weight_muscle_node.setInput(0, capture_meta_node)
            cap_paint_weight_muscle_node.setColor(muscle_color)

            slide_mode_inflation_node = geo.createNode("slidemodifierpaint", "slidemodifierpaint_inflate_muscle")
            slide_mode_inflation_node.parm("paintattrib").set(1)
            slide_mode_inflation_node.setInput(0, cap_paint_weight_muscle_node)
            slide_mode_inflation_node.setColor(muscle_color)

            slide_mode_slide_node = geo.createNode("slidemodifierpaint", "slidemodifierpaint_slide_muscle")
            slide_mode_slide_node.parm("paintattrib").set(0)
            slide_mode_slide_node.setInput(0, slide_mode_inflation_node)
            slide_mode_slide_node.setColor(muscle_color)

            attrib_mirror_node = geo.createNode("attribmirror", "attribmirror_inflate_slide_muscle")
            attrib_mirror_node.parm("grouptype").set(1)
            #attrib_mirror_node.parm("group").set("mirror_group")
            #attrib_mirror_node.parm("usegroupas").set(0)
            attrib_mirror_node.parm("attribname").set("inflatemodifier slideModifier")
            attrib_mirror_node.setInput(0, slide_mode_slide_node)
            attrib_mirror_node.setColor(muscle_color)

        mirror_w = geo.createNode("capturemirror", "mirror_capture_weights")
        mirror_w.parm("group").set(mirror_group_name)
        mirror_w.parm("from").set("left_bones/cregion 0")
        mirror_w.parm("to").set("right_bones/cregion 0")
        if do_muscle is True:
            mirror_w.setNextInput(attrib_mirror_node)
        else:
            mirror_w.setNextInput(cap_paint_weight_bone_node)

        null_lock = geo.createNode("null", "null_Lock")
        null_lock.setNextInput(mirror_w)

        subnet_blend = geo.createNode("subnet", "subnet_blendshapes")
        subnet_blend.setNextInput(null_lock)
        subnet_blend.bypass(1)

        null_import_blends = subnet_blend.createNode("null", "import_Blend_shapes_objs_from_a_folder")
        hou_parm_template = hou.ButtonParmTemplate("import_blendshapes", "Import Blend Shapes")
        hou_parm_template.setScriptCallback('import hou_rig.construction.parts.geometry; hou_rig.construction.parts.geometry.run_import_morphs()')
        hou_parm_template.setScriptCallbackLanguage(hou.scriptLanguage.Python)

        hou_rig.utils.parm_to_ui(null_import_blends, hou_parm_template, insert_before_parm=[0, ])

        null_import_blends_tg = null_import_blends.parmTemplateGroup()
        copy_parm_template = null_import_blends_tg.find("copyinput")
        null_import_blends_tg.hide(copy_parm_template, True)
        cacheinput_parm_template = null_import_blends_tg.find("cacheinput")
        null_import_blends_tg.hide(cacheinput_parm_template, True)
        null_import_blends.setParmTemplateGroup(null_import_blends_tg)

        null_import_blends.setNextInput(subnet_blend.indirectInputs()[0])

        blend = subnet_blend.createNode("blendshapes", "blendshapes_from_houdini")
        blend.parm("blend1").set(1)
        button_promote_parms_to_ui(blend)

        blend.setNextInput(null_import_blends)

        subnet_out = subnet_blend.createNode("null", "Out")
        subnet_out.setNextInput(blend)
        subnet_out.setDisplayFlag(1)
        subnet_out.setRenderFlag(1)

        subnet_blend.layoutChildren()

        deform_node = geo.createNode("deform", "deform")
        deform_node.setNextInput(subnet_blend)

        if do_muscle is True:
            deform_muscle_node = geo.createNode("deformmuscle", "deform_muscle")
            deform_muscle_node.setInput(0, deform_node)
            deform_muscle_node.parm("doinflate").set(1)
            deform_muscle_node.parm("pointstoinflate").set(1)
            #here should be the list of the deformers from the global variables
            #deform_muscle_node.parm("musclestoinflate").set("")
            deform_muscle_node.parm("doslide").set(1)
            deform_muscle_node.parm("slide").set(1)
            deform_muscle_node.setColor(muscle_color)

        del_groups = geo.createNode("group", "delete_deform_groups")
        del_groups.parm("crname").set("delete_deform_groups")
        #del_groups.parm("destroyname").set(group_name+" "+mirror_group_name+" 3d_hidden_primitives 2d_visible_primitives")

        if do_muscle is True:
            del_groups.setNextInput(deform_muscle_node)
        else:
            del_groups.setNextInput(deform_node)

        corrective_subnet = geo.createNode("subnet", "subnet_corrective_deformations")
        corrective_subnet.setNextInput(del_groups)

        sticky = corrective_subnet.createStickyNote("sticky1")
        sticky.setText("here should be all the corrections, this subnet should be an editable node in the OTL")

        null_out = geo.createNode("null", "OUT")
        null_out.setNextInput(corrective_subnet)
        null_out.setDisplayFlag(1)
        null_out.setRenderFlag(1)

        #rop_out = geo.createNode("rop_geometry", "rop_out_skin")
        #rop_out.setNextInput(null_out)

        geo.layoutChildren()
示例#17
0
def _addProperties(node):
    """ Create all required parameters.

    :hou.HDADefinition node: the node receiving the new parameters.
    """

    parmTemplateGroup = node.parmTemplateGroup()

    if parmTemplateGroup.findFolder('Walter'):
        return

    addArnoldProperties(node, force=True)

    # To Get the lattest parmTemplateGroup with the Arnold group.
    parmTemplateGroup = node.parmTemplateGroup()

    parmName = 'ar_filename'
    dsoParm = hou.StringParmTemplate(parmName,
                                     'Procedural DSO',
                                     1,
                                     default_value=('walterProcedural',),
                                     is_hidden=True)

    ar_procedural_type = hou.StringParmTemplate(
        'ar_procedural_type',
        'Procedural Type',
        1,
        default_value=('walter',),
        is_hidden=True)

    ar_translate_as = hou.StringParmTemplate(
        'ar_translate_as',
        'Translate As',
        1,
        default_value=('arnold_procedural',),
        is_hidden=True)

    ar_bounding_box_padding = hou.FloatParmTemplate(
        'ar_bounding_box_padding',
        'Bounds Padding', 1, is_hidden=True)

    ar_data = hou.StringParmTemplate(
        'ar_data', 'Data String', 1, is_hidden=True)

    user_parms_separator = hou.SeparatorParmTemplate('user_parms_separator')

    parmName = 'ar_filePaths'
    filePaths = hou.StringParmTemplate(
        parmName, 'Layers', 1, default_value=('',), is_hidden=True)

    display_mode = hou.MenuParmTemplate(
        'display_mode', 'Display Mode', ('0', '1'),
        menu_labels=('None', 'Hydra'), default_value=0)

    layerPath = hou.StringParmTemplate(
        'layerPath#', 'Path', 1, default_value=('',),
        string_type=hou.stringParmType.FileReference,
        file_type=hou.fileType.Geometry,
        tags={'filechooser_pattern': '*.abc *.usd *.usda',
              'script_callback' : "kwargs['node'].hdaModule().update(kwargs['node'])",
              'script_callback_language': 'python'})

    parmName = 'ar_layers'
    layers = hou.FolderParmTemplate(
        parmName, 'Layers', parm_templates=([layerPath]),
        folder_type=hou.folderType.MultiparmBlock,
        tags={'script_callback': "kwargs['node'].hdaModule().update(kwargs['node'])",
              'script_callback_language': 'python'})

    parmName = 'ar_objectPath'
    objectPath = hou.StringParmTemplate(
        parmName, "Prim Path", 1, default_value=('/',),
        join_with_next=True)

    pick_path = hou.ButtonParmTemplate(
        "pick_path", '', is_label_hidden=True,
        tags={'button_icon': 'BUTTONS_tree',
              'script_callback':
                    "kwargs['node'].node('display/walter').parm('pickObjectPath').pressButton()",
              'script_callback_language': 'python'})

    parmName = 'ar_sessionLayer'
    sessionLayer = hou.StringParmTemplate(
        parmName, "Session Layer", 1, default_value=('',), is_hidden=True)

    parmName = 'ar_mayaStateLayer'
    mayaStateLayer = hou.StringParmTemplate(
        parmName, 'Maya State Layer', 1, default_value=('',), is_hidden=True)

    parms = [dsoParm,
             ar_procedural_type,
             ar_translate_as,
             ar_bounding_box_padding,
             ar_data,
             user_parms_separator,
             filePaths,
             display_mode,
             layers,
             objectPath,
             pick_path,
             sessionLayer,
             mayaStateLayer]

    parms = [p for p in parms if p is not None]

    walterFolder = hou.FolderParmTemplate(
        'walter', 'Walter', parm_templates=(parms),
        folder_type=hou.folderType.Tabs, is_hidden=False,
        ends_tab_group=False, tags={})

    xfo_idx = parmTemplateGroup.findIndicesForFolder('Transform')
    parmTemplateGroup.insertBefore(xfo_idx, walterFolder)

    node.setParmTemplateGroup(parmTemplateGroup)
示例#18
0
    def create_top(self, type, dir):
        thdir = self.file_Directory + '/Thumbnails/'
        if not os.path.exists(thdir):
            os.mkdir(thdir)
        hipsave = hou.ui.displayMessage(
            '==========由于此功能是利用PDG进行,需要保存文件备份==============\n==============会调用CPU核心数-1的资源进行缩略图生成==============\n=========在生成完成前,请不要进行其他操作,防止意外发生XD=========\n该功能还有BUG存在(只遇到过一次,找不到原因,不知道怎么再次触发)',
            buttons=('保存文件后启动', '保存到Backup后启动', '关闭'),
            severity=hou.severityType.Warning,
            default_choice=0,
            close_choice=2,
            title='创建PDG进行缩略图生成')
        if hipsave == 0:
            hou.hipFile.save()
        if hipsave == 1:
            hou.hipFile.saveAsBackup()
        if hipsave == 0 or hipsave == 1:
            with hou.undos.group("创建top节点进行缩略图生成"):
                hou.ui.setStatusMessage(
                    '==========================正在进行缩略图生成,请不要进行其他操作,防止意外发生==========================',
                    severity=hou.severityType.Fatal)
                top = hou.node('/obj').createNode('topnet', '%s_to_jpg' % type)
                top.setComment('    缩略图生成中')
                top.setCurrent(True, True)
                top.moveToGoodPosition()
                group = top.parmTemplateGroup()
                destroy = hou.ButtonParmTemplate(
                    'del',
                    '自毁',
                    script_callback=
                    'hou.pwd().destroy(disable_safety_checks=False)',
                    script_callback_language=hou.scriptLanguage.Python)
                pausee = hou.ButtonParmTemplate(
                    'pause',
                    '暂停',
                    script_callback='hou.pwd().pauseCook()',
                    script_callback_language=hou.scriptLanguage.Python)
                cancelCook = hou.ButtonParmTemplate(
                    'cancelCook',
                    '取消',
                    script_callback='hou.pwd().pauseCook()',
                    script_callback_language=hou.scriptLanguage.Python)
                folder = group.findFolder('Scheduler')
                group.appendToFolder(folder, destroy)
                top.setParmTemplateGroup(group)
                top.setGenericFlag(hou.nodeFlag.DisplayComment, True)
                localscheduler = top.children()[0]
                localscheduler.parm('maxprocsmenu').set('-1')
                top_path = top.path()
                filepattern = hou.node(top_path).createNode('filepattern')
                filepattern.parm('pattern').set('%s' % dir)
                attributefromstring = filepattern.createOutputNode(
                    'attributefromstring')
                attributefromstring.parm('sourcestring').set('`@filename`')
                attributefromstring.parm('useregex').set('on')
                attributefromstring.parm('matchstring').set('(.+?)\.')
                ropcomposite = attributefromstring.createOutputNode(
                    'ropcomposite')
                ropcomposite.parm('tres').set('specify')
                ropcomposite.parm('res1').set('400')
                ropcomposite.parm('res2').set('200')
                ropcomposite.parm('copoutput').set(
                    '`@directory`/Thumbnails/`@group0`.jpg')

                ropcomposite.setGenericFlag(hou.nodeFlag.OutputForDisplay, 1)
                ropcomposite.executeGraph(False, False, False, True)
                pdg_node = ropcomposite.getPDGNode()
                pdg_context = ropcomposite.getPDGGraphContext()
                pdg_context.addEventHandler(self.print_done_and_remove,
                                            pdg.EventType.CookComplete, True)

                top.layoutChildren()
                top.parm('cookbutton').pressButton()

            return top
示例#19
0
        string_type=hou.stringParmType.FileReference,
        menu_items=([]),
        menu_labels=([]),
        icon_names=([]),
        item_generator_script="opmenu -l exportnet/alembic filename",
        item_generator_script_language=hou.scriptLanguage.Hscript,
        menu_type=hou.menuType.StringReplace)
    hou_parm_template.setTags({
        "autoscope": "0000000000000000",
        "filechooser_pattern": "*.abc"
    })
    selNode.addSpareParmTuple(hou_parm_template,
                              in_folder=(['Cache']),
                              create_missing_folders=True)

    hou_parm_template = hou.ButtonParmTemplate("cache_btn", "Cache to Disk")
    hou_parm_template.setTags({
        "autoscope": "0000000000000000",
        "takecontrol": "always"
    })
    selNode.addSpareParmTuple(hou_parm_template,
                              in_folder=(['Cache']),
                              create_missing_folders=True)

    #FBX params
    hou_parm_template = hou.SeparatorParmTemplate("sepparm")
    selNode.addSpareParmTuple(hou_parm_template,
                              in_folder=(['Cache']),
                              create_missing_folders=True)

    hou_parm_template = hou.LabelParmTemplate("labelparm2",
示例#20
0
    def populate_geo_back_up(self, parent_node):
        return
        geo = parent_node.createNode("geo", "geo_"+self.node.name())
        file_node = geo.node("file1")

        if self.node.parm("import_geometry").eval() == "geometry/the_autorig/will/use.bgeo":
            path_script = hou_rig.utils.__file__
            path_script = path_script.split("\\")[0:-2]
            path_script = "\\".join(path_script)
            path_script = path_script + "\\extras\\toon_character.bgeo"
            geometry_file = path_script

        else:
            geometry_file = self.node.parm("import_geometry").eval()

        file_node.parm("file").set(geometry_file)

        group_name = "right_side_group"
        mirror_group_name = "mirror_group"
        prim_grp = geo.createNode("group", "right_side_group")
        prim_grp.parm("crname").set(group_name)
        prim_grp.parm("entity").set(0)
        prim_grp.parm("filter").setExpression("$TX < 0")
        prim_grp.setNextInput(file_node)

        mirror_grp = geo.createNode("group", "mirror_group")
        mirror_grp.parm("cnvfromtype").set(0)
        mirror_grp.parm("cnvtotype").set(1)
        mirror_grp.parm("convertg").set(group_name)
        mirror_grp.parm("cnvtname").set(mirror_group_name)
        mirror_grp.setNextInput(prim_grp)

        #HERE SHOULD BE A LIST OF THE DEFORMERS CREATED BY OTHER CLASSES
        #here should be the list of deformers for the extra regions
        list_of_deformers = "../../deformers_list_goes_here"

        capture = geo.createNode("capture", "capture_bones")
        capture.parm("extraregions").set(list_of_deformers)
        capture.parm("usecaptpose").set(1)
        capture.setNextInput(mirror_grp)

        capture_prox = geo.createNode("captureproximity", "captureproximity_bones")
        capture_prox.parm("extraregions").set(list_of_deformers)
        capture_prox.setNextInput(mirror_grp)

        switch_captures = geo.createNode("switch", "switch_capture_type")
        switch_captures.setNextInput(capture)
        switch_captures.setNextInput(capture_prox)

        viz = geo.createNode("visibility", "visibility_hide_right_side")
        viz.parm("group").set(group_name)
        viz.setNextInput(switch_captures)

        paint_cap = geo.createNode("capturelayerpaint", "capturelayerpaint_weights")
        paint_cap.setNextInput(viz)

        pre_deform = geo.createNode("deform", "pre_deform")
        pre_deform.setNextInput(paint_cap)

        mirror_w = geo.createNode("capturemirror", "mirror_capture_weights")
        mirror_w.parm("group").set(mirror_group_name)
        mirror_w.parm("from").set("left_bones/cregion 0")
        mirror_w.parm("to").set("right_bones/cregion 0")
        mirror_w.setNextInput(paint_cap)

        null_lock = geo.createNode("null", "null_Lock")
        null_lock.setNextInput(mirror_w)

        subnet_blend = geo.createNode("subnet", "subnet_blendshapes")
        subnet_blend.setNextInput(null_lock)
        subnet_blend.bypass(1)

        null_import_blends = subnet_blend.createNode("null", "import_Blend_shapes_objs_from_a_folder")
        hou_parm_template = hou.ButtonParmTemplate("import_blendshapes", "Import Blend Shapes")
        hou_parm_template.setScriptCallback('import hou_rig.construction.parts.geometry; hou_rig.construction.parts.geometry.run_import_morphs()')
        hou_parm_template.setScriptCallbackLanguage(hou.scriptLanguage.Python)

        hou_rig.utils.parm_to_ui(null_import_blends, hou_parm_template, insert_before_parm=[0, ])

        null_import_blends_tg = null_import_blends.parmTemplateGroup()
        copy_parm_template = null_import_blends_tg.find("copyinput")
        null_import_blends_tg.hide(copy_parm_template, True)
        cacheinput_parm_template = null_import_blends_tg.find("cacheinput")
        null_import_blends_tg.hide(cacheinput_parm_template, True)
        null_import_blends.setParmTemplateGroup(null_import_blends_tg)

        null_import_blends.setNextInput(subnet_blend.indirectInputs()[0])

        blend = subnet_blend.createNode("blendshapes", "blendshapes_from_houdini")
        blend.parm("blend1").set(1)
        button_promote_parms_to_ui(blend)

        blend.setNextInput(null_import_blends)

        subnet_out = subnet_blend.createNode("null", "Out")
        subnet_out.setNextInput(blend)
        subnet_out.setDisplayFlag(1)
        subnet_out.setRenderFlag(1)

        subnet_blend.layoutChildren()

        deform = geo.createNode("deform", "deform")
        deform.setNextInput(subnet_blend)

        del_groups = geo.createNode("group", "delete_deform_groups")
        del_groups.parm("crname").set("delete_deform_groups")
        del_groups.parm("destroyname").set(group_name+" "+mirror_group_name+" 3d_hidden_primitives	2d_visible_primitives")
        del_groups.setNextInput(deform)

        corrective_subnet = geo.createNode("subnet", "subnet_corrective_deformations")
        corrective_subnet.setNextInput(del_groups)

        sticky = corrective_subnet.createStickyNote("sticky1")
        sticky.setText("here should be all the corrections, this subnet should be an editable node in the OTL")

        null_out = geo.createNode("null", "OUT")
        null_out.setNextInput(corrective_subnet)
        null_out.setDisplayFlag(1)
        null_out.setRenderFlag(1)

        #rop_out = geo.createNode("rop_geometry", "rop_out_skin")
        #rop_out.setNextInput(null_out)

        geo.layoutChildren()
示例#21
0
def button_promote_parms_to_ui(node_to_put_the_button):
    hou_parm_template = hou.ButtonParmTemplate("promote_blendshapes", "Promote Blend Shapes")
    hou_parm_template.setScriptCallback('import hou_rig.construction.parts.geometry; hou_rig.construction.parts.geometry.promote_blendshapes_to_ui();')
    hou_parm_template.setScriptCallbackLanguage(hou.scriptLanguage.Python)
    hou_rig.utils.parm_to_ui(node_to_put_the_button, hou_parm_template, insert_before_parm=[0, ])