MaxScript – Zero-out those controls

So for some time at the studio i was doing some coding for rigging, and had to experiment with a few things here and there.
Most of the controls in rigs, for those that don’t know, require relative transformation control, so that component, could look twisted, but is actually at Zero values on all axis in Local space, Often in rig you get this level of control using parenting and some Dummy() objects or Point() objects.
So here is a snipped from a bigger code that takes care of this in maxscript.

fn getParentRoot theNode = 
	theParent = theNode
	while (isValidNode theParent.parent) do
	( theParent = theParent.parent )
	return theParent
fn childildExists obj = 
	if obj.childildren.count != undefined then
	( return True )		

my_obj = getNodeByName "Box002"
root_bone = getParentRoot my_obj
if (childildExists root_bone) then 
	root_point = Point()
	root_point.pos = root_bone.pos
	for child in root_bone.childildren do 
			if (childildExists child) then (
				print )
				point_ = Point()
				point_.pos = child.pos
				point_.parent = root_point

Open and add text to image in Python

Here i found an oldrer code snipped that served as my RnD for a thumbnail application that i made for my studio. This code snipped uses very simple.  here is what this snippet does:

We create a new Canvas 512×512, and open another image from our HDD, Resizing the image to desired size, in my case it was 128×128, and i am sure i had a good reason for all these sizes :), we also set the Font that we want to use, here i explicitly copied font file to so opened location, just to avoid some security troubles with Windows folder and all that, we combine our canvas and image together and add text at some location, in red, and as a last step – save this new image somewhere on the disk.

Now, why is this here, often , in production i come about really frequently repeated actions, of assembling some sort of Daily report or something similar, so, if this code is adapted into a very simple structure, you can have a pretty powerful application that allows to save a lot of time in assembly of these assets… really up to your imagination how one could use it.

i want to have this code here for my own reference, and for anyone who is after some ideas for automation.. or what not 🙂

from PIL import Image, ImageFont, ImageDraw
font = ImageFont.truetype("C:/arial.ttf", 22)
im ="RGB", (512, 512), "black")
im2 ="c:/1.png")
im2 = im2.resize((128,128))
draw = ImageDraw.Draw(im)
im.paste(im2, (10,10))
draw.text((100,100), "Hello", font=font, fill=(255,0,0))"C:/test.jpg")

MaxScript – Standard Material Ops

This is a short code snippet that shows how to create and set material instance for an object using maxscript. this can be wrapped into a function or struct-method. i thought i would post it here so that i can get to this later when or if i will ever need this.

--Making dummy object
--creating material instance
b.material = Standardmaterial()
--assigning BitmapTextures to specific channels
b.material.diffuseMap = Bitmaptexture()
b.material.specularMap = Bitmaptexture()
b.material.bumpmap = Bitmaptexture()
--specify files for bitmaps
b.material.diffuseMap.filename = @"D:\Diffuse_D.bmp"
b.material.specularMap.filename  = @"D:\Specular_M.bmp"
b.material.bumpmap.filename = @"D:\Normal_N.bmp"
--let material be visible in viewport
b.material.showinViewport = True

Maya Open/Close CommandPort

This is a pretty popular code snippet that i am rather reposting for my own sake, as i always have to google for it online, and i find some of the code being modified here and there, so i am posting my own version on my own blog. that i have modified for my own purposes 🙂 and if anyone happens to see this: enjoy 🙂

import maya.cmds as cmds
# Close ports if they were already open
try: cmds.commandPort(name=":7001", close=True)
except: cmds.warning('Could not close port 7001')
try: cmds.commandPort(name=":7002", close=True)
except: cmds.warning('Could not close port 7002')
# Open ports
try: cmds.commandPort(name=":7002", sourceType="python")
except: cmds.warning('Could not Open port 7002')	
try: cmds.commandPort(name=":7001", sourceType="mel")
except: cmds.warning('Could not close port 7001')

Clean code

In a desperate search for advanced programming tutorials , my co-worker Igor had suggest a great reading material, by Robert C. Martin – “Clean Code”.

While this book is based around Java, it does not stop me from applying the same principles for my python development.

So far,  am almost at the end of the book, around chapter 12, but already had used an saw great improvement with my current projects. I now look back at my old code, and think GOSH… how could i even write that ? But we had all been there before, and this is a great way to see progress.

My asus UX303UB

Okay, so today is the first day when i got my asus notebook.

it had been about 4 or 5 years since the last time i have upgraded my portable platform. it is now that time of initial setup and “getting it right” moment, but as usual things will crash, stop working and so on and on. we have all been there at some point in past 🙂  So off  i go to a decent start 🙂

the first blog

hello, this is going to be  link to resource that will be eventually forgotten… but i would like to keep it around, for just in case moment.  anyone who will ever come about this link on the web… contact me if you want, or don’t. if you don’t want.

the main purpose for this is to share and to keep the technical RnD that i do from time to time. it is most likley will be very basic. as most of what i do is under NDA, and i will never be able to share this with the real world.

it sucks, but this is the game i choose to play and the industry i love.

I respect the rules and enjoy working with companies all around the globe, and i choose to continue.