Esempio n. 1
0
    def projectOpened(self):
        self.start = float(gSettings.value('TimerStartTime', 0.0))
        endTime = float(gSettings.value('TimerEndTime', 8.0))
        self.time = float(gSettings.value('TimerTime', 0.0))

        project = currentProjectFilePath()
        if project and project.exists():
            text = project.content()

            try:
                root = cElementTree.fromstring(text)
            except:
                root = None

            if root is not None:
                self.minTime = float(root.attrib.get('TimerMinTime', 0.0))
                self.maxTime = float(root.attrib.get('TimerMaxTime', 8.0))
                self.end = min(endTime, self.maxTime)

                self.__BPS = float(root.attrib.get('TimerBPS', 2.0))
                self.__osc.setBpm(int(round(self.__BPS * 60)))
                self.bpmChanged.emit(self.__BPS * 60.0)
                return

        # legacy project / creating new project
        self.minTime = 0.0
        self.maxTime = 4.0
        self.end = min(endTime, self.maxTime)

        self.__BPS = float(gSettings.value('TimerBPS', 2.0))
        self.__osc.setBpm(int(round(self.__BPS * 60)))
        self.bpmChanged.emit(self.__BPS * 60.0)
Esempio n. 2
0
    def loadState(self):
        # save user camera position per scene
        userFile = currentProjectFilePath().ensureExt('user')
        if not userFile.exists():
            return

        xUser = parseXMLWithIncludes(userFile)
        if xUser is None:
            return

        xMod = xUser.find('Modeler')
        if xMod is None:
            return

        if 'CurrentModel' in xMod.attrib:
            currentModelIndex = int(xMod.attrib['CurrentModel'])
        else:
            currentModelIndex = -1
        if currentModelIndex >= 0 and currentModelIndex < len(self._models.models):
            self.selectedModelNodesChanged.emit(self._models.models[currentModelIndex], None)
        else:
            self.selectedModelNodesChanged.emit(None, None)

        ct = list(map(float, xMod.attrib['CameraTransform'].split(',')))
        self._cameraTransform = cgmath.Mat44(ct[0],ct[1],ct[2],ct[3],ct[4],ct[5],ct[6],ct[7],ct[8],ct[9],ct[10],ct[11],ct[12],ct[13],ct[14],ct[15])

        ct = list(map(float, xMod.attrib['CameraPivot'].split(',')))
        self._cameraPivot = cgmath.Vec3(ct[0], ct[1], ct[2])

        self.update()
Esempio n. 3
0
    def saveToProject(self):
        project = currentProjectFilePath()
        root = parseXMLWithIncludes(project)

        xModels = cElementTree.SubElement(root, 'Models')
        for model in self._models:
            model.saveToElementTree(xModels)

        with project.edit() as fh:
            fh.write(toPrettyXml(root))
Esempio n. 4
0
 def __initializeProject(self):
     project = currentProjectFilePath()
     if project is not None:
         if project.exists():
             self.__openProject(project)
             return
     project = [x for x in list(os.listdir(os.getcwd())) if x.endswith(PROJ_EXT)]
     if project:
         self.__openProject(os.path.join(os.getcwd(), project[0]))
         return
Esempio n. 5
0
    def __loadAllShots(self):
        if currentProjectFilePath() is None:
            self.setEnabled(False)
            return
        self.setEnabled(True)
        self.__model.clear()
        # model.clear() removes the header labels
        self.__model.setHorizontalHeaderLabels(
            ['Name', 'Scene', 'Start', 'End', 'Duration', 'Speed', 'Preroll'])
        for sceneName in iterSceneNames():
            for shot in _deserializeSceneShots(sceneName):
                self.__model.appendRow(shot.items)

        self.__table.sortByColumn(2, Qt.AscendingOrder)
Esempio n. 6
0
 def readCameraData(self):
     if self.__cameraData is None:
         userFile = FilePath(currentProjectFilePath() + '.user')
         xCamera = None
         if userFile.exists():
             xRoot = parseXMLWithIncludes(userFile)
             for xSub in xRoot:
                 if xSub.attrib['name'] == self.__filePath.name():
                     xCamera = xSub
                     break
         if xCamera is None:  # legacy support
             xCamera = parseXMLWithIncludes(self.__filePath)
         self.__cameraData = CameraTransform(
             *[float(x) for x in xCamera.attrib['camera'].split(',')])
     return self.__cameraData
Esempio n. 7
0
    def saveState(self):
        gSettings.setValue('TimerStartTime', self.__start)
        gSettings.setValue('TimerEndTime', self.__end)
        gSettings.setValue('TimerTime', self.__time)

        project = currentProjectFilePath()
        if not project or not project.exists():
            # legacy project or no project open
            gSettings.setValue('TimerMinTime', self.__minTime)
            gSettings.setValue('TimerMaxTime', self.__maxTime)
            gSettings.setValue('TimerBPS', self.__BPS)
            return
        root = cElementTree.Element('Project')
        root.attrib['TimerMinTime'] = str(self.__minTime)
        root.attrib['TimerMaxTime'] = str(self.__maxTime)
        root.attrib['TimerBPS'] = str(self.__BPS)
        with project.edit() as fh:
            fh.write(toPrettyXml(root))
