Files
2026-03-17 14:30:01 -06:00

137 lines
4.6 KiB
Python

# #### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
from dataclasses import dataclass
from typing import List, Optional
import bpy
from .modules.poliigon_core.assets import (AssetData,
AssetType)
from .modules.poliigon_core.user import UserDownloadPreferences
@dataclass
class MaterialImportParameters():
name_material: str
reuse_existing: bool
do_apply: bool
workflow: str
lod: str
size: str
size_bg: Optional[str]
variant: Optional[str]
is_preview: bool
is_backplate: bool
is_model_import: bool
name_mesh: str
ref_objs: List[any]
projection: str
use_16bit: bool
mode_disp: str
translate_x: float
translate_y: float
scale: float
global_rotation: float
aspect_ratio: float
displacement: float
keep_unused_tex_nodes: bool
map_prefs: UserDownloadPreferences
def __init__(self,
asset_data: AssetData,
reuse_existing: bool,
do_apply: bool,
workflow: str,
lod: str,
size: str,
size_bg: Optional[str] = None,
variant: Optional[str] = None,
name_material: Optional[str] = None,
name_mesh: Optional[str] = None,
ref_objs: List[any] = [],
projection: str = "FLAT",
use_16bit: bool = True,
mode_disp: str = "NORMAL",
translate_x: float = 0.0,
translate_y: float = 0.0,
scale: float = 1.0,
global_rotation: float = 0.0,
aspect_ratio: float = 1.0,
displacement: float = 0.0,
keep_unused_tex_nodes: bool = False,
addon_convention: int = 0,
map_prefs: Optional[UserDownloadPreferences] = None
):
asset_type_data = asset_data.get_type_data()
local_convention = asset_data.get_convention(local=True)
is_preview = size == "WM"
is_backplate = asset_data.is_backplate()
is_model_import = asset_data.asset_type == AssetType.MODEL
if name_material is None:
name_material = asset_data.get_material_name(size, variant)
# Validate size and get closest locally available
if size == "PREVIEW":
size = "WM"
size = asset_type_data.get_size(
size=size,
incl_watermarked=is_preview,
local_only=True,
addon_convention=addon_convention,
local_convention=local_convention
)
# Validate workflow or get locally available
workflow = asset_type_data.get_workflow(
workflow=workflow,
get_local=True
)
# Restrict displacement/normal mode based on render engine
if bpy.context.scene.render.engine == "BLENDER_EEVEE":
mode_disp = "NORMAL"
if local_convention < 1:
map_prefs = None
self.name_material = name_material
self.reuse_existing = reuse_existing
self.do_apply = do_apply
self.workflow = workflow
self.lod = lod
self.size = size
self.size_bg = size_bg
self.variant = variant
self.is_preview = is_preview
self.is_model_import = is_model_import
self.is_backplate = is_backplate
self.name_mesh = name_mesh
self.ref_objs = ref_objs
self.projection = projection
self.use_16bit = use_16bit
self.mode_disp = mode_disp
self.translate_x = translate_x
self.translate_y = translate_y
self.scale = scale
self.global_rotation = global_rotation
self.aspect_ratio = aspect_ratio
self.displacement = displacement
self.keep_unused_tex_nodes = keep_unused_tex_nodes
self.map_prefs = map_prefs