コード例 #1
0
    def growWithWarning(self, log=False):
        ## This grow function will increase total size if required.
        self.applyUiNumbers()

        ## Double the value of the UI field
        f = self.widgets['spacingFloatField']
        f.setValue(2.0 * f.getValue())
        ## Double the actual grid spacing
        MmmmToolsMod.Static.Grid.grow(setManip=True, log=log)

        ## Check to make sure the spacing isn't too big
        ## if the grid spacing is too large, adjust the whole grid size to accomadate
        spacingOfActualGrid = pm.grid(query=True, spacing=True) / pm.grid(
            query=True, divisions=True)
        wholeSizeOfActualGrid = pm.grid(query=True, size=True)
        multiplier = self.getMultiplierFromUi()
        w = self.widgets['wholeSizeFloatField']

        if spacingOfActualGrid > wholeSizeOfActualGrid:
            spacing = self.getSpacingFromUi()
            newWholeSizeNoMultiplier = spacing
            newWholeSizeWithMultiplier = newWholeSizeNoMultiplier * self.getMultiplierFromUi(
            )
            pm.grid(size=newWholeSizeWithMultiplier)
            w.setValue(newWholeSizeNoMultiplier)

        if log:
            pm.warning("(You can safely ignore this) Grid size set to: " +
                       str(MmmmToolsMod.Static.Grid.getSpacing()))
コード例 #2
0
    def growWithWarning(self, log=False):
        ## This grow function will increase total size if required.
        self.applyUiNumbers()
        
        ## Double the value of the UI field
        f = self.widgets['spacingFloatField']
        f.setValue(  2.0 * f.getValue()  )
        ## Double the actual grid spacing
        MmmmToolsMod.Static.Grid.grow(setManip=True,log=log)

        ## Check to make sure the spacing isn't too big
        ## if the grid spacing is too large, adjust the whole grid size to accomadate
        spacingOfActualGrid = pm.grid( query=True, spacing=True ) / pm.grid( query=True, divisions=True )
        wholeSizeOfActualGrid = pm.grid( query=True, size=True )
        multiplier=self.getMultiplierFromUi()
        w = self.widgets['wholeSizeFloatField']
        
        if spacingOfActualGrid>wholeSizeOfActualGrid:
            spacing = self.getSpacingFromUi()
            newWholeSizeNoMultiplier = spacing
            newWholeSizeWithMultiplier = newWholeSizeNoMultiplier * self.getMultiplierFromUi()
            pm.grid(    size=newWholeSizeWithMultiplier    )
            w.setValue( newWholeSizeNoMultiplier )
            
        
        if log:
            pm.warning( "(You can safely ignore this) Grid size set to: "+ str(MmmmToolsMod.Static.Grid.getSpacing() ) )
コード例 #3
0
def main():
    sel = pm.ls(os=True, fl=True)
    if len(sel) != 3:
        pm.warning("Select 3 vertices in order of origin, x, and y")
        return
    shape = pm.listRelatives(sel[0], parent=True)[0]
    transformNode = pm.listRelatives(shape, parent=True)[0]
    piv = pm.xform(transformNode, q=True, ws=True, rp=True)
    p0 = sel[0].getPosition()
    p1 = sel[1].getPosition()
    p2 = sel[2].getPosition()
    X = p1 - p0  # X-axis
    Y = p2 - p0  # Y-axis
    Z = X ^ Y  # Z-axis
    P = pm.datatypes.Point(piv[0], piv[1], piv[2])
    X.normalize()
    Y.normalize()
    Z.normalize()
    M = pm.datatypes.Matrix(
        X.x, X.y, X.z, 0,
        Y.x, Y.y, Y.z, 0,
        Z.x, Z.y, Z.z, 0,
        P.x, P.y, P.z, 1)
 
    pm.xform(transformNode, matrix=M.inverse())
    pm.select(transformNode, r=True)
    pm.makeIdentity(apply=True, t=True, r=True, s=False, n=False)
    pm.xform(transformNode, ws=True, piv=(0, 0, 0))
    pm.xform(transformNode, matrix=M)
