Maya Bevel Plus and Curve Fillet Tutorial
- August 9th, 2011
- Write comment
Find Out How to Turn Custom Text to Realistic Metallic Objects
Archive for the ‘Programming’ Category
What do you do when you screw up and delete all your history and input code in Maya script editor usually do to a right-click muscle memory FAIL? First of all, DON’T close Maya! Navigate to your prefs directory, depending on the system you’re using that is in different locations, and then open up the handy little mel file called “commandExecuter”, and that file name may have a hyphen and some numbers behind it depending on how many tabs you have going. Open the corresponding file based on the tab you mistakenly erased in notepad or favorite text editor and then copy the contents back into your script editor.
This won’t get you everything back however, sad, I know, but if you can get back to where you were before the melt-down without too much hassle this way then that’s better than nothing. That’s why I like using external IDE’s for longer coding sessions and the script editor for little things that make my life easier in the particular scene I’m working on.
Use windows clipboard data in your Maya Python scripts or other generic python.Dependencies:
setuptools – You should have setuptools installed.
pip – If you have setuptools and/or use easy_install switch to pip by using easy_install to download and install pip, you won’t be sorry. Pip is awesome, setuptools sux. ![]()
pyWin32 – Use pip to download pyWin32 from the commandline using pip install pyWin32. Copy the installation to your Maya site-packages folder including any .pth, .txt, or .egg-info files. Tip: open .pth files in a text editor of choice and check out where pip’s libs are.
''' based on mel script found here: http://bit.ly/e4qdyH ''' import win32clipboard def getClipboardData(): win32clipboard.OpenClipboard() d = win32clipboard.GetClipboardData( win32clipboard.CF_TEXT ) win32clipboard.CloseClipboard() return d getClipboardData() def putClipboardData(text): win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() win32clipboard.SetClipboardText( text ) win32clipboard.CloseClipboard() t= 'test text' putClipboardData(t)
This is based on what I found on teacup’s techy art stuff, written a while ago. I though it deserved an update, plus I needed it for something specific. It is a really handy module to have in your repertoire. I posted these in a hurry so you probably need to add in some checks to make sure the datatype you are trying to retrieve is text only or else you’ll get errors.
PyQt and Qt obviously are way more powerful for getting other types of data including pixmap and slew of others. This is simplified for a specific purpose. Maybe soon I will be able to post a Qt version including drag and drop functionality.
Find Out What Your Friends Are Making, Then Be Glum >:(
Here’s a handy little script you can run in Maya script editor to see a list of CG jobs with corresponding salaries. Obviously, this is kind of a joke because of some of the figures, but it’s still a pretty cool example of using urllib2 module.
VFXWages is a global database of hourly monetary rates of people in the film and television visual effects, animation, motion graphics, and gaming industry. It allows you to see where you rate among the rest of the artists in your experience, occupation and location. Have you ever wondered if you’re earning too little? Pondering what a similar artist in your position is making on the other side of the world? Using our Wages system, you can graphically compare wages and salaries around the world. -via VFXWages.com
Run this from Maya’s script editor, or whatever. Shared by my colleague Mike. It’s kinda neat but sometimes you wonder if this information is real! $100/hr for Anim Sup or Vfx Sup?!
Here’s a script I wrote for adding sub-directories of paths I’ve already added to the sys.path in my userSetup.py.
I’m just starting to code seriously in python and it seems like just getting everything to work right in Maya without a lot of fuss is pretty daunting for a beginner with little outside help except for the internet and a couple books.
As my Script Repo develops over time, I don’t want to have to keep worrying about PYTHONPATH having everything in it so I tell it where the root directories are and this script does the rest.
Hope somebody finds this helpful!
import sys from os import walk path = ja_python_paths for p in path: for root, dirs, files in walk(p): if p is not root: sys.path.append(root) #You can add an optional print statement at the end #to see what it's doing... if p is not root: print 'adding', root, 'to sys.path' sys.path.append(root)
Lately, I’ve been working on learning how to develop PyQt UI tools with Maya. Since I work with Maya 2009 daily, I have had to do quite a lot of digging to find out how things were implemented smoothly for it to work with that version. Hopefully, this makes it easier to understand and appreciate it in 2011 and *gasp* :-O 2012, where PyQt is fully integrated! Anyway, if you are in the same predicament, then I should be able to help, send comments and emails my way.
Delving into what how userSetup files work can be tedious. That’s why i’m posting how to configure Maya properly for those people who are perpetually scratching their heads, trying to figure out what way is better or why things aren’t working out like they planned. Check out my previous post on userSetup and see if you are pondering things after reading all of that. Of course, i’ve learned some things about the process too since then because my startup process is a lot more complicated than sourcing a couple of tools. I’m setting up whole programming environments! Learning Maya startup configuration has been a process of trial and error, searching and finding or sometimes not finding. Here’s the beef. Maya loads script paths in a specific order. Once you learn that order, the daunting task of setting configurations for a whole studio is as simple as pie. I work at a smaller studio, so the process of discovery falls on my shoulders and so I had to rise to the challenge.
So where do you find the source code to decipher what’s really going on when Maya starts up? After finding this relic of a thread online, It crystallized one piece of the puzzle. I was having the hardest time figuring out why PYTHONPATH wasn’t working for all my scripts. After all, I was pointing it to find my userSetup.py and also my Maya2011 python\libs\site-packages directory so I can have access to all my downloaded modules yet my PyQt modules were failing to import while my userSetup modules were sourcing just fine.
Here's the order of how Maya finds scripts for python taken from the post linked above, which is directly from module: maya.app.startup.basic Per-version prefs scripts dir (eg .../maya8.5/prefs/scripts) Per-version scripts dir (eg .../maya8.5/scripts) User application dir (eg .../maya/scripts) Look for userSetup.py in the search path and execute it in the "__main__" namespace Set up sys.path to include Maya-specific user script directories. Set up auto-load stubs for Maya commands implemented in libraries which are not yet loaded Run the user's userSetup.py if it exists Register code to be run on exit
I started to get inspired to start writing documentation again for my script repository yesterday and the brilliance quickly became marred by the thought of how daunting that task can become. It’s a necessary part of the process though and starting somewhere is unavoidable at this point since the organization of the repo is quickly growing beyond what a directory structured system can handle. Documentation is increasingly hard to dig up and it’s much nicer for the tools to be indexed all in one place in a textual and graphical format, even adding tutorial vids for workflows being used when using specific tools or a tool set. I know html is the solution for many of this but how cumbersome it is to use.
In comes TiddlyWiki onto the scene again after having been distracted for a while and not concerning myself with writing help files since I have been busy. I felt motivated again after having read Morgan Loomis’ blog post and seeing his small but effective wiki used for this very purpose. Morgan has links to Scienceoss.com where another useful Python script will create tiddlers for your wiki automatically. Wow, it works great from the command-line but also from inside Maya 2009 which i’m using for rigging stuff. Now if I write a script in Maya I can use this tidder script to automatically update my script repo help wiki thus cutting down the time i’m working inside the wiki editor. Amazing and helpful and it even supports images and resizing images!
Example tidder creation script:
import sys
sys.path.append('N:\Scripts\Python')
from addtiddler import addtiddler
addtiddler('N:\Scripts\Help\script_repo_help.html',
image='images/asaro_head.jpg',
description='test image',
tags='images',
author='JA',
title='Asaro Head',
resize=True,
replace=True)
_____________
http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/
http://scienceoss.com/use-sphinx-for-documentation/
…and this enables the docking of any custom window you create to the main maya interface. The UI can then be moved docked and undocked from anywhere TO anywhere. I immediately have embraced this godsend to the hellish Maya UI coding world. This isn’t really new news since Maya 2011 has been around for a little while now but I wanted to quickly share my code for making windows dockable. I have expanded my floating tools shelf to have a button that makes the UI dockable when you press it. The old window gets created in my userSetup and is not dockable until now that I added this command as a button to it.
The command gets called only when pressing the button and the command also stores the UI object’s names and specifics so that I can use it to modularly make more buttons on other UIs so that they can also be dockable. The whole key is being modular and not storing global variables which I consider messy.
If you’re gonna make a proc, that is easy
//Given a window name, a name to call the control, and placement in the main maya window,
//add the ability to dock the UI to the main maya UI.
global proc string jaDockUiCommand (string $winName, string $ctrlName, string $placement) {
global string $gMainWindow;
string $userPrefs = `internalVar -upd`;
string $mayaVersion;
string $buffer[];
int $numTokens = `tokenize $userPrefs "/" $buffer`;
$mayaVersion = `substring $buffer[5] 0 4`;
if ($mayaVersion == "2011")
{
string $layout1 = `paneLayout -configuration "single" -parent $gMainWindow`;
string $myDC = `dockControl
-allowedArea "all"
-area $placement
-content $layout1
-label $ctrlName`
;
control -e -p $layout1 $winName;
return 1;
}
return 0;
}
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Jan | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | ||||
Lead By Following!