Exemplo n.º 1
0
def getJointSizeAndCentre(joints, threshold=0.65, space=SPACE_OBJECT):
    '''
	minor modification to the getJointSize function in rigging.utils - uses the
	child of the joint[ 0 ] (if any exist) to determine the size of the joint in
	the axis aiming toward
	'''

    centre = Vector.Zero(3)
    if not isinstance(joints, (list, tuple)):
        joints = [joints]

    joints = [str(j) for j in joints if j is not None]
    if not joints:
        return Vector((1, 1, 1))

    size, centre = rigUtils.getJointSizeAndCentre(joints, threshold, space)
    if size.within(Vector.Zero(3), 1e-2):
        while threshold > 1e-2:
            threshold *= 0.9
            size, centre = rigUtils.getJointSizeAndCentre(joints, threshold)

        if size.within(Vector.Zero(3), 1e-2):
            size = Vector((1, 1, 1))

    children = listRelatives(joints[0], pa=True, type='transform')
    if children:
        childPos = Vector([0.0, 0.0, 0.0])
        childPosMag = childPos.get_magnitude()
        for child in children:
            curChildPos = Vector(xform(
                child, q=True, ws=True, rp=True)) - Vector(
                    xform(joints[0], q=True, ws=True, rp=True))
            curChildPosMag = curChildPos.get_magnitude()
            if curChildPosMag > childPosMag:
                childPos = curChildPos
                childPosMag = curChildPosMag

        axis = rigUtils.getObjectAxisInDirection(joints[0], childPos,
                                                 DEFAULT_AXIS)
        axisValue = getAttr('%s.t%s' % (children[0], axis.asCleanName()))

        if space == SPACE_WORLD:
            axis = Axis.FromVector(childPos)

        size[axis % 3] = abs(axisValue)
        centre[axis % 3] = axisValue / 2.0

    return size, centre
Exemplo n.º 2
0
def getJointSizeAndCentre( joints, threshold=0.65, space=SPACE_OBJECT ):
	'''
	minor modification to the getJointSize function in rigging.utils - uses the
	child of the joint[ 0 ] (if any exist) to determine the size of the joint in
	the axis aiming toward
	'''

	centre = Vector.Zero( 3 )
	if not isinstance( joints, (list, tuple) ):
		joints = [ joints ]

	joints = [ str( j ) for j in joints if j is not None ]
	if not joints:
		return Vector( (1, 1, 1) )

	size, centre = rigUtils.getJointSizeAndCentre( joints, threshold, space )
	if size.within( Vector.Zero( 3 ), 1e-2 ):
		while threshold > 1e-2:
			threshold *= 0.9
			size, centre = rigUtils.getJointSizeAndCentre( joints, threshold )

		if size.within( Vector.Zero( 3 ), 1e-2 ):
			size = Vector( (1, 1, 1) )

	children = listRelatives( joints[ 0 ], pa=True, type='transform' )
	if children:
		childPos = Vector( [ 0.0, 0.0, 0.0 ] )
		childPosMag = childPos.get_magnitude()
		for child in children:
			curChildPos = Vector( xform( child, q=True, ws=True, rp=True ) ) - Vector( xform( joints[ 0 ], q=True, ws=True, rp=True ) )
			curChildPosMag = curChildPos.get_magnitude()
			if curChildPosMag > childPosMag:
				childPos = curChildPos
				childPosMag = curChildPosMag

		axis = rigUtils.getObjectAxisInDirection( joints[ 0 ], childPos, DEFAULT_AXIS )
		axisValue = getAttr( '%s.t%s' % (children[ 0 ], axis.asCleanName()) )

		if space == SPACE_WORLD:
			axis = Axis.FromVector( childPos )

		size[ axis % 3 ] = abs( axisValue )
		centre[ axis % 3 ] = axisValue / 2.0


	return size, centre