示例#1
0
    def read(self, blender_context, filepath):
        """ read ms3d file and convert ms3d content to bender content """
        t1 = time()
        t2 = None
        self.has_textures = False

        try:
            # setup environment
            pre_setup_environment(self, blender_context)

            # inject splitted filepath
            self.directory_name, self.file_name = path.split(filepath)

            # create an empty ms3d template
            ms3d_model = Ms3dModel(self.file_name)

            try:
                # open ms3d file
                with io.FileIO(filepath, 'rb') as raw_io:
                    # read and inject ms3d data from disk to internal structure
                    debug_out = ms3d_model.read(raw_io)
                    raw_io.close()

                    if self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL:
                        print(debug_out)
            finally:
                pass

            # if option is set, this time will enlargs the io time
            if self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL:
                ms3d_model.print_internal()

            t2 = time()

            is_valid, statistics = ms3d_model.is_valid()

            if is_valid:
                # inject ms3d data to blender
                self.to_blender(blender_context, ms3d_model)

                post_setup_environment(self, blender_context)

            if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
                print()
                print("##########################################################")
                print("Import from MS3D to Blender")
                print(statistics)
                print("##########################################################")

        except Ms3dHeader.HeaderError:
            msg = "read - invalid file format."
            if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
                print(msg)
                if self.report:
                    self.report({'WARNING', 'ERROR', }, msg)

            return False

        except Exception:
            type, value, traceback = exc_info()
            if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
                print("read - exception in try block\n  type: '{0}'\n"
                        "  value: '{1}'".format(type, value, traceback))
                if self.report:
                    self.report({'WARNING', 'ERROR', }, "read - exception.")

            if t2 is None:
                t2 = time()

            return False

        else:
            pass

        t3 = time()

        if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
            print(ms3d_str['SUMMARY_IMPORT'].format(
                    (t3 - t1), (t2 - t1), (t3 - t2)))

        return True
示例#2
0
    def write(self, blender_context, filepath):
        """convert bender content to ms3d content and write it to file"""

        t1 = time()
        t2 = None

        try:
            # setup environment
            pre_setup_environment(self, blender_context)

            # create an empty ms3d template
            ms3d_model = Ms3dModel()

            # inject blender data to ms3d file
            self.from_blender(blender_context, ms3d_model)

            t2 = time()

            try:
                # write ms3d file to disk
                with io.FileIO(filepath, "wb") as raw_io:
                    debug_out = ms3d_model.write(raw_io)
                    raw_io.flush()
                    raw_io.close()

                    if self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL:
                        print(debug_out)
            finally:
                pass

            # if option is set, this time will enlargs the io time
            if self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL:
                ms3d_model.print_internal()

            post_setup_environment(self, blender_context)
            # restore active object
            blender_context.scene.objects.active = self.active_object

            if ((not blender_context.scene.objects.active)
                    and (blender_context.selected_objects)):
                blender_context.scene.objects.active \
                        = blender_context.selected_objects[0]

            # restore pre operator undo state
            blender_context.preferences.edit.use_global_undo = self.undo

            is_valid, statistics = ms3d_model.is_valid()
            if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
                print()
                print(
                    "##########################################################"
                )
                print("Export from Blender to MS3D")
                print(statistics)
                print(
                    "##########################################################"
                )

        except Exception:
            type, value, traceback = exc_info()
            if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
                print("write - exception in try block\n  type: '{0}'\n"
                      "  value: '{1}'".format(type, value, traceback))
                if self.report:
                    self.report({
                        'WARNING',
                        'ERROR',
                    }, "write - exception.")

            if t2 is None:
                t2 = time()

            return False

        else:
            pass

        t3 = time()
        if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
            print(ms3d_str['SUMMARY_EXPORT'].format((t3 - t1), (t2 - t1),
                                                    (t3 - t2)))

        return True
示例#3
0
    def write(self, blender_context):
        """convert bender content to ms3d content and write it to file"""

        t1 = time()
        t2 = None

        try:
            # setup environment
            pre_setup_environment(self, blender_context)

            # create an empty ms3d template
            ms3d_model = Ms3dModel()

            # inject blender data to ms3d file
            self.from_blender(blender_context, ms3d_model)

            t2 = time()

            self.file = None
            try:
                # write ms3d file to disk
                self.file = io.FileIO(self.options.filepath, "wb")

                ms3d_model.write(self.file)
                self.file.flush()
            finally:
                if self.file is not None:
                    self.file.close()

            # if option is set, this time will enlargs the io time
            if self.options.prop_verbose:
                ms3d_model.print_internal()

            post_setup_environment(self, blender_context)
            # restore active object
            context.scene.objects.active = self.active_object

            if (not context.scene.objects.active) and (context.selected_objects):
                context.scene.objects.active = context.selected_objects[0]

            # restore pre operator undo state
            context.user_preferences.edit.use_global_undo = self.undo

            is_valid, statistics = ms3d_model.is_valid()
            print()
            print("##########################################################")
            print("Blender -> MS3D : [{0}]".format(self.filepath_splitted[1]))
            print(statistics)
            print("##########################################################")

        except Exception:
            type, value, traceback = exc_info()
            print("write - exception in try block\n  type: '{0}'\n" "  value: '{1}'".format(type, value, traceback))

            if t2 is None:
                t2 = time()

            raise

        else:
            pass

        t3 = time()
        print(ms3d_str["SUMMARY_EXPORT"].format((t3 - t1), (t2 - t1), (t3 - t2)))

        return {"FINISHED"}
