Ejemplo n.º 1
0
def prescaleUVsShells(object):
	"""
	This definition prescales object UVs shells.

	:param objects: Object. ( String )
	:return: Definition succes. ( Boolean )
	"""

	uvs = getUVsFromComponents(object)
	uMin, vMin, uMax, vMax = getComponentsBoundingBox(uvs)
	uCenter, vCenter = (uMin + uMax) / 2.0, (vMin + vMax) / 2.0
	width, height = uMax - uMin, vMax - vMin
	scale = max(width, height)

	cmds.polyMultiLayoutUV(object, lm=0, sc=1, rbf=0, fr=False, ps=0.2, l=2, psc=True)

	currentUMin, currentVMin, currentUMax, currentVMax = getComponentsBoundingBox(uvs)
	currentUCenter, currentVCenter = (currentUMin + currentUMax) / 2.0, (currentVMin + currentVMax) / 2.0
	currentWidth, currentHeight = currentUMax - currentUMin, currentVMax - currentVMin
	currentScale = max(currentWidth, currentHeight)

	scaleFactor = scale / currentScale

	cmds.polyEditUV(uvs, u=uCenter - currentUCenter, v=vCenter - currentVCenter)
	scaleComponentsUVs(uvs, su=scaleFactor, sv=scaleFactor)
	return True
Ejemplo n.º 2
0
 def copyAndLayout(self):
     self.currentMap = cmds.optionMenuGrp(self.uvSetChoice, q=True, v=True)
     cmds.polyCopyUV(self.selFace, cm=True, uvi=self.currentMap, uvs=self.inputLightmap)
     cmds.polyMultiLayoutUV(scale=1, rotateForBestFit=2, layout=2, ps=3.2, uvs=self.inputLightmap)
     cmds.TextureViewWindow()    #opens uv texture editor
     cmds.select(self.sel)        #selects original objects to get out of face selection
     cmds.deleteUI(self.optionWindow)
Ejemplo n.º 3
0
def prescaleUVsShells(object):
	"""
	Prescales object UVs shells.

	:param objects: Object.
	:type objects: str
	:return: Definition succes.
	:rtype: bool
	"""

	uvs = getUVsFromComponents(object)
	uMin, vMin, uMax, vMax = getComponentsBoundingBox(uvs)
	uCenter, vCenter = (uMin + uMax) / 2.0, (vMin + vMax) / 2.0
	width, height = uMax - uMin, vMax - vMin
	scale = max(width, height)

	cmds.polyMultiLayoutUV(object, lm=0, sc=1, rbf=0, fr=False, ps=0.2, l=2, psc=True)

	currentUMin, currentVMin, currentUMax, currentVMax = getComponentsBoundingBox(uvs)
	currentUCenter, currentVCenter = (currentUMin + currentUMax) / 2.0, (currentVMin + currentVMax) / 2.0
	currentWidth, currentHeight = currentUMax - currentUMin, currentVMax - currentVMin
	currentScale = max(currentWidth, currentHeight)

	scaleFactor = scale / currentScale

	cmds.polyEditUV(uvs, u=uCenter - currentUCenter, v=vCenter - currentVCenter)
	scaleComponentsUVs(uvs, su=scaleFactor, sv=scaleFactor)
	return True
Ejemplo n.º 4
0
def fixUVscale(*args):
    try:
        if not cmds.pluginInfo("rainUVPrescale", q=True, l=True):
            cmds.loadPlugin('rainUVPrescale.py')
    except:
        pass
    mel.eval('rainUVPrescale;')
    cmds.polyMultiLayoutUV(lm=1, sc=1, rbf=1, fr=0, ps=0.1, l=2)
Ejemplo n.º 5
0
def clean(tube_name, transform, temp_stroke, new_curve, caps):
	cmds.polyMultiLayoutUV( scale=1, rotateForBestFit=2, layout=2 )
	cmds.delete(transform, ch=1)
	cmds.delete(temp_stroke)
	if new_curve:
		cmds.delete(new_curve)
	cmds.rename(transform, tube_name)
	if caps:
		try:
			[ mel.eval (' select -r {}; performNormalBasedProjection 0; '.format(i)) for i in caps ]
		except:
			pass
 def copyAndLayout(self):
     global preScale
     percentageSpace = cmds.floatSliderGrp(self.shellSpacingSlider, q=True, v=True)    #get percentage space from slider
     
     self.currentMap = cmds.optionMenuGrp(self.uvSetChoice, q=True, v=True)
     cmds.polyCopyUV(self.selFace, cm=True, uvi=self.currentMap, uvs=self.inputLightmap)
     #cmds.polyMultiLayoutUV(psc=2, scale=1, rotateForBestFit=2, layout=2, ps=percentageSpace, uvs=self.inputLightmap) Default settings
     cmds.polyMultiLayoutUV(psc=preScale, scale=layoutScale, lm=layoutMapping, rotateForBestFit=layoutRotate, layout=shellLayout, ps=percentageSpace, uvs=self.inputLightmap)
     cmds.TextureViewWindow()    #opens uv texture editor
     cmds.select(self.sel)        #selects original objects to get out of face selection
     cmds.deleteUI(self.optionWindow)
     print preScale
     print shellLayout
