コード例 #1
0
 def updateFilenameCaption(self):
     """Calculate and set the window title according to the
     name of the current open file and the version of MH."""
     filename = self.currentFile.name
     if filename is None:
         filename = "Untitled"
     if mh.isRelease():
         from getpath import pathToUnicode
         self.setCaption("MakeHuman %s - [%s][*]" %
                         (mh.getVersionStr(), pathToUnicode(filename)))
     else:
         from getpath import pathToUnicode
         self.setCaption("MakeHuman r%s (%s) - [%s][*]" %
                         (os.environ['HGREVISION'], os.environ['HGNODEID'],
                          pathToUnicode(filename)))
     self.mainwin.setWindowModified(self.currentFile.modified)
コード例 #2
0
def load(app):
    category = app.getCategory('Pose/Animate')
    maintask = skeletonlibrary.SkeletonLibrary(category)
    maintask.sortOrder = 3
    category.addTask(maintask)

    human = gui3d.app.selectedHuman
    app.addLoadHandler('skeleton', maintask.loadHandler)
    app.addSaveHandler(maintask.saveHandler)

    if not mh.isRelease():
        from . import debugtab
        debugtask = debugtab.SkeletonDebugLibrary(category, maintask)
        debugtask.sortOrder = 3
        category = app.getCategory('Utilities')
        category.addTask(debugtask)
コード例 #3
0
ファイル: __init__.py プロジェクト: kingomyths/mhx_os
def load(app):
    import gui3d
    import mh
    category = app.getCategory('Pose/Animate')
    maintask = skeletonlibrary.SkeletonLibrary(category)
    maintask.sortOrder = 3
    category.addTask(maintask)

    human = gui3d.app.selectedHuman
    app.addLoadHandler('skeleton', maintask.loadHandler)
    app.addSaveHandler(maintask.saveHandler)

    if not mh.isRelease():
        from . import debugtab
        debugtask = debugtab.SkeletonDebugLibrary(category, maintask)
        debugtask.sortOrder = 3
        category = app.getCategory('Utilities')
        category.addTask(debugtask)
