mirror of
https://github.com/Doodle3D/Doodle3D-Slicer.git
synced 2024-09-19 18:20:06 +02:00
179 lines
3.3 KiB
Python
179 lines
3.3 KiB
Python
|
from bpy import data, types
|
||
|
from .. import constants, logger
|
||
|
from .constants import IMAGE, MAG_FILTER, MIN_FILTER, MAPPING
|
||
|
from . import image
|
||
|
|
||
|
|
||
|
def _texture(func):
|
||
|
"""
|
||
|
|
||
|
:param func:
|
||
|
|
||
|
"""
|
||
|
|
||
|
def inner(name, *args, **kwargs):
|
||
|
"""
|
||
|
|
||
|
:param name:
|
||
|
:param *args:
|
||
|
:param **kwargs:
|
||
|
|
||
|
"""
|
||
|
|
||
|
if isinstance(name, types.Texture):
|
||
|
texture = name
|
||
|
else:
|
||
|
texture = data.textures[name]
|
||
|
|
||
|
return func(texture, *args, **kwargs)
|
||
|
|
||
|
return inner
|
||
|
|
||
|
|
||
|
@_texture
|
||
|
def anisotropy(texture):
|
||
|
"""
|
||
|
|
||
|
:param texture:
|
||
|
:return: filter_size value
|
||
|
|
||
|
"""
|
||
|
logger.debug("texture.file_path(%s)", texture)
|
||
|
return texture.filter_size
|
||
|
|
||
|
|
||
|
@_texture
|
||
|
def file_name(texture):
|
||
|
"""
|
||
|
|
||
|
:param texture:
|
||
|
:return: file name
|
||
|
|
||
|
"""
|
||
|
logger.debug("texture.file_name(%s)", texture)
|
||
|
if texture.image:
|
||
|
return image.file_name(texture.image)
|
||
|
|
||
|
|
||
|
@_texture
|
||
|
def file_path(texture):
|
||
|
"""
|
||
|
|
||
|
:param texture:
|
||
|
:return: file path
|
||
|
|
||
|
"""
|
||
|
logger.debug("texture.file_path(%s)", texture)
|
||
|
if texture.image:
|
||
|
return image.file_path(texture.image)
|
||
|
|
||
|
|
||
|
@_texture
|
||
|
def image_node(texture):
|
||
|
"""
|
||
|
|
||
|
:param texture:
|
||
|
:return: texture's image node
|
||
|
|
||
|
"""
|
||
|
logger.debug("texture.image_node(%s)", texture)
|
||
|
return texture.image
|
||
|
|
||
|
|
||
|
@_texture
|
||
|
def mag_filter(texture):
|
||
|
"""
|
||
|
|
||
|
:param texture:
|
||
|
:return: THREE_mag_filter value
|
||
|
|
||
|
"""
|
||
|
logger.debug("texture.mag_filter(%s)", texture)
|
||
|
try:
|
||
|
val = texture.THREE_mag_filter
|
||
|
except AttributeError:
|
||
|
logger.debug("No THREE_mag_filter attribute found")
|
||
|
val = MAG_FILTER
|
||
|
|
||
|
return val
|
||
|
|
||
|
|
||
|
@_texture
|
||
|
def mapping(texture):
|
||
|
"""
|
||
|
|
||
|
:param texture:
|
||
|
:return: THREE_mapping value
|
||
|
|
||
|
"""
|
||
|
logger.debug("texture.mapping(%s)", texture)
|
||
|
try:
|
||
|
val = texture.THREE_mapping
|
||
|
except AttributeError:
|
||
|
logger.debug("No THREE_mapping attribute found")
|
||
|
val = MAPPING
|
||
|
|
||
|
return val
|
||
|
|
||
|
|
||
|
@_texture
|
||
|
def min_filter(texture):
|
||
|
"""
|
||
|
|
||
|
:param texture:
|
||
|
:return: THREE_min_filter value
|
||
|
|
||
|
"""
|
||
|
logger.debug("texture.min_filter(%s)", texture)
|
||
|
try:
|
||
|
val = texture.THREE_min_filter
|
||
|
except AttributeError:
|
||
|
logger.debug("No THREE_min_filter attribute found")
|
||
|
val = MIN_FILTER
|
||
|
|
||
|
return val
|
||
|
|
||
|
|
||
|
@_texture
|
||
|
def repeat(texture):
|
||
|
"""The repeat parameters of the texture node
|
||
|
|
||
|
:param texture:
|
||
|
:returns: repeat_x, and repeat_y values
|
||
|
|
||
|
"""
|
||
|
logger.debug("texture.repeat(%s)", texture)
|
||
|
return (texture.repeat_x, texture.repeat_y)
|
||
|
|
||
|
|
||
|
@_texture
|
||
|
def wrap(texture):
|
||
|
"""The wrapping parameters of the texture node
|
||
|
|
||
|
:param texture:
|
||
|
:returns: tuple of THREE compatible wrapping values
|
||
|
|
||
|
"""
|
||
|
logger.debug("texture.wrap(%s)", texture)
|
||
|
wrapping = {
|
||
|
True: constants.WRAPPING.MIRROR,
|
||
|
False: constants.WRAPPING.REPEAT
|
||
|
}
|
||
|
return (wrapping[texture.use_mirror_x],
|
||
|
wrapping[texture.use_mirror_y])
|
||
|
|
||
|
|
||
|
def textures():
|
||
|
"""
|
||
|
|
||
|
:return: list of texture node names that are IMAGE
|
||
|
|
||
|
"""
|
||
|
logger.debug("texture.textures()")
|
||
|
for mat in data.materials:
|
||
|
if mat.users == 0:
|
||
|
continue
|
||
|
for slot in mat.texture_slots:
|
||
|
if slot and slot.use and slot.texture.type == IMAGE:
|
||
|
yield slot.texture.name
|