Ejemplo n.º 7
0
    def doit(self, *argvs):

        sels = cmds.ls(sl=1)
        alluvs = cmds.polyListComponentConversion(sels, tuv=1)
        if self.topoCheck(sels):
            self.transferUVs(sels)
            cmds.select(cmds.polyListComponentConversion(sels[0], tuv=1))
            umin, umax, vmin, vmax = calc.getMinMax()
            values = self.uvField.getValue()
            space = self.space.getValue()
            countU = values[0]
            countV = values[1]
            interval = space[0]

            select = self.mode.getSelect()
            direction = 'U'
            if select != 1:
                direction = 'V'

            select = self.dirc.getSelect()
            dirc = 1
            if select != 1:
                dirc = -1

            lengthU = umax - umin + interval
            lengthV = vmax - vmin + interval
            j = 0
            iCnt = 0
            maxShellCount = self.shellCount.getValue1()
            values = []
            ## get uv positions to move
            for i in range(len(sels)):
                cur = i + 1

                uvalue = lengthU * iCnt
                vvalue = lengthV * iCnt

                if direction == 'U':
                    if j == 0:
                        values.append((uvalue * dirc, -lengthV * j))
                    else:
                        values.append(
                            ((uvalue - lengthU) * dirc, -lengthV * j))
                    if cur % countU == 0 and i != 0:
                        j += 1
                        iCnt = 0
                else:
                    if j == 0:
                        values.append((lengthU * j, -vvalue * dirc))
                    else:
                        values.append(
                            (lengthU * j, (-vvalue + lengthV) * dirc))
                    if cur % countV == 0 and i != 0:
                        j += 1
                        iCnt = 0

                iCnt += 1

            shuffled = []
            origin = values[0]
            if self.shuffleCB.getValue1() and not self.useOverlap.getValue1():
                random.shuffle(values)

            ## move uvs
            for i in range(len(sels)):
                v = i
                if self.useOverlap.getValue1():
                    v = i % maxShellCount
                    if self.shuffleCB.getValue1() and i > 0:
                        v = random.randint(0, maxShellCount - 1)

                if i == 0:
                    self.offsetUVs(sels[i], origin[0], origin[1])
                else:
                    self.offsetUVs(sels[i], values[v][0], values[v][1])

            cmds.select(alluvs)
            if self.fitCB.getValue1():
                cmds.polyMultiLayoutUV(lm=1,
                                       sc=2,
                                       rbf=0,
                                       fr=1,
                                       ps=0.2,
                                       l=0,
                                       psc=0,
                                       su=1,
                                       sv=1,
                                       ou=0,
                                       ov=0)

            if self.adjustCB.getValue1():
                cmds.polyMultiLayoutUV(lm=0,
                                       sc=1,
                                       rbf=0,
                                       fr=1,
                                       ps=0.05,
                                       l=0,
                                       psc=0,
                                       su=1,
                                       sv=1,
                                       ou=0,
                                       ov=0)

            cmds.select(sels)
        else:
            pm.warning(
                'There are wrong topology object. please check selected objects'
            )
