Add OPMenu Stencil

This commit is contained in:
MustafaJafar 2024-05-10 16:29:56 +03:00
parent 7f0b8ab240
commit 4cfc90bbb3

View file

@ -0,0 +1,528 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- OPMenu Stencil.
It's used to extend the OPMenu while keeping the order of the menu items.
-->
<!--
This file defines the menu items when right-clicking over nodes in
Houdini.
Files named the same (ie. OPmenu.xml) can exist in $HOME/houdiniX.Y/
directory and will supplement the original definitions found in
$HFS/houdini/ (aka $HH).
The format in this file is similar to the format in $HH/MainMenuMaster
except that it uses the <menuDocument> and <menu> tags instead of
<mainMenu> and <menuBar>. See the comments in that file for more advanced
customization abilities.
Note that the id's correspond to their hotkeys with the h.pane.wsheet.
prefix (where available). For example, the item with id,
"opmenu.flag_display", refers to the action in the hotkeys manager as
"h.pane.wsheet.opmenu.flag_display".
Also note that you can specify which context a particular menu item shows
up in. To do this, add a context property:
<context>
<networkCategory>Object</networkCategory>
</context>
Or, for multiple contexts, a comma-separated list:
<context>
<networkCategory>Object,Sop,Dop</networkCategory>
</context>
Or use an expression to determine if the menu item appears in the current
context. For example, to make the menu item appear only if the node is an
Object node:
<context>
<expression>kwargs["node"].type().category().name() == "Object"</expression>
</context>
For context expressions and menu scripts, a 'kwargs' python dictionary is
provided with the following values:
'node' : The node that the menu was opened for.
'toolname' : The menu item's hotkey id (ie. the element's id
prefixed with h.pane.parms.)
'altclick' : True if the Alt key was also pressed, False otherwise
'ctrlclick' : True if the Ctrl key was also pressed, False otherwise
'shiftclick': True if the Shift key was also pressed, False otherwise
'cmdclick' : True if the Option key was also pressed, False
otherwise. Note that this can only be true on OSX.
-->
<menuDocument>
<!-- menuDocument can only contain 1 menu element, whose id is
implicitly "root_menu"
-->
<menu>
<!-- This item appears at the top of the menu when you right-click an
"example" subnet -->
<!--
<scriptItem>
<label>Save Node Example...</label>
<context>
<expression>kwargs['node'].userData("__example_for") is not None</expression>
</context>
<scriptCode><![CDATA[
from houdinihelp import examples
examples.save_node_example(kwargs['node'])
]]></scriptCode>
</scriptItem>
-->
<!-- Node flags submenu. -->
<subMenu id="opmenu.flags_menu">
<actionItem id="opmenu.flag_display">
</actionItem>
<actionItem id="opmenu.flag_select">
</actionItem>
<actionItem id="opmenu.flag_origin">
</actionItem>
<actionItem id="opmenu.flag_xray">
</actionItem>
<actionItem id="opmenu.flag_render">
</actionItem>
<actionItem id="opmenu.flag_output">
</actionItem>
<actionItem id="opmenu.flag_template">
</actionItem>
<actionItem id="opmenu.flag_footprint">
</actionItem>
<subMenu id="opmenu.flags_outputforview_menu">
<actionItem id="opmenu.flag_outputforview_0">
</actionItem>
<actionItem id="opmenu.flag_outputforview_1">
</actionItem>
<actionItem id="opmenu.flag_outputforview_2">
</actionItem>
<actionItem id="opmenu.flag_outputforview_3">
</actionItem>
</subMenu>
<actionItem id="opmenu.flag_highlight">
</actionItem>
<actionItem id="opmenu.flag_unload">
</actionItem>
<actionItem id="opmenu.flag_export">
</actionItem>
<actionItem id="opmenu.flag_lock">
</actionItem>
<actionItem id="opmenu.flag_thumbnail">
</actionItem>
<actionItem id="opmenu.flag_bypass">
</actionItem>
<actionItem id="opmenu.flag_hidden">
</actionItem>
<actionItem id="opmenu.flag_displaydescriptivename">
</actionItem>
<actionItem id="opmenu.flag_displaycomment">
</actionItem>
<actionItem id="opmenu.flag_expose">
</actionItem>
<separatorItem/>
<actionItem id="opmenu.takedisplay">
</actionItem>
<actionItem id="opmenu.takeoutput">
</actionItem>
<actionItem id="opmenu.takebypass">
</actionItem>
</subMenu>
<!-- Actions submenu. -->
<subMenu id="opmenu.actions_menu">
<actionItem id="opmenu.select_node">
</actionItem>
<actionItem id="opmenu.use_default_color">
</actionItem>
<actionItem id="opmenu.use_default_shape">
</actionItem>
<actionItem id="collapse">
</actionItem>
<actionItem id="collapse_to_material">
</actionItem>
<actionItem id="opmenu.extract">
</actionItem>
<actionItem id="opmenu.refcopy">
</actionItem>
<actionItem id="opmenu.change_type">
</actionItem>
<separatorItem/>
<actionItem id="delete">
</actionItem>
<scriptItem>
</scriptItem>
</subMenu>
<!-- End actions submenu -->
<!-- LOP actions submenu. -->
<subMenu id="opmenu.lop_options_menu">
<scriptItem id="opmenu.select_modified_prims">
</scriptItem>
<scriptItem id="opmenu.inspect_stage">
</scriptItem>
<scriptItem id="opmenu.inspect_active_layer">
</scriptItem>
<scriptItem id="opmenu.inspect_layers">
</scriptItem>
<separatorItem/>
<scriptItem id="opmenu.create_lop_activationparm">
</scriptItem>
<scriptItem id="opmenu.remove_lop_activationparm">
</scriptItem>
</subMenu>
<!-- End LOP actions menu -->
<!-- Asset examples submenu -->
<!--
<subMenu id="opmenu.examples_menu">
<label>Examples</label>
<context>
<expression><![CDATA[
from houdinihelp import examples
return (
examples.has_examples(kwargs['node']) or
examples.can_have_example(kwargs['node'])
)
]]></expression>
</context>
<scriptItem id="h.panes.wsheet.addnodeexample">
<label>Create Example for This Node</label>
<context>
<expression><![CDATA[
from houdinihelp import examples
return examples.can_have_example(kwargs['node'])
]]></expression>
</context>
<scriptCode><![CDATA[
from houdinihelp import examples
examples.start_node_example(kwargs['node'], alt=kwargs['altclick'])
]]></scriptCode>
</scriptItem>
<separatorItem/>
<scriptMenuStripDynamic>
<contentsScriptCode><![CDATA[
from houdinihelp import examples
return examples.examples_menu(kwargs['node'])
]]></contentsScriptCode>
<scriptCode><![CDATA[
from houdinihelp import examples
examples.load_token(kwargs['selectedtoken'], kwargs['node'], shift=kwargs['shiftclick'], alt=kwargs['altclick'])
]]></scriptCode>
</scriptMenuStripDynamic>
</subMenu>
-->
<!-- End examples submenu -->
<actionItem id="jump">
</actionItem>
<separatorItem/>
<subMenu id="opmenu.preview_menu">
<actionItem id="opmenu.preview_icon">
</actionItem>
<actionItem id="opmenu.preview_quarter">
</actionItem>
<actionItem id="opmenu.preview_half">
</actionItem>
<actionItem id="opmenu.preview_full">
</actionItem>
</subMenu>
<actionItem id="opmenu.flipbook">
</actionItem>
<scriptItem id="opmenu.generate_static">
</scriptItem>
<scriptItem id="opmenu.cook_output_node">
</scriptItem>
<scriptItem id="opmenu.dirty_all">
</scriptItem>
<scriptItem id="opmenu.cancel_cook">
</scriptItem>
<scriptItem id="opmenu.generate_node">
</scriptItem>
<scriptItem id="opmenu.generate_node_static">
</scriptItem>
<scriptItem id="cook_selected_node">
</scriptItem>
<scriptItem id="cancel_node">
</scriptItem>
<separatorItem/>
<scriptItem id="dirty_node">
</scriptItem>
<scriptItem id="dirty_cook_selected_node">
</scriptItem>
<scriptItem id="dirty_clean_node">
</scriptItem>
<scriptItem id="clean_temp_dir">
</scriptItem>
<scriptItem id="set_default_scheduler">
</scriptItem>
<scriptItem id="open_temp_directory">
</scriptItem>
<separatorItem/>
<scriptItem id="opmenu.open_task_graph_table">
</scriptItem>
<separatorItem/>
<subMenu id="opmenu.parms_and_channels_menu">
<actionItem id="opmenu.parameters">
</actionItem>
<actionItem id="opmenu.promotematerial">
</actionItem>
<separatorItem/>
<actionItem id="opmenu.create_channel_groups">
</actionItem>
<actionItem id="opmenu.scope_channels">
</actionItem>
<actionItem id="opmenu.delete_channels">
</actionItem>
<separatorItem/>
<!--
Please do not move Edit Parameter Interface... above Type
Properties... This was done twice in the past and each time we
found the location to be problematic so we moved it back to the
middle of the menu.
-->
<actionItem id="opmenu.spareparms">
</actionItem>
</subMenu>
<!-- VOP options submenu. -->
<subMenu id="opmenu.vop_options_menu">
<actionItem id="opmenu.vn_view_code">
</actionItem>
<actionItem id="opmenu.edit_vop_network">
</actionItem>
<actionItem id="opmenu.creator">
</actionItem>
<separatorItem/>
<actionItem id="opmenu.vn_create_shop">
</actionItem>
<actionItem id="opmenu.vn_save_context_op">
</actionItem>
<actionItem id="opmenu.vn_create_vop_type">
</actionItem>
<actionItem id="opmenu.vn_convert_to_type">
</actionItem>
<separatorItem/>
<actionItem id="opmenu.parm_definer">
</actionItem>
<separatorItem/>
<subMenu id="opmenu.lod_menu">
<actionItem id="opmenu.flag_lodlow">
</actionItem>
<actionItem id="opmenu.flag_lodmed">
</actionItem>
<actionItem id="opmenu.flag_lodhigh">
</actionItem>
</subMenu>
<actionItem id="opmenu.collapse_input_groups">
</actionItem>
<actionItem id="opmenu.expand_input_groups">
</actionItem>
<separatorItem/>
<actionItem id="opmenu.create_parms">
</actionItem>
<actionItem id="opmenu.create_subnet_inputs">
</actionItem>
<actionItem id="opmenu.create_consts">
</actionItem>
<separatorItem/>
<actionItem id="opmenu.create_output_bindings">
</actionItem>
<actionItem id="opmenu.create_subnet_outputs">
</actionItem>
</subMenu>
<actionItem id="opmenu.preview">
</actionItem>
<actionItem id="opmenu.spreadsheet">
</actionItem>
<scriptItem id="opmenu.extended_info">
</scriptItem>
<actionItem id="opmenu.view_deps">
</actionItem>
<actionItem id="opmenu.edit_comment">
</actionItem>
<!-- Save options. -->
<subMenu id="opmenu.save_menu">
<actionItem id="opmenu.save_geometry">
</actionItem>
<scriptItem id="opmenu.save_stage">
</scriptItem>
<scriptItem id="opmenu.save_active_layer">
</scriptItem>
<scriptItem id="opmenu.save_materialx">
</scriptItem>
<actionItem id="opmenu.vn_save_code">
</actionItem>
<actionItem id="opmenu.save_texture">
</actionItem>
<actionItem id="opmenu.save_image">
</actionItem>
<actionItem id="opmenu.save_lut">
</actionItem>
<actionItem id="opmenu.save_data">
</actionItem>
<actionItem id="opmenu.edit_data">
</actionItem>
<actionItem id="opmenu.save_to_gallery">
</actionItem>
</subMenu>
<separatorItem/>
<!-- Chop options. -->
<actionItem id="opmenu.set_scope">
</actionItem>
<actionItem id="opmenu.add_to_scope">
</actionItem>
<separatorItem/>
<!-- Input and output option submenus. -->
<subMenu id="opmenu.inputs_menu">
<actionItem id="opmenu.hide_inputs">
</actionItem>
<actionItem id="opmenu.expose_inputs">
</actionItem>
<actionItem id="opmenu.select_inputs">
</actionItem>
<scriptItem id="opmenu.select_input_parameters">
</scriptItem>
</subMenu>
<subMenu id="opmenu.outputs_menu">
<actionItem id="opmenu.hide_outputs">
</actionItem>
<actionItem id="opmenu.expose_outputs">
</actionItem>
<actionItem id="opmenu.select_outputs">
</actionItem>
<actionItem id="opmenu.collapse_outputs">
</actionItem>
</subMenu>
<separatorItem/>
<subMenu id="opmenu.character_tools_menu">
<actionItem id="opmenu.charpicker">
</actionItem>
<actionItem id="opmenu.poselibrary">
</actionItem>
</subMenu>
<separatorItem/>
<actionItem id="opmenu.help">
</actionItem>
<separatorItem/>
<!-- Operator type and asset options. -->
<subMenu id="opmenu.vhda_options_create">
<scriptItem id="opmenu.vhda_create">
</scriptItem>
<separatorItem/>
<scriptItem id="opmenu.vhda_prefcreate">
</scriptItem>
</subMenu>
<actionItem id="opmenu.unsynchronize">
</actionItem>
<actionItem id="opmenu.synchronize">
</actionItem>
<actionItem id="opmenu.diff">
</actionItem>
<subMenu id="opmenu.vhda_options">
<scriptItem id="opmenu.vhda_save_as">
</scriptItem>
<separatorItem/>
<scriptItem id="opmenu.vhda_bump_major">
</scriptItem>
<scriptItem id="opmenu.vhda_bump_minor">
</scriptItem>
<separatorItem/>
<scriptItem id="opmenu.vhda_pref">
</scriptItem>
</subMenu>
<actionItem id="opmenu.saveoptype">
</actionItem>
<separatorItem/>
<!--
<subMenu>
<label>Donut</label>
<titleItem>
<label>Node Macros</label>
</titleItem>
<scriptMenuStripDynamic id="dynamic_node_macros">
<contentsScriptCode><![CDATA[
from nodemacros.ui import houdiniStorage
return houdiniStorage().menuFor(kwargs["node"])
]]>
</contentsScriptCode>
<scriptCode><![CDATA[
from nodemacros.ui import houdiniStorage
houdiniStorage().applyMacro(kwargs["selectedtoken"], kwargs["node"])
]]>
</scriptCode>
</scriptMenuStripDynamic>
<separatorItem/>
<scriptItem id="save_cluster_macro">
<label>Save Selected Item(s) as Macro....</label>
<scriptCode><![CDATA[
from nodemacros import ui
ui.showMacroEditorForItems(kwargs["items"], kwargs["node"])
]]>
</scriptCode>
</scriptItem>
<scriptItem id="edit_macro_list">
<label>Edit Macro List</label>
<scriptCode><![CDATA[
from nodemacros.manager import showMacroManager
showMacroManager()
]]>
</scriptCode>
</scriptItem>
<scriptItem id="macro_help">
<label>Donut Help</label>
<scriptCode><![CDATA[
from nodemacros.ui import MACRO_HELP_PATH
hou.ui.curDesktop().displayHelpPath(MACRO_HELP_PATH)
]]>
</scriptCode>
</scriptItem>
</subMenu>
<separatorItem/>
-->
<actionItem id="opmenu.optypemanager">
</actionItem>
<actionItem id="opmenu.properties">
</actionItem>
<menuStripDynamic id="custom_hscript">
</menuStripDynamic>
</menu>
</menuDocument>