Doodle3D-Slicer/three.js-master/utils/exporters/blender/addons/io_three/exporter/base_classes.py
2017-06-22 13:21:07 +02:00

148 lines
3.2 KiB
Python
Executable File

from . import utilities
from .. import constants, exceptions
class BaseClass(constants.BASE_DICT):
"""Base class which inherits from a base dictionary object."""
_defaults = {}
def __init__(self, parent=None, type=None):
constants.BASE_DICT.__init__(self)
self._type = type
self._parent = parent
constants.BASE_DICT.update(self, self._defaults.copy())
def __setitem__(self, key, value):
if not isinstance(value, constants.VALID_DATA_TYPES):
msg = "Value is an invalid data type: %s" % type(value)
raise exceptions.ThreeValueError(msg)
constants.BASE_DICT.__setitem__(self, key, value)
@property
def count(self):
"""
:return: number of keys
:rtype: int
"""
return len(self.keys())
@property
def parent(self):
"""
:return: parent object
"""
return self._parent
@property
def type(self):
"""
:return: the type (if applicable)
"""
return self._type
def copy(self):
"""Copies the items to a standard dictionary object.
:rtype: dict
"""
data = {}
def _dict_copy(old, new):
"""Recursive function for processing all values
:param old:
:param new:
"""
for key, value in old.items():
if isinstance(value, (str, list)):
new[key] = value[:]
elif isinstance(value, tuple):
new[key] = value+tuple()
elif isinstance(value, dict):
new[key] = {}
_dict_copy(value, new[key])
else:
new[key] = value
_dict_copy(self, data)
return data
class BaseNode(BaseClass):
"""Base class for all nodes for the current platform."""
def __init__(self, node, parent, type):
BaseClass.__init__(self, parent=parent, type=type)
self._node = node
if node is None:
self[constants.UUID] = utilities.id()
else:
self[constants.NAME] = node
self[constants.UUID] = utilities.id_from_name(node)
if isinstance(parent, BaseScene):
scene = parent
elif parent is not None:
scene = parent.scene
else:
scene = None
self._scene = scene
@property
def node(self):
"""
:return: name of the node
"""
return self._node
@property
def scene(self):
"""
:return: returns the scene point
"""
return self._scene
@property
def options(self):
"""
:return: export options
:retype: dict
"""
return self.scene.options
class BaseScene(BaseClass):
"""Base class that scenes inherit from."""
def __init__(self, filepath, options):
BaseClass.__init__(self, type=constants.SCENE)
self._filepath = filepath
self._options = options.copy()
@property
def filepath(self):
return self._filepath
@property
def options(self):
return self._options