Saturday, October 17, 2009

Blur Gives Us Python And PyQT In 3DSMax

http://forums.cgsociety.org/showthread.php?f=98&t=816475

Developed by Blur, these plugins have the potential to replace Maxscript and finally let us use Python properly in 3DS Max.

I'm just starting to dig into it, fingers crossed...

Thursday, October 1, 2009

MEL: Check If An Object Or Attribute Exists

Ever needed to check if an object exists in your Maya scene? Or perhaps you need to check if a certain object has an attribute or not?

Use the objExists mel command.

First let's use it in a simple way to check for the existence of an object saved in $myObject
// objExists will return true or false (1 or 0), so you can use it multiple ways.
int $objTest = `objExists $myObject` ;

// If that object exists, it will return 1 (true), so then you could say something like:
if($objTest == 1) {
print "It Exists!" ;
}

// Another trick you can do is an IF statement will simply test a boolean (true or false) and fire if it's true, example:
if($objTest) {
print "It Exists!" ;
}

// So using that, we can simply test for the return of objExists in our IF statement, to simplify it even more.
if(`objExists $myObj`) {
print "It Exists!" ;
}

This works for attributes too, so to check for the existence of an attribute on a certain object, let's say "R_Arm_Ctrl.IKFK" we can use the following:

if(`objExists "R_Arm_Ctrl.IKFK"`) print "It Exists!" ;

Huzzah!

Wednesday, September 30, 2009

MEL: Print Size Of Your Current Selection, Or Print Your Current Selection

There are a few different ways to print out the size of your selection.

To print the size of your selection:

// Simply use the size command combined with the return of the list selected command
size(`ls -selection`) ;

To print what is currently selected:

// Use the LS command to list your selection
ls -selection ;

// Or print it... (same thing)
print `ls -selection` ;
// What about vertices? (faces, etc.)
// ls -selection ; will usually return a next to useless result with multiple verts selected.
// Instead add another flag, -flatten
ls -selection -flatten ;

Any questions? Please comment below.

Saturday, May 9, 2009

MAXScript: Removing Spaces From Names

Here is a quick snippet of code that will remove all the spaces in your object names and replace them with underscores. Simple yet elegant.


for s in selection do
(
oldname = filterString s.name " "
temp = oldname[1]
for i = 2 to oldname.count do
(
temp = temp + "_" + oldname[i]
)

s.name = temp
)


Select all the objects first, and run this script.

Friday, May 8, 2009

MEL: Breaking out of infinite loops

I read a great article today about how to break out of an infinite for or while loop in MEL. It happens to all of us at some point. Every so often you forget to add a counter or you miss a variable somewhere and you create a never-ending loop that you'd need to force quit maya in order to stop. This is a cool trick to prevent that.

http://www.naughtynathan.co.uk/?p=59

Great stuff. He also has a version for Python.

Tuesday, March 31, 2009

MEL: Print Random Quotes

Here is a script you can put into a shelf button to print out a random quote for you. I filled mine with animation quotes, so during those times when I'm stuck and waiting for an idea I can click through it a bunch of times and get some inspiration.


// Here we create the array to hold all the quotes, then add them below.
string $animation_quotes[] = {
"Here is a quote, notice the comma after the quotation marks.",
"Another quotes is right here.",
"'I can add things like this as well to put the author' ~Jay",
//Note, this last entry does NOT have a comma after the quote.
//If you get a syntax error, check for that sometimes it's easy to forget
"Be creative, put cool stuff in here!"
};

//Declare this as an integer, because rand returns a float
int $quote_choice;

//Get the size of your quotes array
$animation_quotes_size = `size($animation_quotes)`;

//Get a random quote
$quote_choice = `rand 0 $animation_quotes_size`;

//Print it out
print $animation_quotes[$quote_choice];

We've got one set up with tons and tons of animation quotes and it works well. Be sure to load it up with stuff so you don't get bored clicking through it. You'll be surprised how often you click it.

Edit: A related article involving printing your current selection as well as printing the size of the selection.

http://www.scriptswell.net/2009/09/mel-print-size-of-your-current.html

Monday, March 30, 2009

MEL Script: Adjust Background Color in Maya

Ever wanted a button to toggle the background color of your viewport(s) in Maya? We needed one the other day to toggle to white for playblasts/reviews and back to grey for working normally.

//
int $toggled_color ;
if($toggled_color == 0)
{
displayRGBColor "background" 1. 1. 1. ;
$toggled_color = 1 ;
}
else
{
displayRGBColor "background" 0.688 0.688 0.688 ;
$toggled_color = 0 ;
}
//

Middle mouse drag this into your shelf to make a button for it. It's currently set at White and Grey. You'll need to know the RGB values to change the colors.

Also check this out: http://www.scriptswell.net/2010/05/mel-jgviewportbackgroundcolor.html

Friday, March 27, 2009

MEL: Create A Directory With Mel

To create a directory with MEL, use the following:

sysFile -makeDir $path_here ;

It took me 3 or 4 search strings to find how to do this today. All of the things I intuitively searched for brought up the wrong answers, so I hope this helps someone someday.

Thursday, March 26, 2009

MAXScript: Floating Slider Time


This is something we whipped up at work a few months ago for using in Max. I've never been a fan of the default Max time configuration setup so we made this one. It lets you set the current frame, and move the start and end frames with the spinners or by typing them in.