Esempio n. 8
0
    def __changeProjectHelper(self, title):
        """
        Utility that shows a dialog if we're changing projects with potentially unsaved changes.
        Returns the current project directory, or the current working directory if no such project.
        """
        currentPath = FilePath(os.getcwd())

        project = currentProjectFilePath()
        if project is not None:
            # propose to save near current project
            dir = project.parent()
            if dir.exists():
                currentPath = dir

            # check if unsaved changes
            if QMessageBox.No == QMessageBox.warning(self, title, 'Any unsaved changes will be lost. Continue?', QMessageBox.Yes | QMessageBox.No):
                return

        return currentPath
Esempio n. 9
0
    def saveState(self):
        # save user camera position per scene
        userFile = currentProjectFilePath().ensureExt('user')
        if userFile.exists():
            xUser = parseXMLWithIncludes(userFile)
        else:
            xUser = cElementTree.Element('user')

        xMod = xUser.find('Modeler')
        if xMod is None:
            xMod = cElementTree.SubElement(xUser, 'Modeler')

        if not self._currentModel is None:
            xMod.set('CurrentModel', str(self._models.models.index(self._currentModel)))

        xMod.set('CameraTransform', ','.join(map(str, self._cameraTransform[:])))
        xMod.set('CameraPivot', ','.join(map(str, self._cameraPivot[:])))

        with userFile.edit() as fh:
            fh.write(toPrettyXml(xUser))
Esempio n. 10
0
    def loadFromProject(self):
        # Clear all
        while len(self._models) > 0:
            self.removeModel(self._models[0])

        project = currentProjectFilePath()
        if project and project.exists():
            text = project.content()

            try:
                root = cElementTree.fromstring(text)
            except:
                root = None

            if root is not None:
                xModels = root.find('Models')
                if not xModels is None:
                    for xModel in xModels.findall('Model'):
                        model = Model()
                        model.models = self
                        model.loadFromElementTree(xModel)
                        self._models.append(model)
Esempio n. 11
0
def _saveSceneShots(sceneName, shots):
    sceneFile = currentScenesDirectory().join(sceneName.ensureExt(SCENE_EXT))
    xScene = parseXMLWithIncludes(sceneFile)

    # save user camera position per scene
    userFile = currentProjectFilePath().ensureExt('user')
    if userFile.exists():
        xUser = parseXMLWithIncludes(userFile)
    else:
        xUser = cElementTree.Element('user')
    if sceneFile in Scene.cache:
        cameraData = Scene.cache[sceneFile].cameraData()
        if cameraData:
            for xSub in xUser:
                if xSub.tag == 'scene' and xSub.attrib['name'] == sceneName:
                    xSub.attrib['camera'] = ','.join(
                        [str(x) for x in cameraData])
                    break
            else:
                cElementTree.SubElement(
                    xUser, 'scene', {
                        'name': sceneName,
                        'camera': ','.join([str(x) for x in cameraData])
                    })

    with userFile.edit() as fh:
        fh.write(toPrettyXml(xUser))

    # remove old shots
    r = []
    for xShot in xScene:
        r.append(xShot)
    for s in r:
        xScene.remove(s)

    targets = []
    for shot in shots:
        if shot.sceneName == sceneName:
            targets.append(shot)

    for shot in targets:
        xShot = cElementTree.SubElement(
            xScene, 'Shot', {
                'name': shot.name,
                'scene': sceneName,
                'start': str(shot.start),
                'end': str(shot.end),
                'enabled': str(shot.enabled),
                'speed': str(shot.speed),
                'preroll': str(shot.preroll)
            })
        for curveName in shot.curves:
            xChannel = cElementTree.SubElement(xShot, 'Channel', {
                'name': curveName,
                'mode': 'hermite'
            })
            data = []
            for key in shot.curves[curveName]:
                data.append(str(key.inTangent.x))
                data.append(str(key.inTangent.y))
                data.append(str(key.point().x))
                data.append(str(key.point().y))
                data.append(str(key.outTangent.x))
                data.append(str(key.outTangent.y))
                data.append(str(int(key.tangentBroken)))
                data.append(str(key.tangentMode))
            xChannel.text = ','.join(data)
        for texName in shot.textures:
            cElementTree.SubElement(xShot, 'Texture', {
                'name': texName,
                'path': shot.textures[texName]
            })

    with sceneFile.edit() as fh:
        fh.write(toPrettyXml(xScene))