示例#4
0
    def write(self, blender_context, filepath):
        """convert bender content to ms3d content and write it to file"""

        t1 = time()
        t2 = None

        try:
            # setup environment
            pre_setup_environment(self, blender_context)

            # create an empty ms3d template
            ms3d_model = Ms3dModel()

            # inject blender data to ms3d file
            self.from_blender(blender_context, ms3d_model)

            t2 = time()

            try:
                # write ms3d file to disk
                with io.FileIO(filepath, "wb") as raw_io:
                    debug_out = ms3d_model.write(raw_io)
                    raw_io.flush()
                    raw_io.close()

                    if self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL:
                        print(debug_out)
            finally:
                pass

            # if option is set, this time will enlargs the io time
            if self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL:
                ms3d_model.print_internal()

            post_setup_environment(self, blender_context)
            # restore active object
            blender_context.scene.objects.active = self.active_object

            if ((not blender_context.scene.objects.active)
                    and (blender_context.selected_objects)):
                blender_context.scene.objects.active \
                        = blender_context.selected_objects[0]

            # restore pre operator undo state
            blender_context.user_preferences.edit.use_global_undo = self.undo

            is_valid, statistics = ms3d_model.is_valid()
            if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
                print()
                print("##########################################################")
                print("Export from Blender to MS3D")
                print(statistics)
                print("##########################################################")

        except Exception:
            type, value, traceback = exc_info()
            if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
                print("write - exception in try block\n  type: '{0}'\n"
                        "  value: '{1}'".format(type, value, traceback))
                if self.report:
                    self.report({'WARNING', 'ERROR', }, "write - exception.")

            if t2 is None:
                t2 = time()

            return False

        else:
            pass

        t3 = time()
        if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
            print(ms3d_str['SUMMARY_EXPORT'].format(
                    (t3 - t1), (t2 - t1), (t3 - t2)))

        return True
示例#5
0
    def read(self, blender_context):
        """ read ms3d file and convert ms3d content to bender content """

        t1 = time()
        t2 = None
        self.has_textures = False

        try:
            # setup environment
            pre_setup_environment(self, blender_context)

            # create an empty ms3d template
            ms3d_model = Ms3dModel(self.filepath_splitted[1])

            self.file = None
            try:
                # open ms3d file
                self.file = io.FileIO(self.options.filepath, 'rb')

                # read and inject ms3d data from disk to internal structure
                ms3d_model.read(self.file)
            finally:
                # close ms3d file
                if self.file is not None:
                    self.file.close()

            # if option is set, this time will enlargs the io time
            if self.options.prop_verbose:
                ms3d_model.print_internal()

            t2 = time()

            is_valid, statistics = ms3d_model.is_valid()

            if is_valid:
                # inject ms3d data to blender
                self.to_blender(blender_context, ms3d_model)

                blender_scene = blender_context.scene

                # finalize/restore environment
                if self.options.prop_unit_mm:
                    # set metrics
                    blender_scene.unit_settings.system = 'METRIC'
                    blender_scene.unit_settings.system_rotation = 'DEGREES'
                    blender_scene.unit_settings.scale_length = 0.001 #1.0mm
                    blender_scene.unit_settings.use_separate = False
                    blender_context.tool_settings.normal_size = 1.0 # 1.0mm

                    ## set all 3D views to texture shaded
                    ## and set up the clipping
                    #if self.has_textures:
                    #    viewport_shade = 'TEXTURED'
                    #else:
                    #    viewport_shade = 'SOLID'

                    for screen in blender_context.blend_data.screens:
                        for area in screen.areas:
                            if (area.type != 'VIEW_3D'):
                                continue

                            for space in area.spaces:
                                if (space.type != 'VIEW_3D'):
                                    continue

                                #space.viewport_shade = viewport_shade
                                ##screen.scene.game_settings.material_mode \
                                ##        = 'MULTITEXTURE'
                                space.show_textured_solid = True
                                space.clip_start = 0.1 # 0.1mm
                                space.clip_end = 1000000.0 # 1km

                blender_scene.update()

                post_setup_environment(self, blender_context)

            print()
            print("##########################################################")
            print("MS3D -> Blender : [{0}]".format(self.filepath_splitted[1]))
            print(statistics)
            print("##########################################################")

        except Exception:
            type, value, traceback = exc_info()
            print("read - exception in try block\n  type: '{0}'\n"
                    "  value: '{1}'".format(type, value, traceback))

            if t2 is None:
                t2 = time()

            raise

        else:
            pass

        t3 = time()
        print(ms3d_str['SUMMARY_IMPORT'].format(
                (t3 - t1), (t2 - t1), (t3 - t2)))

        return {"FINISHED"}