Exemplo n.º 1
0
    def execute(self, context):
        _LOG.enter()
        print("default".ljust(40, '.') + ": " + LogService.LOGLEVELS[LogService.get_default_log_level()])

        loggers = LogService.get_loggers()
        logger_names = list(loggers.keys())
        logger_names.sort()
        for name in logger_names:
            logger = loggers[name]
            level = "(default)"
            if logger.level_is_overridden:
                level = logger.level
                level = LogService.LOGLEVELS[level]
            print(name.ljust(40, '.') + ": " + level)

        self.report({"INFO"}, "Levels were printed to the console")

        return {'FINISHED'}
Exemplo n.º 2
0
def _populate_list(self, context):
    global _NEED_RELOAD  # pylint: disable=W0603
    global _CACHED_LEVELS_LIST  # pylint: disable=W0603
    _LOG.enter()
    _LOG.trace("Context is scene", isinstance(context, bpy.types.Scene))
    if _NEED_RELOAD:
        _CACHED_LEVELS_LIST = LogService.get_loggers_list_as_property_enum()
        _NEED_RELOAD = False
    return _CACHED_LEVELS_LIST
Exemplo n.º 3
0
    def execute(self, context):
        _LOG.enter()

        loggers = LogService.get_loggers()

        scene = context.scene
        from mpfb.ui.developer.developerpanel import LOG_LEVELS_PROPERTIES # pylint: disable=C0415

        logger_name = LOG_LEVELS_PROPERTIES.get_value("available_loggers", entity_reference=scene)

        if logger_name == "default":
            input_path = LogService.get_path_to_combined_log_file()
        else:
            logger = LogService.get_logger(logger_name)
            input_path = logger.get_path_to_log_file()

        output_path = bpy.path.abspath(self.filepath)

        shutil.copy(input_path, output_path)

        return {'FINISHED'}
Exemplo n.º 4
0
from mpfb.services.logservice import LogService
from mpfb.services.uiservice import UiService
from mpfb.services.locationservice import LocationService
from mpfb.services.objectservice import ObjectService
from mpfb.services.nodeservice import NodeService
from mpfb.services.materialservice import MaterialService
from mpfb.ui.enhancedsettings.enhancedsettingspanel import ENHANCED_SETTINGS_PROPERTIES
from mpfb._classmanager import ClassManager
import bpy, os, json

from ._savematerial import _save_material

_LOG = LogService.get_logger("enhancedsettings.overwritesettings")


class MPFB_OT_OverwriteEnhancedSettingsOperator(bpy.types.Operator):
    """This will overwrite the selected enhanced material settings, using values from the selected object's material"""
    bl_idname = "mpfb.overwrite_enhanced_settings"
    bl_label = "Overwrite settings"
    bl_options = {'REGISTER'}

    def execute(self, context):
        _LOG.enter()

        if context.object is None:
            self.report({'ERROR'}, "Must have a selected object")
            return {'FINISHED'}

        name = ENHANCED_SETTINGS_PROPERTIES.get_value("available_settings",
                                                      entity_reference=context)
        if not name is None:
Exemplo n.º 5
0
import re, os
from .mhmatkeys import MHMAT_KEY_GROUPS, MHMAT_NAME_TO_KEY
from .mhmatkeytypes import MhMatFileKey
from mpfb.services.socketservice import SocketService
from mpfb.services.logservice import LogService

_LOG = LogService.get_logger("material.mhmaterial")


