poll() function is now a static method in python, this is more correct, matching C where the operator is not created to run poll.
def poll(self, context): ...
is now...
@staticmethod
def poll(context): ...
Pythons way of doing static methods is a bit odd but cant be helped :|
This does make subclassing poll functions with COMPAT_ENGINES break, so had to modify quite a few scripts for this.
These are not animated and are best not change names like this too late in the release.
ActionGroup.selected -> select: boolean Action Group is selected
BezierSplinePoint.hidden -> hide: boolean Visibility status
BezierSplinePoint.selected_control_point -> select_control_point: boolean Control point selection status
BezierSplinePoint.selected_handle1 -> select_left_handle: boolean Handle 1 selection status
BezierSplinePoint.selected_handle2 -> select_right_handle: boolean Handle 2 selection status
Bone.restrict_select -> hide_select: boolean Bone is able to be selected
Bone.selected -> select: boolean
CurveMapPoint.selected -> select: boolean Selection state of the curve point
EditBone.restrict_select -> hide_select: boolean Bone is able to be selected
EditBone.selected -> select: boolean
EditBone.selected_head -> select_head: boolean
EditBone.selected_tail -> select_tail: boolean
EditBone.locked -> lock: boolean Bone is not able to be transformed when in Edit Mode
EditBone.hidden -> hide: boolean Bone is not visible when in Edit Mode
NEGATE * FCurve.disabled -> enabled: boolean F-Curve could not be evaluated in past, so should be skipped when evaluating
FCurve.locked -> lock: boolean F-Curve's settings cannot be edited
FCurve.muted -> mute: boolean F-Curve is not evaluated
FCurve.selected -> select: boolean F-Curve is selected for editing
NEGATE * FCurve.visible -> hide: boolean F-Curve and its keyframes are shown in the Graph Editor graphs
FCurveSample.selected -> select: boolean Selection status
GPencilFrame.selected -> select: boolean Frame is selected for editing in the DopeSheet
GPencilLayer.locked -> lock: boolean Protect layer from further editing and/or frame changes
GPencilLayer.selected -> select: boolean Layer is selected for editing in the DopeSheet
Keyframe.selected -> select: boolean Control point selection status
Keyframe.selected_handle1 -> select_left_handle: boolean Handle 1 selection status
Keyframe.selected_handle2 -> select_right_handle: boolean Handle 2 selection status
MeshEdge.selected -> select: boolean
MeshEdge.hidden -> hide: boolean
MeshFace.hidden -> hide: boolean
MeshFace.selected -> select: boolean
MeshVertex.hidden -> hide: boolean
MeshVertex.selected -> select: boolean
MotionPathVert.selected -> select: boolean Path point is selected for editing
NlaStrip.selected -> select: boolean NLA Strip is selected
NlaTrack.locked -> lock: boolean NLA Track is locked
NlaTrack.muted -> mute: boolean NLA Track is not evaluated
NlaTrack.selected -> select: boolean NLA Track is selected
Object.restrict_render -> hide_render: boolean Restrict renderability
Object.restrict_select -> hide_select: boolean Restrict selection in the viewport
Object.restrict_view -> hide: boolean Restrict visibility in the viewport
Object.selected -> select: boolean Object selection state
ObjectBase.selected -> select: boolean Object base selection state
PoseBone.selected -> select: boolean
Sequence.right_handle_selected -> select_right_handle: boolean
Sequence.selected -> select: boolean
SplinePoint.selected -> select_control_point: boolean Selection status
TimelineMarker.selected -> select: boolean Marker selection state
Sequence.left_handle_selected -> select_left_handle: boolean
ActionGroup.locked -> lock: boolean Action Group is locked
Bone.hidden -> hide: boolean Bone is not visible when it is not in Edit Mode (i.e. in Object or Pose Modes)
SplinePoint.hidden -> hide: boolean Visibility status
FModifier.muted -> mute: boolean F-Curve Modifier will not be evaluated
note: rebaned uv_select to select_uv
- added new mathutils.Color() type, use with rna so we can do for eg:
material.diffuse_color.r = 1.0
# also has hsv access
material.diffuse_color.s = 0.6
- made Mathutils and Geometry module names lowercase.
Running scripts directly didnt call the register function, even though this is not essential its good to be able to run a script directly and see changes in the UI.
- python defined classes will be used when available (otherwise automaically generated metaclasses are made as before)
- use properties rather then functions for python defined rna class's
- call the classes getattr AFTER doing an RNA lookup, avoids setting and clearing exceptions for most attribute lookups, tested UI scripts are ~25% faster.
- extending rna py classes this way is a nicer alternative to modifying the generated metaclasses in place.
Example class
--- snip
class Object(bpy.types.ID):
def _get_children(self):
return [child for child in bpy.data.objects if child.parent == self]
children = property(_get_children)
--- snip
The C initialization function looks in bpy_types.py for classes matching RNA structure names, using them when available.
This means all objects in python will be instances of these classes.
Python properties/funcs defined in ID py class will also be available for subclasses for eg. (Group Mesh etc)