예제 #1
0
def load(locator):
    """Makes a preview model for a locator and link it to it
    NOTE: locator preview model path must be set

    :param locator: locator object to which preview model should be set
    :type locator: bpy.types.Object
    :return: True if preview model was set; False otherwise
    :rtype: bool
    """

    load_model = True
    abs_filepath = ""
    if not locator.scs_props.locator_show_preview_model:
        load_model = False
    else:
        filepath = locator.scs_props.locator_preview_model_path
        if filepath:
            if filepath.lower().endswith(".pim"):
                abs_filepath = _path_utils.get_abs_path(filepath,
                                                        skip_mod_check=True)
                if not os.path.isfile(abs_filepath):
                    lprint(
                        "W Locator %r has invalid path to Preview Model PIM file: %r",
                        (locator.name,
                         _path_utils.readable_norm(abs_filepath)))
                    load_model = False
            else:
                lprint(
                    "W Locator %r has invalid path to Preview Model PIM file: %r",
                    (locator.name, _path_utils.readable_norm(filepath)))
                load_model = False
        else:
            load_model = False

    if load_model:

        unload(locator)

        prem_name = str("prem_" + locator.name)
        obj = _get_model_mesh(locator, prem_name)

        if not obj:
            from io_scs_tools.imp import pim as _pim_import

            obj = _pim_import.load_pim_file(bpy.context,
                                            abs_filepath,
                                            preview_model=True)
            obj.name = prem_name
            obj.data.name = prem_name
            obj.data.scs_props.locator_preview_model_path = locator.scs_props.locator_preview_model_path
            obj.select = False

        link(locator, obj)

        return True
    else:
        return False
예제 #2
0
def load(locator):
    """Makes a preview model for a locator and link it to it
    NOTE: locator preview model path must be set

    :param locator: locator object to which preview model should be set
    :type locator: bpy.types.Object
    :return: True if preview model was set; False otherwise
    :rtype: bool
    """

    load_model = True
    abs_filepath = ""
    if not locator.scs_props.locator_show_preview_model:
        load_model = False
    else:
        filepath = locator.scs_props.locator_preview_model_path
        if filepath:
            if filepath.lower().endswith(".pim"):
                abs_filepath = _path_utils.get_abs_path(filepath, skip_mod_check=True)
                if not os.path.isfile(abs_filepath):
                    lprint("W Locator %r has invalid path to Preview Model PIM file: %r", (locator.name, abs_filepath.replace("\\", "/")))
                    load_model = False
            else:
                lprint("W Locator %r has invalid path to Preview Model PIM file: %r", (locator.name, filepath.replace("\\", "/")))
                load_model = False
        else:
            load_model = False

    if load_model:

        unload(locator)

        prem_name = str("prem_" + locator.name)
        obj = _get_model_mesh(locator, prem_name)

        if not obj:
            from io_scs_tools.imp import pim as _pim_import

            obj = _pim_import.load_pim_file(bpy.context, abs_filepath, preview_model=True)
            obj.name = prem_name
            obj.data.name = prem_name
            obj.data.scs_props.locator_preview_model_path = locator.scs_props.locator_preview_model_path
            obj.select = False

        link(locator, obj)

        return True
    else:
        return False
예제 #3
0
def load(locator, deep_reload=False):
    """Makes a preview model for a locator and link it to it
    NOTE: locator preview model path must be set

    :param locator: locator object to which preview model should be set
    :type locator: bpy.types.Object
    :param deep_reload: should model be reloaded completely? Use in case model mesh should be freshly loaded from disc
    :type deep_reload: bool
    :return: True if preview model was set; False otherwise
    :rtype: bool
    """

    load_model = True
    abs_filepath = ""
    if not locator.scs_props.locator_show_preview_model:
        load_model = False
    else:
        filepath = locator.scs_props.locator_preview_model_path
        if filepath:
            if filepath.lower().endswith(".pim"):
                abs_filepath = _path_utils.get_abs_path(filepath, skip_mod_check=True)
                if not os.path.isfile(abs_filepath):
                    lprint("W Locator %r has invalid path to Preview Model PIM file: %r",
                           (locator.name, _path_utils.readable_norm(abs_filepath)))
                    load_model = False
            else:
                lprint("W Locator %r has invalid path to Preview Model PIM file: %r",
                       (locator.name, _path_utils.readable_norm(filepath)))
                load_model = False
        else:
            load_model = False

    if load_model:

        unload(locator, do_mesh_unlink=deep_reload)

        prem_name = str("prem_" + locator.name)
        obj = _get_model_mesh(locator, prem_name)

        if not obj:
            from io_scs_tools.imp import pim as _pim_import

            obj = _pim_import.load_pim_file(bpy.context, abs_filepath, preview_model=True)

            # in case used preview model doesn't have any mesh, abort loading, report error and reset path
            # Path has to be reset to prevent loading preview model over and over again
            # from possible callbacks trying to fix not present preview model
            if not obj:
                message = "Selected PIM model doesn't have any mesh inside, so it can not be used as a preview model."
                bpy.ops.wm.show_warning_message('INVOKE_DEFAULT', is_modal=True, title="Preview Model Load Error!", message=message,
                                                width=500,
                                                height=100)
                lprint("E " + message)
                locator.scs_props.locator_preview_model_path = ""
                return False

            obj.name = prem_name
            obj.data.name = prem_name
            obj.data.scs_props.locator_preview_model_path = locator.scs_props.locator_preview_model_path
            obj.select = False

        link(locator, obj)

        return True
    else:
        return False
예제 #4
0
def load(locator):
    """Makes a preview model for a locator and link it to it
    NOTE: locator preview model path must be set

    :param locator: locator object to which preview model should be set
    :type locator: bpy.types.Object
    :return: True if preview model was set; False otherwise
    :rtype: bool
    """

    load_model = True
    abs_filepath = ""
    if not locator.scs_props.locator_show_preview_model:
        load_model = False
    else:
        filepath = locator.scs_props.locator_preview_model_path
        if filepath:
            if filepath.lower().endswith(".pim"):
                abs_filepath = _path_utils.get_abs_path(filepath)
                if not os.path.isfile(abs_filepath):
                    lprint(
                        "W Locator %r has invalid path to Preview Model PIM file: %r",
                        (locator.name, abs_filepath.replace("\\", "/")))
                    load_model = False
            else:
                lprint(
                    "W Locator %r has invalid path to Preview Model PIM file: %r",
                    (locator.name, filepath.replace("\\", "/")))
                load_model = False
        else:
            load_model = False

    if load_model:

        unload(locator)

        prem_name = str("prem_" + locator.name)
        obj = _get_model_mesh(locator, prem_name)

        if not obj:
            from io_scs_tools.imp import pim as _pim_import

            obj = _pim_import.load_pim_file(
                bpy.context,
                abs_filepath,
                preview_model=True,
                looks_and_materials=False,
                textures=False,
                uv=False,
                vc=False,
                vg=False,
                weld_smoothed=False,
                bones=False,
                shadow_casters=False,
                create_locators=False,
                parts_and_variants=False,
            )
            obj.name = prem_name
            obj.data.name = prem_name
            obj.data.scs_props.locator_preview_model_path = locator.scs_props.locator_preview_model_path
            obj.select = False

        link(locator, obj)

        return True
    else:
        return False