コード例 #4
0
    def shrinkWithWarning(self, log=False):

        self.applyUiNumbers()
        ## Half the UI fields        
        f = self.widgets['spacingFloatField']
        f.setValue(  0.5 * f.getValue()  )    
        ## Half the actual Maya size
        MmmmToolsMod.Static.Grid.shrink(setManip=True,log=log)
        if log:
            pm.warning( "(You can safely ignore this) Grid size set to: "+ str(MmmmToolsMod.Static.Grid.getSpacing() ) )
コード例 #5
0
def Create(obj, targetColor, control, attr, offset):
    shape = obj.getShape()
    name = obj.name()
    if (type(shape) == pm.Mesh):
        outVerts = []
        verts = shape.vtx[:]
        for i, vert in enumerate(verts):
            if (vert.getColor() == targetColor):
                outVerts.append(vert)

        # this needs rewriting
        # what shells does this vert eblong to?
        # out of teh verts we have, which shell contains the most?
        uvShellsList = shape.getUvShellsIds()[0]
        uvList = []
        outUvShellList = []
        for vert in outVerts:
            uvs = vert.getUVIndices()
            for uv in uvs:
                uvList.append(uv)
                outUvShellList.append(uvShellsList[uv])

        outUvList = []
        mostCommonShell = Counter(outUvShellList).most_common(1)[0][0]
        for i, uvshell in enumerate(outUvShellList):
            if (uvshell == mostCommonShell):
                outUvList.append(shape.map[uvList[i]])

        # print outUvList

        # return

        if (len(outVerts) > 0):
            moveUV = pm.polyMoveUV(outUvList)[0]
            moveUV.rename('%s_%s_moveUV' % (name, attr))

            crv = pm.AnimCurveTU(name='%s_%s_animCurveTU' % (name, attr))
            pm.setKeyframe(crv, t=0.0, v=0.0, itt='linear', ott='linear')
            pm.setKeyframe(crv,
                           t=20.0,
                           v=-offset * 20,
                           itt='linear',
                           ott='linear')

            control.attr(attr) >> crv.input
            crv.output >> moveUV.translateV

            return moveUV

        else:
            pm.warning('No verts found with color %s' % (targetColor))

    else:
        pm.warning('The target must be a mesh')
コード例 #6
0
    def shrinkWithWarning(self, log=False):

        self.applyUiNumbers()
        ## Half the UI fields
        f = self.widgets['spacingFloatField']
        f.setValue(0.5 * f.getValue())
        ## Half the actual Maya size
        MmmmToolsMod.Static.Grid.shrink(setManip=True, log=log)
        if log:
            pm.warning("(You can safely ignore this) Grid size set to: " +
                       str(MmmmToolsMod.Static.Grid.getSpacing()))
コード例 #7
0
def ConnectToAttr(src, trgt, attr):
    moveUVs = src.getShape().history(type='polyMoveUV')
    try:
        attr = pm.PyNode(trgt).attr(attr).getChildren()
    except:
        attr = [pm.PyNode(trgt).attr(attr)]

    if (len(moveUVs) > len(attr)):
        pm.warning(
            'There are more polyMoveUV nodes that attrs to connect to %s:%s' %
            (len(moveUVs), len(attr)))
    else:
        for i, moveUV in enumerate(moveUVs):
            moveUV.translateV >> attr[i]
