maya python api add plugin

Here we have a very simple plugin that adds two values together. I use it mainly as a plugin template.

import sys
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx
##set vars
kAddUtilNodeTypeName = "Add"
kAddUtilNodeClassify = "utility/general"
kAddUtilNodeId = OpenMaya.MTypeId(0x87327)

# define a new matrixUtilNode class derived from the MPxNode class
class rtAddUtilNode(OpenMayaMPx.MPxNode):

	# class variables
	input = OpenMaya.MObject()
	input1 = OpenMaya.MObject()
	input2 = OpenMaya.MObject()
	output = OpenMaya.MObject()

	def __init__(self):
		OpenMayaMPx.MPxNode.__init__(self)

	# arguments ( self, MPlug, MDataBlock)
	def compute(self, plug, dataBlock):

		# if these attributes are requested, recompute their values
		if  plug == rtAddUtilNode.output:

			# get MDataHandle's to attributes
			#
			try:
                            input_dataHandle1 = dataBlock.inputValue( rtAddUtilNode.input1 )
			except:
			    sys.stderr.write( "Failed to get MDataHandle inputValue input1" )
			    raise
                        try:
                            input_dataHandle2 = dataBlock.inputValue( rtAddUtilNode.input2 )
			except:
			    sys.stderr.write( "Failed to get MDataHandle inputValue input2" )
			    raise
			
			try:
			    output_dataHandle = dataBlock.outputValue( rtAddUtilNode.output )
			except:
			    sys.stderr.write( "Failed to get MDataHandle outputValue output" )
			    raise

			# get values from dataHandle
			#
			input_value1 = input_dataHandle1.asFloat()
                        input_value2 = input_dataHandle2.asFloat()
                        result = input_value1 + input_value2
			# set the output
			output_dataHandle.setFloat(result)

			# set the plug clean so maya knows it can update
			dataBlock.setClean(plug)

		else:
			return OpenMaya.kUnknownParameter

		return OpenMaya.MStatus.kSuccess

def nodeCreator():

	return OpenMayaMPx.asMPxPtr( rtAddUtilNode() )

# create and initialize the attributes to the node
def nodeInitializer():

	nAttr = OpenMaya.MFnNumericAttribute()

	# create input attributes
	#
	rtAddUtilNode.input1 = nAttr.create("input1", "i1", OpenMaya.MFnNumericData.kFloat, 0.0)
	nAttr.setWritable(True)
	nAttr.setStorable(True)
	nAttr.setReadable(True)
	nAttr.setKeyable(True)
	
	rtAddUtilNode.input2 = nAttr.create("input2", "i2", OpenMaya.MFnNumericData.kFloat, 0.0)
	nAttr.setWritable(True)
	nAttr.setStorable(True)
	nAttr.setReadable(True)
	nAttr.setKeyable(True)


	rtAddUtilNode.output = nAttr.create("output", "o", OpenMaya.MFnNumericData.kFloat, 0.0)
	nAttr.setWritable(True)
	nAttr.setStorable(True)
	nAttr.setReadable(True)
	
	# add attribues
	#
	rtAddUtilNode.addAttribute( rtAddUtilNode.input1)
	rtAddUtilNode.addAttribute( rtAddUtilNode.input2)
	rtAddUtilNode.addAttribute( rtAddUtilNode.output)

	# Setup which attributes affect each other
	rtAddUtilNode.attributeAffects ( rtAddUtilNode.input1, rtAddUtilNode.output )
        rtAddUtilNode.attributeAffects ( rtAddUtilNode.input2, rtAddUtilNode.output )
# initialize the script plug-in
def initializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject, "Tim Callaway", "1.0", "Any")
	try:
		mplugin.registerNode( kAddUtilNodeTypeName, kAddUtilNodeId, nodeCreator, nodeInitializer, OpenMayaMPx.MPxNode.kDependNode, kAddUtilNodeClassify)
	except:
		sys.stderr.write( "Failed to register node: %s" % kAddUtilNodeTypeName )
		raise

# uninitialize the script plug-in
def uninitializePlugin(mobject):
	mplugin = OpenMayaMPx.MFnPlugin(mobject)
	try:
		mplugin.deregisterNode( kAddUtilNodeId )
	except:
		sys.stderr.write( "Failed to deregister node: %s" % kAddUtilNodeTypeName )
		raise

maya python, finding the distance between two vectors

Great little funciton for finding the distance between two points in maya.

import maya.cmds as Mc 
from math import pow,sqrt

def GetDistance(objA, objB):
	gObjA = Mc.xform(objA, q=True, t=True, ws=True)
	gObjB = Mc.xform(objB, q=True, t=True, ws=True)
	
	return sqrt(pow(gObjA[0]-gObjB[0],2)+pow(gObjA[1]-gObjB[1],2)+pow(gObjA[2]-gObjB[2],2))