def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Material', label='Skin/Material') filecache.MetadataCacher.__init__(self, 'mhmat', 'material_filecache.mhc') self.cache_format_version = '1b' # Override cache file version for materials, because we added metadata fields self.human = gui3d.app.selectedHuman self.materials = None self.filechooser = self.addRightWidget(fc.IconListFileChooser(self.materials, 'mhmat', ['thumb', 'png'], mh.getSysDataPath('skins/notfound.thumb'), name='Material')) self.filechooser.setIconSize(50,50) self.filechooser.enableAutoRefresh(False) #self.filechooser.setFileLoadHandler(fc.MhmatFileLoader()) #self.addLeftWidget(self.filechooser.createSortBox()) @self.filechooser.mhEvent def onFileSelected(filename): mat = material.fromFile(filename) human = self.human obj = self.humanObjSelector.getSelectedObject() if obj: gui3d.app.do(MaterialAction(obj, mat)) self.humanObjSelector = self.addLeftWidget(HumanObjectSelector(self.human)) @self.humanObjSelector.mhEvent def onActivate(value): self.reloadMaterialChooser() self.filechooser.setFileLoadHandler(fc.TaggedFileLoader(self)) self.addLeftWidget(self.filechooser.createTagFilter())
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Material Editor') self.human = gui3d.app.selectedHuman self.humanObjSelector = self.addLeftWidget(HumanObjectSelector(self.human)) @self.humanObjSelector.mhEvent def onActivate(value): self.reloadMaterial() shaderBox = self.addLeftWidget(gui.GroupBox('Shader')) self.shaderList = shaderBox.addWidget(gui.ListView()) self.shaderList.setSizePolicy(gui.SizePolicy.Ignored, gui.SizePolicy.Preferred) self.shaderConfBox = self.addLeftWidget(gui.GroupBox('Shader config')) shaderConfig = self.human.material.shaderConfig for name in shaderConfig: chkBox = gui.CheckBox(name, shaderConfig[name]) self.shaderConfBox.addWidget(chkBox) @chkBox.mhEvent def onClicked(event): shaderConfig = dict() for child in self.shaderConfBox.children: shaderConfig[str(child.text())] = child.isChecked() self.getSelectedObject().material.configureShading(**shaderConfig) self.shaderDefBox = self.addLeftWidget(gui.GroupBox('Custom shader defines')) self.paramBox = self.addRightWidget(gui.GroupBox('Shader parameters')) self.materialBox = self.addRightWidget(gui.GroupBox('Material settings')) if not shader.Shader.supported(): log.notice('Shaders not supported') self.shaderList.setEnabled(False) self.shaderList.hide() self.paramBox.hide() @self.shaderList.mhEvent def onClicked(item): self.setShader(unicode(item.getUserData())) self.loadSaveBox = self.addRightWidget(gui.GroupBox("Material file")) self.loadMaterialBtn = self.loadSaveBox.addWidget(gui.BrowseButton(), 0, 0) self.loadMaterialBtn.setFilter("MakeHuman Material (*.mhmat)") self.loadMaterialBtn.setText('Load') @self.loadMaterialBtn.mhEvent def onClicked(path): if path: self.loadMaterial(path) self.saveMaterialBtn = self.loadSaveBox.addWidget(gui.BrowseButton('save'), 0, 1) self.saveMaterialBtn.setFilter("MakeHuman Material (*.mhmat)") self.saveMaterialBtn.setText('Save') @self.saveMaterialBtn.mhEvent def onClicked(path): if path: if not os.path.splitext(path)[1]: path = path + ".mhmat" self.saveMaterial(path)
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Material', label='Skin/Material') self.human = gui3d.app.selectedHuman # Paths, in order, in which relative material filepaths will be searched self.searchPaths = [mh.getPath(), mh.getSysDataPath()] self.searchPaths = [os.path.abspath(p) for p in self.searchPaths] self.materials = None self.filechooser = self.addRightWidget( fc.IconListFileChooser(self.materials, 'mhmat', ['thumb', 'png'], mh.getSysDataPath('skins/notfound.thumb'), name='Material')) self.filechooser.setIconSize(50, 50) self.filechooser.enableAutoRefresh(False) #self.filechooser.setFileLoadHandler(fc.MhmatFileLoader()) #self.addLeftWidget(self.filechooser.createSortBox()) @self.filechooser.mhEvent def onFileSelected(filename): mat = material.fromFile(filename) human = self.human obj = self.humanObjSelector.getSelectedObject() if obj: gui3d.app.do(MaterialAction(obj, mat)) self.humanObjSelector = self.addLeftWidget( HumanObjectSelector(self.human)) @self.humanObjSelector.mhEvent def onActivate(value): self.reloadMaterialChooser()