示例#1
0
    def transferEnforce(self, *a):
        source = cmds.textField('tf_agrDJ', q=1, text=1)
        target = cmds.textField('tf_agrJT', q=1, text=1)
        bs = cmds.textField('tf_agrN', q=1, text=1)
        ignNum = cmds.intField('if_agrIV', q=1, value=1)
        su = ['', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
              'k']  # suffix

        ct = int(round(cmds.currentTime(query=1)))
        pdac = cmds.polyDuplicateAndConnect(source, renameChildren=1)[0]
        tn = source.split(':')[-1] + '_' + str(ct)
        for s in su:
            if cmds.objExists(tn + s) == 0:
                tn = tn + s
                break
        cmds.rename(pdac, tn)

        if bs == '':
            bs = cmds.blendShape(tn, target)[0]
            cmds.textField('tf_agrN', e=1, text=bs)
        else:
            #wc = cmds.blendShape(bs,q=1,weightCount=1)
            bsAttr = cmds.aliasAttr(bs, q=1)
            il = []
            il = [
                int(re.findall('\d+', bsAttr[i])[0])
                for i in range(1, len(bsAttr), 2)
            ]
            cmds.blendShape(bs, e=1, target=(target, max(il) + 1, tn, 1.0))

        cmds.setKeyframe(bs + '.' + tn, v=1, t=ct)
        cmds.setKeyframe(bs + '.' + tn, v=0, t=ct - ignNum)
        cmds.setKeyframe(bs + '.' + tn, v=0, t=ct + ignNum)
        cmds.select(tn, replace=1)
示例#2
0
 def dpCreateDeformMesh(self, *args):
     """ Generate a final deformable mesh from original loaded mesh.
         Parent old original model to Model_Grp and rename it to _Geo.
         Rename the new final dformable mesh as _Def_Mesh and put it inside Render_Grp.
     """
     # store old mesh name:
     oldMeshName = self.origModel
     # generate deformMesh from origModel:
     self.deformMesh = cmds.polyDuplicateAndConnect(self.origModel)
     # rename geometries:
     self.origModel = cmds.rename(
         self.origModel,
         utils.extractSuffix(self.origModel) + "_Orig_Geo")
     self.deformMesh = cmds.rename(
         self.deformMesh,
         utils.extractSuffix(oldMeshName) + "_Def_Mesh")
     cmds.setAttr(self.origModel + ".visibility", 0)
     # parent if need:
     modelGrp = utils.getNodeByMessage("modelsGrp")
     if modelGrp:
         cmds.parent(self.origModel, modelGrp)
     renderGrp = utils.getNodeByMessage("renderGrp")
     if renderGrp:
         # avoid reparent deformMesh if already inside RenderGrp:
         parentList, allParentList = [], []
         parentList.append(self.deformMesh)
         while parentList:
             parentList = cmds.listRelatives(parentList[0],
                                             allParents=True,
                                             type="transform")
             if parentList:
                 allParentList.append(parentList[0])
         if not renderGrp in allParentList:
             cmds.parent(self.deformMesh, renderGrp)
示例#3
0
def duplicateAndConnect(meshList):
    '''
	polyDuplicateAndConnect wrapper for multiple meshes
	@param meshList: List of polygon mesh objects to run polyDuplicateAndConnect on. 
	@type meshList: list
	'''
    # Initialize return value
    dupList = []

    # Duplicate and connect
    for mesh in meshList:
        mc.select(mesh)
        mc.polyDuplicateAndConnect()
        dup = mc.ls(sl=True, l=True)
        dupList.append(dup[0])

    # Return duplicate list
    return dupList
示例#4
0
def duplicateAndConnect(meshList):
    """
	polyDuplicateAndConnect wrapper for multiple meshes
	@param meshList: List of polygon mesh objects to run polyDuplicateAndConnect on. 
	@type meshList: list
	"""
    # Initialize return value
    dupList = []

    # Duplicate and connect
    for mesh in meshList:
        mc.select(mesh)
        mc.polyDuplicateAndConnect()
        dup = mc.ls(sl=True, l=True)
        dupList.append(dup[0])

        # Return duplicate list
    return dupList
示例#5
0
def smooth_proxy(sels=[]):
    sels = get_sels(sels)
    p_nodes = []
    for sel in sels:
        name = sel.partition('|')[2].partition('_Geo')[0]
        s_shapes = cmds.listRelatives(sel, shapes=True, type='mesh')

        p_node = cmds.polyDuplicateAndConnect(sel, renameChildren=True)
        p_node = cmds.rename(p_node, '%s_SmoothProxy_Geo' % name)
        p_shapes = cmds.listRelatives(p_node, shapes=True, type='mesh')

        shapes = zip(s_shapes, p_shapes)
        for outMesh, inMesh in shapes:
            smooth = cmds.createNode('polySmoothProxy', n='%s_Smooth' % name)
            cmds.setAttr('%s.method' % smooth, 0)
            cmds.setAttr('%s.exponentialLevel' % smooth, 0)
            cmds.setAttr('%s.continuity' % smooth, 1)
            cmds.setAttr('%s.smoothUVs' % smooth, 1)
            cmds.setAttr('%s.keepBorder' % smooth, 1)
            cmds.setAttr('%s.keepHardEdge' % smooth, 0)
            cmds.setAttr('%s.keepMapBorders' % smooth, 1)
            cmds.setAttr('%s.linearLevel' % smooth, 1)
            cmds.setAttr('%s.divisionsPerEdge' % smooth, 1)
            cmds.setAttr('%s.pushStrength' % smooth, 0.1)
            cmds.setAttr('%s.roundness' % smooth, 1)
            cmds.connectAttr('%s.outMesh' % outMesh,
                             '%s.inputPolymesh' % smooth,
                             f=True)
            cmds.connectAttr('%s.output' % smooth,
                             '%s.inMesh' % inMesh,
                             f=True)
        if not cmds.objExists('SmoothProxy_Grp'):
            cmds.group(n='SmoothProxy_Grp', empty=True)
        p_nodes.extend(cmds.parent(p_node, 'SmoothProxy_Grp', r=True))

    cmds.select(p_nodes, r=True)
    return p_nodes
