1.2.8

c4dtools.misc.normalalign:
- Fixed returnvalue of misc.normalalign.test_object_normals() for empty
polygon objects

c4dtools.resorce:
- StringLoader.get() now supports passing an integral number directly
additionally to passing a symbol name.
-StringLoader.__str__() has been implemented to render the resource
string without formatting arguments.

c4dtools.resource.menuparser:
- resource.menuparser.MenuNode.copy() has been added and implemented in
subclasses.
- resource.menuparser.MenuItem class has been added.

c4dtools.utils:
- assert_type() renamed to ensure_type(), assert_type kept for backwards
compatibility
- ensure_type() now accepts an optional keyword argument "name"
- ensure_value() added
- join_object() added
- bl_iterator() added

c4dtools.misc.dialogs: New module
Added 'dev' to __version__
Improvements of misc.dialog

- Renamed misc.dialogs module to misc.dialog
- Renamed DialogContainer to ParameterManager
- DefaultParameterManager is now used to get an object with basic
datatypes already registered
- Added Datatype.get_default_value()
- ParameterManager.add() now takes an additional argument
`default_value`.
- Added ParameterManager.set_defaults()
Added resource.Resource.get_symbol_name()
Changed c4dtools.resource.load()

- c4dtools.resource.load() now returns a tuple. The first item is the
dictionary returned in previous versions of c4dtools. The second is a
boolean value. This value is only True when a cached symbol-file exists
and the original resource symbols have been modified.
- c4dtools.resource.Resource class has now a `changed` attribute. It is
set in c4dtools.prepare() on the return-value of load().
~
Removed join_objects, added join_polygon_objects
Changed ResourceString.__call__() to convert passed arguments to string
1.2.8 is now stable