Last active
October 20, 2017 19:26
-
-
Save csprance/c950536af6ab8b2ac0ecd419c4e0cb2a to your computer and use it in GitHub Desktop.
Modo Script to write a bunch of letters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
http://www.csprance.com/shots/letters_master.lxo |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
import lx | |
import sys | |
###################################### | |
# figure out the text we are going to write ERROR HANDLING DONE HERE FOR INPUT!!!! | |
def grabInput(): | |
#first we have to create our temp variable that modo uses we set it momentary | |
lx.eval('user.defNew name string momentary') | |
#this gives us our dialog box | |
lx.eval('user.value name') | |
#we set the value of the user entered info to test | |
#return our lowercased version | |
return lx.eval('user.value name ?').lower() | |
# create the new mesh Item and name it set it as the active selection | |
def createItem(): | |
# grab our input | |
text = grabInput() | |
#create a new layer | |
lx.eval('layer.new') | |
#name the layer the user input | |
lx.eval('item.name {%s} xfrmcore' % text) | |
# loop through our text and do the things to the letters | |
# idx = index, x = letter, text = the mesh | |
for idx , x in enumerate(text): | |
if ' ' in x: | |
pass | |
else: | |
selCopyPaste(x, text, idx) | |
#lets just do a little bit of cleanup here and merge all of our verts together | |
#select all of the polygons | |
lx.eval('select.all') | |
#run mesh cleanup on the selected polygons | |
lx.eval('mesh.cleanup true') | |
# select and copy our polygon item then return to original item and selCopyPast | |
# args (letter = letter to select, mesh = name of mesh item, index = position of the current letter [1 based]) | |
def selCopyPaste(letter, mesh, index): | |
index = -200 * index | |
#reset our selection | |
lx.eval('select.drop item') | |
#select our letter | |
lx.eval('select.subItem {%s}' % letter) | |
#select the polygon | |
lx.eval('select.type polygon') | |
#select all polyongs | |
lx.eval('select.all') | |
#copy all the polygons | |
lx.eval('copy') | |
#select the main mesh | |
lx.eval('select.drop item') | |
lx.eval('select.subItem {%s}' % mesh) | |
#set it to polygon mode | |
lx.eval('select.type polygon') | |
#hide everything | |
lx.eval('hide.sel') | |
#paste in our polygon | |
lx.eval('paste') | |
#select all of our polygons | |
lx.eval('select.all') | |
#unhide all the rest of our polygons | |
lx.eval('unhide') | |
#move our selected polygons -200 * the letters position in the stack | |
lx.eval('tool.set TransformMove on') | |
lx.eval('tool.setAttr xfrm.transform TX {%s}' % index ) | |
# apply the tool properties | |
lx.eval('tool.doApply') | |
############################### | |
#Main code execution area# | |
############################### | |
# call create item which is the function that kicks everything off and calls the other functions in order | |
createItem() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment