I came across this little snippet of code* to find the next power of 2 and found it quite helpful – from what I understand it's also very efficient compared to other methods.
public int NextPowerOfTwo(int inInt)
inInt = ( inInt >> 1 ) | inInt;
inInt = ( inInt >> 2 ) | inInt;
inInt = ( inInt >> 4 ) | inInt;
inInt = ( inInt >> 8 ) | inInt;
inInt = ( inInt >> 16 ) | inInt;
inInt++; // Val is now the next highest power of 2.
Link to original article regarding technique and actually a more detailed explanation of the method – Acius' Snippets.
A collection of commonly asked questions for Maya (mel and python)
Collection of useful string expressions for mel
This solution only realy applies to ‘constrained’ attributes and not expression or other forms of driven control.
How to chage the layer visibility (or any other property) through Python script
There’s been many times when I wanted to latch a command onto a timer that runs independently of the main thread – still allowing control and interaction with maya while the timer is ticking.
The best example of this is an auto scene backup script. Most, if not all, auto scene backup scripts out there latch onto some arbitrary events in the scriptJob command and execute the backup time check when these are triggered (selection change, tool change etc).
This typically does the job but can lead to some funny behavior depending on the events you’ve attached the backup to.
How could it be better?
In any other programming language that supports threads or even attaching timers to UI elements (ala maxScript) this would be very simple and is also simple enough problem inside a maya plugin – spawn a new thread, wait the given time then execute the command.
However I figured with Python’s implementation into Maya and it’s native ability for threading I should be able to achieve this without having to develop or distribute a compiled plugin.
It turns out it’s very simple.
So you want to do something python that’s not supported in Mel but are unsure how exactly to link the two.
There are really three core ways to call a command or procedure in mel. Most scripts use a combination of all three however of the two that will allow you to store the result there’s only one which supports nesting (embedded command or procedure calls in the arguments of another command/procedure).
This is the third part to a three part tutorial on renaming objects in Maya. In the first installment we established a collection of procedures and a simple UI that allows multiple objects to be renamed. In the second installment we evolved this tool to utilize an custom sorting method and improved the UI.
The previous system for sorting while functional limited our ability to do more sophisticated renaming. We're going to address these issues and introduce a neat system for managing object lists:
- Ultimately we want to support an extended set of rename options (Prefix, Suffix, Find & Replace, exclusions) along with the standard rename and numeric incrementation
This is the second part to a three part tutorial on renaming objects in Maya. In the first installment we established a collection of procedures and a simple UI that allows multiple objects to be renamed.
Some issues were identified with the methods used previously and so in this next stage I'm going to evaluate the procedures and improve the script. Specifically this tutorial will address the following issues:
- The previous script is a handy quick renamer but doesn’t always produce unique names for all objects
- Numerical increments with good padding options
- The UI was over simplified and could be improved with more options