fn floatingTime =
(

if (theTimeRollout != undefined)
then (destroydialog theTimeRollout)

rollout theTimeRollout "Floating Slider Time" width:258 height:25
(
spinner theStartFrame "Start: " pos:[22,4] width:60 range:[-100,50000,1] type:#integer
edittext theTimeInput "Go To:" pos:[89,4] width:80
spinner theEndFrame "End: " pos:[193,4] width:60 range:[-100,50000,1] type:#integer



on theTimeRollout open do
(
theTimeInput.text = ((sliderTime as integer) / ticksperframe) as string
theStartFrame.value = (animationRange.start as integer / ticksperframe)
theEndFrame.value = (animationRange.end as integer / ticksperframe)
)
on theTimeInput entered x do
(
slidertime = x as integer
)
on theStartFrame changed x do
(
if (x < animationrange =" interval" value =" (animationRange.end" animationrange =" interval"> animationrange.start)
then
(
animationRange = interval animationrange.start x
)
else
(
theEndFrame.value = (animationRange.start as integer / ticksperframe) + 1
animationRange = interval animationrange.start theEndFrame.value
)
)

)createDialog theTimeRollout style:#(#style_toolwindow, #style_sysmenu)

)
This will create your function, then you can call it either with a button, or by typing "floatingTime()"

Wednesday, March 25, 2009

MEL: Current Scene File Name

Similar to the post below, today it took more than a minute or two to find this, which to me makes it warrant a post. This is useful for incremental save scripts, or anything else you may use it for.

To get the current scene file's full name:

`file -q -sn`

so...

string $currentScenePath = `file -q -sn` ;

MEL: Windows Username/Login

Today I was searching for a way to get the windows environment username/login with MEL. I was surprised that it took a little longer than normal to find it, so I figured I'd post it and hope it finds it's way into some searches.


string $localUser = `getenv userName` ;

Now go and make some tools for those local users!

Enter ScriptSwell

Every once in awhile I write something cool and useful. The usual (not-as-cool-and-useful) stuff would be a line of code here and there to help out whatever we're doing at work, a couple of lines at home to speed along some process that is slowing me down, or some random expressions to connect something to something else that will never be useful again to anyone. Every once in awhile though...something awesome comes out. Something that after completion I can sit back and say, "this thing rocks." I hope to post said cool and useful things here. There should be a healthy mixture of Maxscript, Python, and MEL scripts and tools. A balanced diet for any technical artist or script-savvy animator.

Scripting Topics

MEL (41) Maya (39) Scripting (32) Scripts (21) programming (14) Free Mel Scripts (8) MaxScript (7) Coding (6) Rigging (5) tutorial (5) 3ds Max (4) Python (4) Tricks (4) faceware (4) image metrics (4) Learn (3) Namespace (3) Namespacing (3) animation (3) facial (3) webinar (3) Code (2) GDC (2) Game Developers Conference (2) Multiple Namespaces (2) Print Selected Objects (2) Recursive (2) Removing Namespace (2) Return (2) Set Driven Keys (2) TOkenize (2) Tips (2) Toggle Background Color with MEL (2) animation tools (2) animators resource (2) deformers (2) learning (2) maya tools (2) mesh (2) modeling (2) nodes (2) procedure (2) script swell (2) transforms (2) Animschool (1) Attribute (1) Background Color (1) Beer (1) Blur (1) Character Setup (1) Check if an object exists (1) Class (1) Command Line (1) Constraints (1) Create SDK (1) Create a directory with mel (1) Data (1) Export (1) FilterString (1) Fix (1) Floating Slider Time (1) Functions (1) Get Maya Version MEL (1) Get Parent (1) Google (1) Holiday (1) How To Write To A Text File (1) Import (1) Incremental Save (1) Index (1) Joint Chain (1) Make Set Driven Keys (1) Maya Version (1) Modules (1) Objects (1) Orient Constraint (1) PYMEL (1) Parent (1) Parent Constraint (1) Point Constraint (1) Position (1) Print (1) Print Current Selection (1) Print Random Quotes (1) Print Selection (1) Print Vertices (1) Progress Bar (1) Progress Window (1) PyQT (1) Removing Spaces From Names (1) Scene File Name (1) Select Connections (1) Select Outgoing Nodes (1) Split Bones (1) Split Joints (1) St. Patrick's Day (1) String Array (1) System (1) Transfer UVs (1) Viewport (1) White Space (1) Windows Username (1) Zero Out Attributes (1) animButtonState (1) arrays (1) articles (1) auto key (1) better (1) blendshapes (1) break (1) confirm dialog (1) continue (1) convention (1) e3 (1) efficiency (1) error (1) eval (1) executable (1) fclose (1) fopen (1) fprint (1) games (1) improving (1) infinite loop (1) joints (1) listHistory (1) listRelatives (1) logic (1) loops (1) milestone (1) nodeType (1) objExists (1) recursion (1) rotates (1) rotations (1) schools (1) sculpting (1) setAttr (1) shout outs (1) source (1) source a script with a variable (1) speed (1) tech-artists.org (1) translates (1) video (1) warning (1) world matrix (1) worldMatrix (1)
 
Script Swell - Blogged