Ejemplo n.º 8
0
    def createLightmap(self, *args):

        selection = cmds.ls(sl=True)
        if len(selection) == 0:
            return
        mesh = selection[0]

        if cmds.checkBox("cbDeleteHistory", q=True, v=True) == True:
            cmds.delete(mesh, ch=True)

        maxArc = cmds.textFieldGrp("tTolerance", q=True, text=True)
        if re.search("[a-zA-Z]", maxArc) != None:
            cmds.textFieldGrp("tTolerance", e=True, text="5")
        maxArc = int(cmds.textFieldGrp("tTolerance", q=True, text=True))

        # 1. Create a new UV Set
        if "lightmap" in cmds.polyUVSet(q=True, auv=True):
            cmds.polyUVSet(uvs="lightmap", delete=True)

        faceCount = cmds.polyEvaluate(mesh, f=True)
        cmds.polyUVSet(copy=True, nuv="lightmap")
        cmds.polyUVSet(mesh, cuv=True, uvs="lightmap")

        # 2. Cut every UV Edge
        edgeCount = cmds.polyEvaluate(mesh, e=True)
        cmds.polyMapCut(mesh + ".e[0:" + str(edgeCount - 1) + "]", cch=True, ch=False)

        cmds.progressWindow(
            title="Creating Lightmap...",
            progress=0,
            maxValue=faceCount + 1,
            isInterruptable=True,
            status="Facecount: " + str(faceCount),
        )
        # 3. Check if faces are connected and facing the same direction, if they do, then sew the uv edge
        i = 0
        while i < faceCount:
            if cmds.progressWindow(query=True, isCancelled=True):
                break

            face = mesh + ".f[" + str(i) + "]"
            adjacentFaces = self.getAdjacentFaces(mesh, i)

            normal1 = self.getFaceNormal(face)

            for adj in adjacentFaces:
                normal2 = self.getFaceNormal(adj)

                arc = self.getAngle(normal1, normal2)

                if arc < maxArc:
                    self.sewFaces(face, adj)

            cmds.progressWindow(edit=True, progress=i)
            i += 1

        cmds.select(mesh)

        # 4. unfold
        cmds.unfold(i=5000, ss=0.001, gb=False, gmb=0.5, ps=0, oa=0, us=True)

        # 5. layout
        preset = self.maps[cmds.optionMenuGrp("omTexSize", q=True, value=True)]
        cmds.polyMultiLayoutUV(lm=1, sc=1, rbf=1, fr=True, l=2, ps=preset)

        cmds.progressWindow(endProgress=True)
Ejemplo n.º 9
0
    def generate(self):
        exist, hairList = self.getGeos()
        if not exist:
            return
        if self.useUI:
            valueToBar = 100.0 / len(hairList)
            varNormal = 0

        allCurvesGrp = cmds.createNode("transform", name="hair_curves_GRP")

        for hair in hairList:
            if self.useUI:
                varNormal += valueToBar
                self.bar.setValue(varNormal)
            # esto me selecciona todos los edge vertex , recordar apagar los constraints de seleccion :
            pym.select(hair)
            cmds.polySelectConstraint(m=3, t=1, w=1)
            cmds.polySelectConstraint(dis=True)
            vtxL = pym.ls(sl=1, fl=1)
            # getOrderedLoops .- es el proceso para generar un dict de todos los loops de la geometria ordenados
            loopDict = self.getOrderedLoops(vtxL)

            if self.multCrvOn:
                tempFolyGrp = cmds.createNode("transform",
                                              name="{0}_follicles_GRP".format(
                                                  hair.name()))
            curveGrp = cmds.createNode("transform",
                                       name="{0}_curves_GRP".format(
                                           hair.name()))
            centerList = []
            tempPlane = None
            folNames = []
            folAllPos = {}

            if self.locsOn:
                centerGrp = cmds.createNode("transform",
                                            name="{0}_locators_GRP".format(
                                                hair.name()))
                cmds.parent(centerGrp, curveGrp)

            for edgeLoop in sorted(loopDict.keys()):
                strNames = [v.name() for v in loopDict[edgeLoop]]
                vtxPos = [
                    cmds.xform(v, q=True, ws=True, t=True) for v in strNames
                ]

                center = self.getCenterFromSel(strNames)

                if (self.snapToGeo is not None) and (edgeLoop == "0000"):
                    snappedCenter = self.getClosestMeshPoint(
                        self.snapToGeo, center)
                    center = (snappedCenter[0], snappedCenter[1],
                              snappedCenter[2])

                centerList.append(center)
                if self.multCrvOn:
                    if not tempPlane:
                        tempCir = cmds.circle(d=1,
                                              nr=(0, 1, 0),
                                              s=len(vtxPos),
                                              n="{0}_tempCircle".format(hair))
                        cirPos = []
                        for i in range(len(vtxPos)):
                            cirPos.append(
                                cmds.xform("{0}.cv[{1}]".format(tempCir[0], i),
                                           ws=True,
                                           t=True,
                                           q=1))
                            if i == len(vtxPos) - 1:
                                cirPos.append(
                                    cmds.xform("{0}.cv[{1}]".format(
                                        tempCir[0], len(vtxPos)),
                                               ws=True,
                                               t=True,
                                               q=1))
                        cmds.delete(tempCir)

                        tempPlane = cmds.polyCreateFacet(
                            name="{0}_follyPlane".format(hair), p=cirPos[:-1])

                        cmds.polyMultiLayoutUV(
                            tempPlane[0],
                            lm=1,
                            sc=2,
                            rbf=1,
                            fr=1,
                            ps=0.1,
                            psc=0,
                            su=2.1,
                            sv=2.1,
                            ou=-1.05,
                            ov=-1.05)  # scale all the uv t the FULL U V space
                        pmPlane = pym.PyNode(tempPlane[0])

                        # Vogels algorthm
                        golden_angle = math.pi * (3 - math.sqrt(5))
                        points = []
                        for i in xrange(self.crvNumber):
                            theta = i * golden_angle
                            r = math.sqrt(i) / math.sqrt(self.crvNumber)
                            points.append(
                                (r * math.cos(theta), r * math.sin(theta)))
                        # Vogels algorthm end

                        for i in points:
                            oFoll = self.create_follicle(pmPlane, i[0], i[1])
                            cmds.parent(oFoll.getParent().name(), tempFolyGrp)
                            folNames.append(oFoll.getParent().name())
                            folAllPos[oFoll.getParent().name()] = []

                        for pos in vtxPos:
                            cmds.xform("{0}.vtx[{1}]".format(
                                tempPlane[0], vtxPos.index(pos)),
                                       ws=True,
                                       t=(pos[0], pos[1], pos[2]))
                    else:
                        for pos in vtxPos:
                            cmds.xform("{0}.vtx[{1}]".format(
                                tempPlane[0], vtxPos.index(pos)),
                                       ws=True,
                                       t=(pos[0], pos[1], pos[2]))

                    if (self.snapToGeo is not None) and (edgeLoop == "0000"):
                        for fol in folNames:
                            pos = cmds.xform(fol, ws=1, q=1, t=1)

                            snappedCenterFol = self.getClosestMeshPoint(
                                self.snapToGeo, pos)
                            centerFol = [
                                snappedCenterFol[0], snappedCenterFol[1],
                                snappedCenterFol[2]
                            ]

                            folAllPos[fol].append(centerFol)

                    else:
                        for fol in folNames:
                            pos = cmds.xform(fol, ws=1, q=1, t=1)
                            folAllPos[fol].append(pos)

                if self.locsOn:
                    spaceLoc, = cmds.spaceLocator(
                        name="{0}_{1}_center_LOC".format(
                            hair.name(), edgeLoop))
                    cmds.setAttr(spaceLoc + ".t", *center)
                    cmds.setAttr(spaceLoc + ".s", *[0.1, 0.1, 0.1])
                    cmds.parent(spaceLoc, centerGrp)

            if self.crvOn:
                centerCurveGrp = cmds.createNode(
                    "transform",
                    name="{0}_centerCurve_GRP".format(hair.name()))
                centerCurve = cmds.curve(
                    d=float(self.crvDgree),
                    p=centerList,
                    name="{0}_center_curve_d1".format(hair))
                cmds.parent(centerCurve, centerCurveGrp)
                cmds.parent(centerCurveGrp, curveGrp)

            if self.multCrvOn:
                multiGrp = cmds.createNode("transform",
                                           name="{0}_multiCurve_GRP".format(
                                               hair.name()))
                for fol in folNames:
                    multCurve = cmds.curve(d=float(self.crvDgree),
                                           p=folAllPos[fol],
                                           name="multi_curve_d1_{0}".format(
                                               fol.split("_")[-1]))
                    cmds.parent(multCurve, multiGrp)
                cmds.parent(multiGrp, curveGrp)
                cmds.delete(tempPlane, tempFolyGrp)
            cmds.parent(curveGrp, allCurvesGrp)

            if self.chuncksGeoOn:
                origHairParent = cmds.listRelatives(hair.name(), p=1)
                hairChunksGRP, newhair = self.createChunksFromGeo(
                    hair, loopDict)
                cmds.parent(hairChunksGRP, allCurvesGrp)
                if origHairParent != None:
                    cmds.parent(newhair, origHairParent)