コード例 #8
0
def __create_shelf_frame(shelf_file, shelf_name, layout):
    shelf_function = os.path.basename(shelf_file).replace('.mel', '')
    shelf_frame = pm.frameLayout(label=shelf_name, collapsable=True, p=layout)
    shelf_layout = pm.gridLayout(ag=True, nc=8)
    if ('Script found' in pm.mel.whatIs(shelf_file)):
        pm.mel.eval('source "%s"' % (shelf_file))
        if ('Mel procedure found' in pm.mel.whatIs(shelf_function)):
            pm.mel.eval('%s()' % (shelf_function))
        else:
            pm.warning('Could not find shelf function : %s' % (shelf_function))
    else:
        pm.warning('Could not find shelf file : %s' % (shelf_file))

    return shelf_frame
コード例 #9
0
def project_curves_onto_mesh(mesh, curves_grp, direction):
    # projected_curves = []
    mesh = mesh
    old_meshes = []
    for i, curve in enumerate(curves_grp.getChildren()):
        try:
            if (not type(curve.getShape()) is pm.NurbsCurve):
                continue
        except:
            continue

        while True:
            nv = len(mesh.vtx)
            mesh = delete_vertex(mesh)
            if (len(mesh.vtx) == nv): break

        projected_curves = pm.polyProjectCurve(mesh,
                                               curve,
                                               direction=direction)[0]
        pm.delete(projected_curves.getChildren()[1:])
        projected_curve = projected_curves.getChildren()[0]

        split_mesh = pm.polySplit(mesh,
                                  detachEdges=0,
                                  projectedCurve=projected_curve)
        # print projected_curve
        split_mesh = split_mesh[0]

        pm.delete(split_mesh, ch=True)
        old_meshes.append(mesh)

        mesh = split_mesh

        if (projected_curves):
            pm.delete(projected_curves)

        # if( i == 10 ) : return

    for old_mesh in old_meshes:
        try:
            pm.delete(old_mesh)
        except:
            pm.warning('Could not delete %s' % (old_mesh))

    pm.polyTriangulate(mesh)
    # pm.polyQuad( mesh )
    # -ver 1 -trm 0 -p 50 -vct 0 -tct 0 -shp 0.5326 -keepBorder 1 -keepMapBorder 1 -keepColorBorder 1 -keepFaceGroupBorder 1 -keepHardEdge 1 -keepCreaseEdge 1 -keepBorderWeight 0.5 -keepMapBorderWeight 0.5 -keepColorBorderWeight 0.5 -keepFaceGroupBorderWeight 0.5 -keepHardEdgeWeight 0.5 -keepCreaseEdgeWeight 0.5 -useVirtualSymmetry 0 -symmetryTolerance 0.01 -sx 0 -sy 1 -sz 0 -sw 0 -preserveTopology 1 -keepQuadsWeight 1 -vertexMapName "" -replaceOriginal 1 -cachingReduce 1 -ch 1
    # pm.polyReduce( mesh, ver=True, trm=False, p=50, replaceOriginal=True, kb=True, kbw=1.0, kmb=True, kmw=1.0, kfb=True, kfw=1.0, kqw=1.0 )
    pm.polySoftEdge(mesh, a=180, ch=True)
    pm.delete(mesh, ch=True)
コード例 #10
0
def splitSelection() :

	__st(0)
	workingList, sel = getMeshesRecursivelyFromSelection()

	gMainProgressBar = pm.PyUI(pm.mel.eval( '$tmp = $gMainProgressBar' ))
	gMainProgressBar.setMaxValue( len(workingList) )

	if( len(workingList) > 0 ) :
		try :
			outputGrp = pm.PyNode(OUTPUT_GRP_NAME)
		except (pm.MayaNodeError) :
			outputGrp = pm.group(name=OUTPUT_GRP_NAME, world=True, empty=True)						

		outputContents = outputGrp.getChildren()
		for child in outputContents :
			pm.delete(child)

		
		pm.uitypes.ProgressBar.beginProgress(
			gMainProgressBar,
			status="Splitting meshes..."
		)
		gMainProgressBar.step(0)
		pm.refresh()


		for mesh in workingList :
			splitByMaterials(mesh, outputGrp)
			gMainProgressBar.step(1)
			pm.refresh()

		materialGroups = outputGrp.getChildren()
		for group in materialGroups :
			mergeGroup(group)
			
	else :
		pm.warning( 'No meshes found in selection' )

	gMainProgressBar.endProgress()

	# pm.select(sel)
	pm.select(outputGrp)

	print 'Splitting mesh by material COMPLETE'

	__et(0, 'Total')