コード例 #4
0
    def __init__(self, category):
        gui3d.TaskView.__init__(self, category, 'General')
        self.checkboxes = []

        sliderBox = self.addLeftWidget(gui.GroupBox('Slider behavior'))
        self.realtimeUpdates = sliderBox.addWidget(
            SettingCheckbox("Update real-time", 'realtimeUpdates'))

        self.realtimeNormalUpdates = sliderBox.addWidget(
            SettingCheckbox("Update normals real-time",
                            'realtimeNormalUpdates'))

        self.realtimeFitting = sliderBox.addWidget(
            SettingCheckbox("Fit objects real-time", 'realtimeFitting'))

        self.cameraAutoZoom = sliderBox.addWidget(
            SettingCheckbox("Auto-zoom camera", 'cameraAutoZoom'))

        def updateSliderImages(selected):
            gui.Slider.showImages(selected)
            mh.refreshLayout()

        self.sliderImages = sliderBox.addWidget(
            SettingCheckbox("Slider images", 'sliderImages',
                            updateSliderImages))

        modes = []
        unitBox = self.addLeftWidget(gui.GroupBox('Units'))
        self.metric = unitBox.addWidget(
            gui.RadioButton(modes, 'Metric',
                            gui3d.app.getSetting('units') == 'metric'))
        self.imperial = unitBox.addWidget(
            gui.RadioButton(modes, 'Imperial',
                            gui3d.app.getSetting('units') == 'imperial'))

        weights = []
        weightBox = self.addLeftWidget(gui.GroupBox('Weight'))
        self.rel_weight = weightBox.addWidget(
            gui.RadioButton(weights, 'Relative Weight',
                            not gui3d.app.getSetting('real_weight')))
        self.real_weight = weightBox.addWidget(
            gui.RadioButton(weights, 'Real Weight',
                            gui3d.app.getSetting('real_weight')))

        tagFilter = []
        self.tagFilterBox = self.addLeftWidget(gui.GroupBox('Tag Filter Mode'))
        self.or_mode = self.tagFilterBox.addWidget(
            gui.RadioButton(tagFilter, 'OR',
                            gui3d.app.getSetting('tagFilterMode') == 'OR'), 0,
            0)
        self.and_mode = self.tagFilterBox.addWidget(
            gui.RadioButton(tagFilter, 'AND',
                            gui3d.app.getSetting('tagFilterMode') == 'AND'), 0,
            1)
        self.nor_mode = self.tagFilterBox.addWidget(
            gui.RadioButton(tagFilter, 'NOT OR',
                            gui3d.app.getSetting('tagFilterMode') == 'NOR'), 1,
            0)
        self.nand_mode = self.tagFilterBox.addWidget(
            gui.RadioButton(tagFilter, 'NOT AND',
                            gui3d.app.getSetting('tagFilterMode') == 'NAND'),
            1, 1)

        tagsBox = self.addLeftWidget(gui.GroupBox('Tags Count'))
        self.countEdit = tagsBox.addWidget(gui.TextEdit(
            str(gui3d.app.getSetting('tagCount'))),
                                           0,
                                           0,
                                           columnSpan=0)
        tagsBox.addWidget(gui.TextView(' Tags '), 0, 1)
        self.countEdit.textChanged.connect(self.onTextChanged)

        nameBox = self.addLeftWidget(gui.GroupBox('Name Tags:'))
        self.useNameTags = nameBox.addWidget(
            SettingCheckbox('Use Name Tags', 'useNameTags'))

        self.createFilterModeSwitch()

        startupBox = self.addLeftWidget(gui.GroupBox('Startup'))

        def hdpiPostAction(action):
            if action:
                gui3d.app.prompt(
                    'Info',
                    'You need to restart for HDPI changes to be applied.',
                    'OK',
                    helpId='useHDPI')

        self.preload = startupBox.addWidget(
            SettingCheckbox("Preload macro targets", 'preloadTargets'))
        self.saveScreenSize = startupBox.addWidget(
            SettingCheckbox("Restore window size", 'restoreWindowSize'))
        self.useHDPI = startupBox.addWidget(
            SettingCheckbox("Use HDPI", 'useHDPI', hdpiPostAction))

        resetBox = self.addLeftWidget(gui.GroupBox('Restore settings'))
        self.resetButton = resetBox.addWidget(
            gui.Button("Restore to defaults"))

        @self.resetButton.mhEvent
        def onClicked(event):
            gui3d.app.resetSettings()
            self.updateGui()

        homeBox = gui.GroupBox('Configure Home Folder')
        self.addLeftWidget(homeBox)
        self.homeButton = homeBox.addWidget(gui.Button(''))
        if hasConfigFile():
            self.homeButton.setLabel('Delete Config File')
        else:
            self.homeButton.setLabel('Create Config File')

        @self.homeButton.mhEvent
        def onClicked(event):
            if hasConfigFile():
                os.remove(getConfigPath('makehuman.conf'))
                self.homeButton.setLabel('Create Config File')
                gui3d.app.statusPersist('Home Folder Location: Default')
            else:
                filePath = getConfigPath('makehuman.conf')
                homePath = formatPath(getExistingDirectory(getHomePath()))
                if homePath != '.':
                    if sys.platform.startswith(
                            'darwin') or sys.platform.startswith(
                                'linux') and not os.path.isdir(
                                    getConfigPath('')):
                        os.makedirs(getConfigPath(''))
                    if os.path.isdir(homePath) and os.path.isdir(
                            getConfigPath('')):
                        with io.open(filePath, 'w', encoding='utf-8') as f:
                            f.writelines(homePath + '\n')
                    self.homeButton.setLabel('Delete Config File')
                    gui3d.app.statusPersist('Home Folder Location: ' +
                                            homePath)

        self.checkboxes.extend([
            self.realtimeUpdates, self.realtimeNormalUpdates,
            self.realtimeFitting, self.cameraAutoZoom, self.sliderImages,
            self.useNameTags, self.preload, self.saveScreenSize
        ])

        themes = []
        self.themesBox = self.addRightWidget(gui.GroupBox('Theme'))
        self.themeNative = self.themesBox.addWidget(
            ThemeRadioButton(themes, "Native look", "default"))
        self.themeMH = self.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))
        '''

        languages = []
        self.languageBox = self.addRightWidget(gui.GroupBox('Language'))

        languageFiles = gui3d.app.getLanguages()
        for language in languageFiles:
            if not language.lower() == "master":
                self.languageBox.addWidget(
                    LanguageRadioButton(languages, language))
        if not mh.isRelease():
            self.languageBox.addWidget(LanguageRadioButton(
                languages, "master"))

        @self.metric.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('units', 'metric')
            gui3d.app.loadGrid()

        @self.imperial.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('units', 'imperial')
            gui3d.app.loadGrid()

        @self.rel_weight.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('real_weight', False)

        @self.real_weight.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('real_weight', True)

        @self.and_mode.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('tagFilterMode', 'AND')

        @self.or_mode.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('tagFilterMode', 'OR')

        @self.nor_mode.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('tagFilterMode', 'NOR')

        @self.nand_mode.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('tagFilterMode', 'NAND')

        self.updateGui()
コード例 #5
0
    def __init__(self):
        if G.app is not None:
            raise RuntimeError('MHApplication is a singleton')
        G.app = self
        gui3d.Application.__init__(self)
        mh.Application.__init__(self)

        self.shortcuts = {
            # Actions
            'undo': (mh.Modifiers.CTRL, mh.Keys.z),
            'redo': (mh.Modifiers.CTRL, mh.Keys.y),
            'modelling': (mh.Modifiers.CTRL, mh.Keys.m),
            'save': (mh.Modifiers.CTRL, mh.Keys.s),
            'load': (mh.Modifiers.CTRL, mh.Keys.l),
            'export': (mh.Modifiers.CTRL, mh.Keys.e),
            'rendering': (mh.Modifiers.CTRL, mh.Keys.r),
            'help': (mh.Modifiers.CTRL, mh.Keys.h),
            'exit': (mh.Modifiers.CTRL, mh.Keys.q),
            'stereo': (mh.Modifiers.CTRL, mh.Keys.w),
            'wireframe': (mh.Modifiers.CTRL, mh.Keys.f),
            'savetgt': (mh.Modifiers.ALT, mh.Keys.t),
            'qexport': (mh.Modifiers.ALT, mh.Keys.e),
            'smooth': (mh.Modifiers.ALT, mh.Keys.s),
            'grab': (mh.Modifiers.ALT, mh.Keys.g),
            'profiling': (mh.Modifiers.ALT, mh.Keys.p),
            # Camera navigation
            'rotateD': (0, mh.Keys.N2),
            'rotateL': (0, mh.Keys.N4),
            'rotateR': (0, mh.Keys.N6),
            'rotateU': (0, mh.Keys.N8),
            'panU': (0, mh.Keys.UP),
            'panD': (0, mh.Keys.DOWN),
            'panR': (0, mh.Keys.RIGHT),
            'panL': (0, mh.Keys.LEFT),
            'zoomIn': (0, mh.Keys.PLUS),
            'zoomOut': (0, mh.Keys.MINUS),
            'front': (0, mh.Keys.N1),
            'right': (0, mh.Keys.N3),
            'top': (0, mh.Keys.N7),
            'back': (mh.Modifiers.CTRL, mh.Keys.N1),
            'left': (mh.Modifiers.CTRL, mh.Keys.N3),
            'bottom': (mh.Modifiers.CTRL, mh.Keys.N7),
            'resetCam': (0, mh.Keys.PERIOD),
            # Version check
            '_versionSentinel': (0, 0x87654321)
        }

        self.mouseActions = {
            (0, mh.Buttons.LEFT_MASK): self.mouseRotate,
            (0, mh.Buttons.RIGHT_MASK): self.mouseZoom,
            (0, mh.Buttons.MIDDLE_MASK): self.mouseTranslate,
            (mh.Modifiers.CTRL, mh.Buttons.RIGHT_MASK): self.mouseFocus
        }

        if mh.isRelease():
            self.settings = {
                'realtimeUpdates':
                True,
                'realtimeFitting':
                True,
                'sliderImages':
                True,
                'excludePlugins': [
                    "7_data",
                    "7_example",
                    "7_material_editor",
                    "7_profile",
                    "7_scene_editor",
                    "7_scripting",
                    "7_shell",
                    "7_targets",
                ],
                'rtl':
                False,
                'invertMouseWheel':
                False,
                'lowspeed':
                1,
                'preloadTargets':
                True,
                'cameraAutoZoom':
                False,
                'language':
                'english',
                'highspeed':
                5,
                'realtimeNormalUpdates':
                True,
                'units':
                'metric',
                'guiTheme':
                'makehuman',
                'restoreWindowSize':
                True
            }
        else:
            self.settings = {
                'realtimeUpdates': True,
                'realtimeFitting': True,
                'realtimeNormalUpdates': True,
                'cameraAutoZoom': False,
                'lowspeed': 1,
                'highspeed': 5,
                'units': 'metric',
                'invertMouseWheel': False,
                'language': 'english',
                'excludePlugins': [],
                'rtl': False,
                'sliderImages': True,
                'guiTheme': 'makehuman',
                'preloadTargets': False,
                'restoreWindowSize': False
            }

        self.loadHandlers = {}
        self.saveHandlers = []

        self.dialog = None
        self.helpIds = set()

        self.tool = None
        self.selectedGroup = None

        self.undoStack = []
        self.redoStack = []

        self.actions = Expando()

        self.clearColor = [0.5, 0.5, 0.5]
        self.gridColor = [1.0, 1.0, 1.0]
        self.gridSubColor = [0.7, 0.7, 0.7]

        self.modules = {}

        self.selectedHuman = None
        self.currentFile = managed_file.File()
        self._scene = None
        self.backplaneGrid = None
        self.groundplaneGrid = None

        self.theme = None

        @self.currentFile.mhEvent
        # def onModified(event):
        #    self.updateFilenameCaption()

        #self.modelCamera = mh.Camera()
        #self.modelCamera.switchToOrtho()
        #self.modelCamera = mh.OrbitalCamera()
        #self.modelCamera.debug = True

        #@self.modelCamera.mhEvent
        def onChanged(event):
            for category in self.categories.itervalues():
                for task in category.tasks:
                    task.callEvent('onCameraChanged', event)
コード例 #6
0
    def __init__(self, category):
        gui3d.TaskView.__init__(self, category, 'General')
        self.checkboxes = []

        sliderBox = self.addLeftWidget(gui.GroupBox('Slider behavior'))
        self.realtimeUpdates = sliderBox.addWidget(
            SettingCheckbox("Update real-time", 'realtimeUpdates'))

        self.realtimeNormalUpdates = sliderBox.addWidget(
            SettingCheckbox("Update normals real-time",
                            'realtimeNormalUpdates'))

        self.realtimeFitting = sliderBox.addWidget(
            SettingCheckbox("Fit objects real-time", 'realtimeFitting'))

        self.cameraAutoZoom = sliderBox.addWidget(
            SettingCheckbox("Auto-zoom camera", 'cameraAutoZoom'))

        def updateSliderImages(selected):
            gui.Slider.showImages(selected)
            mh.refreshLayout()

        self.sliderImages = sliderBox.addWidget(
            SettingCheckbox("Slider images", 'sliderImages',
                            updateSliderImages))

        modes = []
        unitBox = self.addLeftWidget(gui.GroupBox('Units'))
        self.metric = unitBox.addWidget(
            gui.RadioButton(modes, 'Metric',
                            gui3d.app.getSetting('units') == 'metric'))
        self.imperial = unitBox.addWidget(
            gui.RadioButton(modes, 'Imperial',
                            gui3d.app.getSetting('units') == 'imperial'))

        weights = []
        weightBox = self.addLeftWidget(gui.GroupBox('Weight'))
        self.rel_weight = weightBox.addWidget(
            gui.RadioButton(weights, 'Relative Weight',
                            not gui3d.app.getSetting('real_weight')))
        self.real_weight = weightBox.addWidget(
            gui.RadioButton(weights, 'Real Weight',
                            gui3d.app.getSetting('real_weight')))

        startupBox = self.addLeftWidget(gui.GroupBox('Startup'))
        self.preload = startupBox.addWidget(
            SettingCheckbox("Preload macro targets", 'preloadTargets'))

        self.saveScreenSize = startupBox.addWidget(
            SettingCheckbox("Restore window size", 'restoreWindowSize'))

        resetBox = self.addLeftWidget(gui.GroupBox('Restore settings'))
        self.resetButton = resetBox.addWidget(
            gui.Button("Restore to defaults"))

        @self.resetButton.mhEvent
        def onClicked(event):
            gui3d.app.resetSettings()
            self.updateGui()

        self.checkboxes.extend([
            self.realtimeUpdates, self.realtimeNormalUpdates,
            self.realtimeFitting, self.cameraAutoZoom, self.sliderImages,
            self.preload, self.saveScreenSize
        ])

        themes = []
        self.themesBox = self.addRightWidget(gui.GroupBox('Theme'))
        self.themeNative = self.themesBox.addWidget(
            ThemeRadioButton(themes, "Native look", "default"))
        self.themeMH = self.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))
        '''

        languages = []
        self.languageBox = self.addRightWidget(gui.GroupBox('Language'))

        languageFiles = gui3d.app.getLanguages()
        for language in languageFiles:
            if not language.lower() == "master":
                self.languageBox.addWidget(
                    LanguageRadioButton(languages, language))
        if not mh.isRelease():
            self.languageBox.addWidget(LanguageRadioButton(
                languages, "master"))

        @self.metric.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('units', 'metric')
            gui3d.app.loadGrid()

        @self.imperial.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('units', 'imperial')
            gui3d.app.loadGrid()

        @self.rel_weight.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('real_weight', False)

        @self.real_weight.mhEvent
        def onClicked(event):
            gui3d.app.setSetting('real_weight', True)

        self.updateGui()