Ejemplo n.º 10
0
# auto generate atlasUV for all selected meshes
import maya.cmds as cmds


meshes = cmds.ls(sl=1, fl=1)
for mesh in meshes:
    allUVSets = cmds.polyUVSet(mesh,q=1,auv=1)
    if 'atlasUV' in allUVSets:
        cmds.polyUVSet(mesh, delete=True, uvSet='atlasUV')
    cmds.polyUVSet(mesh, copy=True, uvSet='map1', newUVSet='atlasUV')
    cmds.polyUVSet(mesh, currentUVSet=True, uvSet='atlasUV')
cmds.polyMultiLayoutUV(meshes,uvs="atlasUV",l=2,rbf=1,sc=1,lm=1,fr=1,ps=0.2)


# toggle between map1 and atlasUV
# This script will switch UV Set between "map1" and "atlasmap".
# Useage:
# Select meshes which have both map1 and atlas map. Run this script
import maya.cmds as cmds


spnd = cmds.ls(sl=True, fl=True, dag=True, type='shape')
curUVset = cmds.polyUVSet(spnd[0],q=True, currentUVSet=True)
if curUVset[0] == 'map1':
	for sp in spnd:
		cmds.polyUVSet(sp, currentUVSet=True, uvSet="atlasUV")
elif curUVset[0] == 'atlasUV':
	for sp in spnd:
		cmds.polyUVSet(sp, currentUVSet=True, uvSet="map1")