コード例 #11
0
def project_curves_onto_mesh( mesh, curves_grp, direction ) :
	# projected_curves = []	
	mesh = mesh
	old_meshes = []
	for i, curve in enumerate( curves_grp.getChildren( ) ) :		
		try :
			if( not type(curve.getShape()) is pm.NurbsCurve ) :				
				continue
		except :			
			continue				

		while True :
			nv = len(mesh.vtx)
			mesh = delete_vertex(mesh)
			if( len(mesh.vtx) == nv ) : break

		projected_curves = pm.polyProjectCurve( mesh, curve, direction=direction )[0]
		pm.delete( projected_curves.getChildren()[1:] )
		projected_curve = projected_curves.getChildren()[0]		

		split_mesh = pm.polySplit( mesh, detachEdges=0, projectedCurve=projected_curve )
		# print projected_curve
		split_mesh = split_mesh[0]

		pm.delete( split_mesh, ch=True )
		old_meshes.append( mesh )	

		mesh = split_mesh			

		if( projected_curves ) :
			pm.delete( projected_curves )

		# if( i == 10 ) : return

	for old_mesh in old_meshes :
		try : pm.delete( old_mesh )
		except : 
			pm.warning( 'Could not delete %s' % (old_mesh) )
	

	pm.polyTriangulate( mesh )
	# pm.polyQuad( mesh )
	# -ver 1 -trm 0 -p 50 -vct 0 -tct 0 -shp 0.5326 -keepBorder 1 -keepMapBorder 1 -keepColorBorder 1 -keepFaceGroupBorder 1 -keepHardEdge 1 -keepCreaseEdge 1 -keepBorderWeight 0.5 -keepMapBorderWeight 0.5 -keepColorBorderWeight 0.5 -keepFaceGroupBorderWeight 0.5 -keepHardEdgeWeight 0.5 -keepCreaseEdgeWeight 0.5 -useVirtualSymmetry 0 -symmetryTolerance 0.01 -sx 0 -sy 1 -sz 0 -sw 0 -preserveTopology 1 -keepQuadsWeight 1 -vertexMapName "" -replaceOriginal 1 -cachingReduce 1 -ch 1
	# pm.polyReduce( mesh, ver=True, trm=False, p=50, replaceOriginal=True, kb=True, kbw=1.0, kmb=True, kmw=1.0, kfb=True, kfw=1.0, kqw=1.0 )
	pm.polySoftEdge( mesh, a=180, ch=True )
	pm.delete( mesh, ch=True )
コード例 #12
0
ファイル: export.py プロジェクト: kotchin/mayaSettings
def __create_clean_object( obj ) :
	dup_obj = obj.duplicate()[0]
	ok_type_list = [ pm.Transform ]
	for dup_child in dup_obj.getChildren( ad=True, type='transform' ) :
		ok = True		
		if( not type(dup_child) in ok_type_list ) : ok = False		
		
		if( FFU_E_SETTINGS.get( 'hidden_ignore_bool' ).value ) :
			if( not dup_child.isVisible() ) : ok = False
		
		if( ok ) :
			dup_child_translation = dup_child.getTranslation()
			dup_child_rotation = dup_child.getRotation()
			for i, axis in enumerate( [ 'x', 'y', 'z' ] ) :
				flipsetting = 'flip'+axis
				if( FFU_E_FFEXPORT_SETTINGS.get(flipsetting).value ) :
					dup_child_translation[i] = -dup_child_translation[i]
					# dup_child_rotation[i] = -dup_child_rotation[i]
			dup_child.setTranslation( dup_child_translation )
			dup_child.setRotation( dup_child_rotation )


			if( type( dup_child.getShape() ) == pm.Mesh ) :
				# removed this to try fixing positions by applying appropriate flipping - see above
				# dup_child.setPivots( ( 0,0,0 ), ws=True )
				# pm.makeIdentity( dup_child, translate=True, apply=True )
				try : pm.polyTriangulate( dup_child )
				except : pm.warning( 'Could not triangulate %s' % ( dup_child ) )
			
			# pm.delete( dup_child, ch=True )			
			# pm.bakePartialHistory( dup_child, prePostDeformers=True )

		else :		
			pm.delete( dup_child )

	return dup_obj
