Beispiel #1
0
    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)
Beispiel #2
0
    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()
Beispiel #7
0
    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)
Beispiel #8
0
    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])
Beispiel #9
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
Beispiel #12
0
    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()