def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Random') self.human = G.app.selectedHuman toolbox = self.addLeftWidget(gui.SliderBox('Randomize settings')) self.macro = toolbox.addWidget(gui.CheckBox("Macro", True)) self.face = toolbox.addWidget(gui.CheckBox("Face", True)) self.body = toolbox.addWidget(gui.CheckBox("Body", True)) self.height = toolbox.addWidget(gui.CheckBox("Height", False)) self.symmetry = toolbox.addWidget( gui.Slider(value=0.7, min=0.0, max=1.0, label="Symmetry")) #self.amount = toolbox.addWidget(gui.Slider(value=0.5, label="Amount")) #self.create = toolbox.addWidget(gui.Button("Replace current")) #self.modify = toolbox.addWidget(gui.Button("Adjust current")) self.randomBtn = toolbox.addWidget(gui.Button("Randomize")) @self.randomBtn.mhEvent def onClicked(event): randomize(self.human, self.symmetry.getValue(), macro=self.macro.selected, height=self.height.selected, face=self.face.selected, body=self.body.selected)
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Mouse') row = [0] def add(widget, name, method): widget.addWidget(gui.TextView(name), row[0], 0) widget.addWidget(AppMouseActionEdit(method), row[0], 1) row[0] += 1 speedBox = self.addLeftWidget(gui.SliderBox('3D Viewport Speed')) self.normal = speedBox.addWidget(gui.Slider(gui3d.app.settings.get('lowspeed', 1), 1, 10, ["Normal speed",": %d"])) self.mouseBox = self.addLeftWidget(gui.GroupBox('Camera')) add(self.mouseBox, "Move", gui3d.app.mouseTranslate) add(self.mouseBox, "Rotate", gui3d.app.mouseRotate) add(self.mouseBox, "Zoom", gui3d.app.mouseZoom) self.invertMouseWheel = self.mouseBox.addWidget(gui.CheckBox("Invert wheel", gui3d.app.settings.get('invertMouseWheel', False))) @self.invertMouseWheel.mhEvent def onClicked(event): gui3d.app.settings['invertMouseWheel'] = self.invertMouseWheel.selected @self.normal.mhEvent def onChange(value): gui3d.app.settings['lowspeed'] = value
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Expression tuning') self.expressions = [ ('eyebrows-left', ['down', 'extern-up', 'inner-up', 'up']), ('eyebrows-right', ['down', 'extern-up', 'inner-up', 'up']), ('eye-left', ['closure', 'opened-up', 'slit']), ('eye-right', ['closure', 'opened-up', 'slit']), ('mouth', [ 'compression', 'corner-puller', 'depression', 'depression-retraction', 'elevation', 'eversion', 'parling', 'part-later', 'protusion', 'pursing', 'retraction', 'upward-retraction', 'open' ]), ('nose', [ 'depression', 'left-dilatation', 'left-elevation', 'right-dilatation', 'right-elevation', 'compression' ]), ('neck', ['platysma']), ] self.include = "All" self.groupBoxes = [] self.radioButtons = [] self.sliders = [] self.modifiers = {} self.categoryBox = self.addRightWidget(gui.GroupBox('Category')) self.groupBox = self.addLeftWidget(gui.StackedBox()) for name, subnames in self.expressions: # Create box box = self.groupBox.addWidget(gui.SliderBox(name.capitalize())) self.groupBoxes.append(box) # Create sliders for subname in subnames: modifier = warpmodifier.WarpModifier( 'data/targets/expression/units/${ethnic}/${gender}_${age}/%s-%s.target' % (name, subname), "face", "GenderAgeEthnic") self.modifiers[name + '-' + subname] = modifier slider = box.addWidget( ExpressionSlider(subname.capitalize(), modifier)) self.sliders.append(slider) modifier.slider = slider # Create radiobutton radio = self.categoryBox.addWidget( GroupBoxRadioButton(self, self.radioButtons, name.capitalize(), box, selected=len(self.radioButtons) == 0)) self.groupBox.showWidget(self.groupBoxes[0])
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Random Custom') self.human = G.app.selectedHuman toolbox = self.addLeftWidget(gui.SliderBox('Randomize settings')) self.macro = toolbox.addWidget(gui.CheckBox("Macro", False)) self.face = toolbox.addWidget(gui.CheckBox("Face", True)) self.body = toolbox.addWidget(gui.CheckBox("Body", True)) self.height = toolbox.addWidget(gui.CheckBox("Height", False)) self.symmetry = toolbox.addWidget(gui.Slider(value=0.2, min=0.0, max=1.0, label="Symmetry")) #self.amount = toolbox.addWidget(gui.Slider(value=0.5, label="Amount")) #self.create = toolbox.addWidget(gui.Button("Replace current")) #self.modify = toolbox.addWidget(gui.Button("Adjust current")) self.eyes_cheek_mouth_sigma = toolbox.addWidget(gui.Slider(value=0.2, min=0.0, max=1.0, label="Eyes cheek mouth Sigma")) self.head_sigma = toolbox.addWidget(gui.Slider(value=0.15, min=0.0, max=1.0, label="Head Sigma")) self.ears_eyebrows_sigma = toolbox.addWidget(gui.Slider(value=0.2, min=0.0, max=1.0, label="Ears eyebrows Sigma")) self.nose_sigma = toolbox.addWidget(gui.Slider(value=0.1, min=0.0, max=1.0, label="Nose Sigma")) self.forehead_neck_chin_sigma = toolbox.addWidget(gui.Slider(value=0.05, min=0.0, max=1.0, label="Forehead neck chin Sigma")) self.randomBtn = toolbox.addWidget(gui.Button("Randomize")) restorebox = self.addLeftWidget(gui.GroupBox('Restore settings')) self.restoreBtn = restorebox.addWidget(gui.Button('Restore to defaults')) @self.restoreBtn.mhEvent def onClicked(event): self.macro.setChecked(False) self.face.setChecked(True) self.body.setChecked(True) self.height.setChecked(False) self.symmetry.setValue(value=0.2) @self.randomBtn.mhEvent def onClicked(event): randomize(self.human, self.symmetry.getValue(), macro=self.macro.selected, height=self.height.selected, face=self.face.selected, body=self.body.selected, sigmas=[self.eyes_cheek_mouth_sigma.getValue(), self.head_sigma.getValue(), self.ears_eyebrows_sigma.getValue(), self.nose_sigma.getValue(), self.forehead_neck_chin_sigma.getValue()])
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Import Measurements') self.human = G.app.selectedHuman toolbox = self.addLeftWidget(gui.SliderBox('Import JSON')) self.loadButton = toolbox.addWidget(gui.BrowseButton(mode='open'), 0, 0) self.loadButton.setLabel('Load ...') self.loadButton.directory = mh.getPath() self.saveAsButton = toolbox.addWidget(gui.Button('Save As...'), 2, 0) @self.loadButton.mhEvent def onClicked(filename): if not filename: return if (os.path.exists(filename)): # read in json information contents = open(filename, 'rU', encoding="utf-8").read() log.debug('File contents read') newMeasurements = json.loads(contents) # validate/process the new measurements #oldValues = dict( [(m.fullName, m.getValue()) for m in self.human.modifiers] ) newValues, oldValues = processMeaurements( self.human, newMeasurements) log.debug("File imported for measurements") # apply new measurements gui3d.app.do(ImportAction(self.human, oldValues, newValues)) log.debug("Imported measurements have been applied") self.filename = filename self.directory = os.path.split(filename)[0] log.debug(oldValues) for key, value in newValues.iteritems(): if key in measures: DebugDump().appendMessage('{0}: {1}'.format( key, str(getMeasure(self.human, key, 'metric')))) else: log.debug( "Imported measurements have been not been applied, file does not exist" ) @self.saveAsButton.mhEvent def onClicked(event): filename = mh.getSaveFileName( mh.getPath(), 'JSON File (*.json);;All files (*.*)') if filename: doSave(filename)
def __init__(self, category): guirender.RenderTaskView.__init__(self, category, 'Aqsis') self.sceneToRender = None optionsBox = self.addLeftWidget(gui.SliderBox('Options')) #Sliders self.shadingRateSlider = optionsBox.addWidget( gui.Slider(value=2, min=0.1, max=10, label="ShadingRate: %.2f")) self.samplesSlider = optionsBox.addWidget( gui.Slider(value=2, min=1.0, max=10, label="Samples: %.2f")) self.skinOilSlider = optionsBox.addWidget( gui.Slider(value=0.3, min=0.0, max=10, label="Skin Oil: %.2f")) #Buttons self.renderButton = optionsBox.addWidget(gui.Button('Render')) @self.shadingRateSlider.mhEvent def onChanging(value): gui3d.app.settings[ 'rendering_aqsis_shadingrate'] = value #Using global dictionary in app for global settings @self.samplesSlider.mhEvent def onChanging(value): gui3d.app.settings['rendering_aqsis_samples'] = value @self.skinOilSlider.mhEvent def onChanging(value): gui3d.app.settings['rendering_aqsis_oil'] = value @self.renderButton.mhEvent def onClicked(event): if not which("aqsis"): gui3d.app.prompt('Aqsis not found', 'You don\'t seem to have aqsis installed.', 'Download', 'Cancel', self.downloadAqsis) return if not self.sceneToRender: self.sceneToRender = mh2renderman.RMRScene(gui3d.app) self.buildShaders() self.sceneToRender.render()
def _load_gui(self): # Create box box = self.addLeftWidget(gui.SliderBox("Expressions")) # Create sliders for posename in self.poseunit_names: slider = box.addWidget(ExprSlider(posename, self)) @slider.mhEvent def onChange(event): slider = event self.modifiers[slider.posename] = slider.getValue() self.updatePose() @slider.mhEvent def onChanging(event): slider = event self.modifiers[slider.posename] = slider.changingValue self.updatePose() self.sliders.append(slider)
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Expression tuning') self.expressions = [ ('eyebrows-left', ['down', 'extern-up', 'inner-up', 'up']), ('eyebrows-right', ['down', 'extern-up', 'inner-up', 'up']), ('eye-left', ['closure', 'opened-up', 'slit']), ('eye-right', ['closure', 'opened-up', 'slit']), ('mouth', [ 'compression', 'corner-puller', 'depression', 'depression-retraction', 'elevation', 'eversion', 'parling', 'part-later', 'protusion', 'pursing', 'retraction', 'upward-retraction', 'open' ]), ('nose', [ 'depression', 'left-dilatation', 'left-elevation', 'right-dilatation', 'right-elevation', 'compression' ]), ('neck', ['platysma']), ] self.include = "All" self.groupBoxes = [] self.radioButtons = [] self.sliders = [] self.modifiers = {} self.targets = {} self.categoryBox = self.addRightWidget(gui.GroupBox('Category')) self.groupBox = self.addLeftWidget(gui.StackedBox()) for name, subnames in self.expressions: # Create box box = self.groupBox.addWidget(gui.SliderBox(name.capitalize())) self.groupBoxes.append(box) # Create sliders for subname in subnames: if _UseWarping: targetName = name + "-" + subname modifier = ExpressionWarpModifier(targetName) else: template = 'data/targets/expression/units/caucasian/%s-%s.target' % ( name, subname) modifier = ExpressionSimpleModifier(template) modifier.setHuman(gui3d.app.selectedHuman) slider = box.addWidget( ExpressionModifierSlider(taskview=self, label=subname.capitalize(), modifier=modifier)) slider.modifier = modifier self.modifiers[name + '-' + subname] = modifier self.sliders.append(slider) modifier.slider = slider # Create radiobutton self.categoryBox.addWidget( GroupBoxRadioButton(self, self.radioButtons, name.capitalize(), box, selected=len(self.radioButtons) == 0)) self.groupBox.showWidget(self.groupBoxes[0])
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Measure') self.ruler = Ruler() self.measureMesh = module3d.Object3D('measure', 2) self.measureMesh.createFaceGroup('measure') names = [] for n, v in self.ruler.Measures.items(): if len(v) % 2 != 0: names.append(n) if len(names) > 0: raise RuntimeError( "One or more measurement rulers contain an uneven number of vertex indices. It's required that they are pairs indicating the begin and end point of every line to draw. Rulers with uneven index count: %s" % ", ".join(names)) del names count = max([len(vertIdx) for vertIdx in self.ruler.Measures.values()]) self.measureMesh.setCoords(np.zeros((count, 3), dtype=np.float32)) self.measureMesh.setUVs(np.zeros((1, 2), dtype=np.float32)) self.measureMesh.setFaces(np.arange(count).reshape((-1, 2))) self.measureMesh.setCameraProjection(0) self.measureMesh.setShadeless(True) self.measureMesh.setDepthless(True) self.measureMesh.setColor([255, 255, 255, 255]) self.measureMesh.setPickable(0) self.measureMesh.updateIndexBuffer() self.measureMesh.priority = 50 self.measureObject = self.addObject(gui3d.Object(self.measureMesh)) measurements = [ ('neck', ['neckcirc', 'neckheight']), ('upperarm', ['upperarm', 'upperarmlenght']), ('lowerarm', ['lowerarmlenght', 'wrist']), ('torso', [ 'frontchest', 'bust', 'underbust', 'waist', 'napetowaist', 'waisttohip', 'shoulder' ]), ('hips', ['hips']), ('upperleg', ['upperlegheight', 'thighcirc']), ('lowerleg', ['lowerlegheight', 'calf']), ('ankle', ['ankle']), ] sliderLabel = { 'neckcirc': 'Neck circum', 'neckheight': 'Neck height', 'upperarm': 'Upper arm circum', 'upperarmlenght': 'Upperarm length', 'lowerarmlenght': 'Lowerarm length', 'wrist': 'Wrist circum', 'frontchest': 'Front chest dist', 'bust': 'Bust circum', 'underbust': 'Underbust circum', 'waist': 'Waist circum', 'napetowaist': 'Nape to waist', 'waisttohip': 'Waist to hip', 'shoulder': 'Shoulder dist', 'hips': 'Hips circum', 'upperlegheight': 'Upperleg height', 'thighcirc': 'Thigh circ.', 'lowerlegheight': 'Lowerleg height', 'calf': 'Calf circum', 'ankle': 'Ankle circum' } self.groupBoxes = {} self.radioButtons = [] self.sliders = [] self.active_slider = None self.modifiers = {} measureDataPath = mh.getSysDataPath("targets/measure/") self.categoryBox = self.addRightWidget(gui.GroupBox('Category')) self.groupBox = self.addLeftWidget(gui.StackedBox()) for name, subnames in measurements: # Create box box = self.groupBox.addWidget(gui.SliderBox(name.capitalize())) self.groupBoxes[name] = box # Create radiobutton box.radio = self.categoryBox.addWidget( GroupBoxRadioButton(self, self.radioButtons, name.capitalize(), box, selected=len(self.radioButtons) == 0)) # Create sliders for subname in subnames: # TODO use another modifier modifier = humanmodifier.Modifier( os.path.join(measureDataPath, "measure-%s-decrease.target" % subname), os.path.join(measureDataPath, "measure-%s-increase.target" % subname)) modifier.setHuman(gui3d.app.selectedHuman) self.modifiers[subname] = modifier slider = box.addWidget( MeasureSlider(sliderLabel[subname], self, subname, modifier)) self.sliders.append(slider) self.lastActive = None self.statsBox = self.addRightWidget(gui.GroupBox('Statistics')) self.height = self.statsBox.addWidget(gui.TextView('Height: ')) self.chest = self.statsBox.addWidget(gui.TextView('Chest: ')) self.waist = self.statsBox.addWidget(gui.TextView('Waist: ')) self.hips = self.statsBox.addWidget(gui.TextView('Hips: ')) ''' self.braBox = self.addRightWidget(gui.GroupBox('Brassiere size')) self.eu = self.braBox.addWidget(gui.TextView('EU: ')) self.jp = self.braBox.addWidget(gui.TextView('JP: ')) self.us = self.braBox.addWidget(gui.TextView('US: ')) self.uk = self.braBox.addWidget(gui.TextView('UK: ')) ''' self.groupBox.showWidget(self.groupBoxes['neck'])
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Face Reconstruction') toolbox = self.addLeftWidget(gui.SliderBox('Face Reconstruction')) self.Dir = toolbox.addWidget(gui.BrowseButton(mode='dir'), 0, 0) self.Dir.setLabel('Face Reference Directory') self.Dir.directory = '.' #mh.getPath('scripts') self.fast = toolbox.addWidget(gui.CheckBox("Fast Method", False)) self.semifast = toolbox.addWidget(gui.CheckBox("Normal Method", False)) self.slow = toolbox.addWidget(gui.CheckBox("Slow Method", False)) self.rslow = toolbox.addWidget(gui.CheckBox("Really Slow Method", False)) self.brute = toolbox.addWidget(gui.CheckBox("Bruteforce Method", False)) self.random = toolbox.addWidget(gui.CheckBox("Random Method (best)", True)) self.epoch = toolbox.addWidget(gui.Slider(5, 4, 20, ["Epoch rounds (only for random method)", ": %d"])) self.iter = toolbox.addWidget(gui.Slider(3, 1, 50, ["Iterations Per Modifier (only for random method)", ": %d"])) self.faceBtn = toolbox.addWidget(gui.Button("Do Face Reconstruction")) self.cam = G.app.modelCamera self.human = gui3d.app.selectedHuman self.fcount = 0 cv2.namedWindow("Face Preview") @self.faceBtn.mhEvent def onClicked(event): if self.Dir.directory == '.': log.error("Not a valid reference folder. Aborting...") return avg = self.createavg() if avg is None: log.error("Not a valid reference folder. Aborting...") return log.notice(self.createavg()) modifierGroups = ['eyebrows', 'eyes', 'chin', 'forehead', 'head', 'mouth', 'nose', 'neck', 'ears', 'cheek'] modifiers = [] for mGroup in modifierGroups: modifiers = modifiers + self.human.getModifiersByGroup(mGroup) # Make sure not all modifiers are always set in the same order # (makes it easy to vary dependent modifiers like ethnics) random.shuffle(modifiers) with open("Output.txt", "w", buffering=1) as text_file: if self.fast.selected: self.checkFace([0.2, 0.2], text_file, avg, modifiers) self.checkFace([-0.4, 0.4], text_file, avg, modifiers) if self.semifast.selected: self.checkFace([-0.4, -0.2, 0.2, 0.4], text_file, avg, modifiers) self.checkFace([-0.8, -0.6, 0.6, 0.8], text_file, avg, modifiers) if self.slow.selected: self.checkFace([-0.2, -0.1, 0.1, 0.2], text_file, avg, modifiers) self.checkFace([-0.4, -0.3, 0.3, 0.4], text_file, avg, modifiers) self.checkFace([-0.6, -0.5, 0.5, 0.6], text_file, avg, modifiers) self.checkFace([-0.8, -0.7, 0.7, 0.8], text_file, avg, modifiers) if self.rslow.selected: self.checkFace([-0.2, -0.1, 0.1, 0.2], text_file, avg, modifiers) self.checkFace([-0.4, -0.3, -0.2, -0.1, 0.1, 0.2, 0.3, 0.4], text_file, avg, modifiers) self.checkFace([-0.6, -0.5,-0.4, -0.3, -0.2, -0.1, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6], text_file, avg, modifiers) self.checkFace([-0.8, -0.7,-0.6, -0.5,-0.4, -0.3, -0.2, -0.1, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8], text_file, avg, modifiers) if self.brute.selected: self.checkFace([-0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8],text_file, avg, modifiers) if self.random.selected: ip = 0.2 for j in range(int(self.epoch.getValue())): self.checkFace(None,text_file, avg, modifiers,imin=-ip,imax=ip,c=int(self.iter.getValue()),irandom=True) ip = min(ip + 0.2, 1.0) mh.redraw()
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Settings') self.shaderGroup = [] shaderBox = self.addLeftWidget(gui.GroupBox('Shader')) self.shaderNo = shaderBox.addWidget( gui.RadioButton(self.shaderGroup, "No shader", True)) self.shaderPhong = shaderBox.addWidget( gui.RadioButton(self.shaderGroup, "Phong shader")) self.shaderToon = shaderBox.addWidget( gui.RadioButton(self.shaderGroup, "Toon shader")) #self.shaderSkin = shaderBox.addWidget(gui.RadioButton(self.shaderGroup, "Skin shader")) sliderBox = self.addLeftWidget(gui.GroupBox('Slider behavior')) self.realtimeUpdates = sliderBox.addWidget( gui.CheckBox("Update real-time", gui3d.app.settings.get('realtimeUpdates', True))) self.realtimeNormalUpdates = sliderBox.addWidget( gui.CheckBox("Update normals real-time", gui3d.app.settings.get('realtimeNormalUpdates', True))) self.cameraAutoZoom = sliderBox.addWidget( gui.CheckBox("Auto-zoom camera", gui3d.app.settings.get('cameraAutoZoom', True))) self.sliderImages = sliderBox.addWidget( gui.CheckBox("Slider images", gui3d.app.settings.get('sliderImages', True))) mouseBox = self.addLeftWidget(gui.SliderBox('Mouse behavior')) self.normal = mouseBox.addWidget( gui.Slider(gui3d.app.settings.get('lowspeed', 1), 1, 10, "Normal: %d")) self.shift = mouseBox.addWidget( gui.Slider(gui3d.app.settings.get('highspeed', 5), 1, 10, "Shift: %d")) modes = [] unitBox = self.unitsBox = self.addLeftWidget(gui.GroupBox('Units')) metric = unitBox.addWidget( gui.RadioButton( modes, 'Metric', gui3d.app.settings.get('units', 'metric') == 'metric')) imperial = unitBox.addWidget( gui.RadioButton( modes, 'Imperial', gui3d.app.settings.get('units', 'metric') == 'imperial')) libraryBox = self.addLeftWidget(gui.GroupBox('Library behavior')) self.jumpToModelling = libraryBox.addWidget( gui.CheckBox("To Modelling after choice", gui3d.app.settings.get('jumpToModelling', True))) themes = [] themesBox = self.themesBox = self.addRightWidget(gui.GroupBox('Theme')) self.themeNative = themesBox.addWidget( ThemeRadioButton(themes, "Native look", "default")) self.themeMH = themesBox.addWidget( ThemeRadioButton(themes, "MakeHuman", "makehuman")) # For debugging themes on multiple platforms ''' platforms = [] platformsBox = self.platformsBox = self.addRightWidget(gui.GroupBox('Look and feel')) for platform in gui3d.app.getLookAndFeelStyles(): platformsBox.addWidget(PlatformRadioButton(platforms, platform)) ''' # We might allow overriding the font from the style, but for now loaded fonts can be used from a style ''' fonts = [] fontsBox = self.fontsBox = self.addRightWidget(gui.GroupBox('Font')) fontsBox.addWidget(FontRadioButton(fonts, "Default")) for font in gui3d.app.getCustomFonts(): fontsBox.addWidget(FontRadioButton(fonts, font)) ''' languages = [] languageBox = self.languageBox = self.addRightWidget( gui.GroupBox('Language')) languageBox.addWidget(LanguageRadioButton(languages, 'english')) languageFiles = [ os.path.basename(filename).replace('.ini', '') for filename in os.listdir('data/languages') if filename.split(os.extsep)[-1] == "ini" ] for language in languageFiles: languageBox.addWidget(LanguageRadioButton(languages, language)) @self.shaderNo.mhEvent def onClicked(event): human = gui3d.app.selectedHuman human.mesh.setShader(None) @self.shaderPhong.mhEvent def onClicked(event): self.setShader("data/shaders/glsl/phong") @self.shaderToon.mhEvent def onClicked(event): self.setShader("data/shaders/glsl/toon") #@self.shaderSkin.mhEvent #def onClicked(event): #self.setShader("data/shaders/glsl/skin") #gui3d.app.selectedHuman.mesh.setShaderParameter("gradientMap", "data/textures/color_temperature.png") #gui3d.app.selectedHuman.mesh.setShaderParameter("ambientOcclusionMap", "data/textures/female_young.tif") @self.realtimeUpdates.mhEvent def onClicked(event): gui3d.app.settings[ 'realtimeUpdates'] = self.realtimeUpdates.selected @self.realtimeNormalUpdates.mhEvent def onClicked(event): gui3d.app.settings[ 'realtimeNormalUpdates'] = self.realtimeNormalUpdates.selected @self.cameraAutoZoom.mhEvent def onClicked(event): gui3d.app.settings['cameraAutoZoom'] = self.cameraAutoZoom.selected @self.sliderImages.mhEvent def onClicked(event): gui3d.app.settings['sliderImages'] = self.sliderImages.selected gui.Slider.showImages(self.sliderImages.selected) mh.refreshLayout() @self.normal.mhEvent def onChange(value): gui3d.app.settings['lowspeed'] = value @self.shift.mhEvent def onChange(value): gui3d.app.settings['highspeed'] = value @metric.mhEvent def onClicked(event): gui3d.app.settings['units'] = 'metric' @imperial.mhEvent def onClicked(event): gui3d.app.settings['units'] = 'imperial' @self.jumpToModelling.mhEvent def onClicked(event): gui3d.app.settings[ 'jumpToModelling'] = self.jumpToModelling.selected
def __init__(self, category): gui3d.TaskView.__init__(self, category, 'Random') toolbox = self.addLeftWidget(gui.SliderBox('Tools')) self.macro = toolbox.addWidget(gui.CheckBox("Macro", True)) self.height = toolbox.addWidget(gui.CheckBox("Height")) self.face = toolbox.addWidget(gui.CheckBox("Face")) self.symmetry = toolbox.addWidget( gui.Slider(value=-1.0, min=-1.0, max=1.0, label="Symmetry")) self.amount = toolbox.addWidget(gui.Slider(value=0.5, label="Amount")) self.create = toolbox.addWidget(gui.Button("Replace current")) self.modify = toolbox.addWidget(gui.Button("Adjust current")) self.lastRandoms = {} @self.create.mhEvent def onClicked(event): #human = gui3d.app.selectedHuman # human.resetMeshValues() self.lastRandoms = {} if self.macro.selected: self.storeLastRandom('gender', 0.5, random.random() - 0.5) self.storeLastRandom('age', 0.5, random.random() - 0.5) self.storeLastRandom('muscle', 0.5, random.random() - 0.5) self.storeLastRandom('weight', 0.5, random.random() - 0.5) if self.height.selected: self.storeLastRandom('height', 0, random.random() * 2 - 1) if self.face.selected: category = gui3d.app.getCategory('Modelling') taskview = category.getTaskByName('Face') modifiers = taskview.getModifiers() symmetricModifiers = taskview.getSymmetricModifierPairNames() for pair in symmetricModifiers: #print "symmetric: "+pair['left']+' and '+pair['right'] leftValue = random.gauss(0, 0.5) rightValue = random.gauss(0, 0.5) # store randoms for later self.storeLastRandom(pair['left'], 0, leftValue) self.storeLastRandom(pair['right'], 0, rightValue) singularModifiers = taskview.getSingularModifierNames() for modName in singularModifiers: #print "singular: "+modName # get random gaussian value = random.gauss(0, 0.5) # non-asymmetric modifiers should only go 0..1 m = modifiers[modName] if m.clampValue(-1.0) >= 0: value = abs(value) # store for later self.storeLastRandom(modName, 0, value) self.setModifiers() @self.modify.mhEvent def onClicked(event): human = gui3d.app.selectedHuman if self.macro.selected: self.storeLastRandom('gender', human.getGender(), random.random() - 0.5) self.storeLastRandom('age', human.getAge(), random.random() - 0.5) self.storeLastRandom('weight', human.getWeight(), random.random() - 0.5) self.storeLastRandom('muscle', human.getMuscle(), random.random() - 0.5) if self.height.selected: self.storeLastRandom('height', human.getHeight(), random.random() - 0.5) if self.face.selected: category = gui3d.app.getCategory('Modelling') taskview = category.getTaskByName('Face') modifiers = taskview.getModifiers() symmetricModifiers = taskview.getSymmetricModifierPairNames() for pair in symmetricModifiers: #print "symmetric: "+pair['left']+' and '+pair['right'] leftValue = random.gauss(0, 0.5) rightValue = random.gauss(0, 0.5) # store randoms for later self.storeLastRandom( pair['left'], modifiers[pair['left']].getValue(human), leftValue) self.storeLastRandom( pair['right'], modifiers[pair['right']].getValue(human), rightValue) singularModifiers = taskview.getSingularModifierNames() for modName in singularModifiers: #print "singular: "+modName # get random gaussian value = random.gauss(0, 0.5) # non-asymmetric modifiers should only go 0..1 m = modifiers[modName] if m.clampValue(-1.0) >= 0: value = abs(value) # store for later self.storeLastRandom(modName, modifiers[modName].getValue(human), value) self.setModifiers() @self.amount.mhEvent def onChange(value): self.setModifiers() @self.symmetry.mhEvent def onChange(value): self.setModifiers()