def arnoldAboutDialog(): arnoldAboutText = u"Arnold for Maya\n\n" arnoldAboutText += "MtoA " + cmds.pluginInfo( 'mtoa', query=True, version=True) arnoldMercurialID = cmds.arnoldPlugins(getMercurialID=True) if not '(Master)' in arnoldMercurialID: arnoldAboutText += " - " + arnoldMercurialID arnoldAboutText += "\nArnold Core "+".".join(ai.AiGetVersion())+"\n\n" arnoldAboutText += u"(c) 2001-2009 Marcos Fajardo and (c) 2009-2015\nSolid Angle SL\n\n" arnoldAboutText += u"Developed by: Ángel Jimenez, Olivier Renouard,\nYannick Puech, Borja Morales, Nicolas Dumay,\nPedro Fernando Gomez, Pál Mezei\n\n" arnoldAboutText += u"Acknowledgements: Javier González, Miguel González, \nLee Griggs, Chad Dombrova, Gaetan Guidet, \nGaël Honorez, Diego Garcés, Kevin Tureski, \nFrédéric Servant" if (cmds.window("AboutArnold", ex=True)): cmds.deleteUI("AboutArnold") w = cmds.window("AboutArnold", title="About") cmds.window("AboutArnold", edit=True, width=402, height=280) cmds.rowColumnLayout( numberOfColumns=4, columnWidth=[(1,20), (2, 52), (3, 50), (4, 280)] ) cmds.text(label="");cmds.text(label="");cmds.text(label="");cmds.text(label="") cmds.text(label="") cmds.image(image="MtoA_Logo.png") cmds.text(label="") cmds.text(align="left",label=arnoldAboutText) cmds.text(label="");cmds.text(label="\n");cmds.text(label="");cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.button( width=150,label='OK', command=('import maya.cmds as cmds;cmds.deleteUI(\"' + w + '\", window=True)') ) cmds.setParent( '..' ) cmds.showWindow(w)
def UI(): # check to see if the window exists if cmds.window('exampleUI', exists = True): cmds.deleteUI('exampleUI') #create the window window = cmds.window('exampleUI', title = 'exampleUI', w = 300, h = 300, mnb = False, mxb = False, sizeable = False) #show window cmds.showWindow(window) # create a main layout mainLayout = cmds.columnLayout(h = 300, w = 300) # banner image imagePath = cmds.internalVar(userPrefDir = True) + 'icons' + '/test.jpg' # find the path to the image cmds.image(w = 300, h = 100, image = imagePath) cmds.separator(h = 15)# just a seperator # projects option menu projectsOptionMenu = cmds.optionMenu ( 'projectsOptionMenu', width = 300, changeCommand = populateCharacters, label = 'choose a project: ') # change command needed to update character option menu based on what project is selected # create a character option menu characerOptionMenu = cmds.optionMenu ( 'characerOptionMenu', width = 300, label = 'choose a character: ') cmds.separator(h = 15) # just a seperator # create the build button cmds.button(label = 'build', w = 300, h = 50 ,c = build) # activate populate projects option menu populateProjects() # activate populate characaters option menu populateCharacters()
def editCharacter(*args): if cmds.window("artEditCharacterUI", exists = True): cmds.deleteUI("artEditCharacterUI") window = cmds.window("artEditCharacterUI", w = 300, h = 400, title = "Edit Character", mxb = False, mnb = False, sizeable = False) mainLayout = cmds.columnLayout(w = 300, h = 400, rs = 5, co = ["both", 5]) #banner image toolsPath = cmds.internalVar(usd = True) + "mayaTools.txt" if os.path.exists(toolsPath): f = open(toolsPath, 'r') mayaToolsDir = f.readline() f.close() cmds.image(w = 300, h = 50, image = mayaToolsDir + "/General/Icons/ART/artBanner300px.bmp", parent = mainLayout) cmds.text(label = "", h = 1, parent = mainLayout) optionMenu = cmds.optionMenu("artProjOptionMenu", label = "Project:", w =290, h = 40, cc = getProjCharacters, parent = mainLayout) textScrollList = cmds.textScrollList("artProjCharacterList", w = 290, h = 300, parent = mainLayout) button = cmds.button(w = 290, h = 40, label = "Edit Export File", c = editSelectedCharacter, ann = "Edit the character's skeleton settings, joint positions, or skin weights.", parent = mainLayout) button2 = cmds.button(w = 290, h = 40, label = "Edit Rig File", c = editSelectedCharacterRig, ann = "Edit the character's control rig that will be referenced in by animation.", parent = mainLayout) cmds.text(label = "", h = 1) cmds.showWindow(window) getProjects() getProjCharacters()
def nu(self): if(cmds.window(self.win, q = 1, ex = 1)): cmds.deleteUI(self.win) if(cmds.windowPref(self.win, ex = True)): cmds.windowPref(self.win, r = True) cmds.window(self.win, t = "Export as FBX", h = 170, w = 250,rtf=1,s=0) mainCol = cmds.columnLayout() cmds.columnLayout() cmds.image( image="//10.10.35.93/data/_3dAppDomain/_images/maya_export_fbx.png",w=250,h=45 ) cmds.text(label="") uRow = cmds.columnLayout() #zRow = cmds.rowLayout(numberOfColumns=1,cl1="left",cw1=170,ct1="left") cmds.button(label='click to set preset file') #cmds.setParent(zRow) tRow = cmds.rowLayout(numberOfColumns=2,cl2=("right","left"),cw2=(170,70),ct2=("right","left")) self.expPath = cmds.textField() cmds.textField( self.expPath , edit=True, width = 140, enterCommand=('cmds.setFocus(\"' + self.expPath + '\")') ) cmds.button(label='Browse',command='obj.abc()') cmds.setParent(tRow) cmds.setParent(uRow) cmds.text(label = " ") sRow = cmds.rowLayout(numberOfColumns=2,cl2=("center","center"),cw2=(120,130),ct2=("both","both"),co2=(10,05)) butExp = cmds.button( label='Push Export', command='obj.sortAndExport()') cmds.button( label=" Close ", command=("obj.close()")) cmds.setParent(sRow) cmds.setParent(mainCol) # cmds.text(label="") cmds.showWindow(self.win)
def __init__(self): if cmds.window('ms_info_window', query=True, exists=True): cmds.deleteUI('ms_info_window') window = cmds.window('ms_info_window', title='About Mayaseed', sizeable=False) cmds.columnLayout(rs=10, columnOffset=['both', 20], width=600) cmds.rowLayout(numberOfColumns=2) cmds.text('', width=30) cmds.image(image=os.path.join(ROOT_DIRECTORY, 'graphics', 'mayaseed.png')) cmds.setParent('..') cmds.text('Version ' + MAYASEED_VERSION) cmds.text('Mayaseed is a Maya plugin for exporting scenes to the appleseed renderer.') cmds.text('Written by Jonathan Topf.') cmds.rowLayout(numberOfColumns=4) cmds.button(label='Mayaseed website', command=('import webbrowser\nwebbrowser.open_new_tab("' + MAYASEED_URL + '")')) cmds.button(label='appleseed website', command=('import webbrowser\nwebbrowser.open_new_tab("' + APPLESEED_URL + '")')) cmds.text('', width=166) cmds.button(label='Close', command=('import maya.cmds as cmds\ncmds.deleteUI(\"' + window + '\", window=True)'), width=100) cmds.setParent('..') cmds.text('') cmds.setParent('..') cmds.showWindow(window)
def createLayout(self): mainLayout = cmds.rowLayout(numberOfColumns=6, parent=self.parentLayout) #manipulator orientation #cmds.iconTextButton("manipOrientButton", style='textOnly', label='-', h=self.hb, annotation="Selected objects", command=updateManipOrient) #launchManipOrient() self.autoSmartSnapKeys = AutoSmartSnapKeys() self.selectionCounter = SelectionCounter() #selection cmds.iconTextButton("selectionCounterButton", style='textOnly', font="smallPlainLabelFont", label='0', h=self.hb, annotation="Selected objects") cmds.popupMenu("selectionCounterButtonMenu", button=1, postMenuCommand=self.selectionCounter.populateMenu) #animation crash recovery cmds.image("animationCrashRecoveryLed", w=14, h=14, annotation="Test") #menu cmds.iconTextButton(style='iconOnly', w=self.wb, h=self.hb, image= uiMod.getImagePath("aTools"), highlightImage= uiMod.getImagePath("aTools copy"), annotation="aTools Menu") self.popUpaToolsMenu() self.update = Update() self.update.about = self.about self.update.checkUpdates(self, mainLayout) # set default config and startup scripts self.setDefaultConfig()
def errorWindow_NamingConvention(): print "Something went wrong...." for image in [IMG_NAMING_CONVENTION, IMG_FOLDERSTRUKTURE]: cmds.window(title="Read this !!!", sizeable=False) cmds.columnLayout() cmds.image(image = image) cmds.showWindow()
def UI(): #check to see if window exists if cmds.window("mkProjects", exists=True): cmds.deleteUI("mkProjects") #main window window = cmds.window("mkProjects", title="Project Quick Load", width=400, height=300, mnb=False, mxb=False, sizeable=False) #main layout mainLayout = cmds.columnLayout(width=400, height=300) #banner image imagePath = path.join(cmds.internalVar(upd=True), 'icons', 'mkProjects.jpg') #load image cmds.image(width=400, height=100, image=imagePath) cmds.separator(height=15) cmds.textField('location', width=400, editable=False, text=getDefaultProject()) #create projects option menu projectsOptionMenu = cmds.optionMenu("projectsOptionMenu", width=400, label="Choose a project: ", cc=populateScenes) #populate projects with maya default project location populateProjects() cmds.separator(height=15) rowLayout = cmds.rowLayout(nc=2) #List Control scenesList = cmds.textScrollList("scenesList", allowMultiSelection=False, width=300, dcc=loadFile) populateScenes() colLayout = cmds.columnLayout() cmds.button(label="Set Location", width=95, height=30, c=setLocation) cmds.separator(height=5) cmds.button(label="Create Project", width=95, height=30, c=cmds.ProjectWindow) cmds.separator(height=5) cmds.button(label="Open Project", width=95, height=30, c=openProject) cmds.separator(height=5) cmds.button(label="Open Scenes", width=95, height=30, c=openScenes) cmds.separator(height=5) cmds.button(label="Open Textures", width=95, height=30, c=openTextures) cmds.separator(height=5) cmds.button(label="Open Renders", width=95, height=30, c=openRenders) #open scene button cmds.separator(height=15, parent=mainLayout) cmds.button(label="Load File", width=400, height=50, parent=mainLayout, c=loadFile) #show window cmds.showWindow(window)
def HdrlsLiveUI(): if cmds.window("HdrLightStudioLive", exists=True): cmds.deleteUI("HdrLightStudioLive") window = cmds.window("HdrLightStudioLive", w=300, h=350, mnb=False, mxb=False, sizeable=False, title="HDR Light Studio 4 Live") job1 = cmds.scriptJob(uiDeleted=[window, stopLiveSession]) job2 = cmds.scriptJob(event=["quitApplication", stopLiveSession]) #gfx that we need iconsPath = cmds.internalVar(upd=True) + "icons/" imageLogo = iconsPath + "HdrlsLogo.png" #create main layout mainLayout = cmds.columnLayout(w=300, h=350, columnOffset=["both", 5]) #image logo location and image control cmds.separator(h=5) cmds.image(w=300, h=35, image=imageLogo) #renderer list cmds.separator(h=10) cmds.text(" Host Renderer") cmds.separator(h=2) exportFormatMenu = cmds.optionMenu("hostRendererMenu", w=300, changeCommand=hostRendererChanged) #text field for unavailable renderers cmds.separator(h=5) cmds.scrollField('rendererErrorText', text="Error will go here", w=300, h=70, visible=True, enable=False, ww=True) #environment hooks list cmds.separator(h=10) cmds.text(" Environment Hooks") cmds.separator(h=2) exportFormatMenu = cmds.optionMenu("envHooksMenu", w=300, changeCommand=envHookChanged) #refresh button for env hooks and sync to maya button to show in attribute editor cmds.separator(h=10) cmds.rowColumnLayout(nc=2, cw=[(1, 150), (2, 150)], columnOffset=[(1, "left", 15), (2, "right", 15)], parent=mainLayout) cmds.button(label="Refresh Env-Hooks", w=130, c=pushRefreshEnvHooks) cmds.button("syncToMaya", label="Show Hook In Maya", w=130, c=pushSyncMayaToEnvHooks) #Start/Stop Live Session cmds.separator(h=25) cmds.separator(h=25) cmds.button("initHdrls", label="Start Live", w=100, enable=True,c=pushStartLiveSession) cmds.button("exitHdrls", label="Stop Live", w=100, enable=True, c=pushExitLiveSession) cmds.separator(h=10, parent=mainLayout) #Version information cmds.text(HdrlsVersion.GetHdrlsScriptVersion(), parent=mainLayout, w=300, align="right", font="smallObliqueLabelFont") #populate initial lists populateHostRendererList() #show window cmds.showWindow(window)
def __init__(self): #liste des attributs self.listNamespace = [] self.listEmptyNamespace = [] self.listSelectedNamespace = [] #If the window already exists, erase it if cmds.window('InE_NSMWin', exists=True): cmds.deleteUI('InE_NSMWin') #Create the window #s : Can window be resized? #rtf : Resize to fit childrens? self.window = cmds.window('InE_NSMWin', title = "Namespace Manager", widthHeight=(520, 435), s = False, rtf=True) #Main layout cmds.formLayout("InE_NSMFlowLayout", p = 'InE_NSMWin', w = 50, h = 50) cmds.image(image="R:\Benoit\Scripts\maya\icons\NSMBackground.png") #Layout that draws an empty space at the top to see the beautyful flowers cmds.columnLayout('InE_NSMEmptyLayout', p = "InE_NSMFlowLayout", columnAttach=('both', 14), rowSpacing=5, columnWidth=520, cal="left" ) cmds.text(label = "", p = 'InE_NSMEmptyLayout') cmds.text(label = "", p = 'InE_NSMEmptyLayout') cmds.text(label = "", p = 'InE_NSMEmptyLayout') cmds.text(label = "", p = 'InE_NSMEmptyLayout') cmds.text(label = "", p = 'InE_NSMEmptyLayout') #Real main layout containing all the UI cmds.rowColumnLayout( 'InE_NSMMainLayout', p = "InE_NSMEmptyLayout", numberOfColumns=2, columnWidth=[(1, 300), (2, 190)], h = 330, ro = [[1, "both", 20], [2, "both", 10]], co = [[1, "both", 10], [2, "both", 0]]) cmds.treeView('InE_NSMTextScrollList', parent = "InE_NSMMainLayout", numberOfButtons = 0, h= 150, abr = False, ams = True, adr = True, arp = True, idc = self.emptyMethod, sc = self.selectNamespace ) cmds.treeView('InE_NSMTextScrollList', edit = True, enk = True) cmds.columnLayout('InE_NSMInformations', p = "InE_NSMMainLayout", columnAttach=('both', 0), cw = 250, rowSpacing=5, cal="left" , ebg = True) cmds.text(p = 'InE_NSMInformations', label = "Informations") cmds.text('InE_NSMNameInformations', p = 'InE_NSMInformations', label = "") cmds.text('InE_NSMEmptyInformations', p = 'InE_NSMInformations', label = "") cmds.columnLayout('InE_NSMModifications', p = "InE_NSMMainLayout", columnAttach=('both', 20), co = ("both", 10), cw = 250, rowSpacing=6, cal="left" , ebg = True) cmds.text(p = 'InE_NSMModifications', label = "Rename selected to: ") cmds.textField('InE_NSMNameInput', p = 'InE_NSMModifications') cmds.radioCollection('InE_NSMRadioCollection', p = 'InE_NSMModifications') cmds.radioButton('InE_NSMRadioButton1', label='and keep namespace hierarchy', select=True ) cmds.radioButton('InE_NSMRadioButton2', label='and move namespace to root' ) cmds.button('InE_NSMRenameSelected', p = 'InE_NSMModifications', label = "Rename selected", en = True, command = self.renameSelected) cmds.columnLayout('InE_NSMButtons', p = "InE_NSMMainLayout", columnAttach=('both', 20), co = ("both", 10), rowSpacing=23, cal="left" , ebg = True) cmds.button('InE_NSMRemoveSelected', p = 'InE_NSMButtons', label = "Remove selected", w = 128, en = True, command = self.removeSelected) cmds.button('InE_NSMRemoveEmpty', p = 'InE_NSMButtons', label = "Remove empty", w = 128, en = True, command = self.removeEmpty) cmds.button('InE_NSMRemoveAll', p = 'InE_NSMButtons', label = "Remove all", w = 128, en = True, command = self.removeAll) cmds.showWindow() self.updateTreeView() print self.listNamespace
def setLed(self, state): if not cmds.image("animationCrashRecoveryLed", query=True, exists=True): return self.blinkingRed(False) if state == "on": if self.saveRecommended: image = "ACR_red" ann = "Animation Crash Recovery recommends you to save" G.lastSaveWarning = time.time() if not G.lastSaveWarning else G.lastSaveWarning if time.time() - G.lastSaveWarning >= self.redBlinkingSecs: self.blinkingRed(True) else: image = "ACR_green" ann = "Animation Crash Recovery is ON" G.lastSaveWarning = None cmds.image("animationCrashRecoveryLed", edit=True, image= uiMod.getImagePath(image), ann=ann) elif state == "off": cmds.image("animationCrashRecoveryLed", edit=True, image= uiMod.getImagePath("ACR_off"), ann="Animation Crash Recovery is OFF") elif state == "blinking": self.blinkingLedState = not self.blinkingLedState image = "ACR_white_half" if self.blinkingLedState else "ACR_white_bright" cmds.image("animationCrashRecoveryLed", edit=True, image= uiMod.getImagePath(image), ann="Animation Crash Recovery is saving animation") elif state == "blinking_red": self.blinkingLedState = not self.blinkingLedState image = "ACR_red_half" if self.blinkingLedState else "ACR_red_bright" cmds.image("animationCrashRecoveryLed", edit=True, image= uiMod.getImagePath(image), ann="Animation Crash Recovery HIGHLY recommends you to save")
def __init__(self): # Collect Variables: Paths fullPath = str(cmds.file(sceneName=True, q=True)) self.rootFolder = "/".join(fullPath.split("/")[:-1]) # Collect Variables: SceneName-Parts try: sceneName = fullPath.split("/")[-1] self.assetName = sceneName.split("_")[0] self.taskName = sceneName.split("_")[1] self.artist = vuPipelineHelpers.getArtist() self.sceneType = sceneName.split(".")[-1] except: mayaUtils.errorWindow_NamingConvention() return self.version = "v" + ("000" + str(VersionControl.getLatest(self.rootFolder, up=1, getNum=True)))[-3:] self.window = cmds.window("klPipeline_SaveIncr", title="Krotenlied-Pipeline: SaveScene+1", sizeable=False) # Header cmds.columnLayout(parent=self.window) cmds.image(image = HEADER_PATH) cmds.separator(h=5, vis=True, st='none') cmds.rowColumnLayout(parent=self.window, numberOfColumns=6) # Labels cmds.text( al="left", w=75, label='Name') cmds.text( al="left", w=50, label='Task') cmds.text( al="left", w=50, label='Version' ) cmds.text( al="left", w=40, label='Artist') cmds.text( al="left", w=200, label='Comment') cmds.text( al="left", w=25, label='') # TextFields cmds.textField(ed=False, w=75, tx=self.assetName) cmds.textField(ed=False, w=50, tx=self.taskName) cmds.textField(ed=False, w=50, tx=self.version) cmds.textField(ed=False, w=40, tx=self.artist) self.textComment = cmds.textField(w=200, enterCommand=self.btnSave) cmds.textField(ed=False, w=25, tx="." + self.sceneType) # Button cmds.rowColumnLayout(parent=self.window, numberOfColumns=2) cmds.separator(w=300, h=20, vis=True, st='none') cmds.separator(st='none') cmds.separator(st='none') cmds.button(h=30, w=100, label='Save+1', command=self.btnSave) cmds.showWindow() cmds.setFocus(self.textComment)
def imageViewer(self): """ Click thumbnail to see enlarged image """ selectedImage=os.path.join(cmds.textField('location',q=True,tx=True),cmds.textScrollList('fileLister',q=True, si=True)[0]).split(" > ")[0] for each in ["jpg","png",'tif',"iff"]: if selectedImage.endswith(each): window = cmds.window(t="Image Viewer") cmds.paneLayout() cmds.image( image=selectedImage) cmds.showWindow( window )
def previewCharacter(self, x=None) : ''' TODO: Stub ''' self.mocapTable.clearSelection() self.loadButton.setText("Load Template") return print "Preview Character: " + str(x) item = self.getSelectedCharacter() if item is None : return loadThumb = "%s/character/%s/thumb/%s" % (self.pathPrefix, item.group['title'], item.thumb) tempThumb = self.cache.cacheFile(loadThumb) m.image("peelMocap_image", e=True, i=tempThumb) m.image("peelMocap_image", e=True, vis=True)
def _updateCommand(self): items = self.ui_listwidget.selectedItems() self.ui_textedit.setText('') cmds.image('MMtoKeyPyIconWidget', e=True, vis=False) self.ui_textedit.setEnabled(False) self.ui_button.setEnabled(False) if items: self.ui_combobox.setCurrentIndex(items[0].getLanguage()) if len(items) == 1: self.ui_textedit.setText(items[0].getCommand()) cmds.image('MMtoKeyPyIconWidget', e=True, vis=True, i=items[0].ICON) self.ui_textedit.setEnabled(True) self.ui_button.setEnabled(True)
def findCharacterThumbnail(self): project = cmds.optionMenu(self.widgets["project"], q=True, value=True) selectedCharacter = cmds.textScrollList(self.widgets["characterList"], q=True, si=True)[0] thumbnailPath = os.path.join(self.mayaToolsDir, "General", "Icons", "ART", "Thumbnails", project) try: thumbnails = os.listdir(thumbnailPath) for thumb in thumbnails: if thumb.find("_small") == -1: if thumb.find(selectedCharacter) == 0: cmds.image(self.widgets["thumbnail"], edit=True, image=os.path.join(thumbnailPath, thumb)) except: cmds.confirmDialog(icon="critical", title="Error", message="No thumbnail found for character") return
def createGUI(): ''' Creates a user interface for the city generator script. On exit: A window with the user interface has been created. ''' GUIwindow = cmds.window( title = "City Generator") layout0 = cmds.columnLayout() imageNum = random.randint(1,19) cmds.image("cityImage", image="cityImages/dayImage" + str(imageNum) + ".jpg", width = 800, height = 288 ) layout1 = cmds.rowLayout(nc = 2, parent = layout0) layout2 = cmds.columnLayout(parent = layout1, rs = 3) cmds.rowLayout(nc = 2, parent = layout2, cw2 = [140,250]) cmds.text(label = "City name") cmds.textField("cityName", width = 240) cmds.intSliderGrp("cityWidth", field=True, label="City width", minValue=50, maxValue=200, fieldMinValue=50, fieldMaxValue=200, value=100, cal = [1,"left"],parent = layout2) cmds.intSliderGrp("cityDepth", field=True, label="City depth", minValue=50, maxValue=200, fieldMinValue=50, fieldMaxValue=200, value=100, cal = [1,"left"],parent = layout2) cmds.intSliderGrp("minHeight", field=True, label="Minimum house height", minValue=4, maxValue=40, fieldMinValue=4, fieldMaxValue=40, value=4, cal = [1,"left"],parent = layout2, dc = changeMaxHeight) cmds.intSliderGrp("maxHeight", field=True, label="Maximum house height", minValue=4, maxValue=40, fieldMinValue=4, fieldMaxValue=40, value=30, cal = [1,"left"],parent = layout2, dc = changeMinHeight) cmds.intSliderGrp("minWidth", field=True, label="Minimum house width", minValue=2, maxValue=20, fieldMinValue=2, fieldMaxValue=20, value=5, cal = [1,"left"],parent = layout2, dc = changeMaxWidth) cmds.intSliderGrp("maxWidth", field=True, label="Maximum house width", minValue=12, maxValue=30, fieldMinValue=12, fieldMaxValue=30, value=20, cal = [1,"left"],parent = layout2, dc = changeMinWidth) cmds.checkBoxGrp("features", numberOfCheckBoxes=3, label1="Windows", label2 = "Booleans", label3="Deformers", v1=True, v2 = False, v3 = True, cc1 = windows, cc2 = booleans, cal = [1,"left"],parent = layout2,cw = [1,140]) cmds.checkBoxGrp("time", numberOfCheckBoxes=3, label1="Daytime", label2="Nighttime", label3 = "All windows glow", v1=True, v2 = False, v3 = False, enable3 = False, cal = [1,"left"], parent = layout2,cw = [1,140], cc1 = daytime, cc2 = nighttime ) cmds.colorSliderGrp("environment", label="Environment colour", hsv=(204, 0.451, 1), parent = layout2, cal = [1,"left"] ) layout3 = cmds.columnLayout(parent = layout1) cmds.text("Set the colour range for the houses by selecting the ranges separately for hue,\nsaturation and value.", align = "left") cmds.text("\nStart of range:", align = "left") cmds.rowLayout( numberOfColumns=2, parent = layout3, cw2 = [70,200]) cmds.canvas("hueCanvas1", hsvValue=(0, 1, 1), width=70, height=15) cmds.intSliderGrp("hue1", field=True, label="Hue", minValue=0, maxValue=360, fieldMinValue=0, fieldMaxValue=360, value=0,cw3 = [70,70,170], dc = hueChange1 ) cmds.rowLayout( numberOfColumns=2, parent = layout3, cw2 = [70,200]) cmds.canvas("saturationCanvas1", hsvValue=(0, 1, 1), width=70, height=15) cmds.floatSliderGrp("saturation1", field=True, label="Saturation", minValue=0, maxValue=1, fieldMinValue=0, fieldMaxValue=1, value=1,cw3 = [70,70,170], dc = saturationChange1, step = 0.01) cmds.rowLayout( numberOfColumns=2, parent = layout3, cw2 = [70,200]) cmds.canvas("valueCanvas1", hsvValue=(0, 1, 1), width=70, height=15) cmds.floatSliderGrp("value1", field=True, label="Value", minValue=0, maxValue=1, fieldMinValue=0, fieldMaxValue=1, value=1,cw3 = [70,70,170], dc = valueChange1, step = 0.01) cmds.text("End of range:", align = "left", parent = layout3) cmds.rowLayout( numberOfColumns=2, parent = layout3, cw2 = [70,200]) cmds.canvas("hueCanvas2", hsvValue=(0, 1, 1), width=70, height=15) cmds.intSliderGrp("hue2", field=True, label="Hue", minValue=0, maxValue=360, fieldMinValue=0, fieldMaxValue=360, value=0,cw3 = [70,70,170], dc = hueChange2 ) cmds.rowLayout( numberOfColumns=2, parent = layout3, cw2 = [70,200]) cmds.canvas("saturationCanvas2", hsvValue=(0, 1, 1), width=70, height=15) cmds.floatSliderGrp("saturation2", field=True, label="Saturation", minValue=0, maxValue=1, fieldMinValue=0, fieldMaxValue=1, value=1,cw3 = [70,70,170], dc = saturationChange2, step = 0.01) cmds.rowLayout( numberOfColumns=2, parent = layout3, cw2 = [70,200]) cmds.canvas("valueCanvas2", hsvValue=(0, 1, 1), width=70, height=15) cmds.floatSliderGrp("value2", field=True, label="Value", minValue=0, maxValue=1, fieldMinValue=0, fieldMaxValue=1, value=1,cw3 = [70,70,170], dc = valueChange2, step = 0.01) cmds.button(label = "Randomize", command = randomize, parent = layout3) layout4 = cmds.rowLayout(numberOfColumns=2, parent = layout0, cw2 = [690,110]) cmds.button(label="Generate City", command = defaultButtonPush, parent = layout4, w = 685, h = 50) cmds.button(label="Clear Scene", command = clearScene, parent = layout4, w = 110, h = 50) cmds.showWindow()
def UI(): rlmAttrs() images=os.path.join(mc.workspace(q=1,rd=1),"images",mc.getAttr("renderLayerManager.shotName")) if (mc.window('rcFileManage',exists=True)): mc.deleteUI('rcFileManage') mc.window('rcFileManage', mxb=0,title=' ',tlb=False,) ###Main mc.columnLayout('renderLayers2Files')#,bgc=[0.2,0.2,0.2] mc.image(image=iconPath+'toptitle.png') mc.cmdScrollFieldReporter(clr=1,hf=0,w=700,h=80,bgc=[0,0,0]) print '//rc.Tools' mc.setParent('..') mc.rowColumnLayout(numberOfColumns=3,columnWidth=[(1,row1),(2,row2),(3,480)]) mc.text(al='right',font=ui.titleFont,label=' Image Prefix: ') mc.menuBarLayout() mc.menu(label='Shot Name/') mc.menuItem(label='<RenderLayer>/<RenderLayer>',c=partial(runMethod,'set.imagePrefix','("S__L__L")')) mc.menuItem(label='<RenderLayer>/<RenderLayer>.<RenderPass>',c=partial(runMethod,'set.imagePrefix','("S__L__L.P")')) mc.menuItem(label='<RenderLayer>/<RenderPass>/<RenderLayer>.<RenderPass>',c=partial(runMethod,'set.imagePrefix','("S__L__P__L.P")')) mc.menu(label='...') mc.menuItem(label='<RenderLayer>/<RenderLayer>',c=partial(runMethod,'set.imagePrefix','("L__L")')) mc.menuItem(label='<RenderLayer>/<RenderLayer>.<RenderPass>',c=partial(runMethod,'set.imagePrefix','("L__L.P")')) mc.menuItem(label='<RenderLayer>/<RenderPass>/<RenderLayer>.<RenderPass>',c=partial(runMethod,'set.imagePrefix','("L__P__L.P")')) mc.setParent('..') mc.textField('imageFilePrefix',font=ui.fieldFont,en=1,text=mc.getAttr('defaultRenderGlobals.imageFilePrefix')) mc.setParent('..') mc.setParent('..') ###ListsUI mc.rowColumnLayout('listLayout',numberOfColumns=3,columnWidth=[(1,102),(2,browselistWidth), (3, targetlistWidth)])#LISTS LAYOUT mc.columnLayout() mc.separator(h=10,style='in') mc.rowColumnLayout(numberOfColumns=2) mc.text('UNITS: ',align='right',fn='tinyBoldLabelFont') mc.text(str(mc.currentUnit(query=True)),align='left',fn='tinyBoldLabelFont') mc.text('FPS: ',align='right',fn='tinyBoldLabelFont') mc.text(str(sceneData.fps()),align='left',fn='tinyBoldLabelFont') mc.text('RENDER: ',align='left',fn='tinyBoldLabelFont') mc.text(str(mc.getAttr('defaultResolution.width'))+'x'+str(mc.getAttr('defaultResolution.height')),align='left',fn='tinyBoldLabelFont') mc.setParent('..') mc.setParent('listLayout') bldBrowseList() mc.setParent('listLayout') bldTargetList('browser') mc.setParent('listLayout') mc.showWindow()
def __init__(self): # Settings: bgColor = [0.5, 0.5, 0.5] headerPath = "//bigfoot/kroetenlied/060_Software/Kroetenlied_Pipeline/vuMayaPlugins/scripts/saveIncr.jpg" # Collect Variables fullName = cmds.file(sceneName=True, q=True) paths = fullName.split("/") assetCode = paths[-2].split("_")[1] self.rootFolder = "/".join(paths[:-1]) self.taskName = paths[-2].split("_")[2] self.assetName = Assets.getFullName(assetCode) self.artist = getpass.getuser()[:2] self.version = "v" + ("000" + str(VersionControl.getLatest(self.rootFolder, up=1, getNum=True)))[-3:] self.window = cmds.window(title="Krotenlied-Pipeline: SaveScene+1") # Header cmds.columnLayout(parent=self.window) cmds.image(image = headerPath) cmds.separator(h=5, vis=True, st='none') cmds.rowColumnLayout(parent=self.window, numberOfColumns=6) # Labels cmds.text( al="left", w=75, label='Name') cmds.text( al="left", w=50, label='Task') cmds.text( al="left", w=50, label='Version' ) cmds.text( al="left", w=50, label='Artist') cmds.text( al="left", w=200, label='Comment') cmds.text( al="left", w=25, label='') # TextFields cmds.textField(ed=False, w=75, tx=self.assetName) cmds.textField(ed=False, w=50, tx=self.taskName) cmds.textField(ed=False, w=50, tx=self.version) cmds.textField(ed=False, w=50, tx=self.artist) self.textComment = cmds.textField(w=200) cmds.textField(ed=False, w=25, tx=".ma") # Button cmds.rowColumnLayout(parent=self.window, numberOfColumns=2) cmds.separator(w=300, h=20, vis=True, st='none') cmds.separator(st='none') cmds.separator(st='none') cmds.button(h=30, w=100, label='Save+1', command=self.btnSave) cmds.showWindow()
def fillModuleList( self, *args ): from marigold.utility.NodeUtility import getMetaNodesInScene from marigold.utility.FrameUtility import getFrameBitSettings # Clean up UI elements for refreshing the list. lChildren = cmds.scrollLayout( self.moduleList, query=True, childArray=True ) if lChildren is not None: for c in lChildren: cmds.deleteUI( c ) #self.aRows = [] # Build module list for ui. moduleList = getMetaNodesInScene( 'frameModule' ) print moduleList previousColor = 2 warningPip = False for i, module in enumerate( moduleList ): print i, module # Get the required plug data. moduleData = {} nodeAttrs = getFrameBitSettings( module ) moduleData['priority'] = nodeAttrs['buildPriority'] moduleData['frameName'] = module moduleData['modFolder'] = nodeAttrs['buildFolder'] moduleData['modFile'] = nodeAttrs['metaClass'] # Set the row color. color = 1 if previousColor is 1: color = 2 previousColor = 2 else: color = 1 previousColor = 1 # Make the row. self.modListColumn = cmds.rowColumnLayout( parent=self.moduleList, numberOfColumns=6, columnWidth=[(1,26),(2,30),(3,90),(4,50),(5,50),(6,20)], columnSpacing=[(1,2),(2,2),(3,2),(4,2),(5,2),(6,2)], backgroundColor=self.rowColors[color-1] ) cmds.intField( editable=False, value=moduleData['priority'] ) cmds.image( image='icon_warning_pip.png', visible=warningPip ) cmds.text( label=moduleData['frameName'] ) cmds.button( label='options' ) cmds.button( label='build', command=lambda v, a1=moduleData['modFolder'], a2=moduleData['modFile']: buttonBuildTemp( v, a1, a2 ) ) cmds.checkBox( label='' ) cmds.setParent( '..' )#self.modListColumn
def loadWindow(): mayaFileName = infoData["mayaFileName"] message = "%s\n%s\n\nWarning: Loading crash files after editing your Maya file can lead to unpredictable results."%(mayaFileName, time.ctime(modDate)) formLayout = cmds.setParent(query=True) icon = cmds.image(image= uiMod.getImagePath("ACR_white_bright")) titleText = cmds.text(label="Do you want to load?", font="boldLabelFont", align="left") messageText = cmds.text(label=message, align="left") buttonLoad = cmds.button(label='Load', command='cmds.layoutDialog(dismiss="load")') buttonLoadSel = cmds.button(label='Load On Selection', command='cmds.layoutDialog(dismiss="load_selection")', w=110) cmds.formLayout (formLayout, edit=True, width=300, height=170, attachPosition = [ (icon, 'left', 10, 0), (icon, 'top', 10, 0), (titleText, 'top', 10, 0), (messageText, 'left', 10, 0), (messageText, 'top', 0, 30), (buttonLoad, 'left', 10, 0), (buttonLoad, 'bottom', 10, 100), (buttonLoadSel, 'bottom', 10, 100) ], attachForm = [ (buttonLoad, 'left', 10), (buttonLoadSel, 'right', 10) ], attachControl = [ (titleText, 'left', 10, icon), (buttonLoad, 'right', 5, buttonLoadSel) ])
def warningWindow(): formLayout = cmds.setParent(query=True) icon = cmds.image(image= uiMod.getImagePath("ACR_white_bright")) titleText = cmds.text(label="You have newer animation. Do you want to load?", font="boldLabelFont", align="left") messageText = cmds.text(label=message, align="left") buttonLoad = cmds.button(label='Load', command='cmds.layoutDialog(dismiss="load")') buttonMaybe = cmds.button(label='Maybe Later', command='cmds.layoutDialog(dismiss="maybe")', w=100) cmds.formLayout (formLayout, edit=True, width=300, height=height, attachPosition = [ (icon, 'left', 10, 0), (icon, 'top', 10, 0), (titleText, 'top', 10, 0), (messageText, 'left', 10, 0), (messageText, 'top', 0, 30), (buttonLoad, 'left', 10, 0), (buttonLoad, 'bottom', 10, 100), (buttonMaybe, 'bottom', 10, 100) ], attachForm = [ (buttonLoad, 'left', 10), (buttonMaybe, 'right', 10) ], attachControl = [ (titleText, 'left', 10, icon), (buttonLoad, 'right', 5, buttonMaybe) ])
def UI(): # kill all jobs cmds.scriptJob( ka=True, force=True) # check to see if our window exists if cmds.window("ExampleUI", exists = True): cmds.deleteUI("ExampleUI") # create our window window = cmds.window("ExampleUI", title = "Example UI", w = 300, h = 300, mnb = False, mxb = False, sizeable = False) # create main layout mainLayout = cmds.columnLayout(w = 300, h = 300) # banner image imagePath = cmds.internalVar(upd = True) + "icons/rc.jpg" cmds.image(w = 300, h = 100, image = imagePath) # create projects option menu cmds.separator(h = 15) projectsOptionsMenu = cmds.optionMenu(w = 300, label = "Choose a Project: ") # create character option menu cmds.separator(h = 15) characterOptionMenu = cmds.optionMenu(w = 300, label = "Choose a Character: ") # create the build button cmds.separator(h = 15) cmds.button(label = "X", w = 300, h = 30, c = partial(flatten,"x")) cmds.button(label = "Y", w = 300, h = 30, c = partial(flatten,"y")) cmds.button(label = "Z", w = 300, h = 30, c = partial(flatten,"z")) cmds.button(label = "Merge into last", w = 300, h = 30, c = combineto) cmds.button(label = "Locator at location", w = 300, h = 30, c = locatorSpaced) cmds.separator(h = 15) textField = cmds.textField('textField', text = "Nothing selected") # show our window cmds.showWindow(window) # kill all jobs cmds.scriptJob( ka=True, force=True) # call function on selection change cmds.scriptJob(kws=True, event=("SelectionChanged",changedSelection))
def UI(): # close window if exists if cmds.window('wf_exporter', exists=True): cmds.deleteUI('wf_exporter') # create window window = cmds.window('wf_exporter', title='Worldforge Exporter', w=200, h=500, mnb= False, mxb=False, sizeable=False) main_layout = cmds.columnLayout(w=100, h=300) #header image path img_path = cmds.internalVar(upd=True)+ 'icons/wf_header.jpg' cmds.image(w=215, h=52, image = img_path) #cmds.window('wf_exporter45', title='Worldforge Exporter', w=200, h=200, mnb= False, mxb=False, sizeable=True) cmds.frameLayout(label="Utilities", collapsable=True, collapse=False) cmds.rowLayout(numberOfColumns=2, columnWidth2=(102, 105), adjustableColumn1=True, columnAttach=[(1, 'both', 0), (2, 'both', 0), (3, 'both', 0)] ) cmds.button(label="Add Mat Attrs", command=add_wf_mat_name_attr) cmds.button(label='Re-Path Textures', command=repath_scene_textures) cmds.setParent( '..' ) cmds.separator(h=5) # rename materials section cmds.columnLayout( columnAttach=('both', 5), rowSpacing=10, columnWidth=200 ) cmds.button( label='Re-Name Materials',w=199, command=rename_materials) cmds.setParent( '..' ) # rename objects section cmds.columnLayout( columnAttach=('both', 5), rowSpacing=10, columnWidth=200 ) cmds.textField('txt_input', w=199) cmds.button( label='Re-Name Selected',w=199, command=rename_objects) cmds.setParent( '..' ) cmds.frameLayout(label="Exporter", collapsable=True, collapse=False) cmds.separator(h=5) cmds.columnLayout( columnAttach=('both', 5), rowSpacing=10, adjustableColumn=True ) cmds.button(label="Export Static", width=199, h=50, command=export_static_ogre) cmds.button(label="Export Animated", width=199, h=50, enable=False) cmds.setParent( '..' ) cmds.showWindow()
def CreateUI(self): #Deletes the buffer separator try:cmds.deleteUI("BufferTT") except:pass #Create Previews if not os.path.exists(self.Snap): ScreenCapture.ScreenCapture( self.Snap, [309,160]) #Create a TextLabel for the turntable cmds.text(self.LabelText, p = "TurnTableLayout", label = "Turntable " + str( self.CurrentIndex ), bgc = [0.361, 0.361, 0.361] , w = 309, h = 20, font = "boldLabelFont") #Create preview image on window cmds.image(self.Image, image = self.Snap, p = "TurnTableLayout") cmds.button(self.Switch, c = self.SwitchTT, bgc = [0.361, 0.361, 0.361], label = "Included in next rendering", p = "TurnTableLayout") cmds.text(self.RangeText, w = 309, p = "TurnTableLayout", label = "From frame To frame ") cmds.rowLayout( self.RangeLayout, w = 309, numberOfColumns = 2, p = "TurnTableLayout") cmds.intField( self.MinField, w = 154, min = 0, max = 35, v = cmds.getAttr(self.Camera + ".StartRange") , p = self.RangeLayout, cc = self.Range ) cmds.intField( self.MaxField, w = 154, min = 0, max = 35, v = cmds.getAttr(self.Camera + ".StopRange"), p = self.RangeLayout, cc = self.Range) cmds.separator( self.Separator, w = 309, h = 10, p = "TurnTableLayout") #Create popupMenu for images cmds.popupMenu( self.PopUp, parent = self.Image ) cmds.menuItem( label = 'Edit Current Camera', p = self.PopUp, c = self.ChangePersp ) cmds.menuItem( label = 'Delete Camera' , p = self.PopUp, c = self.deleteTurntable ) cmds.menuItem( label='Copy Camera Information', p = self.PopUp, c = self.CopyCameraInfo ) cmds.menuItem( divider = True, p = self.PopUp) cmds.menuItem( divider = True, p = self.PopUp) cmds.menuItem( label='Delete all turntables', p = self.PopUp, c = TurntableClass.DeleteAllSnapshots ) #Update the counter if len(TurntableClass.Turntables) > 0: cmds.text("TurntableCounter", edit = True, label = "Turntable Count = " + str(len(TurntableClass.Turntables)), bgc = [0, 0.361, 0]) else: cmds.text("TurntableCounter", edit = True, label = "Turntable Count = " + str(len(TurntableClass.Turntables)) + ", Min required is 1", bgc = [0.361, 0, 0]) #Update the buffer separator if len(TurntableClass.Turntables) == 1: cmds.separator("BufferTT", h = 400, p = "TurnTableLayout", style = "none") elif len(TurntableClass.Turntables) == 2: cmds.separator("BufferTT", h = 200, p = "TurnTableLayout", style = "none") else: cmds.separator("BufferTT", h = 10 , p = "TurnTableLayout", style = "none")
def UI(): # Check to see if the window exists if cmds.window("testUI", exists=True): cmds.deleteUI("testUI") # Create a window windowA = cmds.window("testUI", title="ExampleUI", w=300, h=300, mnb=False, mxb=False, sizeable=False) # Create a main layout mainLayout = cmds.columnLayout(w=300, h=300) # Banner Image #imagePath = cmds.internalVar imagePath = "C:/Users/rgriffin/Google Drive/RG_ARTTOOLS/learnPython/exbanner.png" cmds.image(h=300, w=300, image=imagePath) # Show window cmds.showWindow(windowA)
def RefreshImage( self ): cmds.undoInfo(openChunk = True) cmds.hudButton("SnapButton", edit = True, label = "Create Turntable", rc = TurntableClass.CreateTurntable) #If the active cam is not the current cam exit the function if self.GetActiveCamera() != self.Camera + "Shape": return 0 #remove the old image os.remove( self.Snap) #Create new Preview ScreenCapture.ScreenCapture( self.Snap, [309,160] ) #Create preview image on window cmds.image( self.Image, edit = True, image = self.Snap ) TurntableClass.SetActiveCamera("persp") cmds.undoInfo(closeChunk = True)
def initDimensions(self): # Creating a temp window. # This window will never be shown. filePath = os.path.join( self.path, self.iconName ) win = cmds.window() cmds.columnLayout() if( self.iconType == "xpm" ): # Create a picture pic = cmds.picture( i=filePath ) self.width = cmds.picture( pic, q=True, w=True) self.height = cmds.picture( pic, q=True, h=True) else: # Create a image pic = cmds.image( i=filePath ) self.width = cmds.image( pic, q=True, w=True) self.height = cmds.image( pic, q=True, h=True) print( "Icon Width: %s, Height: %s" %(self.width, self.height)) cmds.deleteUI(win)
def _selectMarkingMenu(self): fileread = cmds.fileDialog2(fm=1, ff='menu_*.mel', dir=cmds.internalVar(umm=True), cap='open Marking Menu')[0] self.ui_listwidget.clear() self.ui_listwidget.setCurrentRow(-1) self.ui_textedit.setText('') self.ui_button.setEnabled(False) cmds.image('MMtoKeyPyIconWidget', e=True, vis=False) self.fileread = fileread with open(self.fileread, 'r') as filelink: self.textblock = filelink.readlines() i = 0 while i < len(self.textblock): if 'menuItem' in self.textblock[i]: element = MenuItem(self.textblock) i = element.lookThrow(i + 1) if not element.NOT_INCLUDE and element.LABEL: self.ui_listwidget.addItem(element) else: i += 1
def __init__(self): nameSpaces = cmds.namespaceInfo(lon=True) self.Characters = [] for nameSpace in nameSpaces: assetName = nameSpace.split("_")[0] if assetName in klAssetNames.AssetNames: self.Characters.append(assetName) self.window = cmds.window( title="Krotenlied-Pipeline: Alembic Export", sizeable = False, minimizeButton = False, maximizeButton = False) # Header cmds.columnLayout(parent=self.window) cmds.image(image = HEADER_PATH) cmds.separator(h=5, vis=True, st='none') mainLayout = cmds.rowColumnLayout(parent=self.window, numberOfColumns=1) # Check Boxes cmds.frameLayout("Characters", collapsable=False, w=198, p=mainLayout) cmds.rowColumnLayout(numberOfColumns=2) self.checkBoxes = [] for char in self.Characters: cmds.separator(w=40, st=None, vis=True) checkBox = cmds.checkBox(label=char, changeCommand=self.checkCheckBoxes, value=True) self.checkBoxes.append(checkBox) # Button cmds.separator(h=20, vis=True, st='none', p=mainLayout) self.buttonExport = cmds.button(h=30, w=100, label="Export Selected", command=self.btnExport, p=mainLayout) self.checkCheckBoxes() cmds.showWindow()
def createUI(): ''' Function to generate the user interface. ''' windowID = "GUI" if mc.window(windowID, exists=True): mc.deleteUI(windowID) winControl = mc.window(windowID, title='Growth Control', w=100) mc.columnLayout(columnAttach=('both', 5), rowSpacing=7, columnWidth=10, adjustableColumn=True) mc.rowLayout(nc=3, cat=[(1, 'both', 1), (2, 'both', 10), (3, 'both', 1)], adjustableColumn=2) mc.separator() scriptPath = os.environ['MAYA_SCRIPT_PATH'].split(";")[0] mc.image(image=scriptPath + '/thumbnail.png', h=150) mc.separator() mc.setParent('..') mc.separator() mc.text(label="Submeshes Names") submeshNamesCtrl = mc.scrollField(editable=True, wordWrap=True, text="MeshName", h=100) mc.separator(style='in') mc.text(label="Distribution Type") alignmentTypeCtrl = mc.radioCollection() mc.rowLayout(nc=3, cat=[(1, 'both', 10), (2, 'both', 10), (3, 'both', 10)]) randomCtrl = mc.radioButton(label='Random', align='center', sl=True, ann='random') alignedCtrl = mc.radioButton(label='Aligned', align='center') evenCtrl = mc.radioButton(label='Evenly Spaced', align='center') mc.setParent('..') mc.separator(style='in') mc.rowLayout(nc=3, cat=[(1, 'both', 1), (2, 'both', 10), (3, 'both', 1)]) mc.separator() randRotCtrl = mc.checkBox(l='Random Yaw Rotation', v=True) mc.separator() mc.setParent('..') mc.separator(style='in') mc.rowLayout(nc=2, cat=[(1, 'left', 5), (2, 'both', 5)], adjustableColumn=2) numberText = mc.text("Number of instances") numberCtrl = mc.intField(v=100, w=1) mc.setParent('..') mc.separator(style='in') mc.rowLayout(nc=2, cat=[(1, 'left', 5), (2, 'both', 5)], adjustableColumn=2) widthText = mc.text("Instances along X-axis", enable=False) widthCtrl = mc.intField(v=20, w=1, min=1, max=100, step=1, enable=False) mc.setParent('..') mc.rowLayout(nc=2, cat=[(1, 'left', 5), (2, 'both', 5)], adjustableColumn=2) heightText = mc.text("Instances along Y-axis", enable=False) heightCtrl = mc.intField(v=20, w=1, min=1, max=100, step=1, enable=False) mc.setParent('..') mc.rowLayout(nc=2, cat=[(1, 'left', 5), (2, 'both', 5)], adjustableColumn=2) depthText = mc.text("Instances along Z-axis", enable=False) depthCtrl = mc.intField(v=20, w=1, min=1, max=100, step=1, enable=False) mc.setParent('..') mc.separator(style='in') mc.rowLayout(nc=3, cat=[(1, 'both', 1), (2, 'both', 10), (3, 'both', 1)], adjustableColumn=2) mc.separator() animatedCtrl = mc.checkBox(l='Animated Base Mesh', v=False) mc.separator() mc.setParent('..') mc.separator(style='in') mc.text(label="Growth Animation Type") mc.radioCollection() mc.rowLayout(nc=3, cat=[(1, 'both', 10), (2, 'both', 10), (3, 'both', 10)], adjustableColumn=1) uniformCtrl = mc.radioButton(label='Uniform', align='center') useSphereCtrl = mc.radioButton(label='Sphere Mask', align='center', sl=True) alongSurfaceCtrl = mc.radioButton(label='Along surface', align='center') mc.setParent('..') influenceTextCtrl = mc.text(label='Growth Influence Type') mc.radioCollection() mc.rowLayout(nc=2, cat=[(1, 'left', 10), (2, 'left', 10)]) insideCtrl = mc.radioButton(label='Inside Sphere', align='center', sl=True) outsideCtrl = mc.radioButton(label='Outside Sphere', align='center') mc.setParent('..') mc.rowLayout(nc=2, cat=[(1, 'left', 5), (2, 'both', 5)], adjustableColumn=2) speedTextCtrl = mc.text(label='Submesh growth speed', vis=False) speedCtrl = mc.floatField(v=4, vis=False) mc.setParent('..') mc.separator(style='in') mc.rowLayout(nc=5, adjustableColumn5=3, cat=[(1, 'left', 1), (2, 'left', 2), (3, 'both', 5), (4, 'right', 2), (5, 'right', 1)]) mc.text(label="Start Frame") startFrameCtrl = mc.intField(w=60, v=1) mc.separator(w=5) mc.text(label="End Frame") endFrameCtrl = mc.intField(w=60, v=50) mc.setParent('..') mc.separator(style='in') mc.radioButton(randomCtrl, e=True, cc=ft.partial(switchRandomAlignmentSettings, numberText, numberCtrl)) mc.radioButton(alignedCtrl, e=True, cc=ft.partial(switchAlignedAlignmentSettings, widthText, widthCtrl, heightText, heightCtrl, depthText, depthCtrl)) mc.radioButton(evenCtrl, e=True, cc=ft.partial(switchRandomAlignmentSettings, numberText, numberCtrl)) mc.radioButton(uniformCtrl, e=True, cc=ft.partial(switchInfluenceTypeSettings, influenceTextCtrl, insideCtrl, outsideCtrl)) mc.radioButton(useSphereCtrl, e=True, cc=ft.partial(changeInfluenceTypeLabels, insideCtrl, outsideCtrl, 'Inside Sphere', 'Outside Sphere')) mc.radioButton(alongSurfaceCtrl, e=True, cc=ft.partial(changeInfluenceTypeLabelsForAlongSurface, insideCtrl, outsideCtrl, 'Inwards Towards Sphere', 'Outwards From Sphere', speedTextCtrl, speedCtrl)) mc.button(label="Generate, populate and animate!", command=ft.partial(populateGenerateAnimate, alignmentTypeCtrl, randomCtrl, alignedCtrl, evenCtrl, submeshNamesCtrl, useSphereCtrl, alongSurfaceCtrl, insideCtrl, startFrameCtrl, endFrameCtrl, numberCtrl, widthCtrl, heightCtrl, depthCtrl, animatedCtrl, speedCtrl, randRotCtrl)) mc.separator(style='in') mc.showWindow(winControl)
def build_gui_sphere_type(): ''' Builds the UI for GT Sphere Types ''' if cmds.window("build_gui_sphere_type", exists=True): cmds.deleteUI("build_gui_sphere_type") # main dialog Start Here ================================================================================= build_gui_sphere_type = cmds.window("build_gui_sphere_type", title='Sphere Types - (v' + script_version + ')',\ titleBar=True,minimizeButton=False,maximizeButton=False, sizeable =True) cmds.window(build_gui_sphere_type, e=True, s=True, wh=[1, 1]) content_main = cmds.columnLayout(adj=True) # Generate Header Image icons_folder_dir = cmds.internalVar(userBitmapsDir=True) header_img = icons_folder_dir + 'gt_m1_sphere_types.png' if os.path.isdir(icons_folder_dir) and os.path.exists(header_img) == False: image_enconded = 'iVBORw0KGgoAAAANSUhEUgAAAMgAAAA/CAYAAAClz4c/AAAACXBIWXMAAFxGAABcRgEUlENBAAAF8WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTExLTA0VDE2OjEzOjMyLTA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTExLTA0VDE2OjEzOjMyLTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0xMS0wNFQxNjoxMzozMi0wODowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkODMyNzVmNi1mMTAwLTliNGMtOGMzYy1iOTJjYmJmN2I2ZDgiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoyZDQ3MjNjNS0yMDM5LTUzNDgtYTRlYi02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' #image_64_decode = base64.decodestring(image_enconded) image_64_decode = base64.b64decode(image_enconded) image_result = open(header_img, 'wb') image_result.write(image_64_decode) image_result.close() cmds.rowColumnLayout(numberOfColumns=1, columnWidth=[(1, 200), (2, 100), (3, 10)], cs=[(1, 10), (2, 5), (3, 5)]) cmds.image(image=header_img) cmds.text("Sphere Options:") cmds.separator(h=5, p=content_main, st="none") cmds.rowColumnLayout(p=content_main, numberOfColumns=3, columnWidth=[(1, 100), (2, 100), (3, 10)], cs=[(1, 10), (2, 5), (3, 5)]) cmds.separator(h=3, p=content_main, st="none") cmds.button(l="Standard Sphere", c=lambda x: create_standard_sphere(), w=100) cmds.button(l="Platonic Sphere A", c=lambda x: create_platonic_sphere_a()) #cmds.separator(h=10, st="none" ) cmds.rowColumnLayout(p=content_main, numberOfColumns=2, columnWidth=[(1, 100), (2, 100), (3, 10)], cs=[(1, 10), (2, 5), (3, 5)]) cmds.button(l="Cube Sphere", c=lambda x: create_cube_sphere(), w=100) cmds.button(l="Platonic Sphere B", c=lambda x: create_platonic_sphere_b()) cmds.separator(h=10, st="none") # Show and Lock Window cmds.showWindow(build_gui_sphere_type) cmds.window(build_gui_sphere_type, e=True, s=False) # Set Window Icon qw = omui.MQtUtil.findWindow(build_gui_sphere_type) if python_version == 3: widget = wrapInstance(int(qw), QWidget) else: widget = wrapInstance(long(qw), QWidget) icon = QIcon(':/lambert.svg') widget.setWindowIcon(icon)
def UI(): #function attributes that will be used for getting final settings from the UI UI.targetPrim = 'Cube' UI.population = 0 UI.resolution = 256 #default radius/size UI.targetPrimSize = 2 #target color UI.targetR = 1 UI.targetG = 1 UI.targetB = 1 #target rotation UI.targetOrientation = (0, 0, 0) UI.randomOrientation = False #target in middle/random UI.targetMiddle = False UI.targetOffsetRange = 1 UI.lightRot = (0.0, 0.0, 0.0) UI.lightIntensity = 0.8 UI.exportTargetData = True UI.exportLightData = False UI.exportNoiseData = False #if mc.window('UIwindow', exists = True): # mc.deleteUI(uiwindow) # print('deleted previous window') uiwindow = mc.window('UIw2255342s32222222ndow', t='Training Scene Generator', widthHeight=(320, 520), mnb=False, mxb=False, sizeable=False) #main layout mainLayout = mc.columnLayout(w=320, h=520, co=('left', 10)) #header image mc.separator(12) imagePath = mc.internalVar(upd=True) + "icons/SG2000Logo.png" mc.image(w=320, h=93, image=imagePath) mc.separator(h=18) #-------------------------------------TARGET PRIM-------------------------------------# #dropdown for target object targetDropdownMenu = mc.optionMenu('targetDropdownMenu', w=280, label='Target Primitive Geometry: ', cc=partial(updateTargetPrim)) #RGB sliders mc.separator(h=6) mc.text("Target Primitive Color RGB") mc.separator(h=6) mc.rowColumnLayout(numberOfRows=1, rowSpacing=(10, 10)) mc.text('R:') mc.floatSlider('targetRSlider', min=0, max=30, value=0, step=1, cc=setTargetRGB, bgc=(.6, 0.2, 0.2)) mc.text('G:') mc.floatSlider('targetGSlider', min=0, max=30, value=0, step=1, cc=setTargetRGB, bgc=(.2, .6, .2)) mc.text('B:') mc.floatSlider('targetBSlider', min=0, max=30, value=0, step=1, cc=setTargetRGB, bgc=(0.4, 0.4, .8)) mc.setParent('..') #POSITION AND ORIENTATION AND SIZE mc.separator(6) mc.rowColumnLayout(numberOfRows=1) mc.checkBox('in_mid', v=UI.targetMiddle, cc=setTargetMidBool) mc.checkBox('rand_rot', cc=setRandomOrientation) mc.text('size: ') mc.intField('radiusIntField', w=30, v=2, cc=changeRadiusIntField) mc.text('offset: ') mc.intField('offsetIntField', w=30, maxValue=10, minValue=0, v=UI.targetOffsetRange, cc=changeOffsetIntField) mc.separator(6) mc.setParent('..') #CREATE OR DELETE PRIM mc.rowColumnLayout(numberOfRows=1) mc.button(label='CREATE', c=partial(createTargetPrim)) mc.button(label='DELETE', c=partial(deleteTargetPrim)) mc.setParent('..') #---------------------------------END OF TARGET PRIM---------------------------------# #---------------------------------BACKGROUND OBJECTS---------------------------------# mc.separator(h=18) mc.text('Background Population Density') mc.rowColumnLayout(numberOfRows=1) mc.separator(h=12) mc.text('few') mc.intSlider('popSlider', min=0, max=400, value=0, step=1, cc=setPopulation) mc.text('many objects in the background') mc.setParent('..') # mc.text('Background Population Variety') # mc.rowColumnLayout( numberOfRows = 1) # mc.separator(h=6) # mc.text('few') # mc.intSlider('popSlider', min=0, max=400, value=0, step=80, cc=setPopulation) # mc.text('many types of primitives') mc.setParent('..') mc.rowColumnLayout(numberOfRows=1) mc.separator(h=6) mc.button(label='BUILD', c=partial(buildBackground)) mc.button(label='DELETE', c=partial(deleteBackground)) mc.setParent('..') #-----------------------------END OF BACKGROUND OBJECTS-------------------------------# #--------------------------------------LIGHTS-----------------------------------------# mc.rowColumnLayout(numberOfRows=1) mc.text('light rotation') mc.separator(w=120) mc.text('light intensity') mc.setParent('..') mc.rowColumnLayout(numberOfRows=1) mc.separator(h=6) mc.floatField('lxr', w=40, cc=setLightRot) mc.floatField('lyr', w=40, cc=setLightRot) mc.floatField('lzr', w=40, cc=setLightRot) mc.separator(w=60) mc.floatField('lin', w=40, cc=setLightIntensity, v=0.8) mc.setParent('..') #-----------------------------------END OF LIGHTS-------------------------------------# #--------------------------------------OUTPUT-----------------------------------------# mc.separator(h=12) mc.text('Rendering') mc.separator(h=6) mc.rowColumnLayout(numberOfRows=1) mc.button('change save directory', bgc=(.2, .6, .2), c=changeRenderpath) mc.separator(h=6) mc.setParent('..') mc.rowColumnLayout(numberOfRows=1) mc.button(label='CAMERA', c=partial(makeCamera)) mc.button(label='X', c=partial(deleteCamera), bgc=(.8, .2, .2)) mc.button(label='RENDER', c=partial(RenderScenes)) mc.intField('rendercountfield', w=40, minValue=1, maxValue=4000, cc=updateRenderCount) mc.text('times with these settings') mc.setParent('..') mc.rowColumnLayout(numberOfRows=1) mc.text('Export : ') mc.checkBox('target', v=UI.exportTargetData) mc.checkBox('light', v=UI.exportLightData) mc.checkBox('noise', v=UI.exportNoiseData) mc.setParent('..') mc.showWindow(uiwindow)
def showSelObject(*args): sel = mc.ls(sl=True) add = mc.textField('tFld', edit=True, text=sel[0]) if mc.window("dumWin", exists=True): mc.deleteUI("dumWin") # Specs of the window myWindow = mc.window("dumWin", t="Measure it!", w=300, h=300) # Creates an adjustable column mc.columnLayout(adj=True) # Define logo path logoPath = mc.internalVar(upd=True) + "icons/MitLogo_02.png" # logo display space specs mc.image(w=300, h=100, image=logoPath) mc.separator(w=300) mc.separator(w=300) mc.text("Select an item to measure.", align='center') mc.separator(w=300) # set parents ends the current layout mc.setParent('..') mc.rowColumnLayout(numberOfColumns=3, columnWidth=[(1, 75), (2, 150), (3, 75)]) mc.text("Selected Item:", align='center') mc.textField('tFld') mc.button(l="Update", c=showSelObject) mc.setParent('..') mc.columnLayout() mc.separator(w=300) mc.button(l="Measure", c=mit, w=300) mc.separator(w=300)
def createUI(): # Check to see if our window exists if cmds.window("myWindow", exists=True): cmds.deleteUI("myWindow") # Create our main window window = cmds.window("myWindow", title="L-System Interpreter", s=False, w=450, h=650, mnb=False, mxb=False) mainLayout = cmds.columnLayout(w=450, h=650) import os pathVar = os.path.dirname( __file__) # This stores the current working directory imagePath = pathVar + "/banner.png" # I designed a nice header for it cmds.image(w=450, h=160, image=imagePath) #--- MAIN FRAME LAYOUT ---# mainFrame = cmds.frameLayout(l="L-System String Operations", lv=False, cll=False, cl=True, mw=10, mh=10) #////////////////////////////////////////INSTRUCTIONS//AND//PRESETS////////////////////////////////////////////////////# def displayInstructions(*pArgs): """Shows in an independent window a list of instructions for the user to set things up quickly""" if cmds.window("instructions_window", exists=True): cmds.deleteUI("instructions_window") instructions_window = cmds.window("instructions_window", title="Instructions", s=False, mnb=False, mxb=False) instructionsLayout = cmds.frameLayout(l="Instructions", collapsable=False, cl=False, mw=10, mh=10) cmds.rowColumnLayout(nc=3, cw=[(1, 20), (2, 480), (3, 20)], cal=[(2, "left")], parent=instructionsLayout) cmds.separator(st="none") cmds.text( l="1. Write an axiom (or initial word), depth and rules. If you don't know what it is put the mouse over the parameter and read the help line.\n2. Click Generate String. Then you will see the result in the text field below, this is just mere text. Now the string needs to be interpreted.\n3. Set all the 'Geometric Interpretation' attributes (Angle, Segment Length...). Remember to put the mouse over it if your are confused.\n4. Click Create Geometry. You will see the result in your scene. If you want to clean the last plant\n\tclick Clean Plant. If you click Create Geometry again you will get another plant.\n6. Always remember to pay attention to the help line and warnings field." ) cmds.separator(st="none") cmds.separator(st="none") cmds.text( l="\nThis is the meaning for each character you enter in the rules section:" ) cmds.separator(st="none") cmds.separator(st="none") cmds.text(l=""" F Move forward f Move forward L Leaf B Blossom + Rotate +X (yaw right) - Rotate -X (yaw left) ^ Rotate +Y (roll right) & Rotate -Y (roll left) < Rotate +Z (pitch down) > Rotate -Z (pitch up) * Turtle rotates 180 (as it was facing backwards) [ Push current turtle state on the stack ] Pop the current turtle state from the stack""") cmds.showWindow(instructions_window) cmds.rowColumnLayout(numberOfColumns=4, cal=[(2, "left")], columnWidth=[(1, 5), (2, 320), (3, 100), (4, 5)], parent=mainFrame) cmds.separator(st="none") cmds.text( l="You might feel a bit lost, I recommend you to read a quick guide") cmds.button(l="Instructions", en=True, command=displayInstructions) cmds.separator(st="none") cmds.rowColumnLayout(nc=7, cw=[(1, 103), (2, 5), (3, 103), (4, 5), (5, 102), (6, 5), (7, 102)], parent=mainFrame) def preset1Action(*args): import presets set1 = presets.preset1() cmds.button(l="Preset1", c=preset1Action, ann="Loads Preset #1.") cmds.separator(st="none") def preset2Action(*args): import presets set2 = presets.preset2() cmds.button(l="Preset2", c=preset2Action, ann="Loads Preset #2.") cmds.separator(st="none") def preset3Action(*args): import presets set3 = presets.preset3() cmds.button(l="Preset3", c=preset3Action, ann="Loads Preset #3.") cmds.separator(st="none") def preset4Action(*args): import presets set4 = presets.preset4() cmds.button(l="Preset4", c=preset4Action, ann="Loads Preset #4.") # !!!!!!!!!!!!!!!!!!!!!!! TO DO --> PRESETS cmds.rowColumnLayout(numberOfColumns=1, columnWidth=[(1, 425)], parent=mainFrame) cmds.separator(h=1, st="none") #////////////////////////////////////////////////RULES//TAB////////////////////////////////////////////////////////////# rulesLayout = cmds.frameLayout(label="Rules", collapsable=True, cl=False, mw=10, mh=10, w=425) #--- Axiom ---# cmds.rowColumnLayout(numberOfColumns=2, columnWidth=[(1, 43), (2, 363)], parent=rulesLayout) cmds.text(l="Axiom ", align="right") cmds.textField( "axiomTextField", tx="F", ann= "Type the initial word you want to start with. The rules will replace each char of the word." ) #--- Depth ---# cmds.rowColumnLayout(numberOfColumns=1, columnWidth=[(1, 406)], parent=rulesLayout) cmds.intSliderGrp( "depthIntField", l="Depth: ", v=4, cw3=[40, 30, 350], min=1, max=10, fmx=20, f=True, ann= "Set the index of recursion. The number of iterations over the generated string. How many times do you want to seach and replace chars in the string?" ) #--- Probabilities header ---# cmds.rowColumnLayout(numberOfColumns=3, cal=[(1, "right")], columnWidth=[(1, 325), (2, 50), (3, 45)], parent=rulesLayout) cmds.separator(st="none") cmds.text(l="Prob.(%)", en=True, ebg=True, bgc=[0.0, 0.153, 0.0666]) cmds.separator(st="none") #--- Collection of rules ---# cmds.rowColumnLayout(nc=7, cal=[(1, "right")], cw=[(1, 40), (2, 30), (3, 20), (4, 245), (5, 40), (6, 5), (7, 20)], p=rulesLayout) #--- RULE 1 ---# cmds.text(l="Rule 1: ", en=True) cmds.textField( "prodRulePred1", en=True, tx="F", ann= "Enter predecessor string for production rule 1. If this character is found in the string it will be replaced." ) cmds.text(l="->", en=True) cmds.textField( "prodRuleSucc1", en=True, tx="F[&+F]F[->FL][&FB]", ann= "Enter successor string for production rule 1. The value you want to replace the predecessor with." ) cmds.intField( "prodRuleProb1", minValue=0, maxValue=100, value=100, ann= "Enter the probability (in percentage %) in which you want this rule to be executed. Applies just if you write the same predecessors in different rules." ) cmds.separator(st="none") cmds.separator(st="none") #--- RULE 2 ---# cmds.text("prodRule2Text_A", l="Rule 2: ", en=False) cmds.textField( "prodRulePred2", en=False, ann= "Enter predecessor string for production rule 2. If this character is found in the string it will be replaced." ) cmds.text("prodRule2Text_B", l="->", en=False) cmds.textField( "prodRuleSucc2", en=False, ann= "Enter successor string for production rule 2. The value you want to replace the predecessor with." ) cmds.intField( "prodRuleProb2", minValue=0, maxValue=100, value=0, en=False, ann= "Enter the probability (in percentage %) in which you want this rule to be executed. Applies just if you write the same predecessors in different rules." ) cmds.separator(st="none") cmds.checkBox("prodRuleCheckBox2", l="", value=False, ann="Activates the 2st production rule.") def toggleGreyingOut2(*pArgs): valueCB2 = cmds.checkBox("prodRuleCheckBox2", q=True, value=True) if valueCB2 == True: cmds.text("prodRule2Text_A", edit=True, en=True) cmds.textField("prodRulePred2", edit=True, en=True) cmds.text("prodRule2Text_B", edit=True, en=True) cmds.textField("prodRuleSucc2", edit=True, en=True) cmds.intField("prodRuleProb2", edit=True, en=True) cmds.intField("prodRuleProb2", edit=True, v=100) if valueCB2 == False: cmds.text("prodRule2Text_A", edit=True, en=False) cmds.textField("prodRulePred2", edit=True, en=False) cmds.text("prodRule2Text_B", edit=True, en=False) cmds.textField("prodRuleSucc2", edit=True, en=False) cmds.intField("prodRuleProb2", edit=True, en=False) cmds.intField("prodRuleProb2", edit=True, v=0) cmds.checkBox("prodRuleCheckBox2", edit=True, changeCommand=toggleGreyingOut2) #--- RULE 3 ---# cmds.text("prodRule3Text_A", l="Rule 3: ", en=False) cmds.textField( "prodRulePred3", en=False, ann= "Enter predecessor string for production rule 3. If this character is found in the string it will be replaced." ) cmds.text("prodRule3Text_B", l="->", en=False) cmds.textField( "prodRuleSucc3", en=False, ann= "Enter successor string for production rule 3. The value you want to replace the predecessor with." ) cmds.intField( "prodRuleProb3", minValue=0, maxValue=100, value=0, en=False, ann= "Enter the probability (in percentage %) in which you want this rule to be executed. Applies just if you write the same predecessors in different rules." ) cmds.separator(st="none") cmds.checkBox("prodRuleCheckBox3", l="", value=False, ann="Activates the 3rd production rule.") def toggleGreyingOut3(*pArgs): valueCB3 = cmds.checkBox("prodRuleCheckBox3", q=True, value=True) if valueCB3 == True: cmds.text("prodRule3Text_A", edit=True, en=True) cmds.textField("prodRulePred3", edit=True, en=True) cmds.text("prodRule3Text_B", edit=True, en=True) cmds.textField("prodRuleSucc3", edit=True, en=True) cmds.intField("prodRuleProb3", edit=True, en=True) cmds.intField("prodRuleProb3", edit=True, v=100) if valueCB3 == False: cmds.text("prodRule3Text_A", edit=True, en=False) cmds.textField("prodRulePred3", edit=True, en=False) cmds.text("prodRule3Text_B", edit=True, en=False) cmds.textField("prodRuleSucc3", edit=True, en=False) cmds.intField("prodRuleProb3", edit=True, en=False) cmds.intField("prodRuleProb3", edit=True, v=0) cmds.checkBox("prodRuleCheckBox3", edit=True, changeCommand=toggleGreyingOut3) #--- RULE 4 ---# cmds.text("prodRule4Text_A", l="Rule 4: ", en=False) cmds.textField( "prodRulePred4", en=False, ann= "Enter predecessor string for production rule 4. If this character is found in the string it will be replaced." ) cmds.text("prodRule4Text_B", l="->", en=False) cmds.textField( "prodRuleSucc4", en=False, ann= "Enter successor string for production rule 4. The value you want to replace the predecessor with." ) cmds.intField( "prodRuleProb4", minValue=0, maxValue=100, value=0, en=False, ann= "Enter the probability (in percentage %) in which you want this rule to be executed. Applies just if you write the same predecessors in different rules." ) cmds.separator(st="none") cmds.checkBox("prodRuleCheckBox4", l="", value=False, ann="Activates the 4th production rule.") def toggleGreyingOut4(*pArgs): valueCB4 = cmds.checkBox("prodRuleCheckBox4", q=True, value=True) if valueCB4 == True: cmds.text("prodRule4Text_A", edit=True, en=True) cmds.textField("prodRulePred4", edit=True, en=True) cmds.text("prodRule4Text_B", edit=True, en=True) cmds.textField("prodRuleSucc4", edit=True, en=True) cmds.intField("prodRuleProb4", edit=True, en=True) cmds.intField("prodRuleProb4", edit=True, v=100) if valueCB4 == False: cmds.text("prodRule4Text_A", edit=True, en=False) cmds.textField("prodRulePred4", edit=True, en=False) cmds.text("prodRule4Text_B", edit=True, en=False) cmds.textField("prodRuleSucc4", edit=True, en=False) cmds.intField("prodRuleProb4", edit=True, en=False) cmds.intField("prodRuleProb4", edit=True, v=0) cmds.checkBox("prodRuleCheckBox4", edit=True, changeCommand=toggleGreyingOut4) #--- Generate String / Clear String ---# cmds.rowColumnLayout(numberOfColumns=3, columnWidth=[(1, 196), (2, 10), (3, 196)], parent=rulesLayout) cmds.button(l="Generate String", ann="Click to run the L-System string procedure.", c=generateStringButtonAction) cmds.separator(h=5, st="none") cmds.button(l="Clear String", ann="Click to reset the generated string", command=clearStringButtonAction) #--- String Output ---# cmds.rowColumnLayout(numberOfColumns=1, columnWidth=[(1, 402)], parent=rulesLayout) cmds.textField( "output", editable=True, ann= "This is the generated string. When you get it proceed to construct the geometry." ) cmds.rowColumnLayout(numberOfColumns=1, columnWidth=[(1, 402)], parent=mainFrame) cmds.separator(h=5, st='none') #//////////////////////////////////////GEOMETRIC//INTERPRETATION///////////////////////////////////////////////////////# mInterpret = cmds.frameLayout(label="Geometric Interpretation", collapsable=True, cl=True, mw=10, mh=10, w=425) #--- Set of geometric parameters ---# cmds.rowColumnLayout(numberOfColumns=1, columnWidth=[(1, 406)], parent=mInterpret) cmds.floatSliderGrp( "angle", l="Angle: ", pre=1, v=25.2, cal=[2, 'center'], cw3=[92, 40, 788], min=0, max=100, fmx=360, f=True, ann= "The turtle will yaw, roll or pitch by this angular (degrees) amount each time it finds each corresponding symbol." ) cmds.floatSliderGrp("length", l="Segment Length: ", pre=2, v=1.20, cw3=[92, 40, 788], min=0, max=10, fmx=100, f=True, ann="The length of each turtle's step or segment.") cmds.floatSliderGrp( "radius", l="Segment Radius: ", pre=2, v=0.20, cw3=[92, 40, 788], min=0, max=0.5, fmx=2, f=True, ann="The radius of each cylinder (segment) that is placed.") cmds.intSliderGrp("cylSubdivs", l="Cylinder Subdivs: ", v=5, cw3=[92, 40, 788], min=4, max=20, fmx=20, f=True, ann="No. of subdivisions for each cylinder.") cmds.intSliderGrp( "length_atenuation", l="Len. Atenuation: ", v=95, cw3=[92, 40, 788], min=0, max=100, fmx=100, f=True, ann= "Next's index branch's segment's length will be (this field) percent the length of the previous one." ) cmds.intSliderGrp( "radius_atenuation", l="Rad. Atenuation: ", v=85, cw3=[92, 40, 788], min=0, max=100, fmx=100, f=True, ann= "Next's index branch's segment's radius will be (this field) percent the length of the previous one." ) cmds.floatSliderGrp( "turtleSpeed", l="Turtle speed: ", v=0, cw3=[92, 40, 288], min=0, max=1, pre=2, fmx=5, f=True, ann= "Before proceeding to the next turtle command it will be frozen for this amount of time (in seconds). Useful for keeping track of everything that happens." ) cmds.separator(h=2, st="none") #--- Colour Fields ---# global rgb_branchField, rgb_leafField, rgb_branchField cmds.colorSliderGrp("rgb_branchField", l="Branches", rgb=(0.430, 0.230, 0.11), cw3=[52, 30, 328], ann="Branch colour.") cmds.separator(h=6, st="none") cmds.colorSliderGrp("rgb_leafField", l="Leaves", rgb=(0, 0.624, 0), cw3=[52, 30, 328], ann="Leaf colour.") cmds.separator(h=6, st="none") cmds.colorSliderGrp('rgb_blossomField', l="Blossoms", rgb=(0.624, 0, 0), cw3=[52, 30, 328], ann="Blossoms colour.") #--- Create Geometry / Clean Plant ---# cmds.rowColumnLayout(numberOfColumns=3, columnWidth=[(1, 196), (2, 10), (3, 196)], parent=mInterpret) cmds.button(l="Create Geometry", command=createGeometryButtonAction, ann="Go turtle! Go!") cmds.separator(h=5, st="none") cmds.button(l="Clean Plant", command=cleanPlantButtonAction, ann='Deletes the lastest generated plant.') #/////////////////////////////////////WARNINGS//AND//HELPLINE//////////////////////////////////////////////////////////# cmds.rowColumnLayout(numberOfColumns=3, columnWidth=[(1, 55), (2, 5), (3, 366)], parent=mainFrame) cmds.text(l="Warnings") cmds.separator(st="none") cmds.textField("warningsTextField", editable=False, tx="None") cmds.rowColumnLayout(numberOfColumns=1, columnWidth=[(1, 426)], parent=mainFrame) cmds.helpLine(bgc=[0.0, 0.0, 0.0]) #--- Credits Layout ---# cmds.rowColumnLayout(numberOfColumns=1, columnWidth=[(1, 426)], parent=mainFrame) cmds.text(l="Ramon Blanquer - www.ramonblanquer.com - NCCA 2014") cmds.showWindow() cmds.showWindow(window)
''' def Bind(): charName = cmds.textFieldGrp(NameInput, q=True, text=True) cmds.select(charName + '_Joints_01', hi=True) # if charName+'_Geo_01' null print 'put your model in Main>Geo group' cmds.select(charName + '_Geo_01', hi=True, add=True) cmds.bindSkin() #Interface cmds.window("Generator de foule", w=300, h=600) cmds.columnLayout(adj=True) imagePath = cmds.workspace(q=True, rd=True) + "/scripts/image_2.jpg" cmds.image(w=300, h=100, image=imagePath) cmds.rowLayout(numberOfColumns=1, columnWidth3=(80, 75, 300), adjustableColumn=2, columnAlign=(1, 'right'), columnAttach=[(1, 'both', 0), (2, 'both', 0), (3, 'both', 0)]) #cmds.button( label='Import character',command= 'ImportOBJ()') NameInput = cmds.textFieldGrp(label="Character Name", editable=True) cmds.setParent('..') cmds.setParent('..') cmds.setParent('..') cmds.frameLayout(label='Auto Rig', collapsable=True, collapse=False) cmds.rowColumnLayout(numberOfColumns=5, columnWidth=[(1, 80), (2, 80), (3, 80), (4, 80), (5, 80)])
def __init__(self): #get access to our maya tools toolsPath = cmds.internalVar(usd=True) + "mayaTools.txt" if os.path.exists(toolsPath): f = open(toolsPath, 'r') self.mayaToolsDir = f.readline() f.close() #create a dictionary for our UI widgets self.widgets = {} #create window if cmds.window("addCharacter_UI", exists=True): cmds.deleteUI("addCharacter_UI") self.widgets["window"] = cmds.window("addCharacter_UI", title="Add Character", w=430, h=260, sizeable=True, mxb=False, mnb=False) #create the main layout main = cmds.columnLayout(w=430) #banner image cmds.image(w=430, h=50, image=self.mayaToolsDir + "/General/Icons/ART/artBanner430px.bmp", parent=main) self.widgets["formLayout"] = cmds.formLayout(w=430, h=260, parent=main) #create the widgets self.widgets["project"] = cmds.optionMenu(label="Project:", w=200, cc=self.findCharacterRigs) self.widgets["search"] = cmds.textFieldGrp(label="Search:", cl2=["left", "left"], ct2=["left", "left"], cw2=[40, 160], text="coming soon", enable=False) self.widgets["characterList"] = cmds.textScrollList( allowMultiSelection=False, w=200, h=180, selectCommand=self.findCharacterThumbnail) self.widgets["thumbnailBorder"] = cmds.image(w=210, h=210, image="", ebg=True, bgc=[0, 0, 0]) self.widgets["thumbnail"] = cmds.image(w=200, h=200, image="") self.widgets["addButton"] = cmds.button(label="Add", w=60, c=partial( self.addCharacter, False)) self.widgets["addButton2"] = cmds.button(label="Add and Close", w=80, c=partial( self.addCharacter, True)) self.widgets["cancelButton"] = cmds.button(label="Cancel", w=60, c=self.cancel) #attach widgets cmds.formLayout(self.widgets["formLayout"], edit=True, af=[(self.widgets["project"], 'top', 10), (self.widgets["project"], 'left', 10)]) cmds.formLayout(self.widgets["formLayout"], edit=True, af=[(self.widgets["search"], 'top', 40), (self.widgets["search"], 'left', 10)]) cmds.formLayout(self.widgets["formLayout"], edit=True, af=[(self.widgets["characterList"], 'top', 70), (self.widgets["characterList"], 'left', 10)]) cmds.formLayout(self.widgets["formLayout"], edit=True, af=[(self.widgets["thumbnailBorder"], 'top', 5), (self.widgets["thumbnailBorder"], 'right', 5)]) cmds.formLayout(self.widgets["formLayout"], edit=True, af=[(self.widgets["thumbnail"], 'top', 10), (self.widgets["thumbnail"], 'right', 10)]) cmds.formLayout(self.widgets["formLayout"], edit=True, af=[(self.widgets["addButton"], 'bottom', 10), (self.widgets["addButton"], 'left', 215)]) cmds.formLayout(self.widgets["formLayout"], edit=True, af=[(self.widgets["addButton2"], 'bottom', 10), (self.widgets["addButton2"], 'left', 280)]) cmds.formLayout(self.widgets["formLayout"], edit=True, af=[(self.widgets["cancelButton"], 'bottom', 10), (self.widgets["cancelButton"], 'right', 5)]) #show the window cmds.showWindow(self.widgets["window"]) self.findProjects() #set favorite project if it exists settingsLocation = self.mayaToolsDir + "/General/Scripts/projectSettings.txt" if os.path.exists(settingsLocation): f = open(settingsLocation, 'r') settings = cPickle.load(f) favoriteProject = settings.get("FavoriteProject") try: cmds.optionMenu(self.widgets["project"], edit=True, v=favoriteProject) except: pass self.findCharacterRigs()
def arnoldLicenseDialog(): if (cmds.window("ArnoldLicense", ex=True)): cmds.deleteUI("ArnoldLicense") w = cmds.window("ArnoldLicense", title="Arnold Node-locked License") cmds.window("ArnoldLicense", edit=True, width=550, height=280) cmds.columnLayout() cmds.rowColumnLayout(numberOfColumns=4, columnWidth=[(1, 10), (2, 64), (3, 18), (4, 450)]) cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") arnoldAboutText = u"A node-locked license allows you to render with Arnold on one computer only.\n" cmds.text(label="") cmds.image(image="licensing_mtoa.png") cmds.text(label="") cmds.text(align="left", label=arnoldAboutText) cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.separator() cmds.separator() cmds.separator() cmds.separator() cmds.setParent('..') cmds.separator() cmds.rowColumnLayout(numberOfColumns=2, columnWidth=[(1, 10), (2, 500)]) macText = u"To issue a node-locked license, we need the MAC address of your computer.\n" cmds.text(label="") cmds.text(align="left", label=macText) cmds.setParent('..') cmds.separator() cmds.rowColumnLayout(numberOfColumns=6, columnWidth=[(1, 10), (2, 90), (3, 190), (4, 40), (5, 80), (6, 132)]) cmds.text(label="") cmds.text(align="left", label="MAC Address") name = cmds.textField() mac = get_mac() mactext = ("%012X" % mac) cmds.textField(name, edit=True, text=mactext, editable=False) cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.separator() cmds.separator() cmds.separator() cmds.separator() cmds.separator() cmds.separator() cmds.setParent('..') cmds.rowColumnLayout(numberOfColumns=2, columnWidth=[(1, 10), (2, 500)]) macText = u"To install your node-locked license, locate the license file (.lic) and click Install.\n" cmds.text(label="") cmds.text(align="left", label=macText) cmds.setParent('..') cmds.rowColumnLayout(numberOfColumns=8, columnWidth=[(1, 10), (2, 90), (3, 190), (4, 7), (5, 26), (6, 7), (7, 80), (8, 132)]) cmds.text(label="") cmds.text(align="left", label="License file (.lic)") file = cmds.textField() cmds.text(label="") cmds.button(label='...', command=lambda *args: dotDotDotButtonPush(file)) cmds.text(label="") cmds.button(label='Install', command=lambda *args: installButtonPush(file)) cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.text(label="") cmds.setParent('..') cmds.rowColumnLayout(numberOfColumns=5, columnWidth=[(1, 200), (2, 160), (3, 80), (4, 20), (5, 80)]) cmds.text(label="") cmds.text(label="") cmds.button(label='Close', command=('import maya.cmds as cmds;cmds.deleteUI(\"' + w + '\", window=True)')) cmds.text(label="") cmds.button(label='Help', c=lambda *args: cmds.launch( webPage='https://www.solidangle.com/support/licensing/')) cmds.setParent('..') cmds.showWindow(w)
import traceback
def __init__(self, *args): if not cmds.objExists('All_InitCTL'): self.rigInitCtl_inst = initrigset.RigAll() self.rigInitCtl_inst.putInitCtl() self.rigInitCtl_inst.doIt() try: f = open("pickle.dat", 'w') pickle.dump(self.rigInitCtl_inst, f) f.close() except: pass else: try: f = open("pickle.dat", 'r') self.rigInitCtl_inst = pickle.load(f) f.close() except: pass win = rigbase.createWindow('locusHumanRig_ui', title='Locus Human Rig') form = cmds.formLayout() cmds.image(image=chModules.chRiggingImagePath) cmds.popupMenu() cmds.menuItem(l='Mirror <<') cmds.menuItem(l='Mirror >>') self.neckField = cmds.intField(v=4, min=3) self.bodyField = cmds.intField(v=5, min=3) self.armLUField = cmds.intField(v=5, min=3) self.armLLField = cmds.intField(v=5, min=3) self.armRUField = cmds.intField(v=5, min=3) self.armRLField = cmds.intField(v=5, min=3) self.legLUField = cmds.intField(v=5, min=3) self.legLLField = cmds.intField(v=5, min=3) self.legRUField = cmds.intField(v=5, min=3) self.legRLField = cmds.intField(v=5, min=3) self.fieldGrp = [ self.neckField, self.bodyField, self.armLUField, self.armLLField, self.armRUField, self.armRLField, self.legLUField, self.legLLField, self.legRUField, self.legRLField ] self.headFollow = cmds.frameLayout(l='Head Follow', w=100) cmds.checkBox(l='Neck', v=1, onc=partial(self.followAttrVis, ['Head_CTL'], 'neckFollow', True), ofc=partial(self.followAttrVis, ['Head_CTL'], 'neckFollow', False)) cmds.checkBox(l='Chest', v=1, onc=partial(self.followAttrVis, ['Head_CTL'], 'chestFollow', True), ofc=partial(self.followAttrVis, ['Head_CTL'], 'chestFollow', False)) cmds.checkBox(l='Root', onc=partial(self.followAttrVis, ['Head_CTL'], 'rootFollow', True), ofc=partial(self.followAttrVis, ['Head_CTL'], 'rootFollow', False)) cmds.checkBox(l='Move', onc=partial(self.followAttrVis, ['Head_CTL'], 'moveFollow', True), ofc=partial(self.followAttrVis, ['Head_CTL'], 'moveFollow', False)) cmds.setParent('..') self.collarFollow = cmds.frameLayout(l='Collar Follow', w=100) cmds.checkBox(l='Chest', onc=partial(self.followAttrVis, ['Collar_L_CTL', 'Collar_R_CTL'], 'chestFollow', True), ofc=partial(self.followAttrVis, ['Collar_L_CTL', 'Collar_R_CTL'], 'chestFollow', False)) cmds.checkBox(l='Root', onc=partial(self.followAttrVis, ['Collar_L_CTL', 'Collar_R_CTL'], 'rootFollow', True), ofc=partial(self.followAttrVis, ['Collar_L_CTL', 'Collar_R_CTL'], 'rootFollow', False)) cmds.checkBox(l='Move', onc=partial(self.followAttrVis, ['Collar_L_CTL', 'Collar_R_CTL'], 'moveFollow', True), ofc=partial(self.followAttrVis, ['Collar_L_CTL', 'Collar_R_CTL'], 'moveFollow', False)) cmds.setParent('..') self.armFollow = cmds.frameLayout(l='Arm Follow', w=100) cmds.checkBox(l='Collar', onc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'collarFollow', True), ofc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'collarFollow', False)) cmds.checkBox(l='Head', onc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'headFollow', True), ofc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'headFollow', False)) cmds.checkBox(l='Chest', v=1, onc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'chestFollow', True), ofc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'chestFollow', False)) cmds.checkBox(l='Hip', onc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'hipFollow', True), ofc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'hipFollow', False)) cmds.checkBox(l='Root', v=1, onc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'rootFollow', True), ofc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'rootFollow', False)) cmds.checkBox(l='Move', onc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'moveFollow', True), ofc=partial(self.followAttrVis, ['Arm_L_Switch_CTL', 'Arm_R_Switch_CTL'], 'moveFollow', False)) cmds.setParent('..') self.legFollow = cmds.frameLayout(l='Leg Follow', w=100) cmds.checkBox(l='Hip', onc=partial(self.followAttrVis, ['Leg_L_Switch_CTL', 'Leg_R_Switch_CTL'], 'hipFollow', True), ofc=partial(self.followAttrVis, ['Leg_L_Switch_CTL', 'Leg_R_Switch_CTL'], 'hipFollow', False)) cmds.checkBox(l='Root', v=1, onc=partial(self.followAttrVis, ['Leg_L_Switch_CTL', 'Leg_R_Switch_CTL'], 'rootFollow', True), ofc=partial(self.followAttrVis, ['Leg_L_Switch_CTL', 'Leg_R_Switch_CTL'], 'rootFollow', False)) cmds.checkBox(l='Move', onc=partial(self.followAttrVis, ['Leg_L_Switch_CTL', 'Leg_R_Switch_CTL'], 'moveFollow', True), ofc=partial(self.followAttrVis, ['Leg_L_Switch_CTL', 'Leg_R_Switch_CTL'], 'moveFollow', False)) cmds.setParent('..') dfFollowButton = cmds.button(l='Default Follow', w=100, h=30, c=self.defaultFollow) self.setButton = cmds.button(l='SET', c=self.setCmd, w=60, h=30, bgc=[.308 - .1, .312 - .1, .292 - .1]) self.backButton = cmds.button(l='BACK', c=self.backCmd, vis=0, w=60, h=30, bgc=[.308 - .1, .312 - .1, .292 - .1]) empty = cmds.text(l='') #mirrorLButton = cmds.button( l='>>', w=30, h=80 ) #mirrorRButton = cmds.button( l='<<', w=30, h=80 ) cmds.frameLayout(self.collarFollow, q=1, ca=1) cmds.formLayout(form, e=1, attachForm=[(self.neckField, 'top', 80), (self.neckField, 'left', 130), (self.bodyField, 'top', 195), (self.bodyField, 'left', 150), (self.armLUField, 'top', 170), (self.armLUField, 'left', 200), (self.armLLField, 'top', 235), (self.armLLField, 'left', 215), (self.armRUField, 'top', 170), (self.armRUField, 'left', 65), (self.armRLField, 'top', 235), (self.armRLField, 'left', 50), (self.legLUField, 'top', 350), (self.legLUField, 'left', 175), (self.legLLField, 'top', 465), (self.legLLField, 'left', 165), (self.legRUField, 'top', 350), (self.legRUField, 'left', 105), (self.legRLField, 'top', 470), (self.legRLField, 'left', 85), (self.headFollow, 'top', 15), (self.headFollow, 'left', 320), (self.collarFollow, 'top', 150), (self.collarFollow, 'left', 320), (self.armFollow, 'top', 265), (self.armFollow, 'left', 320), (self.legFollow, 'top', 440), (self.legFollow, 'left', 320), (dfFollowButton, 'top', 560), (dfFollowButton, 'left', 320), (self.setButton, 'top', 560), (self.setButton, 'left', 250), (self.backButton, 'top', 560), (self.backButton, 'left', 250), (empty, 'top', 0)]) cmds.window(win, e=1, wh=[313, 595], s=0) try: from BorderlessFrame import BorderlessFrame, toQtObject dlg = toQtObject(win) self._win = BorderlessFrame() self._win.setContent(dlg) self._win.setTitle('Locus Human Rig') self._win.show() self._win.move(214, 223) except: cmds.showWindow(win) self.win = win self.followMenuVisSet() self.scriptJobSetting()
def tic_tac_toe_ui(USERPATH): PATH_ICONS = USERPATH + "\\tic_tac_toe_icons\\" sys.path.append(USERPATH) sys.path.append(PATH_ICONS) ui_title = "tic tac_toe" main_color = [0.492, 0.980, 0.570] secondary_color = [0.953, 0.588, 0.4] window = cmds.window(ui_title, title="Tic Tac Toe", backgroundColor=main_color, sizeable=True, resizeToFitChildren=True) # DELETE if it already exists: if cmds.window(ui_title, exists=True): cmds.deleteUI(ui_title) ############################################################### ########################## HEADER ######################### ############################################################### cmds.columnLayout(rowSpacing=5) cmds.formLayout("ttt_form_count", backgroundColor=main_color, numberOfDivisions=100) ttt_count_user = cmds.image("ttt_count_user", image=PATH_ICONS + "\\ttt_number\\" + 'ttt_0.png') ttt_count_ia = cmds.image("ttt_count_ia", image=PATH_ICONS + "\\ttt_number\\" + 'ttt_0.png') cmds.image("ttt_bg", image=PATH_ICONS + 'ttt_banner.png') ttt_difficulty = cmds.iconTextButton( "ttt_difficulty", style='iconOnly', image=PATH_ICONS + 'ttt_settings_fair.png', command="ttt.change_difficulty(USERPATH)") cmds.formLayout("ttt_form_count", edit=True, attachForm=[(ttt_count_user, 'left', 70), (ttt_count_user, 'top', 88), (ttt_count_ia, 'left', 385), (ttt_count_ia, 'top', 88), (ttt_difficulty, 'left', 420), (ttt_difficulty, 'top', 0)]) cmds.setParent("..") ############################################################### #################### TIC TAC TOE GRID #################### ############################################################### cmds.formLayout("ttt_formlayout", backgroundColor=main_color, numberOfDivisions=100) cmds.image("ttt_bg", image=PATH_ICONS + 'ttt_grid.png') ttt_button01 = cmds.iconTextButton( "ttt_button01", style='iconOnly', image=PATH_ICONS + 'ttt_idle.png', command="ttt.check_difficulty_level('ttt_button01', USERPATH)") ttt_button02 = cmds.iconTextButton( "ttt_button02", style='iconOnly', image=PATH_ICONS + 'ttt_idle.png', command="ttt.check_difficulty_level('ttt_button02', USERPATH)") ttt_button03 = cmds.iconTextButton( "ttt_button03", style='iconOnly', image=PATH_ICONS + 'ttt_idle.png', command="ttt.check_difficulty_level('ttt_button03', USERPATH)") ttt_button04 = cmds.iconTextButton( "ttt_button04", style='iconOnly', image=PATH_ICONS + 'ttt_idle.png', command="ttt.check_difficulty_level('ttt_button04', USERPATH)") ttt_button05 = cmds.iconTextButton( "ttt_button05", style='iconOnly', image=PATH_ICONS + 'ttt_idle.png', command="ttt.check_difficulty_level('ttt_button05', USERPATH)") ttt_button06 = cmds.iconTextButton( "ttt_button06", style='iconOnly', image=PATH_ICONS + 'ttt_idle.png', command="ttt.check_difficulty_level('ttt_button06', USERPATH)") ttt_button07 = cmds.iconTextButton( "ttt_button07", style='iconOnly', image=PATH_ICONS + 'ttt_idle.png', command="ttt.check_difficulty_level('ttt_button07', USERPATH)") ttt_button08 = cmds.iconTextButton( "ttt_button08", style='iconOnly', image=PATH_ICONS + 'ttt_idle.png', command="ttt.check_difficulty_level('ttt_button08', USERPATH)") ttt_button09 = cmds.iconTextButton( "ttt_button09", style='iconOnly', image=PATH_ICONS + 'ttt_idle.png', command="ttt.check_difficulty_level('ttt_button09', USERPATH)") cmds.formLayout("ttt_formlayout", edit=True, attachForm=[(ttt_button01, 'left', 25), (ttt_button01, 'top', 25), (ttt_button02, 'left', 180), (ttt_button02, 'top', 25), (ttt_button03, 'left', 335), (ttt_button03, 'top', 25), (ttt_button04, 'left', 25), (ttt_button04, 'top', 180), (ttt_button05, 'left', 180), (ttt_button05, 'top', 180), (ttt_button06, 'left', 335), (ttt_button06, 'top', 180), (ttt_button07, 'left', 25), (ttt_button07, 'top', 335), (ttt_button08, 'left', 180), (ttt_button08, 'top', 335), (ttt_button09, 'left', 335), (ttt_button09, 'top', 335)]) cmds.setParent("..") ############################################################### ######################### BUTTONS ######################## ############################################################### cmds.rowLayout(numberOfColumns=2) ttt_button_match = cmds.iconTextButton( "ttt_button_match", style='iconOnly', image=PATH_ICONS + 'ttt_restart_match.png', command="ttt.restart_match(USERPATH)") ttt_button_game = cmds.iconTextButton("ttt_button_game", style='iconOnly', image=PATH_ICONS + 'ttt_new_game.png', command="ttt.restart_game(USERPATH)") cmds.showWindow()
def BuildUI(self): #global spineValue ########################################### # Create the basic window ## ########################################### # Create a window with the name Auto Rigger base.window("Auto Rigger") form = base.formLayout() tabs = base.tabLayout(imh=5, imw=5) base.formLayout(form, edit=True, attachForm=((tabs, 'top', 0), (tabs, 'left', 0), (tabs, 'right', 0), (tabs, 'bottom', 0))) # set the layout of the window ch1 = base.rowColumnLayout(nc=1, cal=(1, 'right'), adjustableColumn=True) base.image(w=400, h=100, image=os.path.dirname(os.path.realpath(__file__)) + "\logo.jpg") settingsText = base.text('Settings', l='Rig Settings') base.separator(st='none') #base.text(l = 'Prefix', w = 100) self.prefix = base.textFieldGrp(w=100, text='test', editable=True) self.spineCount = base.intSliderGrp(l="Spine Count", min=1, max=10, value=4, step=1, field=True) #spineCount = base.intField(minValue = 1, maxValue = 10, value = 4) self.fingerCount = base.intSliderGrp(l="Finger Count", min=1, max=10, value=5, step=1, field=True) #fingerCount = base.intField(minValue = 0, maxValue = 10, value = 5) base.separator(h=10, st='none') self.doubleElbow = base.checkBox(l='Double Elbow', align='left') base.setParent('..') ch2 = base.rowColumnLayout(nc=1, cal=(1, 'right'), adjustableColumn=True) base.separator(h=10, st='none') base.button(l="Create Base Locators", w=200, c=self.DoLocators) base.separator(st='none') base.button(l="Create Secondary Locators", w=200, c="SL.SecondaryLocators()") base.separator(st='none', h=20) base.button(l="Create Facial Locators", w=200, c="FJ.FaceJoints()") base.separator(st='none') base.button(l="Mirror L->R", w=200, c="Locators.mirrorLocators()") base.separator(st='none') base.button(l="Delete All Locators", w=200, c="Locators.deleteLocators()") base.setParent('..') ch3 = base.rowColumnLayout(nc=1, cal=(1, 'right'), adjustableColumn=True) base.separator(st='none') base.button(l="Joints Window", w=200, c="Joints.CreateJointsWindow()") base.separator(st='none') base.setParent('..') ch4 = base.rowColumnLayout(nc=1, cal=(1, 'right'), adjustableColumn=True) base.button(l="Finalize Rig", w=200, c=self.FinalizeRig) base.separator(st='none') base.button(l="Bind Skin", w=200, c="Constraints.BindSkin()") base.setParent('..') base.tabLayout(tabs, edit=True, tabLabel=((ch1, 'Settings'), (ch2, 'Locators'), (ch3, 'Facial Rig'), (ch4, 'Finalize'))) # show the actual window base.showWindow()
def editCharacter(*args): if cmds.window("artEditCharacterUI", exists=True): cmds.deleteUI("artEditCharacterUI") window = cmds.window("artEditCharacterUI", w=300, h=400, title="Edit Character", mxb=False, mnb=False, sizeable=False) mainLayout = cmds.columnLayout(w=300, h=400, rs=5, co=["both", 5]) #banner image toolsPath = cmds.internalVar(usd=True) + "mayaTools.txt" if os.path.exists(toolsPath): f = open(toolsPath, 'r') mayaToolsDir = f.readline() f.close() cmds.image(w=300, h=50, image=mayaToolsDir + "/General/Icons/ART/artBanner300px.bmp", parent=mainLayout) cmds.text(label="", h=1, parent=mainLayout) optionMenu = cmds.optionMenu("artProjOptionMenu", label="Project:", w=290, h=40, cc=getProjCharacters, parent=mainLayout) textScrollList = cmds.textScrollList("artProjCharacterList", w=290, h=300, parent=mainLayout) button = cmds.button( w=290, h=40, label="Edit Export File", c=editSelectedCharacter, ann= "Edit the character's skeleton settings, joint positions, or skin weights.", parent=mainLayout) button2 = cmds.button( w=290, h=40, label="Edit Rig File", c=editSelectedCharacterRig, ann= "Edit the character's control rig that will be referenced in by animation.", parent=mainLayout) cmds.text(label="", h=1) cmds.showWindow(window) getProjects() getProjCharacters()
def gui(): icon_path = os.path.join(os.path.split(__file__)[0], 'icons') win_width = 314 win = 'prm_face_win' cmds.window(win, sizeable=0, w=win_width, t='PRM Face System') main = cmds.columnLayout(bgc=[.78, .69, .6]) cmds.image(w=314, h=65, i=os.path.join(icon_path, 'rba_installer.png')) icon_width = 128 / 2 icon_height = 181 / 2 # Level 1 Mouth Shapes cmds.frameLayout(label="Mouth Shapes", w=314, h=icon_height + 65, bgc=[.52, .47, .4]) cmds.scrollLayout() row = cmds.rowColumnLayout(nr=1) Face_Button(parent=row, label='Left Smile', image=os.path.join(icon_path, 'lt_mouth_smile.gif'), width=icon_width, height=icon_height) Face_Button(parent=row, label='Left Frown', image=os.path.join(icon_path, 'lt_mouth_frown.gif'), width=icon_width, height=icon_height) Face_Button(parent=row, label='Left Wide', image=os.path.join(icon_path, 'lt_mouth_wide.gif'), width=icon_width, height=icon_height) Face_Button(parent=row, label='Left OO', image=os.path.join(icon_path, 'lt_mouth_oo.gif'), width=icon_width, height=icon_height) Face_Button(parent=row, label='Rigth Smile', image=os.path.join(icon_path, 'rt_mouth_smile.gif'), width=icon_width, height=icon_height) Face_Button(parent=row, label='Right Frown', image=os.path.join(icon_path, 'rt_mouth_frown.gif'), width=icon_width, height=icon_height) Face_Button(parent=row, label='Right Wide', image=os.path.join(icon_path, 'rt_mouth_wide.gif'), width=icon_width, height=icon_height) Face_Button(parent=row, label='Right OO', image=os.path.join(icon_path, 'lt_mouth_oo.gif'), width=icon_width, height=icon_height) cmds.setParent(main) # Level 1 Eye # Lt and Rt Eye Close # Level 2 # Lt and Rt Upper lid and lower lid surprise and close. (4 Shapes each side) cmds.frameLayout(label="Eye Lid Shapes", w=314, h=icon_height + 65, bgc=[.52, .47, .4]) cmds.scrollLayout() row2 = cmds.rowColumnLayout(nr=1) Face_Button(parent=row2, label='Left Up Wide', image=os.path.join(icon_path, 'lt_eye_wide.png'), width=icon_width, height=icon_height) Face_Button(parent=row2, label='Left Up Close', image=os.path.join(icon_path, 'lt_eye_closed.gif'), width=icon_width, height=icon_height) Face_Button(parent=row2, label='Left Low Wide', image=os.path.join(icon_path, 'lt_eye_wide.png'), width=icon_width, height=icon_height) Face_Button(parent=row2, label='Left Low Close', image=os.path.join(icon_path, 'lt_eye_closed.gif'), width=icon_width, height=icon_height) Face_Button(parent=row2, label='Right Up Close', image=os.path.join(icon_path, 'rt_eye_closed.gif'), width=icon_width, height=icon_height) Face_Button(parent=row2, label='Rigth Up Wide', image=os.path.join(icon_path, 'lt_eye_wide.png'), width=icon_width, height=icon_height) Face_Button(parent=row2, label='Right Low Close', image=os.path.join(icon_path, 'rt_eye_closed.gif'), width=icon_width, height=icon_height) Face_Button(parent=row2, label='Rigth Low Wide', image=os.path.join(icon_path, 'lt_eye_wide.png'), width=icon_width, height=icon_height) cmds.setParent(main) # Level 1 Brow # Eye Brow Up and Down cmds.frameLayout(label="Eye Brow Shapes", w=314, h=icon_height + 47, bgc=[.52, .47, .4]) cmds.scrollLayout() row3 = cmds.rowColumnLayout(nr=1) Face_Button(parent=row3, label='Left Up', image=os.path.join(icon_path, 'lt_brow_up.gif'), width=icon_width, height=icon_height) Face_Button(parent=row3, label='Left Down', image=os.path.join(icon_path, 'rt_brow_down.gif'), width=icon_width, height=icon_height) Face_Button(parent=row3, label='Right Up', image=os.path.join(icon_path, 'rt_brow_up.gif'), width=icon_width, height=icon_height) Face_Button(parent=row3, label='Right Down', image=os.path.join(icon_path, 'rt_brow_down.gif'), width=icon_width, height=icon_height) cmds.setParent(main) # Level 2 Inside, Mid, Outside (Lt and Rt), Center # Binding System # Jaw System # Neck System cmds.button(w=win_width, l='Apply Face System', bgc=[1, 0.9, 0.4]) cmds.showWindow()
def image(*args, **kwargs): try: return cmds.image(*args, **kwargs) except Exception as exp: LOG.debug("MayaAPI exception in 'image': {0}".format(exp).strip()) return None
def __init__(self): #get access to our maya tools toolsPath = cmds.internalVar(usd=True) + "mayaTools.txt" if os.path.exists(toolsPath): f = open(toolsPath, 'r') self.mayaToolsDir = f.readline() f.close() #check to see if window exists, if so, delete if cmds.window("AnimationRiggingTool_SettingsUI", exists=True): cmds.deleteUI("AnimationRiggingTool_SettingsUI") self.path = self.mayaToolsDir self.widgets = {} #create the window self.widgets["window"] = cmds.window("AnimationRiggingTool_SettingsUI", w=400, h=300, titleBarMenu=False, title="Settings", sizeable=False) #main layout self.widgets["main"] = cmds.formLayout(w=400, h=300) #background image image = self.mayaToolsDir + "/General/Icons/ART/settings.jpg" self.widgets["background"] = cmds.image(w=400, h=300, parent=self.widgets["main"], image=image) #close button self.widgets["closeButton"] = cmds.symbolButton( w=26, h=20, parent=self.widgets["main"], image=self.mayaToolsDir + "/General/Icons/ART/xbutton.bmp", c=self.close) cmds.formLayout(self.widgets["main"], edit=True, af=[(self.widgets["closeButton"], "top", 2), (self.widgets["closeButton"], "right", 2)]) #tools path self.widgets["toolsPathLabel"] = cmds.text(h=40, w=100, label="Tools Path: ", font="boldLabelFont", parent=self.widgets["main"]) self.widgets["toolsPathField"] = cmds.textField( h=40, w=225, text="", parent=self.widgets["main"], editable=False) self.widgets["toolsPathBrowseButton"] = cmds.symbolButton( w=40, h=40, parent=self.widgets["main"], image=self.mayaToolsDir + "/General/Icons/ART/browse.bmp", c=self.browseNewToolsPath) cmds.formLayout(self.widgets["main"], edit=True, af=[(self.widgets["toolsPathLabel"], "top", 40), (self.widgets["toolsPathLabel"], "left", 10)]) cmds.formLayout(self.widgets["main"], edit=True, af=[(self.widgets["toolsPathField"], "top", 40), (self.widgets["toolsPathField"], "right", 50)]) cmds.formLayout(self.widgets["main"], edit=True, af=[(self.widgets["toolsPathBrowseButton"], "top", 40), (self.widgets["toolsPathBrowseButton"], "right", 5) ]) #Source control settings divider = cmds.separator(w=400, h=10, style="out") self.widgets["useSourceControl"] = cmds.checkBox( h=40, label="Use Source Control", v=False, parent=self.widgets["main"], onc=partial(self.useSourceControl, True), ofc=partial(self.useSourceControl, False)) cmds.formLayout(self.widgets["main"], edit=True, af=[(divider, "top", 95), (divider, "left", 0)]) cmds.formLayout(self.widgets["main"], edit=True, af=[(self.widgets["useSourceControl"], "top", 105), (self.widgets["useSourceControl"], "left", 10)]) #source control test button self.widgets["testConnection"] = cmds.button( w=225, h=40, label="Test Perforce Connection", parent=self.widgets["main"], enable=False, c=self.testConnection) cmds.formLayout(self.widgets["main"], edit=True, af=[(self.widgets["testConnection"], "top", 105), (self.widgets["testConnection"], "right", 25)]) #favorite project option favoriteProjLabel = cmds.text(label="Set Favorite Project: ", parent=self.widgets["main"]) cmds.formLayout(self.widgets["main"], edit=True, af=[(favoriteProjLabel, "top", 170), (favoriteProjLabel, "left", 10)]) self.widgets["favoriteProject_OM"] = cmds.optionMenu( w=225, h=40, label="", parent=self.widgets["main"]) cmds.menuItem(label="None", parent=self.widgets["favoriteProject_OM"]) cmds.formLayout(self.widgets["main"], edit=True, af=[(self.widgets["favoriteProject_OM"], "top", 160), (self.widgets["favoriteProject_OM"], "right", 25)]) #get projects and add to menu self.findProjects() #save settings button self.widgets["saveSettings"] = cmds.button( w=380, h=40, label="Save Settings and Close", parent=self.widgets["main"], c=self.saveSettings) cmds.formLayout(self.widgets["main"], edit=True, af=[(self.widgets["saveSettings"], "bottom", 10), (self.widgets["saveSettings"], "right", 10)]) #show window cmds.showWindow(self.widgets["window"]) #get tools path self.getToolsPath() #load settings from disk settingsLocation = self.mayaToolsDir + "/General/Scripts/projectSettings.txt" if os.path.exists(settingsLocation): f = open(settingsLocation, 'r') settings = cPickle.load(f) useSource = settings.get("UseSourceControl") favoriteProject = settings.get("FavoriteProject") f.close() try: #set the checkbox to the settings value cmds.checkBox(self.widgets["useSourceControl"], edit=True, v=useSource) self.useSourceControl(useSource) except: pass try: #set the optionMenu to favorite project cmds.optionMenu(self.widgets["favoriteProject_OM"], edit=True, v=favoriteProject) except: pass
def ask_user_for_project_shot_other_details_once_then_save_file_in_format( self): ''' ''' self.form = cmds.setParent(q=True) cmds.formLayout(self.form, e=True, width=750) # t1 = cmds.text(l=' show scn shNo description version initials comments(optional) .extension') self.t1 = cmds.columnLayout() self.i1 = cmds.image(image='D:/test/versionsHeader.jpg') cmds.setParent('..') self.l1 = cmds.optionMenu(label=' ', w=140, cc='onmi.changeOptionMenu()') showrec = self.readSql("select prjName from projects") for each in showrec: cmds.menuItem(label=each, parent=self.l1) # self.l2 = cmds.optionMenu(label=' ',w = 140 ) # cmds.menuItem( label=' ' ,parent = self.l2) self.l3 = cmds.optionMenu(label=' ', w=140) cmds.menuItem(label=' ', parent=self.l3) self.l4 = cmds.textField() self.l5 = cmds.textField() self.l6 = cmds.textField() self.l7 = cmds.textField() cmds.textField(self.l4, edit=True, width=100, enterCommand=('cmds.setFocus(\"' + self.l7 + '\")')) cmds.textField(self.l5, edit=True, width=30, enterCommand=('cmds.setFocus(\"' + self.l5 + '\")'), text='01', enable=False) cmds.textField(self.l6, edit=True, width=30, enterCommand=('cmds.setFocus(\"' + self.l6 + '\")'), text=self.returnUserPrefix()[0]) cmds.textField(self.l7, edit=True, width=70, enterCommand=('cmds.setFocus(\"' + self.l7 + '\")')) self.l8 = cmds.button( label='ok, create first scene file', c='onmi.computeFileName();onmi.saveFileName(onmi.minorFolderName,onmi.ffilename)' ) self.l9 = cmds.button(label='go ahead check in project folder') spacer = 5 top = 5 edge = 5 # cmds.formLayout(self.form, edit=True, attachForm=[(self.t1, 'top', 0), (self.t1, 'left', 0),(self.l1,'left', 10),(self.l8,'left',30)], attachControl=[(self.l1, 'top', 10, self.t1),(self.l2, 'top', 10, self.t1),(self.l3, 'top', 10, self.t1), (self.l4, 'top', 10, self.t1),(self.l5, 'top', 10, self.t1), (self.l6, 'top', 10, self.t1),(self.l7, 'top', 10, self.t1), (self.l8,'top',10, self.l1), (self.l9,'top',10, self.l1),(self.l9,'left',20, self.l8), (self.l2,'left', 10, self.l1),(self.l3,'left', 10, self.l2), (self.l4,'left', 10, self.l3), (self.l5,'left', 10, self.l4), (self.l6,'left', 10, self.l5), (self.l7,'left', 10, self.l6)]) cmds.formLayout(self.form, edit=True, attachForm=[(self.t1, 'top', 0), (self.t1, 'left', 0), (self.l1, 'left', 10), (self.l8, 'left', 30)], attachControl=[(self.l1, 'top', 10, self.t1), (self.l3, 'top', 10, self.t1), (self.l4, 'top', 10, self.t1), (self.l5, 'top', 10, self.t1), (self.l6, 'top', 10, self.t1), (self.l7, 'top', 10, self.t1), (self.l8, 'top', 10, self.l1), (self.l9, 'top', 10, self.l1), (self.l9, 'left', 20, self.l8), (self.l3, 'left', 10, self.l1), (self.l4, 'left', 10, self.l3), (self.l5, 'left', 10, self.l4), (self.l6, 'left', 10, self.l5), (self.l7, 'left', 10, self.l6)])
def createUI(*args): #window windowID = 'spiderGenUI90' if cmds.window(windowID, exists=True): cmds.deleteUI(windowID) cmds.window(windowID, title='Spider Web Generator', resizeToFitChildren=True, sizeable=False) #header image cmds.rowColumnLayout(w=400) # #cmds.image(image=cmds.internalVar(usd=True)+"SpiderGen/UIheader.png") cmds.image(image=image_path + "/script/model/SpiderGen/UIheader.png") cmds.setParent("..") #controls cmds.frameLayout(label="Spiderweb Options", collapsable=False, mw=5, mh=5) cmds.text( label= 'Please create a ring of Anchors to define the shape of the spiderweb.', align='center', height=20) cmds.rowColumnLayout(numberOfColumns=3, columnWidth=[(1, 200), (2, 10), (3, 190)]) cmds.button(label='Create Anchor', command=spiderGen.createAnchor, w=200) cmds.text(label='') deleteAnchors = cmds.checkBox(label='Delete Anchors after use') cmds.setParent("..") cmds.separator(height=10) secondaryRadiusControl = cmds.floatSliderGrp(label='Web Radius', minValue=0, maxValue=1, value=0.5, field=True) secondaryRoundnessControl = cmds.floatSliderGrp(pre=2, label='Web Roundness', minValue=-1, maxValue=1, value=0.5, field=True) spiralStartRadiusControl = cmds.floatSliderGrp(label='Spiral Start Radius', minValue=0, maxValue=0.5, value=0.1, field=True) spiralStepControl = cmds.floatSliderGrp(pre=2, label='Spiral Step Distance', minValue=0.1, maxValue=1, value=0.5, field=True) spirallingControl = cmds.floatSliderGrp(pre=2, label='Spiralling Amount', minValue=0, maxValue=1, value=0, field=True) randomControl = cmds.floatSliderGrp(pre=2, label='Random Influence', minValue=0, maxValue=1, value=0.1, field=True) perfection = cmds.floatSliderGrp(pre=2, label='Web Imperfections', minValue=0, maxValue=1, value=0.5, field=True) cmds.separator(height=10) cmds.rowColumnLayout(numberOfColumns=3, columnWidth=[(1, 100), (1, 150), (1, 150)]) cmds.text(label='Animated Spider:', align='right') animatedSpider = cmds.checkBox(label='') cmds.separator(height=20, vis=False) cmds.text(label='Frame Range:', align='right') animStart = cmds.intField(value=cmds.playbackOptions(q=True, minTime=True)) animEnd = cmds.intField(value=(cmds.playbackOptions(q=True, maxTime=True))) cmds.setParent("..") cmds.text( label='Adjust the spiders size by scaling the rectangular controller.', align='center') cmds.text( label= 'The animation can also be adjusted under the Extra Attributes tab.', align='center') cmds.separator(height=20) cmds.rowColumnLayout(nc=3, cw=[(1, 150), (2, 150), (3, 100)]) cmds.button( label='Generate Spider Web', height=30, command=lambda *args: spiderGen.createSpiderWeb( cmds.floatSliderGrp(secondaryRadiusControl, query=True, value=True ), cmds.floatSliderGrp( secondaryRoundnessControl, query=True, value=True), cmds.floatSliderGrp( spiralStartRadiusControl, query=True, value=True), cmds.floatSliderGrp(spiralStepControl, query=True, value=True), cmds.floatSliderGrp(randomControl, query=True, value=True), cmds.floatSliderGrp(spirallingControl, query=True, value=True), cmds.checkBox(animatedSpider, query=True, value=True), cmds.intField(animStart, query=True, value=True), cmds.intField(animEnd, query=True, value=True), cmds.floatSliderGrp(perfection, query=True, value=True), cmds.checkBox(deleteAnchors, query=True, value=True))) cmds.button(label='Add to Custom shelf', command=shelfButton) cmds.button(label='Reset', command=createUI) cmds.setParent("..") #text cmds.text(l='Joe Withers - 2016', w=400, h=30, ww=True, fn="smallPlainLabelFont") cmds.showWindow()
def UI(): settings.readFromFile(settingsName) #Icon path icon = scriptsDir + "Icons/menuIconFile.png" #Check to see if our window exists if cmds.window("batchExportUI", exists=True): cmds.deleteUI("batchExportUI") #Create UI window window = cmds.window("batchExportUI", title="batchExport", w=400, h=190, mnb=False, mxb=False, sizeable=False, titleBarMenu=True, menuBar=True) #Create main layout mainLayout = cmds.columnLayout(w=400, h=190) #Banner image bannerPath = scriptsDir + "Icons/batchExportBanner.jpg" cmds.image(w=400, h=40, image=bannerPath) #Create our row column layout cmds.separator(height=5) rowColumnLayout = cmds.rowColumnLayout(nc=2, cw=[(1, 360), (2, 40)], columnOffset=[(1, "both", 5), (2, "both", 5)]) #Export Directory cmds.text(label="Export Directory:", align="left") cmds.text(label="") inputField = cmds.textField("inputField", width=360) #Edit the inputfield to have filepath as default defaultDir = getDefaultDir() if defaultDir == "/FBX": cmds.textField("inputField", edit=True, text="SET OUTPUT DIR") else: cmds.textField("inputField", edit=True, text=defaultDir) exportBrowseButton = cmds.symbolButton(w=20, h=25, image=icon, c=browseFilePath) #Origo checkbox cmds.separator(height=10, style="none") cmds.separator(height=10, style="none") rowColumnLayout2 = cmds.rowColumnLayout(nc=2, cw=[(1, 200), (2, 148)]) origoBox = cmds.checkBox("origoBox", label="Move to Origo", value=settings.moveToOrigo, cc=saveSettings) #FBX dropdown cmds.optionMenu("FBXVersion", label="FBXVersion", cc=saveSettings) cmds.menuItem(label='2013') cmds.menuItem(label='2014') cmds.menuItem(label='2016') cmds.optionMenu("FBXVersion", edit=True, v=settings.FBXVersion) #Build Button cmds.separator(height=10, style="none") cmds.separator(height=10, style="none") createButton = cmds.button(label="EXPORT", w=385, h=40, p=mainLayout, c=exportMain) #Show window cmds.showWindow(window)
def __updateInspector(): global CACHE CACHE = {"index": {}, "function": {}, "execute": {}} mc.button("b_execute_FRW", e=True, en=False) l = mc.scrollLayout("sl_inspector_FRW", q=True, ca=True) or [] if len(l): mc.deleteUI(l) if mc.textScrollList("tsl_type_FRW", q=True, nsi=True): t = mc.textScrollList("tsl_type_FRW", q=True, si=True)[0] if mc.textScrollList("tsl_name_FRW", q=True, nsi=True): CACHE["name"] = mc.textScrollList("tsl_name_FRW", q=True, si=True)[0] CACHE["file"] = STAGING_DIR + t + "/" + CACHE[ "name"] + "/" + CACHE["name"] + ".py" if os.path.isfile(CACHE["file"]): m = imp.load_source(CACHE["name"], CACHE["file"]) for n, o in inspect.getmembers(m, inspect.isfunction): CACHE["index"][o.__code__.co_firstlineno] = [ n, inspect.getargspec(o) ] ids = sorted(CACHE["index"].viewkeys()) c = len(ids) for i in range(c): if i == 0: mc.button("b_execute_FRW", e=True, en=True) fn = CACHE["index"][ids[i]][0] CACHE["function"][fn] = { "checkbox": None, "arguments": {}, "presets": {} } mc.rowLayout(nc=10, adj=2, p="sl_inspector_FRW") cb = mc.iconTextCheckBox(i="checkboxOff.png", si="checkboxOn.png", v=__loadStatePreset(fn), cc=partial( __saveStatePreset, ids[i])) CACHE["function"][fn]["checkbox"] = cb mc.text(l=CACHE["index"][ids[i]][0], w=250, al="left", fn="fixedWidthFont") ab = mc.iconTextButton(st="iconOnly", i1="fileOpen.png", ann="load preset", vis=False, c=partial(__loadAllArgPresets, ids[i])) eb = mc.iconTextButton(st="iconOnly", i1="fileSave.png", ann="save preset", vis=False, c=partial(__saveAllArgPresets, ids[i])) db = mc.iconTextButton(st="iconOnly", i1="QR_delete.png", ann="delete preset", vis=False, c=partial(__deleteAllArgPresets, ids[i])) rv = mc.iconTextButton(st="iconOnly", i1="RS_disable.png", ann="reset value", vis=False, c=partial(__resetAllArgValues, ids[i])) mc.text(l="", w=5) CACHE["function"][fn]["error"] = mc.image( i="RS_WarningOldCollection", vis=False) e = mc.iconTextButton(st="iconOnly", i1="timeplay.png", c=partial(__execute, ids[i])) CACHE["execute"][e] = CACHE["index"][ids[i]][0] mc.setParent("..") arg_nms = CACHE["index"][ids[i]][1][0] c_nms = len(arg_nms) arg_val = CACHE["index"][ids[i]][1][3] or [] c_val = len(arg_val) offset = c_nms - c_val # arguments for j in range(offset): if j == 0: for s in [ab, eb, db, rv]: mc.iconTextButton(s, e=True, vis=True) tfg, img = __argumentWidget(j, ids[i], CACHE["index"][ids[i]][0], arg_nms[j], None) CACHE["function"][fn]["arguments"][arg_nms[j]] = tfg CACHE["function"][fn]["presets"][arg_nms[j]] = img # keyword arguments for j in range(c_val): if j == 0: for s in [ab, eb, db, rv]: mc.iconTextButton(s, e=True, vis=True) jj = j + offset tfg, img = __argumentWidget(jj, ids[i], CACHE["index"][ids[i]][0], arg_nms[jj], arg_val[j]) CACHE["function"][fn]["arguments"][arg_nms[jj]] = tfg CACHE["function"][fn]["presets"][arg_nms[jj]] = img if i < c - 1: mc.separator(st="in", w=435, h=10, p="sl_inspector_FRW") # Load at once any available presets for the arguments of the inspected function. __loadArgPreset(ids[i], arg_nms)
import maya.cmds as cmds
def main(force=False): if force: if mc.dockControl("dc_FRW", ex=True) == True: mc.deleteUI("dc_FRW") if mc.window("w_FRW", ex=True): mc.deleteUI("w_FRW") if not mc.window("w_FRW", ex=True): a = mc.window("w_FRW", t="the Fastest Rig in the West") tl = mc.tabLayout() tab1 = mc.paneLayout(cn="horizontal3", st=1, shp=1, ps=[(1, 1, 1), (2, 1, 99), (3, 1, 1)]) mc.columnLayout(adj=True) mc.rowLayout(nc=5, adj=4) mc.iconTextButton(st="iconOnly", i1="QR_add.png", ann="create new asset", c=__createAsset_ui) mc.iconTextButton(st="iconOnly", i1="QR_delete.png", ann="delete selected asset", c=__deleteAsset) mc.iconTextButton(st="iconOnly", i1="CN_refresh.png", ann="update assets list", c=__update) mc.text(l="") mc.iconTextButton(st="iconOnly", i1="UVEditorSnapshot.png", ann="update icon", c=__icon) mc.setParent("..") mc.rowLayout(nc=3, adj=2) mc.textScrollList("tsl_type_FRW", w=100, h=200, sc=__updateNames) mc.textScrollList("tsl_name_FRW", w=170, h=200, sc=__updateIconAndPath) mc.image("img_FRW", w=200, h=200) mc.setParent("..") mc.rowLayout(nc=2, adj=1) mc.textField("tf_path_FRW", ed=False) mc.iconTextButton(st="iconOnly", i1="passSetRelationEditor.png", ann="edit", c=__edit) mc.setParent("..") mc.setParent("..") mc.scrollLayout("sl_inspector_FRW", bv=True) mc.setParent("..") mc.button("b_execute_FRW", l="execute", c=__execute) mc.setParent("..") tab2 = mc.scrollLayout(bv=True) mc.columnLayout("cl_library_FRW", adj=True, rs=5) mc.setParent("..") mc.setParent("..") tab3 = mc.scrollLayout(bv=True) mc.columnLayout("cl_extensions_FRW", adj=True, rs=5) mc.setParent("..") mc.setParent("..") mc.tabLayout(tl, e=True, tl=[(tab1, "builder"), (tab2, "library"), (tab3, "extensions")]) if not mc.dockControl("dc_FRW", ex=True): mc.dockControl("dc_FRW", l="the Fastest Rig in the West", con="w_FRW", aa=["left", "right"], a="left", w=1) mc.dockControl("dc_FRW", e=True, fl=True) else: mc.dockControl("dc_FRW", e=True, vis=True) __initialize() __update() __library() __extensions()
def createUI( windowname, pApplyCallback): '''Creates the user interface which will recieve various inputs from the user which will later be used to build the tree in the treegen function. The user can pick the treetype, the colour of the tree and leaves, the material, the length, the starting angle, the number of iterations, whether they want leaves and apples, the type of leaf, the size of the leaf, and the thickness of the leaves. There are also 4 buttons, Apply will pass the control path names windowname : the name that will be displayed on the GUI pApplyCallback : the function that the inputs will be passed to when the user clicks apply ''' windowID = 'mainwindow' if cmds.window( windowID, exists=True): cmds.deleteUI(windowID) cmds.window( windowID, title= windowname , sizeable=False, resizeToFitChildren=True) cmds.columnLayout( adjustableColumn=True ) #the user interface image that will appear at the top of the window submission_path = "/home/s5113911/PythonProgramming" cmds.image( w =10, h = 150, i= submission_path+"/Project/panarama4.jpg") cmds.separator(h =10, style = 'none') cmds.text( label ='Tree Type:',align='left') #controls to choose the treetype treetype =cmds.radioButtonGrp( label='', labelArray4=['Standard', 'Dispersed', 'Curved', 'Slant'], numberOfRadioButtons=4, select = 1 ) treetype2 = cmds.radioButtonGrp( numberOfRadioButtons=2, shareCollection=treetype, label='', labelArray2=['Square', 'Curved2'] ) cmds.separator(h =10, style = 'none') #control to choose the colour of the tree rgbs = cmds.colorSliderGrp( label='Tree Colour:',columnAlign=(1,'left'), rgb=(0.2, 0.08, 0.0) ) cmds.separator(h =10, style = 'none') #control to choose the colour of the leaves rgbleaves = cmds.colorSliderGrp( label='Leaves Colour:',columnAlign=(1,'left'), rgb=(0.06, 0.2, 0.01) ) cmds.separator(h =10, style = 'none') cmds.text( label ='Material:',align='left') #control to choose the material of the tree materiall =cmds.radioButtonGrp( label='', labelArray3=['Lambert', 'Blinn', 'Phong'], numberOfRadioButtons=3, select = 1 ) cmds.separator(h =10, style = 'none') #slider controls to specify the length, angle and iterations of the tree, (iterations meaning th number of the types the chosen l-system will be iterated length = cmds.floatSliderGrp(label='Height:', minValue=0.05, maxValue=1.0, value=0.6, step=0.01, field=True, columnAlign=[1,'left']) angle = cmds.floatSliderGrp(label='Angle:', minValue=10, maxValue=60, value=25, step=0.01, field=True, columnAlign=[1,'left']) iterations = cmds.intSliderGrp( label='Iterations:', minValue=1, maxValue=5, value=4, step=1, field = True, columnAlign=[1,'left'] ) cmds.separator(h =10, style = 'none') #control to enable or disable apples on the tree applecheck = cmds.checkBoxGrp( numberOfCheckBoxes=1, label='Fruit?: ', columnAlign=[1,'left'] ) cmds.separator(h =10, style = 'none') cmds.separator(h =10, style = 'none') cmds.text( label ='Leaf Type:',align='left') #control to enable or disable apples on the tree leaves =cmds.radioButtonGrp( label='', labelArray2=['Default', 'Maple'], numberOfRadioButtons=2, select = 1, enable = True ) cmds.separator(h =10, style = 'none') cmds.separator(h =10, style = 'none') #control to enable or disable leaves on the tree leafcheck = cmds.checkBoxGrp( numberOfCheckBoxes=1, label='Leaves?: ', columnAlign=[1,'left'], value1 =True, changeCommand1=functools.partial( toggleRadio, leaves ) ) cmds.separator(h =10, style = 'none') cmds.separator(h =10, style = 'none') cmds.text( label ='Leaf Material:',align='left') #control to choose the material of the leaves materialleaves =cmds.radioButtonGrp( label='', labelArray3=['Lambert', 'Blinn', 'Phong'], numberOfRadioButtons=3, select = 1 ) cmds.separator(h =10, style = 'none') cmds.separator(h =10, style = 'none') #control to specify a scaling factor for the leaves leafscale = cmds.floatSliderGrp( label='Leafscale:', minValue=0.1, maxValue=3, value=1.2, step=0.01, field = True, columnAlign=[1,'left']) cmds.separator(h =10, style = 'none') cmds.text( label ='Leaves Thickness:',align='left') #control to specify the 'thickness' of the leaves, e.g if thicker is selected the rule l = ll is added which on average will double the number of leaves created leavesamount =cmds.radioButtonGrp( label='', labelArray2=['Default', 'Thicker'], numberOfRadioButtons=2, select = 1) cmds.separator(h =10, style = 'none') cmds.separator(h =10, style = 'none') #creating and defining the flags of the progress bar, which will allow the user to track the programs progress for each tree generation progressControl = cmds.progressBar(maxValue=8000, width = 300, bgc =[0.23,0.16,0.0] ) cmds.separator(h =10, style = 'none') #when the apply button is pressed, the path names of the various controls are passed to the pApplyCallback function( treegen function) cmds.button( label='Apply', backgroundColor=[0.9,0.9,0.9], command=functools.partial( pApplyCallback, length, iterations, treetype, materiall, rgbs, leafscale, leavesamount, rgbleaves, applecheck, leafcheck, angle, leaves, treetype2, progressControl, materialleaves) ) cmds.separator(h =10, style = 'none') #the 'savemenu' fucntion is called cmds.button( label = 'Save', command=functools.partial(savemenu), backgroundColor=[0.101,0.338,0.017]) cmds.separator(h =10, style = 'none') #The 'previous' function is called cmds.button( label = 'Undo', command=functools.partial(previous), backgroundColor=[0.23,0.16,0.0]) cmds.separator(h =10, style = 'none') cmds.separator(h =10, style = 'none') cmds.separator(h =10, style = 'none') cmds.separator(h =10, style = 'none') #the cancelCallback function is called cmds.button( label = 'Cancel', command=functools.partial( cancelCallback, windowID) ) cmds.separator(h =10, style = 'none') cmds.showWindow() cmds.window(windowID, e=True, width=640)
def editCharacter(*args): if cmds.window("artEditCharacterUI", exists=True): cmds.deleteUI("artEditCharacterUI") window = cmds.window("artEditCharacterUI", w=300, h=400, title="Edit Character", mxb=False, mnb=False, sizeable=True) mainLayout = cmds.columnLayout(w=300, h=400, rs=5, co=["both", 5]) #banner image toolsPath = cmds.internalVar(usd=True) + "mayaTools.txt" if os.path.exists(toolsPath): f = open(toolsPath, 'r') mayaToolsDir = f.readline() f.close() cmds.image(w=300, h=50, image=mayaToolsDir + "/General/Icons/ART/artBanner300px.bmp", parent=mainLayout) cmds.text(label="", h=1, parent=mainLayout) optionMenu = cmds.optionMenu("artProjOptionMenu", label="Project:", w=290, h=40, cc=getProjCharacters, parent=mainLayout) textScrollList = cmds.textScrollList("artProjCharacterList", w=290, h=300, parent=mainLayout) button = cmds.button( w=290, h=40, label="Edit Export File", c=editSelectedCharacter, ann= "Edit the character's skeleton settings, joint positions, or skin weights.", parent=mainLayout) button2 = cmds.button( w=290, h=40, label="Edit Rig File", c=editSelectedCharacterRig, ann= "Edit the character's control rig that will be referenced in by animation.", parent=mainLayout) cmds.text(label="", h=1) cmds.showWindow(window) getProjects() # CRA NEW CODE - Adding the code snippet so that it starts in your favorite folder. #set favorite project if it exists settingsLocation = mayaToolsDir + "/General/Scripts/projectSettings.txt" if os.path.exists(settingsLocation): f = open(settingsLocation, 'r') settings = cPickle.load(f) favoriteProject = settings.get("FavoriteProject") try: cmds.optionMenu("artProjOptionMenu", edit=True, v=favoriteProject) except: pass # CRA END NEW CODE getProjCharacters()
def createMaterialsLayout(self): print("ML Log: createMaterialsLayout") # Create the tab and form layouts. self.materialsTab = cmds.tabLayout(borderStyle="full") self.materialsForm = cmds.formLayout(numberOfDivisions=100) # Add the icon size slider. iconSizeRow = cmds.rowLayout("RPRIconSize", numberOfColumns=2, columnWidth=(1, 22)) cmds.image(image='material_browser/thumbnails.png') self.iconSizeSlider = cmds.intSlider( width=120, step=1, minValue=1, maxValue=4, value=self.getDefaultMaterialIconSize(), dragCommand=self.updateMaterialIconSize) cmds.setParent('..') # Add the search field. searchRow = cmds.rowLayout(numberOfColumns=2) cmds.image(image='material_browser/search.png') self.searchField = cmds.textField( placeholderText="Search...", width=250, height=22, textChangedCommand=self.searchMaterials) cmds.setParent('..') # Add help text. helpText = cmds.text( label= "To import a material, double click it, or select it and click the Import button." ) # Add the background canvas. bg = cmds.canvas(rgbValue=self.backgroundColor) # Add the scroll layout that will contain the material icons. self.materialsContainer = cmds.scrollLayout( backgroundColor=self.backgroundColor, childResizable=True, resizeCommand=self.updateMaterialsLayout) cmds.setParent('..') # Assign the form to the tab. cmds.tabLayout(self.materialsTab, edit=True, tabLabel=((self.materialsForm, 'Materials'))) # Lay out components within the form. cmds.formLayout(self.materialsForm, edit=True, attachForm=[(searchRow, 'top', 5), (searchRow, 'right', 5), (iconSizeRow, 'top', 10), (iconSizeRow, 'left', 6), (self.materialsContainer, 'left', 10), (self.materialsContainer, 'bottom', 10), (self.materialsContainer, 'right', 5), (bg, 'left', 5), (bg, 'bottom', 5), (bg, 'right', 5), (helpText, 'left', 10), (helpText, 'bottom', 8)], attachNone=[(searchRow, 'bottom'), (searchRow, 'left'), (iconSizeRow, 'bottom'), (iconSizeRow, 'right'), (helpText, 'right'), (helpText, 'top')], attachControl=[ (self.materialsContainer, 'top', 10, searchRow), (self.materialsContainer, 'bottom', 10, helpText), (bg, 'top', 5, searchRow), (bg, 'bottom', 5, helpText) ]) cmds.setParent('..') cmds.setParent('..') # Initialize the currently selected category index. self.selectedCategoryIndex = 0
def create_ui(self, pWindowTitle, pApplyCallBack, pSavePreset, pLoadPreset): windowID = 'miniTree' if cmds.window(windowID, exists=True): cmds.deleteUI(windowID) cmds.window(windowID, title=pWindowTitle, sizeable=False, resizeToFitChildren=True, w = 100) cmds.rowColumnLayout(numberOfColumns=1) logopath = cmds.internalVar(upd=True) + "icons/mini_tree_logo.png" cmds.image(image=logopath) cmds.separator(h=10, style='none') cmds.setParent('..') form = cmds.formLayout() tabs = cmds.tabLayout(innerMarginWidth=5, innerMarginHeight=5) cmds.formLayout(form, edit=True, attachForm=((tabs, 'top', 0), (tabs, 'left', 0), (tabs, 'bottom', 0), (tabs, 'right', 0))) child1 = cmds.rowColumnLayout(numberOfColumns=1) cmds.separator(h=10, style='in') cmds.text(label='General', align='center') cmds.separator(h=10, style='in') polyNumberField = cmds.intSliderGrp("polyNumberField", label='Polygons:', min=3, max=20, value=4, step=1, field=True, annotation='Changes number of polygons in each tree segment') treeDepthField = cmds.intSliderGrp("treeDepthField", label='Levels (tree size):', min=1, max=8, value=3, step=1, field=True, annotation='Changes number of branching levels') treeFirstSegmentLength = cmds.floatSliderGrp("treeFirstSegmentLength", label='Base length:', min=0.1, max=5, value=1, step=0.1, field=True, annotation='Increases/decreases the length of the first tree segment') cmds.separator(h=10, style='in') cmds.text(label='Branch length', align='center') cmds.separator(h=10, style='in') treeSegmentLength = cmds.floatSliderGrp("treeSegmentLength", label='Length:', min=0.2, max=20, value=5, step=0.1, field=True, annotation='Changes the initial length of each branch') treeLengthDecrease = cmds.floatSliderGrp("treeLengthDecrease", label='Decrease:', min=0.0, max=1, value=0.8, step=0.01, field=True, annotation='Affects how the length of each branch decreases as the tree grows') cmds.separator(h=10, style='in') cmds.text(label='Trunk/branch radius', align='center') cmds.separator(h=10, style='in') trunkRadius = cmds.floatSliderGrp("trunkRadius", label='Radius:', min=0.1, max=10, value=1, step=0.1, field=True, annotation='Changes the initial radius of the tree trunk') radiusDecrease = cmds.floatSliderGrp("radiusDecrease", label='Decrease:', min=0.0, max=1, value=0.45, step=0.01, field=True, annotation='Affects how the radius of the branches decreases as the tree grows') cmds.separator(h=10, style='in') cmds.text(label='Branching', align='center') cmds.separator(h=10, style='in') treeBranches = cmds.intSliderGrp("treeBranches", label='Max branches:', min=1, max=8, value=2, step=1, field=True, annotation='Changes the maximum number of branches that may occur when branching') treeBranches_a = cmds.floatSliderGrp("treeBranches_a", label='Branches angle:', min=0, max=math.pi, value=0.5, step=0.01, field=True, annotation='Manipulates the angle of braches') cmds.separator(h=10, style='in') cmds.text(label='Randomness', align='center') cmds.separator(h=10, style='in') branchingChance = cmds.floatSliderGrp("branchingChance", label='Branching chance:', min=0, max=1, value=0.9, step=0.01, field=True, annotation='Lower values increase a chance of a branch not appearing') cmds.separator(h=10, style='in') branchAngleChance = cmds.floatSliderGrp("branchAngleChance", label='Angle shift shance:', min=0, max=1, value=0.9, step=0.01, field=True, annotation='Chance of a branch angle deviating from the angle of all other branches') branchAngleRAmount = cmds.floatSliderGrp("branchAngleRAmount", label='Angle random amount:', min=0, max=math.pi, value=math.pi / 6, step=0.01, field=True, annotation='Angle of how much a branch angle can change randomly') cmds.separator(h=10, style='in') branchTurnChance = cmds.floatSliderGrp("branchTurnChance", label='Turn shift chance:', min=0, max=1, value=0.9, step=0.01, field=True, annotation='Chance of a branch turn deviating from the turn of all other branches') branchTurnRAmount = cmds.floatSliderGrp("branchTurnRAmount", label='Turn random amount:', min=0, max=math.pi, value=math.pi / 2, step=0.01, field=True, annotation='Angle of how much a branch can turn randomly') cmds.separator(h=10, style='in') cmds.text(label='Colour', align='center') cmds.separator(h=10, style='in') treeColor = cmds.colorSliderGrp("treeColor", label='Tree colour:', rgb=(0.4, 0.3, 0.3), annotation='Double click the colour to open the palette, changes tree colour') cmds.separator(h=10, style='none') cmds.setParent('..') child2 = cmds.rowColumnLayout(numberOfColumns=1) cmds.separator(h=10, style='in') cmds.text(label='General', align='center') cmds.separator(h=10, style='in') treeFoliageSze = cmds.floatSliderGrp("treeFoliageSze", label='Size:', min=0.1, max=6, value=1, step=0.01, field=True, annotation='Size of each foliage sphere') treeFoliageRes = cmds.intSliderGrp("treeFoliageRes", label='Resolution:', min=0, max=4, value=1, step=1, field=True, annotation='Subdivides each of the foliage spheres') cmds.separator(h=10, style='in') cmds.text(label='More foliage', align='center') cmds.separator(h=10, style='in') treeFoliageNumber = cmds.intSliderGrp("treeFoliageNumber", label='Spheres number:', min=1, max=20, value=1, step=1, field=True, annotation='Number of foliage spheres per branch') treeFoliageSpread = cmds.floatSliderGrp("treeFoliageSpread", label='Randomise positions:', min=0, max=5, value=0, step=0.01, field=True, annotation='Randomise the foliage spheres position (necessary when changing foliage number)') cmds.separator(h=10, style='in') cmds.text(label='Colour', align='center') cmds.separator(h=10, style='in') foliageColor = cmds.colorSliderGrp("foliageColor", label='Foliage colour:', rgb=(0.30, 0.7, 0.40), annotation='Double click the colour to open the palette, changes foliage colour') cmds.separator(h=10, style='none') cmds.setParent('..') cmds.tabLayout(tabs, edit=True, tabLabel=((child1, 'Tree'), (child2, 'Foliage'))) cmds.setParent('..') cmds.setParent('..') cmds.rowColumnLayout(numberOfColumns=1) treeTypeSelect = cmds.radioButtonGrp("treeTypeSelect", label='Tree type', sl=1, labelArray2=['Normal', 'Pine'], numberOfRadioButtons=2) cmds.separator(h=10, style='none') def changeTextFld(*args): cmds.intFieldGrp("randomSeed", edit=True, v1=random.randint(0, 9999)) cmds.separator(h=10, style='none') cmds.separator(h=10, style='none') cmds.rowColumnLayout(numberOfColumns=2) cmds.button(label='Randomize seed', command=changeTextFld, annotation='Changes seed value to a random value') randomSeed = cmds.intFieldGrp("randomSeed", label='Seed:', numberOfFields=1, value1=9981, annotation='Number affecting random generation of the tree') #cmds.separator(h=10, style='none') cmds.setParent('..') cmds.separator(h=10, style='none') cmds.separator(h=10, style='in') cmds.separator(h=10, style='none') cmds.rowColumnLayout(numberOfColumns=3, columnWidth=[(1, 300),(2, 20), (3, 100)]) cmds.button(label='Create tree', h = 60, align='center', annotation='Create a tree using the above settings', command=functools.partial(pApplyCallBack, polyNumberField, treeDepthField, treeSegmentLength, treeLengthDecrease, trunkRadius, radiusDecrease, treeBranches, treeBranches_a, treeFoliageSze, treeFoliageRes, randomSeed, foliageColor, treeColor, treeFoliageNumber, treeFoliageSpread, treeFirstSegmentLength, treeTypeSelect, branchingChance, branchAngleChance, branchTurnChance, branchTurnRAmount, branchAngleRAmount )) cmds.separator(h=10, style='none') cmds.rowColumnLayout(numberOfColumns=1, columnWidth=[(1, 90)]) cmds.button(label='Save preset', annotation='Saves current settings as a preset', command=functools.partial(pSavePreset, polyNumberField, treeDepthField, treeSegmentLength, treeLengthDecrease, trunkRadius, radiusDecrease, treeBranches, treeBranches_a, treeFoliageSze, treeFoliageRes, randomSeed, foliageColor, treeColor, treeFoliageNumber, treeFoliageSpread, treeFirstSegmentLength, treeTypeSelect, branchingChance, branchAngleChance, branchTurnChance, branchTurnRAmount, branchAngleRAmount )) cmds.separator(h=10, style='none') cmds.button(label='Load preset', annotation='Loads current settings as a preset', command=functools.partial(pLoadPreset)) cmds.separator(h=10, style='in') cmds.text('preset_text', label='default', align='center') cmds.setParent('..') cmds.setParent('..') cmds.helpLine() def cancelCallBack(*pArgs): if cmds.window(windowID, exists=True): cmds.deleteUI(windowID) # cmds.button(label='Cancel', command=cancelCallBack) cmds.showWindow()
def windowUI(*args): # create the window if cmds.window("windowUI", exists=True): cmds.deleteUI("windowUI") cmds.window("windowUI", title="Water Droplet Generator v1.2", resizeToFitChildren=True, sizeable=False) # header image cmds.rowColumnLayout(w=380) cmds.image(image="waterDropGenerator_header.png") cmds.setParent("..") # base object layout cmds.frameLayout(label="General", collapsable=False, mw=5, mh=5) cmds.rowColumnLayout(nc=3, cal=[(1, "right")], cw=[(1, 80), (2, 200), (3, 95)]) cmds.text(l="Base Object: ") cmds.textField("baseObject") cmds.button("baseObjectButton", l="Select", c=selectBaseObjectButton) cmds.setParent("..") cmds.separator(h=10, st='in') # density cmds.rowColumnLayout(w=380) cmds.intSliderGrp("dropDensity", l="Density: ", v=1200, cw3=[80, 40, 200], min=1, max=2500, fmx=10000, f=True) # minDropSize cmds.rowColumnLayout(w=380) cmds.floatSliderGrp("minDropSize", l="Minimum Size: ", v=0.02, cw3=[80, 40, 200], min=0.01, max=0.1, fmx=1, f=True, pre=2) # maxDropSize cmds.rowColumnLayout(w=380) cmds.floatSliderGrp("maxDropSize", l="Maximum Size: ", v=0.35, cw3=[80, 40, 200], min=0.1, max=1, fmx=10, f=True, pre=2) cmds.separator(h=10, st='in') # randomness cmds.rowColumnLayout(w=380) cmds.checkBox("optCheckBox", l='Use an optimised randomness combination (recommended)', value=True, onc="cmds.intSliderGrp('randomness', e=True, en=False)", ofc="cmds.intSliderGrp('randomness', e=True, en=True)") cmds.intSliderGrp("randomness", l="Randomness: ", v=8, cw3=[80, 40, 230], min=1, max=8, fmx=10, f=True, enable=False) cmds.separator(h=10, st='in') # extra options cmds.rowColumnLayout(w=380) cmds.frameLayout(label="Extra Options", collapsable=True, cl=True, mw=5, mh=5) cmds.checkBox("smoothCheckBox", l='Smooth preview the waterdrops', value=True) cmds.checkBox("shaderCheckBox", l='Apply a simple blinn water material - NCCA purposes only', value=False) cmds.setParent("..") cmds.separator(h=10, st='in') # check buttons cmds.rowColumnLayout(nc=2, cal=[(1, "right")], cw=[(1, 185), (2, 185)]) cmds.button("checkMeshButton", l="Check Mesh", al="center", c=checkMeshButton, bgc=[0.15, 0.4, 0.15]) cmds.button("subDMeshButton", l="Subdivide Mesh", al="center", c=subDMeshButton, bgc=[0.4, 0.15, 0.15]) cmds.setParent("..") cmds.separator(h=10, st='in') # generate button cmds.button("generateButton", l="Make it rain baby", w=370, h=40, al="center", bgc=[0.4, 0.15, 0.15], c=waterDropsButton) # reset button cmds.button("resetButton", l="Reset to default values", w=370, al="center", c=windowUI) # add to shelf button cmds.button("shelfButton", l="Add this script to the shelf", w=370, al="center", c=shelfButton) # text cmds.text(l='', w=370, h=10, ww=True) cmds.text( l= 'Please bear in mind that the default size values are physically accurate when your object is correctly scaled to real world units.', w=370, h=30, ww=True) cmds.text( l='The algorithm works best on objects with evenly spaced topology.', w=370, h=30, ww=True) cmds.text(l='Zeno Pelgrims - www.graffik.be - NCCA 2014', w=370, h=30, ww=True, fn="smallPlainLabelFont") cmds.showWindow("windowUI")
def EternalCodeUiDef(): if cmds.window('EternalCodeWin', exists=True): cmds.deleteUI('EternalCodeWin', window=True) if cmds.windowPref('EternalCodeWin', exists=True): cmds.windowPref('EternalCodeWin', r=True) cmds.window('EternalCodeWin', title=" ", iconName='Short Name', h=800, w=500, s=0) form = cmds.formLayout(numberOfDivisions=100, w=300) backG = cmds.image( i='B:/Eternal_Code_Directory/Backup/Default_Icons/Back.png') searchImg = cmds.image( i='B:/Eternal_Code_Directory/Backup/Default_Icons/searchResult.png') AddImg = cmds.image( i='B:/Eternal_Code_Directory/Backup/Default_Icons/Store.png') Heading = cmds.text(l=' ', align='center', fn='boldLabelFont', hl=True) search = cmds.textField('searchField', w=200, h=22) searchButton = cmds.symbolButton( i="B:/Eternal_Code_Directory/Backup/Default_Icons/Search box.png", c='Procs.searchScripts()') searchResult = cmds.textScrollList('searchResultList', h=350, w=210) AddToScript = cmds.symbolButton( ann='Add To Notepad', i="B:/Eternal_Code_Directory/Backup/Default_Icons/IDE.png", c='Procs.Notepad()') AuthorButton = cmds.symbolButton(i="UVTkBtnHead.png", ann='Author: "Siddarth Mehra"', c='Procs.Procs.Author() ') sepratorone = cmds.textField(height=2, w=280) name = cmds.textField('NameScriptTxF', w=180, h=25) Sendscript = cmds.scrollField('Codee', w=180, h=330) radiocoll = cmds.radioCollection() radioMel = cmds.radioButton('MelRadio', label='Mel', sl=True) radioPython = cmds.radioButton(label='Python') SendSButton = cmds.symbolButton( ann='Store in Database', i="B:/Eternal_Code_Directory/Backup/Default_Icons/add.png", c='Procs.StoreCode()') cmds.formLayout(form, edit=True, attachForm=[ (backG, 'top', 1), (searchImg, 'top', 220), (searchImg, 'left', 25), (AddImg, 'top', 270), (AddImg, 'left', 280), (search, 'top', 240), (search, 'left', 37), (searchButton, 'left', 218), (searchButton, 'top', 239), (Heading, 'left', 250), (Heading, 'top', 8), (searchResult, 'left', 37), (name, 'top', 305), (name, 'left', 290), (AddToScript, 'left', 50), (AuthorButton, 'bottom', 10), (AuthorButton, 'right', 10), (Sendscript, 'left', 290), (radioMel, 'top', 680), (radioMel, 'left', 300), (radioPython, 'top', 700), (radioPython, 'left', 300), (SendSButton, 'top', 685), (SendSButton, 'left', 360), ], attachControl=[ (searchResult, 'top', 7, search), (AddToScript, 'top', 15, searchResult), (Sendscript, 'top', 8, name), ]) cmds.showWindow('EternalCodeWin')
def botonesUI(directorios='', nameSpace='', sizeButtons=100, parents='', controlAttributos='L_EYE_PUPILA_CNT',heightW=800): global uis uis=dict()#contenedor de gui para colapsar # Creo una fila con 3 columnos grandes cantButColumFila=8 #Paletas de colores color1 = random.uniform(0.0, 1.0), random.uniform( 0.0, 1.0), random.uniform(0.0, 1.0) color2 = [0.3, 0.3, 0.3] color3 = [0.29,0.58,0.96] columMaster=cmds.columnLayout(adjustableColumn=True,parent=parents) # Contengo todo en un solo scroll grande dir_path = os.path.dirname(os.path.realpath(__file__)) if os.path.isfile(dir_path+'\cof_img.xpm'): cmds.symbolButton( image=dir_path+'\cof_img.xpm', width=122, height=35, backgroundColor=[0,0,0], annotation=('www.cofcofstudios.com'), command="cmds.launch(web='http://cofcofstudios.com')",parent=columMaster) else: cmds.image(w = 122, h = 35,backgroundColor=[0,0,0],parent=columMaster) rowGeneral2 = cmds.rowLayout(numberOfColumns=2,height=heightW, adjustableColumn=True ,columnWidth2=(sizeButtons * cantButColumFila,470), columnAttach=[(1, 'both', 0),(2, 'both', 0)]) fm1=cmds.frameLayout(label='CONTROLES', bgc=[0,0,0],parent=rowGeneral2) columna1=cmds.columnLayout(adjustableColumn=True,parent=fm1) cmds.channelBox(maxHeight=heightW/3,parent=columna1) f2=cmds.frameLayout(label='FACIALES',bgc=[0,0,0],parent=rowGeneral2) btnc=cmds.button(l='Colapsar Todas',command=colapsador)#colapsador de ui scroll = cmds.scrollLayout( height=heightW-50,minChildWidth=500,parent=f2) rowGeneral3 = cmds.rowLayout(numberOfColumns=3, columnWidth3=(150,150, 155), adjustableColumn3=1, columnAttach=[(1, 'left', 2),(2, 'both', 2), (3, 'both', 2)]) colRight = cmds.columnLayout(adjustableColumn=True,parent=rowGeneral3) colMid = cmds.columnLayout(adjustableColumn=True,parent=rowGeneral3) colLeft = cmds.columnLayout(adjustableColumn=True,columnOffset=['right',5],parent=rowGeneral3) directorios = sorted_x = OrderedDict(sorted(directorios.items(), key=itemgetter(1)))#Ordena los value del diccionario para que muestre ordenada la lista #directorios = ordenarLeftRighMidDiccionario(directorios) # creo los botones recoriendo el diccionario que creamos def columnForFolderUI(botonesArray=[],sideFace='l_ojo', controlAttributos='L_EYE_PUPILA_CNT',sideParent=None): # Creo una columna para los botones columnAttach=[(1, 'both', 0),(2, 'right', 0)], cl1 = cmds.columnLayout(adjustableColumn=True,columnAttach=['left', 0],parent=sideParent) frameIn = cmds.frameLayout(label=sideFace.upper(), collapsable=True, bgc=color3, parent=cl1) cl2 = cmds.columnLayout(cal='left', cat=['both', 0], columnOffset=[ 'left', 0], adjustableColumn=True, parent=frameIn) cmds.button(label='DisplayLayer', command=partial( displayLayer, sideFace, controlAttributos)) cmds.rowColumnLayout(numberOfRows=1,adjustableColumn=True) barraRotacion=cmds.floatSlider('barra-'+sideFace,min=-180, max=180, value=0, step=1) cmds.floatSlider(barraRotacion,edit=True,changeCommand=partial(rotLayer, sideFace, controlAttributos,barraRotacion),dragCommand=partial( rotLayer, sideFace, controlAttributos,barraRotacion)) cmds.button( label ='R', bgc=[0.5,0.5,0.4],height=30,width=30,command=partial(resetSlide,sideFace,controlAttributos,0,barraRotacion),annotation='Resetea la rotacion de la capa.') cmds.setParent( '..' ) f3=cmds.frameLayout( label='Expresiones', collapsable=True, collapse=False) scroll2 = cmds.scrollLayout( childResizable=True,height=110) rcl1=cmds.rowColumnLayout(numberOfRows=3, bgc=color2) uis.setdefault('scrolles', []).append(frameIn) uis.setdefault('scrolles', []).append(f3) # Para diferenciar las carpeas o frames le pongo diferentes colores # r,g,b=random.uniform(0.0,1.0),random.uniform(0.0,1.0),random.uniform(0.0,1.0) # creo por cada file un boton for ctrl in botonesArray: # valFrame=[s.zfill(2) for s in re.findall(r'\b\d+\b', img)] val = [int(s) for s in re.findall(r'\b\d+\b', ctrl)][0] nameImg=ctrl # Solo si existe algo escrito en la variable nameSpace y si es asi # le agrego el nameSpace al control. if nameSpace is not '': ctrl = nameSpace + ctrl # Agrego el boton y la funcion, con el nombre del value del # diccionario cmds.symbolButton(ctrl, image=key + '\\' + nameImg, width=sizeButtons, height=sizeButtons, backgroundColor=color2, annotation=('Frame Num: '+str(val)+'\n Shift + Click: Lado Opuesto.'), command=partial(getFrame, val, sideFace, controlAttributos)) #por cada carpeta se creara un contenedor de botones for key in directorios: # Ordeno los frames dependiendo de la letra que contengan las carpetas sideFace = key.split('\\')[-1] if sideFace in ['l_parpado_sup','l_ojo','l_pupila','l_parpado_inf','l_cachete','l_extras']: columnForFolderUI(directorios[key], sideFace, controlAttributos, colLeft) elif sideFace in ['r_parpado_sup','r_ojo','r_pupila','r_parpado_inf','r_cachete','r_extras']: columnForFolderUI(directorios[key], sideFace, controlAttributos, colRight) elif sideFace in ['boca','a_diente','b_diente','lengua','extras']: columnForFolderUI(directorios[key], sideFace, controlAttributos, colMid) #cmds.button(btnc,e=True,command=colapsador(uis)) return [columna1,uis,heightW,]