Skip to content

Instantly share code, notes, and snippets.

@tcrowson
tcrowson / GroupMeshesByModel.py
Created November 10, 2015 21:15
Softimage - For selected model nulls, finds renderable items and groups them according to their source models.
# Group Meshes By Model
# DESCRIPTION
# - 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.
# INSTALLATION
# This is a self-installing plugin, so place it in your user scripts
# or similar folder in the workgroup of your choosing.
@tcrowson
tcrowson / ConvertToRedshiftProxy.py
Last active October 2, 2015 19:39
Softimage script for converting a selection to Redshift Proxy, and re-importing it into the scene with some customizations.
# ConvertToRedshiftProxy
#
# - Adds a new command to the context menu for objects in the Scene Explorer: 'Convert to Redshift Proxy'
#
# FEATURES
# - 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.
@tcrowson
tcrowson / morphDuplicate.py
Last active October 1, 2015 14:59
Modo 901 command for duplicating the selected morph map
# Command for duplicating the selected morph.
# Tim Crowson, June 2015
import lx
import lxu
import lxifc
import modo
@tcrowson
tcrowson / morphToMesh.py
Last active April 11, 2018 20:56
Modo 901 command for freezing a morph to a new mesh.
# 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
@tcrowson
tcrowson / modo_SaveIncremental.py
Last active November 13, 2018 12:20
Increment the version number of the current Modo scene, respecting existing digit padding.
#python
# tc_SaveIncremental.py
# 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
@tcrowson
tcrowson / pysideDialogExamples.py
Last active October 11, 2017 16:49
Examples of simple PySide dialogs
from PySide.QtGui import *
# create a modal message box with a single 'Ok' button
box = QMessageBox()
box.setWindowTitle('Title')
box.setText('Text')
box.exec_()
# create a modal message box that offers some choices (Yes|No|Cancel)
@tcrowson
tcrowson / simpleModoMonitor.py
Last active August 29, 2015 14:06
Basic Modo Progress Bar
import lx
import time
dialog_svc = lx.service.StdDialog()
mymonitor = lx.object.Monitor(dialog_svc.MonitorAllocate('Some task or other ...'))
mymonitor.Initialize(10)
for x in range(10):
mymonitor.Increment(1)
time.sleep(2)
@tcrowson
tcrowson / loadUI_example.py
Last active April 12, 2023 17:55
Dynamically Load UI file from QtDesigner
from PySide.QtGui import *
from PySide.QtCore import *
from PySide.QtUiTools import QUiLoader
uiFile = "path\to\my\UI\file.ui"
class UiLoader(QUiLoader):
'''
Convenience class for dynamically loading QtDesigner '.ui' files,
@tcrowson
tcrowson / modo_getItemsOfType.py
Last active August 29, 2015 13:59
Function that returns all items in the scene of the specified type(s) as a list of Python objects.
# 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:
@tcrowson
tcrowson / softimage_RunAnnotationAsPython.py
Last active April 14, 2021 18:29
For Softimage. A quick snippet for running the text in an Annotation property as Python code. This allows you to store Python code in an Annotation property, as part of a scene or model, and run in later. Running this will drop you into a pick session, asking you to choose an Annotation property. No special error handling for now, it's brute-for…
# 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