Merge branch 'blender-v4.1-release'
This commit is contained in:
commit
84aed88b91
Binary file not shown.
@ -205,11 +205,40 @@ def bake_action_iter(
|
|||||||
"bbone_easeout": 1,
|
"bbone_easeout": 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def can_be_keyed(value):
|
||||||
|
"""Returns a tri-state boolean.
|
||||||
|
|
||||||
|
- True: known to be keyable.
|
||||||
|
- False: known to not be keyable.
|
||||||
|
- None: unknown, might be an enum property for which RNA uses a string to
|
||||||
|
indicate a specific item (keyable) or an actual string property (not
|
||||||
|
keyable).
|
||||||
|
"""
|
||||||
|
if isinstance(value, (int, float, bool)):
|
||||||
|
# These types are certainly keyable.
|
||||||
|
return True
|
||||||
|
if isinstance(value, (list, tuple, set, dict)):
|
||||||
|
# These types are certainly not keyable.
|
||||||
|
return False
|
||||||
|
# Maybe this could be made stricter, as also ID pointer properties and
|
||||||
|
# some other types cannot be keyed. However, the above checks are enough
|
||||||
|
# to fix the crash that this code was written for (#117988).
|
||||||
|
return None
|
||||||
|
|
||||||
# Convert rna_prop types (IDPropertyArray, etc) to python types.
|
# Convert rna_prop types (IDPropertyArray, etc) to python types.
|
||||||
def clean_custom_properties(obj):
|
def clean_custom_properties(obj):
|
||||||
|
if not bake_options.do_custom_props:
|
||||||
|
# Don't bother remembering any custom properties when they're not
|
||||||
|
# going to be baked anyway.
|
||||||
|
return {}
|
||||||
|
|
||||||
|
# Be careful about which properties to actually consider for baking, as
|
||||||
|
# keeping references to complex Blender datastructures around for too long
|
||||||
|
# can cause crashes. See #117988.
|
||||||
clean_props = {
|
clean_props = {
|
||||||
key: rna_idprop_value_to_python(value)
|
key: rna_idprop_value_to_python(value)
|
||||||
for key, value in obj.items()
|
for key, value in obj.items()
|
||||||
|
if can_be_keyed(value) is not False
|
||||||
}
|
}
|
||||||
return clean_props
|
return clean_props
|
||||||
|
|
||||||
@ -339,7 +368,8 @@ def bake_action_iter(
|
|||||||
lookup_fcurves = {(fcurve.data_path, fcurve.array_index): fcurve for fcurve in action.fcurves}
|
lookup_fcurves = {(fcurve.data_path, fcurve.array_index): fcurve for fcurve in action.fcurves}
|
||||||
if bake_options.do_pose:
|
if bake_options.do_pose:
|
||||||
for f, armature_custom_properties in armature_info:
|
for f, armature_custom_properties in armature_info:
|
||||||
bake_custom_properties(obj, custom_props=armature_custom_properties, frame=f)
|
bake_custom_properties(obj, custom_props=armature_custom_properties,
|
||||||
|
frame=f, group_name="Armature Custom Properties")
|
||||||
|
|
||||||
for name, pbone in obj.pose.bones.items():
|
for name, pbone in obj.pose.bones.items():
|
||||||
if bake_options.only_selected and not pbone.bone.select:
|
if bake_options.only_selected and not pbone.bone.select:
|
||||||
|
@ -803,6 +803,7 @@ class _defs_edit_mesh:
|
|||||||
def draw_settings(_context, layout, tool):
|
def draw_settings(_context, layout, tool):
|
||||||
props = tool.operator_properties("mesh.spin")
|
props = tool.operator_properties("mesh.spin")
|
||||||
layout.prop(props, "steps")
|
layout.prop(props, "steps")
|
||||||
|
layout.prop(props, "dupli")
|
||||||
props = tool.gizmo_group_properties("MESH_GGT_spin")
|
props = tool.gizmo_group_properties("MESH_GGT_spin")
|
||||||
layout.prop(props, "axis")
|
layout.prop(props, "axis")
|
||||||
|
|
||||||
@ -815,23 +816,6 @@ class _defs_edit_mesh:
|
|||||||
draw_settings=draw_settings,
|
draw_settings=draw_settings,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ToolDef.from_fn
|
|
||||||
def spin_duplicate():
|
|
||||||
def draw_settings(_context, layout, tool):
|
|
||||||
props = tool.operator_properties("mesh.spin")
|
|
||||||
layout.prop(props, "steps")
|
|
||||||
props = tool.gizmo_group_properties("MESH_GGT_spin")
|
|
||||||
layout.prop(props, "axis")
|
|
||||||
|
|
||||||
return dict(
|
|
||||||
idname="builtin.spin_duplicates",
|
|
||||||
label="Spin Duplicates",
|
|
||||||
icon="ops.mesh.spin.duplicate",
|
|
||||||
widget="MESH_GGT_spin",
|
|
||||||
keymap=(),
|
|
||||||
draw_settings=draw_settings,
|
|
||||||
)
|
|
||||||
|
|
||||||
@ToolDef.from_fn
|
@ToolDef.from_fn
|
||||||
def inset():
|
def inset():
|
||||||
def draw_settings(_context, layout, tool):
|
def draw_settings(_context, layout, tool):
|
||||||
@ -2996,10 +2980,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
|
|||||||
_defs_edit_mesh.bisect,
|
_defs_edit_mesh.bisect,
|
||||||
),
|
),
|
||||||
_defs_edit_mesh.poly_build,
|
_defs_edit_mesh.poly_build,
|
||||||
(
|
|
||||||
_defs_edit_mesh.spin,
|
_defs_edit_mesh.spin,
|
||||||
_defs_edit_mesh.spin_duplicate,
|
|
||||||
),
|
|
||||||
(
|
(
|
||||||
_defs_edit_mesh.vertex_smooth,
|
_defs_edit_mesh.vertex_smooth,
|
||||||
_defs_edit_mesh.vertex_randomize,
|
_defs_edit_mesh.vertex_randomize,
|
||||||
|
@ -855,7 +855,6 @@ set_property(GLOBAL PROPERTY ICON_GEOM_NAMES
|
|||||||
ops.mesh.rip
|
ops.mesh.rip
|
||||||
ops.mesh.rip_edge
|
ops.mesh.rip_edge
|
||||||
ops.mesh.spin
|
ops.mesh.spin
|
||||||
ops.mesh.spin.duplicate
|
|
||||||
ops.mesh.vertices_smooth
|
ops.mesh.vertices_smooth
|
||||||
ops.node.links_cut
|
ops.node.links_cut
|
||||||
ops.paint.eyedropper_add
|
ops.paint.eyedropper_add
|
||||||
|
Loading…
Reference in New Issue
Block a user