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)
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)
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)
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()
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)
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()