class MhMaterial:
    def __init__(self):

        self._settings = dict()
        self._shader_config = dict()

        # TODO: handle litsphere and shaderconfig
        self.lit_sphere = dict()
        self.shader_config = dict()

    def _parse_material_line(self, line):
        match = re.search(r'^([a-zA-Z]+)\s+(.*)$', line)
        if match:
            key = match.group(1)
            key_lower = key.lower()
            value = None

            if key_lower in MHMAT_NAME_TO_KEY:
                key_obj = MHMAT_NAME_TO_KEY[key_lower]
                key_correct_case = key_obj.key_name
                if key != key_correct_case:
                    _LOG.debug("Autofixing case: " + key + " -> " +
Exemplo n.º 6
0
from mpfb.services.logservice import LogService
_LOG = LogService.get_logger("importeroperators.init")
_LOG.trace("initializing importer operators")

from .loadpresets import MPFB_OT_LoadImporterPresetsOperator
from .overwritepresets import MPFB_OT_OverwriteImporterPresetsOperator
from .savenewpresets import MPFB_OT_SaveNewImporterPresetsOperator

__all__ = [
    "MPFB_OT_LoadImporterPresetsOperator",
    "MPFB_OT_OverwriteImporterPresetsOperator",
    "MPFB_OT_SaveNewImporterPresetsOperator"
]
Exemplo n.º 7
0
"""Operator for opening web browser"""

import webbrowser, bpy
from bpy.props import StringProperty
from mpfb.services.logservice import LogService
from mpfb import ClassManager

_LOG = LogService.get_logger("webresources.webresource")


class MPFB_OT_Web_Resource_Operator(bpy.types.Operator):
    """Open web browser"""
    bl_idname = "mpfb.web_resource"
    bl_label = "Open"
    bl_options = {'REGISTER'}

    url: StringProperty(name="url", description="Address to open", default="")

    def execute(self, context):
        webbrowser.open(self.url)
        return {'FINISHED'}


ClassManager.add_class(MPFB_OT_Web_Resource_Operator)
Exemplo n.º 8
0
"""Functionality for listing log levels"""

from mpfb.services.logservice import LogService
from mpfb._classmanager import ClassManager
import bpy

_LOG = LogService.get_logger("loglevels.operators.listloglevels")


class MPFB_OT_List_Log_Levels_Operator(bpy.types.Operator):
    """List log levels to the console"""
    bl_idname = "mpfb.list_log_levels"
    bl_label = "List log levels"
    bl_options = {'REGISTER'}

    def execute(self, context):
        _LOG.enter()
        print("default".ljust(40, '.') + ": " + LogService.LOGLEVELS[LogService.get_default_log_level()])

        loggers = LogService.get_loggers()
        logger_names = list(loggers.keys())
        logger_names.sort()
        for name in logger_names:
            logger = loggers[name]
            level = "(default)"
            if logger.level_is_overridden:
                level = logger.level
                level = LogService.LOGLEVELS[level]
            print(name.ljust(40, '.') + ": " + level)

        self.report({"INFO"}, "Levels were printed to the console")
Exemplo n.º 9
0
from mpfb.services.logservice import LogService

_LOG = LogService.get_logger("setupikoperators.init")
_LOG.trace("initializing setup ik operators")

from .addhelpers import MPFB_OT_AddHelpersOperator
from .removehelpers import MPFB_OT_RemoveHelpersOperator

__all__ = ["MPFB_OT_AddHelpersOperator", "MPFB_OT_RemoveHelpersOperator"]
Exemplo n.º 10
0
"""Operator for importing MHMAT material."""

import bpy
from bpy_extras.io_utils import ImportHelper
from bpy.props import StringProperty
from mpfb.entities.material.makeskinmaterial import MakeSkinMaterial
from mpfb.services.logservice import LogService
from mpfb.services.materialservice import MaterialService
from mpfb import ClassManager

_LOG = LogService.get_logger("makeskin.importmaterial")


class MPFB_OT_ImportMaterialOperator(bpy.types.Operator, ImportHelper):
    """Import MHMAT"""
    bl_idname = "mpfb.import_makeskin_material"
    bl_label = "Import material"
    bl_options = {'REGISTER', 'UNDO'}

    filter_glob: StringProperty(default='*.mhmat', options={'HIDDEN'})

    @classmethod
    def poll(cls, context):
        if context.active_object is not None:
            if not hasattr(context.active_object, "MhObjectType"):
                return False
            return True
        return False

    def execute(self, context):
        obj = context.active_object
Exemplo n.º 11
0
"""This module hierarchy provides utility classes for adding and
removing helper bones (for example IK targets, grip rotation handles etc)
to the finger section of a makehuman rig."""

from mpfb.services.logservice import LogService

_LOG = LogService.get_logger("fingerhelpers.init")
_LOG.trace("initializing fingerhelpers module")
Exemplo n.º 12
0
"""This file contains the load clothes panel."""

from mpfb._classmanager import ClassManager
from mpfb.services.logservice import LogService
from mpfb.services.uiservice import UiService
from mpfb.services.sceneconfigset import SceneConfigSet
from mpfb.ui.abstractpanel import Abstract_Panel
import bpy, os

_LOG = LogService.get_logger("ui.loadclothespanel")

_LOC = os.path.dirname(__file__)
LOAD_CLOTHES_PROPERTIES_DIR = os.path.join(_LOC, "properties")
LOAD_CLOTHES_PROPERTIES = SceneConfigSet.from_definitions_in_json_directory(
    LOAD_CLOTHES_PROPERTIES_DIR, prefix="LC_")


class MPFB_PT_Load_Clothes_Panel(Abstract_Panel):
    """UI for loading MHCLO files."""
    bl_label = "Load MHCLO"
    bl_category = UiService.get_value("CLOTHESCATEGORY")
    bl_options = {'DEFAULT_CLOSED'}
    bl_parent_id = "MPFB_PT_Assets_Panel"

    def draw(self, context):
        _LOG.enter()
        layout = self.layout
        scene = context.scene
        LOAD_CLOTHES_PROPERTIES.draw_properties(scene, layout, [
            "object_type", "material_type", "fit_to_body", "delete_group",
            "specific_delete_group", "set_up_rigging", "interpolate_weights",
Exemplo n.º 13
0
"""File containing main UI for makeskin"""

import os, bpy
from mpfb import ClassManager
from mpfb.services.logservice import LogService
from mpfb.services.sceneconfigset import SceneConfigSet
from mpfb.services.uiservice import UiService
from mpfb.ui.makeskin import MakeSkinObjectProperties
from mpfb.ui.abstractpanel import Abstract_Panel

_LOC = os.path.dirname(__file__)
MAKESKIN_PROPERTIES_DIR = os.path.join(_LOC, "properties")
MAKESKIN_PROPERTIES = SceneConfigSet.from_definitions_in_json_directory(
    MAKESKIN_PROPERTIES_DIR, prefix="MS_")

_LOG = LogService.get_logger("makeskin.makeskinpanel")


class MPFB_PT_MakeSkin_Panel(Abstract_Panel):
    """MakeSkin main panel."""

    bl_label = "MakeSkin"
    bl_category = UiService.get_value("MATERIALSCATEGORY")
    bl_options = {'DEFAULT_CLOSED'}
    bl_parent_id = "MPFB_PT_Create_Panel"

    def _create_material(self, scene, layout):
        box = self._create_box(layout, "Create material", "TOOL_SETTINGS")
        props = [
            "overwrite",
            #"create_node_visualization"
Exemplo n.º 14
0
"""This module contains entities used in various places of the plugin."""

from mpfb.services.logservice import LogService

_LOG = LogService.get_logger("entities.init")
_LOG.trace("initializing entities module")
Exemplo n.º 15
0
"""Operator for writing a MHMAT file."""

import bpy, os
from bpy_extras.io_utils import ExportHelper
from bpy.props import StringProperty
from mpfb.services.logservice import LogService
from mpfb.services.materialservice import MaterialService
from mpfb import ClassManager
from mpfb.entities.material.makeskinmaterial import MakeSkinMaterial

_LOG = LogService.get_logger("makeskin.writematerial")


class MPFB_OT_WriteMaterialOperator(bpy.types.Operator, ExportHelper):
    """Write material to MHMAT file"""
    bl_idname = "mpfb.write_makeskin_material"
    bl_label = "Write material"
    bl_options = {'REGISTER'}

    filename_ext = '.mhmat'

    filter_glob: StringProperty(default='*.mhmat', options={'HIDDEN'})
    filepath: StringProperty(
        name="File Path",
        description="Filepath used for exporting the file",
        maxlen=1024,
        subtype='FILE_PATH')

    @classmethod
    def poll(cls, context):
        if context.active_object is not None:
Exemplo n.º 16
0
"""Icons for the modeling panels"""

from mpfb.services.locationservice import LocationService
from mpfb.services.logservice import LogService
import bpy.utils.previews
import os, re

_LOG = LogService.get_logger("model.modelingicons")

MODELING_ICONS = bpy.utils.previews.new()

_TARGETS_DIR = LocationService.get_mpfb_data("targets")
_IMAGES_DIR = os.path.join(_TARGETS_DIR, "_images")

for image in os.listdir(_IMAGES_DIR):
    if ".png" in image:
        name = re.sub(r"\.png$", "", image)
        name = re.sub("^r-", "", name)
        name = re.sub("^l-", "", name)
        image_path = os.path.join(_IMAGES_DIR, image)
        _LOG.debug("Will try to load icon", (name, image_path))
        MODELING_ICONS.load(name, image_path, 'IMAGE')
Exemplo n.º 17
0
import os, bpy
from mpfb._classmanager import ClassManager
from mpfb.services.logservice import LogService
from mpfb.services.sceneconfigset import SceneConfigSet
from mpfb.services.uiservice import UiService
from mpfb.ui.abstractpanel import Abstract_Panel

_LOG = LogService.get_logger("importer.importerpanel")

_LOC = os.path.dirname(__file__)
IMPORTER_PROPERTIES_DIR = os.path.join(_LOC, "properties")
IMPORTER_PROPERTIES = SceneConfigSet.from_definitions_in_json_directory(
    IMPORTER_PROPERTIES_DIR, prefix="IMP_")


def _populate_presets(self, context):
    _LOG.enter()
    _LOG.trace("Context is scene", isinstance(context, bpy.types.Scene))
    available_presets = UiService.get_importer_panel_list()
    if available_presets is None:
        available_presets = []
    return available_presets


def _populate_skin_settings(self, context):
    _LOG.enter()
    _LOG.trace("Context is scene", isinstance(context, bpy.types.Scene))
    available_settings = UiService.get_importer_enhanced_settings_panel_list()
    if available_settings is None:
        available_settings = []
    return available_settings
Exemplo n.º 18
0
import os, bpy, shutil
from mpfb._classmanager import ClassManager
from mpfb.services.logservice import LogService
from mpfb.services.locationservice import LocationService
from mpfb.services.sceneconfigset import SceneConfigSet
from mpfb.services.uiservice import UiService
from mpfb.services.objectservice import ObjectService
from mpfb.ui.abstractpanel import Abstract_Panel

_LOG = LogService.get_logger("ui.enhancedsettings")

_LOC = os.path.dirname(__file__)
ENHANCED_SETTINGS_PROPERTIES_DIR = os.path.join(_LOC, "properties")
ENHANCED_SETTINGS_PROPERTIES = SceneConfigSet.from_definitions_in_json_directory(
    ENHANCED_SETTINGS_PROPERTIES_DIR, prefix="ES_")


def _populate_settings(self, context):
    _LOG.enter()
    _LOG.trace("Context is scene", isinstance(context, bpy.types.Scene))
    available_settings = UiService.get_enhanced_settings_panel_list()
    if available_settings is None:
        available_settings = []
    return available_settings


_SETTINGS_LIST_PROP = {
    "type": "enum",
    "name": "available_settings",
    "description": "Available settings",
    "label": "Available settings",
Exemplo n.º 19
0
"""This module contains functionality for serializing/deserializing rigs via JSON."""

from mpfb.services.logservice import LogService
from mpfb.services.rigservice import RigService
from mpfb.entities.objectproperties import GeneralObjectProperties
import bpy, math, json, random

_LOG = LogService.get_logger("entities.rig")

_MAX_ALLOWED_DIST = 0.01
_MAX_DIST_TO_CONSIDER_EXACT = 0.001

class Rig:

    """Entity class representing an armature."""

    def __init__(self):
        """You might want to use one of the static methods rather than calling init directly."""
        self.basemesh = None
        self.armature_object = None
        self.position_info = dict()
        self.rig_definition = dict()
        self.lowest_point = 1000.0

    @staticmethod
    def from_json_file_and_basemesh(filename, basemesh):
        """Create an instance of Rig and populate it with information from the json file and from the base mesh."""
        rig = Rig()
        with open(filename, "r") as json_file:
            rig.rig_definition = json.load(json_file)
        rig.basemesh = basemesh
Exemplo n.º 20
0
"""This module provides functionality for adding helpers to fingers."""

import bpy

from mpfb.services.logservice import LogService
_LOG = LogService.get_logger("fingerhelpers.fingerhelpers")

from mpfb.services.rigservice import RigService
from mpfb.ui.righelpers import RigHelpersProperties

class FingerHelpers():

    """This is the abstract rig type independent base class for working with
    helpers for fingers. You will want to call the static get_instance()
    method to get a concrete implementation for the specific rig you are
    working with."""

    def __init__(self, which_hand, settings):
        """Get a new instance of FingerHelpers. You should not call this directly.
        Use get_instance() instead."""

        _LOG.debug("Constructing FingerHelpers object")
        self.which_hand = which_hand
        self.settings = settings
        self._bone_info = dict()
        _LOG.dump("settings", self.settings)



    # ---- METHODS FOR APPLYING AND CREATING
Exemplo n.º 21
0
"""File containing main UI for makeclothes"""

import os, bpy
from mpfb import ClassManager
from mpfb.services.logservice import LogService
from mpfb.services.sceneconfigset import SceneConfigSet
from mpfb.services.uiservice import UiService
from mpfb.ui.makeclothes import MakeClothesObjectProperties
from mpfb.ui.abstractpanel import Abstract_Panel

_LOC = os.path.dirname(__file__)
MAKECLOTHES_PROPERTIES_DIR = os.path.join(_LOC, "properties")
MAKECLOTHES_PROPERTIES = SceneConfigSet.from_definitions_in_json_directory(
    MAKECLOTHES_PROPERTIES_DIR, prefix="MC_")

_LOG = LogService.get_logger("makeclothes.makeclothespanel")


class MPFB_PT_MakeClothes_Panel(Abstract_Panel):
    """MakeClothes main panel."""

    bl_label = "MakeClothes"
    bl_category = UiService.get_value("CLOTHESCATEGORY")
    bl_options = {'DEFAULT_CLOSED'}
    bl_parent_id = "MPFB_PT_Create_Panel"

    def _setup_clothes(self, scene, layout):
        box = self._create_box(layout, "Set up clothes", "TOOL_SETTINGS")
        box.operator('mpfb.extract_makeclothes_clothes')
        box.operator('mpfb.mark_makeclothes_clothes')
Exemplo n.º 22
0
 def execute(self, context):
     _LOG.enter()
     LogService.reset_log_levels()
     self.report({"INFO"}, "All log level overrides were removed and default level was set to INFO")
     return {'FINISHED'}
import os, json, re
from pathlib import Path
from .mhmaterial import MhMaterial
from mpfb.services.logservice import LogService
from mpfb.services.locationservice import LocationService
from mpfb.services.nodeservice import NodeService
from mpfb.services.materialservice import MaterialService

_LOG = LogService.get_logger("material.enhancedskinmaterial")


class EnhancedSkinMaterial(MhMaterial):

    def __init__(self, importer_presets):
        MhMaterial.__init__(self)
        self.presets = importer_presets

    def _template(self, template_values, has, tex, key):
        template_values[has] = "false"
        template_values[tex] = "\"\""
        value = self.get_value(key)
        if value:
            _LOG.debug(key + " is set in mhmat")
            template_values[has] = "true"
            template_values[tex] = "\"" + value + "\""
        else:
            _LOG.debug(key + " is not set in mhmat")

    def skin_tweaks(self, template_values, blender_material):
        blender_material.diffuse_color = MaterialService.get_skin_diffuse_color()
import os, bpy
from mpfb._classmanager import ClassManager
from mpfb.services.logservice import LogService
from mpfb.services.locationservice import LocationService
from mpfb.services.sceneconfigset import SceneConfigSet
from mpfb.services.uiservice import UiService
from mpfb.ui.abstractpanel import Abstract_Panel

_LOG = LogService.get_logger("ui.importerpresets")

_LOC = os.path.dirname(__file__)
IMPORTER_PRESETS_PROPERTIES_DIR = os.path.join(_LOC, "properties")
IMPORTER_PRESETS_PROPERTIES = SceneConfigSet.from_definitions_in_json_directory(
    IMPORTER_PRESETS_PROPERTIES_DIR, prefix="IP_")


def _populate_presets(self, context):
    _LOG.enter()
    _LOG.trace("Context is scene", isinstance(context, bpy.types.Scene))
    available_presets = UiService.get_importer_presets_panel_list()
    if available_presets is None:
        available_presets = []
    return available_presets


_PRESETS_LIST_PROP = {
    "type": "enum",
    "name": "available_presets",
    "description": "Available presets",
    "label": "Available presets",
    "default": 0
Exemplo n.º 25
0
"""Operators for developer stuff"""

from mpfb.services.logservice import LogService
_LOG = LogService.get_logger("developer.operators.init")
_LOG.trace("initializing developers operators")

from .listloglevels import MPFB_OT_List_Log_Levels_Operator
from .exportlog import MPFB_OT_Export_Log_Operator
from .resetloglevels import MPFB_OT_Reset_Log_Levels_Operator
from .setloglevel import MPFB_OT_Set_Log_Level_Operator
from .savenodes import MPFB_OT_Save_Nodes_Operator
from .loadnodes import MPFB_OT_Load_Nodes_Operator
from .saverig import MPFB_OT_Save_Rig_Operator
from .loadrig import MPFB_OT_Load_Rig_Operator
from .saveweights import MPFB_OT_Save_Weights_Operator
from .saverigifylayers import MPFB_OT_Save_Rigify_Layers_Operator
from .loadrigifylayers import MPFB_OT_Load_Rigify_Layers_Operator

__all__ = [
    "MPFB_OT_List_Log_Levels_Operator",
    "MPFB_OT_Reset_Log_Levels_Operator",
    "MPFB_OT_Set_Log_Level_Operator",
    "MPFB_OT_Load_Nodes_Operator",
    "MPFB_OT_Save_Nodes_Operator",
    "MPFB_OT_Save_Rig_Operator",
    "MPFB_OT_Load_Rig_Operator",
    "MPFB_OT_Save_Weights_Operator",
    "MPFB_OT_Load_Rigify_Layers_Operator",
    "MPFB_OT_Save_Rigify_Layers_Operator"
    ]
Exemplo n.º 26
0
"""Operators for opening urls"""

from mpfb.services.logservice import LogService
_LOG = LogService.get_logger("webresources.operators.init")
_LOG.trace("initializing web resources operators")

from .webresource import MPFB_OT_Web_Resource_Operator

__all__ = ["MPFB_OT_Web_Resource_Operator"]
Exemplo n.º 27
0
"""Operator for overwriting existing eye material settings."""

from mpfb.services.logservice import LogService
from mpfb.services.locationservice import LocationService
from mpfb.ui.eyesettings.eyesettingspanel import EYE_SETTINGS_PROPERTIES
from mpfb._classmanager import ClassManager
import bpy, os

from ._savematerial import _save_material

_LOG = LogService.get_logger("eyesettings.overwritesettings")


class MPFB_OT_OverwriteEyeSettingsOperator(bpy.types.Operator):
    """This will overwrite the selected eye material settings, using values from the selected object's material"""
    bl_idname = "mpfb.overwrite_eye_settings"
    bl_label = "Overwrite settings"
    bl_options = {'REGISTER'}

    def execute(self, context):
        _LOG.enter()

        if context.object is None:
            self.report({'ERROR'}, "Must have a selected object")
            return {'FINISHED'}

        name = EYE_SETTINGS_PROPERTIES.get_value("available_settings", entity_reference=context)
        if not name is None:
            name = str(name).strip()
        if name == "" or name is None:
            self.report({'ERROR'}, "Settings must be chosen from the list")
Exemplo n.º 28
0
import os, json
from pathlib import Path
from .mhmaterial import MhMaterial
from .mhmatkeys import MHMAT_KEYS
from mpfb.services.logservice import LogService
from mpfb.services.locationservice import LocationService
from mpfb.services.nodeservice import NodeService
from mpfb.services.materialservice import MaterialService

_LOG = LogService.get_logger("material.makeskinmaterial")

_TEXTURE_NAMES = [
    "bumpmap", "diffuse", "displacementmap", "metallicmap", "normalmap",
    "roughnessmap", "transmissionmap"
]

_NODE_SOCKET_VALUES = []  # key name, node name, socket name
_NODE_SOCKET_VALUES.append(["diffuseColor", "Principled BSDF", "Base Color"
                            ])  # First pick up color from principled
_NODE_SOCKET_VALUES.append(["diffuseColor", "diffuseIntensity", "Color1"
                            ])  # Then overwrite with intensity node if any
_NODE_SOCKET_VALUES.append(["diffuseIntensity", "diffuseIntensity", "Fac"])
_NODE_SOCKET_VALUES.append(["bumpmapIntensity", "bumpmap", "Strength"])
_NODE_SOCKET_VALUES.append(["normalmapIntensity", "normalmap", "Strength"])
_NODE_SOCKET_VALUES.append(
    ["displacementmapIntensity", "displacementmap", "Scale"])
_NODE_SOCKET_VALUES.append(["metallic", "Principled BSDF", "Metallic"])
_NODE_SOCKET_VALUES.append(["ior", "Principled BSDF", "IOR"])
_NODE_SOCKET_VALUES.append(["roughness", "Principled BSDF", "Roughness"])

Exemplo n.º 29
0
"""Operator for adding a rigify rig."""

import bpy, os, json
from mpfb.services.logservice import LogService
from mpfb.services.objectservice import ObjectService
from mpfb.services.locationservice import LocationService
from mpfb.services.rigservice import RigService
from mpfb.entities.rig import Rig
from mpfb import ClassManager

_LOG = LogService.get_logger("addrig.add_rigify_rig")


class MPFB_OT_AddRigifyRigOperator(bpy.types.Operator):
    """Add a rigify rig"""

    bl_idname = "mpfb.add_rigify_rig"
    bl_label = "Add rigify rig"
    bl_options = {'REGISTER', 'UNDO'}

    @classmethod
    def poll(cls, context):
        if context.active_object is not None:
            return ObjectService.object_is_basemesh(context.active_object)
        return False

    def execute(self, context):
        scene = context.scene

        if not ObjectService.object_is_basemesh(context.active_object):
            self.report({'ERROR'}, "Rigs can only be added to the base mesh")
Exemplo n.º 30
0
"""This module provides functionality for adding helpers to eyes."""

import bpy

from mpfb.services.logservice import LogService
_LOG = LogService.get_logger("eyehelpers.eyehelpers")

from mpfb.services.rigservice import RigService
from mpfb.ui.righelpers import RigHelpersProperties


class EyeHelpers():
    """This is the abstract rig type independent base class for working with
    helpers for eyes. You will want to call the static get_instance()
    method to get a concrete implementation for the specific rig you are
    working with."""
    def __init__(self, settings):
        """Get a new instance of EyeHelpers. You should not call this directly.
        Use get_instance() instead."""

        _LOG.debug("Constructing EyeHelpers object")
        self.settings = settings
        self._bone_info = dict()

        _LOG.dump("settings", self.settings)

    def apply_ik(self, armature_object):
        """Add rig helpers for eyes based on the settings that were provided
        when constructing the class."""

        _LOG.enter()