コード例 #13
0
ファイル: utils.py プロジェクト: kotchin/th_autorig2
def wrn( _message ) :	
	caller = _get_caller()
	_message = caller + ' : ' + _message
	pm.warning( _message )
コード例 #14
0
 def shrinkWithWarning(self, log=False):
     self.parent.shrink(setManip=True,log=log)
     if log:
         pm.warning( "(You can safely ignore this) Grid size set to: "+ str(self.parent.getSpacing() ) )
コード例 #15
0
 def shrinkWithWarning(self, log=False):
     self.parent.shrink(setManip=True, log=log)
     if log:
         pm.warning("(You can safely ignore this) Grid size set to: " +
                    str(self.parent.getSpacing()))
コード例 #16
0
ファイル: utils.py プロジェクト: kotchin/th_autorig2
def err( _message ) :	
	caller = _get_caller()
	_message = caller + ' : ' + _message
	if( settings.should_error ) : pm.error( _message )
	else : pm.warning( _message )
コード例 #17
0
def splitByMaterials( mesh, outputGrp ) :	

	materials = mesh.listConnections(type=pm.nodetypes.ShadingEngine)
	print mesh.name()
	materials = list(set(materials))
	
	for material in materials :
		# print '----- ' + material.name()
		__st(1)

		faces = material.members( flatten=True )

		outmesh = None

		for facelist in faces :
			
			if( type( facelist ) is pm.Mesh ) :
				facelist = facelist.f[:]

			shape = facelist.node()		
			if( shape == mesh ) :
					
				__st(6)

				duplicate = facelist.node().getTransform().duplicate()[0]
				if( duplicate is None ) :
					pm.warning( "%s could not be duplicated" % mesh.name() )
					continue
				duplicate.setParent(outputGrp)

								
				dupfacelist = facelist.indices()				
				dupallfaces = duplicate.f[:].indices()
				deletefacelist = duplicate.f[facelist.indices()]

				__et(6, 'initTime')

				__st(2)
				# deletefacelist = [ duplicate.f[face] for face in dupallfaces if face not in dupfacelist ]
				pm.select(deletefacelist)
				pm.runtime.InvertSelection()
				# deletefacelist = pm.ls(sl=True, fl=True)
				__et(2, 'obtainFaceListTime')
				
				__st(3)
				pm.delete()
				__et(3, 'deleteFaceTime')
				# pm.filterExpand(dupfacelist, sm=34)


				__st(4)
				# pm.mel.select( duplicate.f[:] )
				# pm.hyperShade(assign=material)				
				pm.sets( material, fe=duplicate.f[:]  )					
				__et(4, 'assignMaterialTime')

				outmesh = duplicate
		

		__st(5)
		try:
			outmeshGrp = pm.PyNode( '%s|%s' % ( OUTPUT_GRP_NAME, material.name() + '_split' ) )
		except (pm.MayaNodeError) :
			outmeshGrp = pm.group(name=material.name() + '_split', parent=pm.PyNode(OUTPUT_GRP_NAME), empty=True)

		outmesh.setParent(outmeshGrp)
		__et(5, 'tidyUpTime')


		__et( 1, material.name() + ' done' )