def projectSelection(self):

        hiliteOrig = pm.ls(hilite=True)

        selOrig = pm.ls(selection=True)
        selPre = pm.polyListComponentConversion(selOrig, tv=True)

        try:
            pm.select(self.referenceXformNode, replace=True)
            pm.select(selPre, add=True)
            selForTransfer = pm.ls(selection=True)
            pm.transferAttributes(
                transferPositions=1, transferNormals=0, transferUVs=0, transferColors=0, sampleSpace=0, searchMethod=0
            )
            objsToAddToSelection = []
            for o in selForTransfer:
                # s = str( type(o) )
                # print "y" + s + "y"
                if str(type(o)) == "<class 'pymel.core.general.MeshVertex'>":
                    n = o.name().split(".")[0]
                    objsToAddToSelection.append(n)
            for obj in objsToAddToSelection:
                pm.select(obj, add=True)
            pm.delete(ch=True)  ##was #pm.mel.eval( "DeleteHistory;" )
            print(selForTransfer)
            pm.select(selOrig, replace=True)
            pm.hilite(hiliteOrig)
        except:
            pm.select(selOrig)
            pm.hilite(hiliteOrig)

            print(
                "Please ensure that you have a valid reference mesh selected, and that you have verticies or objects select to project."
            )
Exemple #2
0
    def sd_transfer_attributes(self, selection):

        new_sel = selection.pop(0)

        for obj in selection:
            transfer_from = [new_sel, obj]

            pm.select(transfer_from)

            pm.transferAttributes(
                transferPositions=0,
                transferNormals=0,
                transferUVs=1,
                sourceUvSet="tiling",
                targetUvSet="map1",
                transferColors=0,
                sampleSpace=5,
                sourceUvSpace="tiling",
                targetUvSpace="map1",
                searchMethod=3,
                flipUVs=0,
                colorBorders=1
            )

            pm.delete(ch=True)
