WIP: MaterialX addon #104594
@ -18,7 +18,7 @@ bl_info = {
|
|||||||
"category": "Material",
|
"category": "Material",
|
||||||
}
|
}
|
||||||
|
|
||||||
ADDON_PREFIX = "materialx"
|
ADDON_ALIAS = "materialx"
|
||||||
|
|
||||||
|
|
||||||
import bpy
|
import bpy
|
||||||
|
@ -4,13 +4,13 @@
|
|||||||
import sys
|
import sys
|
||||||
import logging.handlers
|
import logging.handlers
|
||||||
|
|
||||||
from . import ADDON_PREFIX
|
from . import ADDON_ALIAS
|
||||||
|
|
||||||
|
|
||||||
FORMAT_STR = "%(asctime)s %(levelname)s %(name)s [%(thread)d]: %(message)s"
|
FORMAT_STR = "%(asctime)s %(levelname)s %(name)s [%(thread)d]: %(message)s"
|
||||||
|
|
||||||
# root logger for the addon
|
# root logger for the addon
|
||||||
logger = logging.getLogger(ADDON_PREFIX)
|
logger = logging.getLogger(ADDON_ALIAS)
|
||||||
logger.setLevel('DEBUG')
|
logger.setLevel('DEBUG')
|
||||||
|
|
||||||
# file_handler = logging.handlers.RotatingFileHandler(PLUGIN_ROOT_DIR / 'usdhydra.log',
|
# file_handler = logging.handlers.RotatingFileHandler(PLUGIN_ROOT_DIR / 'usdhydra.log',
|
||||||
|
@ -10,9 +10,7 @@ import bpy
|
|||||||
|
|
||||||
from .. import utils
|
from .. import utils
|
||||||
from ..node_tree import MxNodeTree
|
from ..node_tree import MxNodeTree
|
||||||
from ..utils import mx as mx_utils
|
|
||||||
from .manager import manager
|
from .manager import manager
|
||||||
#from .. import config
|
|
||||||
|
|
||||||
from ..utils import logging
|
from ..utils import logging
|
||||||
log = logging.Log('matlib.ui')
|
log = logging.Log('matlib.ui')
|
||||||
@ -24,7 +22,7 @@ class MATERIAL_OP_matlib_clear_search(bpy.types.Operator):
|
|||||||
bl_label = ""
|
bl_label = ""
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
context.window_manager.materialx.matlib.search = ''
|
utils.mx_properties(context.window_manager).matlib.search = ''
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
@ -44,23 +42,23 @@ class MATLIB_OP_import_material(bpy.types.Operator):
|
|||||||
bl_label = "Import Material Package"
|
bl_label = "Import Material Package"
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
matlib_prop = context.window_manager.materialx.matlib
|
matlib_prop = utils.mx_properties(context.window_manager).matlib
|
||||||
package = matlib_prop.package
|
package = matlib_prop.package
|
||||||
|
|
||||||
mtlx_file = package.unzip()
|
mtlx_file = package.unzip()
|
||||||
|
|
||||||
# getting/creating MxNodeTree
|
# getting/creating MxNodeTree
|
||||||
bl_material = context.material
|
bl_material = context.material
|
||||||
mx_node_tree = bl_material.materialx.mx_node_tree
|
mx_node_tree = utils.mx_properties(bl_material).mx_node_tree
|
||||||
if not bl_material.materialx.mx_node_tree:
|
if not mx_node_tree:
|
||||||
mx_node_tree = bpy.data.node_groups.new(f"MX_{bl_material.name}",
|
mx_node_tree = bpy.data.node_groups.new(f"MX_{bl_material.name}",
|
||||||
type=MxNodeTree.bl_idname)
|
type=MxNodeTree.bl_idname)
|
||||||
bl_material.materialx.mx_node_tree = mx_node_tree
|
utils.mx_properties(bl_material).mx_node_tree = mx_node_tree
|
||||||
|
|
||||||
log(f"Reading: {mtlx_file}")
|
log(f"Reading: {mtlx_file}")
|
||||||
doc = mx.createDocument()
|
doc = mx.createDocument()
|
||||||
search_path = mx.FileSearchPath(str(mtlx_file.parent))
|
search_path = mx.FileSearchPath(str(mtlx_file.parent))
|
||||||
search_path.append(str(mx_utils.MX_LIBS_DIR))
|
search_path.append(str(utils.MX_LIBS_DIR))
|
||||||
try:
|
try:
|
||||||
mx.readFromXmlFile(doc, str(mtlx_file), searchPath=search_path)
|
mx.readFromXmlFile(doc, str(mtlx_file), searchPath=search_path)
|
||||||
mx_node_tree.import_(doc, mtlx_file)
|
mx_node_tree.import_(doc, mtlx_file)
|
||||||
@ -78,7 +76,7 @@ class MATLIB_OP_load_package(bpy.types.Operator):
|
|||||||
bl_label = "Download Package"
|
bl_label = "Download Package"
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
matlib_prop = context.window_manager.materialx.matlib
|
matlib_prop = utils.mx_properties(context.window_manager).matlib
|
||||||
manager.load_package(matlib_prop.package)
|
manager.load_package(matlib_prop.package)
|
||||||
|
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
@ -94,7 +92,7 @@ class MATLIB_PT_matlib(bpy.types.Panel):
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
matlib_prop = context.window_manager.materialx.matlib
|
matlib_prop = utils.mx_properties(context.window_manager).matlib
|
||||||
|
|
||||||
manager.check_load_materials()
|
manager.check_load_materials()
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@ from collections import defaultdict
|
|||||||
import MaterialX as mx
|
import MaterialX as mx
|
||||||
|
|
||||||
from .. import utils
|
from .. import utils
|
||||||
from ..utils import NODE_CLASSES_DIR
|
from .. import ADDON_ALIAS
|
||||||
|
|
||||||
from .. import logging
|
from .. import logging
|
||||||
log = logging.Log("nodes.generate_node_classes")
|
log = logging.Log("nodes.generate_node_classes")
|
||||||
|
|
||||||
@ -273,7 +274,7 @@ from bpy.props import (
|
|||||||
PointerProperty,
|
PointerProperty,
|
||||||
FloatVectorProperty,
|
FloatVectorProperty,
|
||||||
)
|
)
|
||||||
from materialx.nodes.node import MxNode
|
from {ADDON_ALIAS}.nodes.node import MxNode
|
||||||
|
|
||||||
|
|
||||||
FILE_PATH = r"{file_path}"
|
FILE_PATH = r"{file_path}"
|
||||||
@ -311,7 +312,7 @@ mx_node_classes = [{', '.join(mx_node_class_names)}]
|
|||||||
|
|
||||||
|
|
||||||
def generate_basic_classes():
|
def generate_basic_classes():
|
||||||
gen_code_dir = NODE_CLASSES_DIR
|
gen_code_dir = utils.NODE_CLASSES_DIR
|
||||||
gen_code_dir.mkdir(exist_ok=True)
|
gen_code_dir.mkdir(exist_ok=True)
|
||||||
|
|
||||||
files = [
|
files = [
|
||||||
|
@ -9,14 +9,14 @@ import shutil
|
|||||||
import MaterialX as mx
|
import MaterialX as mx
|
||||||
import bpy
|
import bpy
|
||||||
|
|
||||||
from . import ADDON_PREFIX
|
from . import ADDON_ALIAS
|
||||||
|
|
||||||
from . import logging
|
from . import logging
|
||||||
log = logging.Log('utils')
|
log = logging.Log('utils')
|
||||||
|
|
||||||
|
|
||||||
ADDON_ROOT_DIR = Path(__file__).parent
|
ADDON_ROOT_DIR = Path(__file__).parent
|
||||||
ADDON_DATA_DIR = Path(bpy.utils.user_resource("SCRIPTS", path=f"addons/{ADDON_PREFIX}", create=True))
|
ADDON_DATA_DIR = Path(bpy.utils.user_resource("SCRIPTS", path=f"addons/{ADDON_ALIAS}", create=True))
|
||||||
|
|
||||||
MX_LIBS_FOLDER = "libraries"
|
MX_LIBS_FOLDER = "libraries"
|
||||||
MX_LIBS_DIR = ADDON_ROOT_DIR / MX_LIBS_FOLDER
|
MX_LIBS_DIR = ADDON_ROOT_DIR / MX_LIBS_FOLDER
|
||||||
@ -31,7 +31,7 @@ os.environ['MATERIALX_SEARCH_PATH'] = str(MX_LIBS_DIR)
|
|||||||
|
|
||||||
|
|
||||||
def with_prefix(name, separator='.', upper=False):
|
def with_prefix(name, separator='.', upper=False):
|
||||||
return f"{ADDON_PREFIX.upper() if upper else ADDON_PREFIX}{separator}{name}"
|
return f"{ADDON_ALIAS.upper() if upper else ADDON_ALIAS}{separator}{name}"
|
||||||
|
|
||||||
|
|
||||||
def title_str(val):
|
def title_str(val):
|
||||||
@ -396,7 +396,7 @@ class MaterialXProperties(bpy.types.PropertyGroup):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def register(cls):
|
def register(cls):
|
||||||
setattr(cls.bl_type, "materialx", bpy.props.PointerProperty(
|
setattr(cls.bl_type, ADDON_ALIAS, bpy.props.PointerProperty(
|
||||||
name="MaterialX properties",
|
name="MaterialX properties",
|
||||||
description="MaterialX properties",
|
description="MaterialX properties",
|
||||||
type=cls,
|
type=cls,
|
||||||
@ -404,4 +404,8 @@ class MaterialXProperties(bpy.types.PropertyGroup):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def unregister(cls):
|
def unregister(cls):
|
||||||
delattr(cls.bl_type, "materialx")
|
delattr(cls.bl_type, ADDON_ALIAS)
|
||||||
|
|
||||||
|
|
||||||
|
def mx_properties(obj):
|
||||||
|
return getattr(obj, ADDON_ALIAS)
|
||||||
|
Loading…
Reference in New Issue
Block a user