code of the day cotd

Code of The Day: Advanced Skeleton

I decided to tackle a larger (and second most popular download) on creative crash today, the advancedskeleton by oyvind:

This is quite a large bundle, although the majority of the size 4.34 MB download is from the numerous icons (both .png and .xpm icons). The package is an entire rigging system, allowing flexible creation of multiple types of rigs (biped, quadruped, bug and custom), the creation of low res geometry and tools for rigging characters. The system also includes an install for copying the scripts to the correct directories, a Maya shelf for the tools available, maya files for the built in skeleton types, and selection and pose creation interfaces. Another interesting option is the Fit Mode option which preserves X-down join orientations while they are being manipulated.

Language: MEL
Type: Maya Editor Script
Script Files: 13
Number of lines: 18535

Functionality: 9
First off I have to say I did not get a chance to try every feature, but from what I tested I was quite impressed with the functionality I did explore. The code performs quite well for such a large system, and was easy to setup and use once installed/setup (although I used the manual install since I was more interested in seeing the internal files). The FitTools and AdvancedSkeleton Tool (for mirroring the FitTools) is easy to use and works well.

Design: 7
The code has some code duplication mostly involved in getting the absolute path of the file and sourcing other mel files. I understand that this could be done to allow each script to work in isolation, but since it is part of a package, it might be worth considering a single place to setup and source the file paths and not have each script worry about where it actually lives. The use of global variables and evals is understandable due to examples from MEL and Maya, but it is still nicer to see other design patterns in place. Most of the code functions are small and compact, but there are a few functions that do quite a lot.

Style: 7
The most unusual part of the code is the use of whitespace for indentation. Logic within a function is not indented and sits on the same column as the function declaration and brackets line up exactly with the code rather than being at different spacing. I have not seen this formatting before and while it is consistent within the code it is a little harder to read (as it is not as obvious where a new function starts). Some of the source files are quite long (the longest being 4153 lines long), which isn’t huge, but I find if a file gets that big it might be doing too much. In this case it is the asProcedures file which likely contains a lot of functions used by other files. I would favor this approach over code duplication, but think that in a few cases the functionality could be encapsulated in some of the other files. Some of the commented out code in a public build would be nicer to not have been included.

Documentation: 7.5
This is a tough call. The help user documentation is awesome and the examples on the facebook site: are very helpful and well done. The code comments however (outside of the same install information in the header) are few and far between, and coupled with the code that has been commented out do not lead to a lot of useful documentation on what is happening in the code.

Reusability: 6
The code use of global variables and evals makes it trickier to expand on. The user interfaces are mixed in the same files as the functionality so each would have to be worked on together. There is quite a bit of code here which relies on naming conventions, icon names, specific paths and specific maya files. Some of the procedure code could be reused, but likely would have to be extracted if used separately.

Overall: 8
This is a nice little package and creates a nice rig with some great flexibilty for non-standard rigs. The functionality is very nice and the user documentation is great, the code does the job and looks like it has been through some changes and updates. The functionality is the most impressive part of this package.

Until next time,
Michael Hubbard

Leave a Reply

Your email address will not be published. Required fields are marked *