Exemple #3
0
            
    

    @classmethod
    def convertMelToPython(cls, melStr=""):
        #import pymel.tools.mel2py as mel2py    is at top of file
        pyStr = mel2py.mel2pyStr( melStr )
        return pyStr
    
    @classmethod
    def doTransfer( cls, spa="",
                    uvs=1, colors=0, positions=0, normals=0,
                    srcUvSet=None, targetUvSet=None  ):

        osel = pm.ls(selection=True)
        
        objs = osel[:]
        
        src = objs.pop(0)

        if type(spa)==type(1):
            spa = spa
        else:
            spa = 5

        for obj in objs:
            
            try:
                o = obj.getShape()
            except:
                o = obj
            try:
                s = src.getShape()
            except:
                s = src
                
            
            try:    
                if srcUvSet == None:
                    suvs = pm.polyUVSet( s, query=True, currentUVSet=True )
                else:
                    suvs = srcUvSet
                if targetUvSet == None:                
                    tuvs = pm.polyUVSet( o, query=True, currentUVSet=True )
                else:
                    tuvs = targetUvSet
                
                pm.transferAttributes( s, o,
                    transferUVs=uvs,
                    transferColors=colors,
                    transferPositions=positions,
                    transferNormals=normals,
                    sourceUvSpace=str(suvs),
    def projectSelection(self):

        hiliteOrig = pm.ls(hilite=True)

        selOrig = pm.ls(selection=True)
        selPre = pm.polyListComponentConversion(selOrig, tv=True)

        try:
            pm.select(self.referenceXformNode, replace=True)
            pm.select(selPre, add=True)
            selForTransfer = pm.ls(selection=True)
            pm.transferAttributes(transferPositions=1,
                                  transferNormals=0,
                                  transferUVs=0,
                                  transferColors=0,
                                  sampleSpace=0,
                                  searchMethod=0)
            objsToAddToSelection = []
            for o in selForTransfer:
                #s = str( type(o) )
                #print "y" + s + "y"
                if str(type(o)) == "<class 'pymel.core.general.MeshVertex'>":
                    n = o.name().split('.')[0]
                    objsToAddToSelection.append(n)
            for obj in objsToAddToSelection:
                pm.select(obj, add=True)
            pm.delete(ch=True)  ##was #pm.mel.eval( "DeleteHistory;" )
            print(selForTransfer)
            pm.select(selOrig, replace=True)
            pm.hilite(hiliteOrig)
        except:
            pm.select(selOrig)
            pm.hilite(hiliteOrig)

            print(
                "Please ensure that you have a valid reference mesh selected, and that you have verticies or objects select to project."
            )
def project_curves_onto_mesh2( mesh, source_mesh, direction ) :
	# duplicate sources_mesh
	dup_source_mesh = pm.duplicate( source_mesh )[0]
	dup_source_mesh.setParent(None)

	# create curve around mesh	
	edge_curves = []
	for edge in mesh.getShape().e :
		edge_curves.append( pm.curve(
			# name=n,
			degree=1,
			ws=True,
			point=[ v.getPosition(space='world') for v in edge.connectedVertices() ]
		) )
	merged_curve = pm.attachCurve( edge_curves, method=1, keepMultipleKnots=False, ch=False )[0]
	merged_curve = pm.duplicate( merged_curve )
	pm.delete( edge_curves )

	# project curve onto dup_source_mesh	
	projected_curves = projected_curves = pm.polyProjectCurve( dup_source_mesh, merged_curve, direction=direction )[0]
	# pm.delete( projected_curves.getChildren()[1:] )
	projected_curve = projected_curves.getChildren()[0]

	split_mesh = pm.polySplit( dup_source_mesh, detachEdges=0, projectedCurve=projected_curve )	
	split_mesh = split_mesh[0]	

	# delete faces not within mesh bounds
	# faces_to_delete = []
	pm.select(None)
	for face in split_mesh.f :
		face_center = ( 0.0, 0.0, 0.0 )
		for v in face.connectedVertices() :
			face_center += v.getPosition( space='world' )
		face_center /= len( face.connectedVertices() )		

		if( point_in_rect_bb( face_center, mesh.getBoundingBox( space='world' ) ) ) :
			# faces_to_delete.append( face )
			dot = face.getNormal( space='world' ).dot( mesh.f[0].getNormal( space='world' ) )
			if( dot > 0.0 )	 :
				pm.select(face, add=True)
		
	# for face in faces_to_delete :		
	# 	dot = face.getNormal( space='world' ).dot( mesh.f[0].getNormal( space='world' ) )
	# 	if( dot > 0.0 )	 :
	# 		pm.select(face, add=True)

	pm.runtime.InvertSelection()
	pm.delete()

	# transfer UVs from mesh to dup_source_mesh
	pm.transferAttributes( mesh, split_mesh, transferUVs=2 )

	# assign mesh material to dup_source_mesh


	# rename dup_source_mesh to mesh
	pm.delete( split_mesh, ch=True )
	n = mesh.name()
	p = mesh.getParent()
	pm.delete( mesh )
	split_mesh.rename( n )

	for attr in split_mesh.listAttr() :		
		if attr.isLocked() : attr.setLocked(False)


	# cleanup

	pm.delete( projected_curves )
	pm.delete( merged_curve )
	pm.delete( dup_source_mesh )

	# split_mesh.centerPivots( True )
	# t = split_mesh.getPivots( worldSpace=1 )[0]
	# split_mesh.setTranslation((-t[0], -t[1], -t[2]), space='world')		
	# pm.makeIdentity( split_mesh, apply=True )
	# split_mesh.setParent( p )
	# split_mesh.setTranslation( ( 0,0,0 ) )
	# pm.makeIdentity( split_mesh, apply=True )

	# position bodge
	split_mesh.setTranslation( ( 0, 0, 1 ), space='world' )
	split_mesh.setParent( p )

	pm.polyTriangulate( split_mesh )

	if( not split_mesh.hasAttr( THU_MFT_SPRITE_ATTR ) ) :
		split_mesh.addAttr( THU_MFT_SPRITE_ATTR, dt='string' )
	split_mesh.setAttr( THU_MFT_SPRITE_ATTR, split_mesh.name().replace( '.png', '' ) )
Exemple #6
0
def project_curves_onto_mesh2(mesh, source_mesh, direction):
    # duplicate sources_mesh
    dup_source_mesh = pm.duplicate(source_mesh)[0]
    dup_source_mesh.setParent(None)

    # create curve around mesh
    edge_curves = []
    for edge in mesh.getShape().e:
        edge_curves.append(
            pm.curve(
                # name=n,
                degree=1,
                ws=True,
                point=[
                    v.getPosition(space='world')
                    for v in edge.connectedVertices()
                ]))
    merged_curve = pm.attachCurve(edge_curves,
                                  method=1,
                                  keepMultipleKnots=False,
                                  ch=False)[0]
    merged_curve = pm.duplicate(merged_curve)
    pm.delete(edge_curves)

    # project curve onto dup_source_mesh
    projected_curves = projected_curves = pm.polyProjectCurve(
        dup_source_mesh, merged_curve, direction=direction)[0]
    # pm.delete( projected_curves.getChildren()[1:] )
    projected_curve = projected_curves.getChildren()[0]

    split_mesh = pm.polySplit(dup_source_mesh,
                              detachEdges=0,
                              projectedCurve=projected_curve)
    split_mesh = split_mesh[0]

    # delete faces not within mesh bounds
    # faces_to_delete = []
    pm.select(None)
    for face in split_mesh.f:
        face_center = (0.0, 0.0, 0.0)
        for v in face.connectedVertices():
            face_center += v.getPosition(space='world')
        face_center /= len(face.connectedVertices())

        if (point_in_rect_bb(face_center, mesh.getBoundingBox(space='world'))):
            # faces_to_delete.append( face )
            dot = face.getNormal(space='world').dot(
                mesh.f[0].getNormal(space='world'))
            if (dot > 0.0):
                pm.select(face, add=True)

    # for face in faces_to_delete :
    # 	dot = face.getNormal( space='world' ).dot( mesh.f[0].getNormal( space='world' ) )
    # 	if( dot > 0.0 )	 :
    # 		pm.select(face, add=True)

    pm.runtime.InvertSelection()
    pm.delete()

    # transfer UVs from mesh to dup_source_mesh
    pm.transferAttributes(mesh, split_mesh, transferUVs=2)

    # assign mesh material to dup_source_mesh

    # rename dup_source_mesh to mesh
    pm.delete(split_mesh, ch=True)
    n = mesh.name()
    p = mesh.getParent()
    pm.delete(mesh)
    split_mesh.rename(n)

    for attr in split_mesh.listAttr():
        if attr.isLocked(): attr.setLocked(False)

    # cleanup

    pm.delete(projected_curves)
    pm.delete(merged_curve)
    pm.delete(dup_source_mesh)

    # split_mesh.centerPivots( True )
    # t = split_mesh.getPivots( worldSpace=1 )[0]
    # split_mesh.setTranslation((-t[0], -t[1], -t[2]), space='world')
    # pm.makeIdentity( split_mesh, apply=True )
    # split_mesh.setParent( p )
    # split_mesh.setTranslation( ( 0,0,0 ) )
    # pm.makeIdentity( split_mesh, apply=True )

    # position bodge
    split_mesh.setTranslation((0, 0, 1), space='world')
    split_mesh.setParent(p)

    pm.polyTriangulate(split_mesh)

    if (not split_mesh.hasAttr(THU_MFT_SPRITE_ATTR)):
        split_mesh.addAttr(THU_MFT_SPRITE_ATTR, dt='string')
    split_mesh.setAttr(THU_MFT_SPRITE_ATTR,
                       split_mesh.name().replace('.png', ''))