示例#6
0
def separateInfluenceMesh(baseMesh,inputMesh,setList,suffix='mesh'):
	'''
	Separate a mesh to history driven mesh shells based on face sets
	@param baseMesh: Base mesh to define face sets.
	@type baseMesh: str
	@param inputMesh: Mesh to separate influence shells from.
	@type inputMesh: str
	@param setList: List of face sets to define shells.
	@type setList: list
	@param suffix: Naming suffix for separated mesh shells.
	@type suffix: str
	'''
	# ==========
	# - Checks -
	# ==========

	# Check Mesh
	if not mc.objExists(baseMesh):
		raise Exception('Base Mesh "'+baseMesh+'" does not exist!')
	if not mc.objExists(inputMesh):
		raise Exception('Input Mesh "'+inputMesh+'" does not exist!')

	# Sets
	for faceSet in setList:
		for face in mc.sets(faceSet,q=True):
			if not mc.ls(face,o=True)[0] != baseMesh:
				raise Exception('Invalid item "'+face+'" in set "'+faceSet+'"')

	# ===========================
	# - Separate Mesh Face Sets -
	# ===========================

	infMeshList = []
	delCompList = []

	for faceSet in setList:

		# Get Set Prefix
		prefix = glTools.utils.stringUtils.stripSuffix(faceSet)

		# Duplicate Connected Mesh
		infMesh = mc.polyDuplicateAndConnect(inputMesh)[0]
		infMesh = mc.rename(infMesh,prefix+'_'+suffix)

		# Delete Unwanted Faces
		allFaces = mc.ls(infMesh+'.f[*]',fl=True)
		setFaces = mc.ls(mc.sets(faceSet,q=True),fl=True)
		setFaces = [i.replace(baseMesh,infMesh) for i in setFaces if i.count(baseMesh)]
		#meshFaces = list(set(allFaces) & set(setFaces)) # Set Intersection
		delFaces = list(set(allFaces) - set(setFaces))
		mc.delete(delFaces)

		# Rename deleteComponent node
		delNode = mc.ls(mc.listHistory(infMesh),type='deleteComponent')
		if not delNode: raise Exception('Unable to determine deleteComponent from mesh "'+infMesh+'"!')
		delNode = mc.rename(delNode[0],prefix+'_deleteComponent')

		# Append to return list
		infMeshList.append(infMesh)
		delCompList.append(delNode)

	# =================
	# - Return Result -
	# =================

	result = {}

	result['influenceMesh'] = infMeshList
	result['deleteComponent'] = delCompList

	return result
示例#7
0
def separateInfluenceMesh(baseMesh, inputMesh, setList, suffix='mesh'):
    """
    Separate a mesh to history driven mesh shells based on face sets
    @param baseMesh: Base mesh to define face sets.
    @type baseMesh: str
    @param inputMesh: Mesh to separate influence shells from.
    @type inputMesh: str
    @param setList: List of face sets to define shells.
    @type setList: list
    @param suffix: Naming suffix for separated mesh shells.
    @type suffix: str
    """
    # ==========
    # - Checks -
    # ==========

    # Check Mesh
    if not cmds.objExists(baseMesh):
        raise Exception('Base Mesh "' + baseMesh + '" does not exist!')
    if not cmds.objExists(inputMesh):
        raise Exception('Input Mesh "' + inputMesh + '" does not exist!')

    # Sets
    for faceSet in setList:
        for face in cmds.sets(faceSet, q=True):
            if not cmds.ls(face, o=True)[0] != baseMesh:
                raise Exception('Invalid item "' + face + '" in set "' + faceSet + '"')

    # ===========================
    # - Separate Mesh Face Sets -
    # ===========================

    infMeshList = []
    delCompList = []

    for faceSet in setList:

        # Get Set Prefix
        prefix = glTools.utils.stringUtils.stripSuffix(faceSet)

        # Duplicate Connected Mesh
        infMesh = cmds.polyDuplicateAndConnect(inputMesh)[0]
        infMesh = cmds.rename(infMesh, prefix + '_' + suffix)

        # Delete Unwanted Faces
        allFaces = cmds.ls(infMesh + '.f[*]', fl=True)
        setFaces = cmds.ls(cmds.sets(faceSet, q=True), fl=True)
        setFaces = [i.replace(baseMesh, infMesh) for i in setFaces if i.count(baseMesh)]
        # meshFaces = list(set(allFaces) & set(setFaces)) # Set Intersection
        delFaces = list(set(allFaces) - set(setFaces))
        cmds.delete(delFaces)

        # Rename deleteComponent node
        delNode = cmds.ls(cmds.listHistory(infMesh), type='deleteComponent')
        if not delNode: raise Exception('Unable to determine deleteComponent from mesh "' + infMesh + '"!')
        delNode = cmds.rename(delNode[0], prefix + '_deleteComponent')

        # Append to return list
        infMeshList.append(infMesh)
        delCompList.append(delNode)

    # =================
    # - Return Result -
    # =================

    result = {}

    result['influenceMesh'] = infMeshList
    result['deleteComponent'] = delCompList

    return result