Instantly share code, notes, and snippets.

# Group Meshes By Model
# - Adds a new command, GroupMeshesByModel(), which can be called from a key assignment or shelf button.
# - For selected model nulls, finds renderable items and groups them according to their source models.
# - Groups the following: meshes, pointclouds, instances, and hair.
# This is a self-installing plugin, so place it in your user scripts
# or similar folder in the workgroup of your choosing.
# ConvertToRedshiftProxy
# - Adds a new command to the context menu for objects in the Scene Explorer: 'Convert to Redshift Proxy'
# - Exports the selected items to a Redshift Proxy, then re-imports the result back into the scene.
# - Optionally maintains parenting, but only to the parent of the first selected item.
# - Appends a suffix (defaults to '_RSPROXY') to the name of the proxy mesh, to distinguish it from other polymeshes.
# - Locks the Construction stack on the proxy mesh to prevent it being frozen by accident.
# - Optionally lets you specify a display mesh for GL previewing.
# Command for duplicating the selected morph.
# Tim Crowson, June 2015
import lx
import lxu
import lxifc
import modo
# Command for freezing a morph to a new mesh.
# 1. Select a morph map
# 2. run morph.freezeToMesh
# 3. A new mesh bearing the name of the morph map will be created, with the frozen morph shape in it.
import lx
import lxu
import lxifc
import modo
# Tim Crowson, 9/29/2014
# Saves a new version of your current scene. Requires the scene to have been saved previously.
# - Searches for an existing version that follows the pattern 'sceneName_vXXX.lxo'
# - Any number of digits can be used for the version number: the script will respect the existing number padding.
# - If no version is identified (e.g. "sceneName.lxo") the script will append '_v001' to end of the scene name.
# - You can configure the padding for this First Version by setting the FIRST_VERSION_PADDING variable
from PySide.QtGui import *
# create a modal message box with a single 'Ok' button
box = QMessageBox()
# create a modal message box that offers some choices (Yes|No|Cancel)
import lx
import time
dialog_svc = lx.service.StdDialog()
mymonitor = lx.object.Monitor(dialog_svc.MonitorAllocate('Some task or other ...'))
for x in range(10):
# python
This function searches the current Modo scene and returns all items of
the specified type as a list of Python objects.
The function takes one or more arguments as strings or integers, which are the types of items you're after.
To ensure forward compatibility we'll use the symbol for the item type we need.
To see the full list of item type symbols, visit the following URL:
# Puts the user into a pick-session, asking you to select an Annotation property
# whose text it will then run as Python code.
from win32com.client import constants
annotation = Application.PickElement(constants.siPropertyFilter,'Choose an Annotation Property','Choose an Annotation Property')[2]
exec annotation.Text.Value
from win32com.client import constants
for camera in [cam for cam in Application.ActiveSceneRoot.FindChildren2("", constants.siCameraPrimType)]:
Application.SetValue("%s.camdisp.vcdisplay" %camera, 0)
for viewport in Application.Desktop.ActiveLayout.Views.Find("View Manager").Views:
Application.SetValue("Views.View%s.UserCamera.camdisp.vcdisplay" %viewport, 0)
Application.SetValue("Views.View%s.TopCamera.camdisp.vcdisplay" %viewport, 0)
Application.SetValue("Views.View%s.FrontCamera.camdisp.vcdisplay" %viewport, 0)
Application.SetValue("Views.View%s.RightCamera.camdisp.vcdisplay" %viewport, 0)