This script will go through all your selected meshes in your scene and add or delete a subdivision tag. There is a window to set all your normal subdivision settings and check boxes. There is also a tab that will add or delete rounded edges to your selected objects and you can set the round edge radius.
To Run: Select the objects you want to add subdivision or rounded edges to then run the script.
#VRay Subdivision and Rounded Edges for Maya version 2.0.0
#Bryanna London www.bryannalondon.com
#!/usr/bin/env python
#UPDATED for VRay 2.4 and later
#Adds Vray Subdivision tag to all selected geo. You can also
#Add the vray rounded edges tag to all selected geo.
import maya.cmds as cmds
import maya.mel as mel
#define quiered values as empty list
#this will get rid of variable not defined error
queriedValues=[]
#delete window if a window already exisits
if cmds.window('subdWindow', exists=True):
cmds.deleteUI('subdWindow')
#Create my GUI
def createGUI():
#window layout
subdWindow= cmds.window('subdWindow',title="Add SubDivisions", rtf=True)
tabs = cmds.tabLayout(innerMarginWidth=8, innerMarginHeight=3)
child1 = cmds.columnLayout(adjustableColumn= True, rowSpacing= 3)
cmds.optionMenu('mapBorders', label='Map Borders')
cmds.menuItem( label='Internal')
cmds.menuItem( label='None' )
cmds.menuItem( label='All' )
cmds.checkBox('renderSubD',label= "Render as SubD", value=True)
cmds.checkBox('genStaticGeo', label= "Generate Static Geo", value=False)
cmds.checkBox('overrideGlobal',label= "Overide Global Settings On", value=True)
cmds.checkBox('viewDepend', label = "View Dependent On", value=True)
cmds.checkBox('catmull', label = "Classic Catmull Clark", value=False)
cmds.intFieldGrp('edgeLength',numberOfFields=1, label="Edge Length", value1=1)
cmds.intFieldGrp('maxSubD',numberOfFields=1, label='Max SubD', value1=4)
cmds.rowColumnLayout(numberOfRows = 1)
cmds.button( label='SUBD ON', width= 112, command=('meshSelection()'))
cmds.button( label='SUBD OFF', width= 112, command=('subDOff()'))
cmds.setParent('..')
cmds.columnLayout()
cmds.button( label='Close', width= 224, command=('cmds.deleteUI(\"' + subdWindow + '\", window=True)'))
cmds.setParent('..')
cmds.setParent('..')
child2 = cmds.columnLayout(adjustableColumn= True, rowSpacing= 3)
cmds.floatFieldGrp('roundEdgeRadius',numberOfFields=1, label="Round Edge Radius", precision= 3, value1=.02)
cmds.rowColumnLayout(numberOfRows = 1)
cmds.button( label='ROUND EDGES ON', width = 112, command=('addRoundedEdges()'))
cmds.button( label='ROUND EDGES OFF', width = 112, command=('offRoundedEdges()'))
cmds.setParent('..')
cmds.columnLayout()
cmds.button( label='Close', width= 224, command=('cmds.deleteUI(\"' + subdWindow + '\", window=True)'))
cmds.setParent('..')
cmds.setParent('..')
cmds.tabLayout( tabs, edit=True, tabLabel=((child1, 'SubD'), (child2, 'Round Edges')) )
cmds.showWindow('subdWindow')
#Query Values inputed in GUI for Subdivision tab
def queryValues():
x= cmds.intFieldGrp('edgeLength',query=True, value=True)
y= cmds.intFieldGrp('maxSubD', query=True, value=True)
z= int(cmds.checkBox('renderSubD', query = True, value = True))
a= int(cmds.checkBox('genStaticGeo', query=True, value=True))
b= int(cmds.checkBox('overrideGlobal', query=True, value=True))
c= int(cmds.checkBox('viewDepend', query = True, value = True))
e= int(cmds.checkBox('catmull', query = True, value = True))
#query option menu
selectedMenuItem = cmds.optionMenu('mapBorders', query = True, value = True)
#print selectedMenuItem
if selectedMenuItem == 'Internal':
menuValue = 1
if selectedMenuItem == 'None':
menuValue = 0
if selectedMenuItem == 'All':
menuValue = 2
#query checkboxes
queriedValuesZ, queriedValuesA, queriedValuesB, queriedValuesC, queriedValuesE = z, a, b, c, e
#query intFieldGrp
queriedValuesX,queriedValuesY = x, y
#print and return values from GUI
#print queriedValuesX + queriedValuesY, queriedValuesZ, queriedValuesA, queriedValuesB, queriedValuesC, queriedValuesE, menuValue
return queriedValuesX[-1],queriedValuesY[0], queriedValuesZ, queriedValuesA, queriedValuesB, queriedValuesC, queriedValuesE, menuValue
#query round edges tab
def queryRoundEdge():
d= cmds.floatFieldGrp('roundEdgeRadius', query=True, value=True)
queriedValuesD = d
#print queriedValuesD
return queriedValuesD[0]
#have quiered values run the queryValues definition then print the outputed variables values
#Put all selected meshes in a string
#For all selected meshes turn on VRay subdivisions and SubD Quality
#If there is nothing selected give a warning
#this definition will run when Execute is selected
def meshSelection():
queriedValuesX,queriedValuesY, queriedValuesZ, queriedValuesA, queriedValuesB, queriedValuesC, queriedValuesE, menuValue = queryValues()
#print queriedValuesX
#print queriedValuesY
#print queriedValuesZ
#print queriedValuesA
#print queriedValuesB
#print queriedValuesC
#print queriedValuesE
#print menuValue
mesh = ''
meshes = cmds.ls(selection = True, dag = True, lf = True, visible=True, type = 'mesh')
if cmds.ls(sl=True):
for mesh in meshes:
mel.eval('vray addAttributesFromGroup %s vray_subdivision 1' % mesh)
mel.eval('vray addAttributesFromGroup %s vray_subquality 1' % mesh)
cmds.evalDeferred("cmds.setAttr('%s.vrayPreserveMapBorders', %s)" %(mesh, menuValue))
cmds.evalDeferred("cmds.setAttr('%s.vraySubdivEnable', %s)" %(mesh, queriedValuesZ))
cmds.evalDeferred("cmds.setAttr('%s.vrayStaticSubdiv', %s)" %(mesh, queriedValuesA))
cmds.evalDeferred("cmds.setAttr('%s.vrayOverrideGlobalSubQual', %s)" %(mesh, queriedValuesB))
cmds.evalDeferred("cmds.setAttr('%s.vrayViewDep', %s)"%(mesh, queriedValuesC))
cmds.evalDeferred("cmds.setAttr('%s.vrayClassicalCatmark', %s)" %(mesh, queriedValuesE))
cmds.evalDeferred("cmds.setAttr('%s.vrayEdgeLength',%s )"%(mesh, queriedValuesX))
cmds.evalDeferred("cmds.setAttr('%s.vrayMaxSubdivs',%s)"%(mesh, queriedValuesY))
else:
cmds.confirmDialog(title='Confirm', message='Nothing Selected. Nothing Done.' , button =['Ok'])
#Off button command to turn the Subdivision tags
#For all meshes selected turn the subdivisions tags off
#this will run if the Turn SubD Off button is selected
def subDOff():
objects = cmds.ls(selection = True, dag = True, lf = True, visible=True, type = 'mesh')
if cmds.ls(sl=True):
for ob in objects:
mel.eval('vray addAttributesFromGroup %s vray_subdivision 0' % ob)
mel.eval('vray addAttributesFromGroup %s vray_subquality 0' % ob)
else:
cmds.confirmDialog(title='Confirm', message='Nothing Selected. Nothing Done.' , button =['Ok'])
#Add Rounded Edges
def addRoundedEdges():
queriedValuesD = queryRoundEdge()
print queriedValuesD
selectedObj = cmds.ls(selection = True, dag = True, lf = True, visible=True, type = 'mesh')
if cmds.ls(sl=True):
for sel in selectedObj:
mel.eval('vray addAttributesFromGroup %s vray_roundedges 1' % sel)
cmds.evalDeferred("cmds.setAttr('%s.vrayRoundEdgesRadius',%s)"%(sel, queriedValuesD))
else:
cmds.confirmDialog(title='Confirm', message='Nothing Selected. Nothing Done.' , button =['Ok'])
#Turn off Rounded Edges
def offRoundedEdges():
offObjects = cmds.ls(selection = True, dag = True, lf = True, visible=True, type = 'mesh')
if cmds.ls(sl=True):
for offObj in offObjects:
mel.eval('vray addAttributesFromGroup %s vray_roundedges 0' % offObj)
else:
cmds.confirmDialog(title='Confirm', message='Nothing Selected. Nothing Done.' , button =['Ok'])
#Show the GUI
createGUI()
© 2016 Bryanna London