Skip to content

Instantly share code, notes, and snippets.

View csaez's full-sized avatar

Cesar Saez csaez

View GitHub Profile
@csaez
csaez / listConnections.py
Last active August 29, 2015 13:59
Softimage: list input/output connections
import xml.etree.ElementTree as ET
from win32com.client import Dispatch
si = Dispatch("XSI.Application")
siut = Dispatch("XSI.Utils")
def listConnections(obj, conn_type="out"):
data = siut.DataRepository.GetConnectionStackInfo(obj)
return [c.find("object").text for c in ET.fromstring(data)
if c.find("object") is not None and c.find("type").text == conn_type]
@csaez
csaez / hard_reload.py
Last active August 29, 2015 14:04
Hard reloader for maya (reload python modules)
import sys
from PySide import QtGui, QtCore
from shiboken import wrapInstance
from maya import OpenMayaUI
class HardReload(QtGui.QDialog):
def __init__(self, *args, **kwds):
super(HardReload, self).__init__(*args, **kwds)
@csaez
csaez / remove_cameras.py
Created January 14, 2015 15:44
Maya: Remove selected cameras (including startup cameras)
from maya import cmds
def is_camera(node):
cond = (
"camera" in [cmds.nodeType(x) for x in (cmds.listRelatives(node, s=True, f=True) or [])],
cmds.nodeType(node) == "camera",
)
return any(cond)
cameras = [c for c in cmds.ls(sl=True, l=True) if is_camera(c)]
@csaez
csaez / constants.py
Created September 27, 2015 07:14
Stupid workaround to set variables programmaticaly in the main namespace while working with jedi/rope autocomplete.
def _getConstants():
return {"FOO": "foo", "BAR": "bar", "BAZ": "baz"}
def _updateConstants():
import os
# assemble code
code = "# This code is automatically generated by constants.py\n\n"
for k, v in _getConstants().iteritems():
@csaez
csaez / get_weight.py
Last active October 11, 2015 20:37
Softimage: A fast way to get the weight parameter (on mixer) of a given shape property
from xml.dom.minidom import parseString
from sipyutils import si, siut
siget = lambda sFullName: si().Dictionary.GetObject(sFullName)
def GetWeight(p_oShape):
lData = list()
sConn = siut().DataRepository.GetConnectionStackInfo(p_oShape)
for i in parseString(sConn).getElementsByTagName("object"):
if "Mixer" in i.toxml():
@csaez
csaez / one_undo.py
Last active October 11, 2015 20:37
Softimage: A python decorator to wrap an execution into 1 undo level.
from functools import wraps
def OneUndo(function):
@wraps(function)
def _decorated(*args, **kwargs):
try:
Application.BeginUndo()
f = function(*args, **kwargs)
finally:
Application.EndUndo()
@csaez
csaez / toggleVisibilityByType.py
Last active December 8, 2015 10:15
MAYA: Toggle viewport visibility by type
import maya.cmds as mc
def toggleVisibilityByType(type_):
options = {type_: True}
state = mc.modelEditor("modelPanel4", q=True, **options)
options[type_] = not state
mc.modelEditor("modelPanel4", e=True, **options)
toggleCurvesVisibility = lambda: toggleVisibilityByType("nurbsCurves")
toggleJointsVisibility = lambda: toggleVisibilityByType("joints")
@csaez
csaez / transform_clipboard.py
Created December 14, 2015 12:11
MAYA: save/load transforms
import maya.cmds as mc
if not hasattr(mc, "CLIPBOARD"):
mc.CLIPBOARD = dict()
def saveTransforms(nodes=None):
nodes = nodes or mc.ls(sl=True, l=True)
for longName in nodes:
@csaez
csaez / shading_state.py
Last active December 14, 2015 12:16
MAYA: quick and dirty way to save/load shading states between render layers
import maya.cmds as mc
if not hasattr(mc, "CLIPBOARD"):
mc.CLIPBOARD = dict()
def get_shading(node):
rval = dict()
type_ = cmds.nodeType(node)
@csaez
csaez / wishes.py
Last active December 16, 2015 03:59
Snippet to query wishdev's wishes. getWishes() function returns a dictionary with the wishes submited via http://goo.gl/Ikpxw (stored in google drive).
import urllib
from xml.dom import minidom
def getWishes():
URL = "http://goo.gl/67wYX"
urllib.urlcleanup()
xmldata = minidom.parseString(urllib.urlopen(URL).read())
columns = dict()
for node in xmldata.getElementsByTagName("entry"):