Skip to content

Examples

This section build the demo_model in different applications.

menuet/demo/menu.toml
#:schema https://tahv.codeberg.page/menuet/menuet.json

[[menu]]
label = "Animation"
icon = "res:menuet.demo:lucide-clapperboard.svg"

[[menu]]
label = "Modeling"
icon = "res:menuet.demo:lucide-box.svg"

[[menu]]
label = "Development"
icon = "res:menuet.demo:lucide-code-xml.svg"

[[menu]]
label = "Rigging"
icon = "res:menuet.demo:lucide-bone.svg"

[[action]]
id = "anim-bake"
label = "Bake Animation"
menu = ["Animation"]
desc = "Bake selected character(s) animation"

[[action]]
id = "anim-fbx-exporter"
label = "FBX Animation Exporter"
menu = ["Animation", "FBX"]
desc = "Open animation exporter Window"
icon = "res:menuet.demo:lucide-file-up.svg"

[[action]]
id = "anim-fbx-importer"
label = "FBX Animation Importer"
menu = ["Animation", "FBX"]
desc = "Open animation importer Window"
icon = "res:menuet.demo:lucide-file-down.svg"

[[action]]
id = "adjustment-blending"
label = "Adjustment Blending"
menu = ["Animation"]
group = "Edit"
desc = "Perform Adjustment Blending on selected character(s)"

[[action]]
id = "tween-machine"
label = "Tween Machine"
menu = ["Animation"]
group = "Edit"
icon = "res:menuet.demo:lucide-align-horizontal-space-around.svg"

[[action]]
id = "rig-ctrl-creator"
label = "Controller Creator"
menu = ["Rigging"]
group = "Controller"
icon = "res:menuet.demo:lucide-box.svg"

[[action]]
id = "rig-ctrl-editor"
label = "Controller Editor"
menu = ["Rigging"]
group = "Controller"
icon = "res:menuet.demo:lucide-box.svg"

[[action]]
id = "rig-joint-tools"
label = "Joint Tools"
menu = ["Rigging"]
icon = "res:menuet.demo:lucide-bone.svg"

[[action]]
id = "rig-skinning-tools"
label = "Skinning Tools"
menu = ["Rigging"]
icon = "res:menuet.demo:lucide-paintbrush.svg"

[[action]]
id = "mesh-mirror"
label = "Mirror Geometry"
menu = ["Modeling"]
icon = "res:menuet.demo:lucide-flip-horizontal-2.svg"

[[action]]
id = "mesh-cleaner"
label = "Mesh Cleaner"
menu = ["Modeling"]
icon = "res:menuet.demo:lucide-brush-cleaning.svg"

[[action]]
id = "mesh-randomizer"
label = "Mesh Randomizer"
menu = ["Modeling"]
icon = "res:menuet.demo:lucide-shuffle.svg"

[[action]]
id = "dev-debugger"
label = "Start Debugger"
menu = ["Development"]
icon = "res:menuet.demo:lucide-bug.svg"

[[action]]
id = "doc-open"
label = "Open Documentation"
cb = "url:https://tahv.codeberg.page/menuet/"
icon = "res:menuet.demo:lucide-info.svg"

QApplication

from PySide6 import QtWidgets
from PySide6.QtCore import Qt

from menuet.builders.qt import QMenuBuilder
from menuet.demo import demo_model

app = QtWidgets.QApplication([])
app.setAttribute(
    Qt.ApplicationAttribute.AA_DontShowIconsInMenus,
    on=False,  # show icons on macOS
)
app.setAttribute(
    Qt.ApplicationAttribute.AA_DontUseNativeMenuBar,
    on=False,  # use macOS native menubar
)

model = demo_model()
builder = QMenuBuilder(model, root_menu="Demo")
menu = builder.build()

window = QtWidgets.QMainWindow()
window.menuBar().addMenu(menu)
window.show()

app.exec()

Windows:

QApplication on Windows

macOS:

QApplication on macOs

macOS native:

QApplication on macOS in native menubar

Blender

import bpy

from menuet.builders.blender import BlenderMenuBuilder
from menuet.demo import demo_model

model = demo_model()
builder = BlenderMenuBuilder(model, root_menu="Demo")
menu = builder.build()

def menu_draw(self: bpy.types.Menu, context: bpy.types.Context) -> None:
    self.layout.menu(menu.bl_idname)

bpy.types.TOPBAR_MT_editor_menus.append(menu_draw)

Blender

Maya

Build menu under Maya main menu bar "MayaWindow".

from menuet.builders.maya import MayaMenuBuilder
from menuet.demo import demo_model

model = demo_model()
builder = MayaMenuBuilder(
    model,
    root_menu="Demo",
    parent="MayaWindow",
)
builder.build()

Maya

Maya menus can also be built with QMenuBuilder.

Unreal

Build menu under Maya main menu bar "MayaWindow".

import unreal

from menuet.builders.unreal import UnrealMenuBuilder, model_reference_to_string_command
from menuet.demo import demo_model

tool_menus = unreal.ToolMenus.get()
model = demo_model()
builder = UnrealMenuBuilder(
    model,
    root_name="Demo",
    to_string_command=model_reference_to_string_command("menuet.demo:demo_model"),
    parent=tool_menus.find_menu(unreal.Name("LevelEditor.MainMenu")),
)
builder.build()

Unreal

Text

from menuet.builders.text import Render, TextMenuBuilder
from menuet.demo import demo_model

model = demo_model()
builder = TextMenuBuilder(model, root_menu="Demo", render=Render.UTF8)
menu = builder.build()

print(menu)
Demo
├── Animation
│   ├── FBX
│   │   ├── FBX Animation Exporter
│   │   └── FBX Animation Importer
│   ├── Bake Animation
│   ├── Edit ───
│   ├── Adjustment Blending
│   └── Tween Machine
├── Development
│   └── Start Debugger
├── Modeling
│   ├── Mesh Cleaner
│   ├── Mesh Randomizer
│   └── Mirror Geometry
├── Rigging
│   ├── Joint Tools
│   ├── Skinning Tools
│   ├── Controller ───
│   ├── Controller Creator
│   └── Controller Editor
└── Open Documentation