Make basic object & bones transformations overridable.
You can now override loc/rot/scale of objects and posebones. Also added a basic operator to make an override of active linked object, but this is very limited/wip/testing feature (you have to manually override object and its armature, and relink to proper local overrides yourself...). Final 'make proxy killer' will be much more automated of course.
This commit is contained in:
parent
bde39e5110
commit
20ae4f928c
|
@ -68,6 +68,7 @@ void OBJECT_OT_track_clear(struct wmOperatorType *ot);
|
|||
void OBJECT_OT_slow_parent_set(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_slow_parent_clear(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_make_local(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_make_override(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_make_single_user(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_make_links_scene(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_make_links_data(struct wmOperatorType *ot);
|
||||
|
|
|
@ -84,6 +84,7 @@ void ED_operatortypes_object(void)
|
|||
WM_operatortype_append(OBJECT_OT_slow_parent_set);
|
||||
WM_operatortype_append(OBJECT_OT_slow_parent_clear);
|
||||
WM_operatortype_append(OBJECT_OT_make_local);
|
||||
WM_operatortype_append(OBJECT_OT_make_override);
|
||||
WM_operatortype_append(OBJECT_OT_make_single_user);
|
||||
WM_operatortype_append(OBJECT_OT_make_links_scene);
|
||||
WM_operatortype_append(OBJECT_OT_make_links_data);
|
||||
|
|
|
@ -77,6 +77,7 @@
|
|||
#include "BKE_lattice.h"
|
||||
#include "BKE_layer.h"
|
||||
#include "BKE_library.h"
|
||||
#include "BKE_library_override.h"
|
||||
#include "BKE_library_query.h"
|
||||
#include "BKE_library_remap.h"
|
||||
#include "BKE_main.h"
|
||||
|
@ -2325,6 +2326,43 @@ void OBJECT_OT_make_local(wmOperatorType *ot)
|
|||
ot->prop = RNA_def_enum(ot->srna, "type", type_items, 0, "Type", "");
|
||||
}
|
||||
|
||||
static int make_override_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Object *locobj, *refobj = CTX_data_active_object(C);
|
||||
|
||||
locobj = (Object *)BKE_override_static_create_from(bmain, &refobj->id);
|
||||
|
||||
WM_event_add_notifier(C, NC_WINDOW, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
static int make_override_poll(bContext *C)
|
||||
{
|
||||
Object *obact = CTX_data_active_object(C);
|
||||
|
||||
/* Object must be directly linked to be overridable. */
|
||||
return (ED_operator_objectmode(C) && obact && obact->id.lib != NULL && obact->id.tag & LIB_TAG_EXTERN);
|
||||
}
|
||||
|
||||
void OBJECT_OT_make_override(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name = "Make Override";
|
||||
ot->description = "Make local override of this library linked data-block";
|
||||
ot->idname = "OBJECT_OT_make_override";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec = make_override_exec;
|
||||
ot->poll = make_override_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
}
|
||||
|
||||
enum {
|
||||
MAKE_SINGLE_USER_ALL = 1,
|
||||
MAKE_SINGLE_USER_SELECTED = 2,
|
||||
|
|
|
@ -1817,7 +1817,7 @@ static void rna_def_modifier_armature(BlenderRNA *brna)
|
|||
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
|
||||
RNA_def_property_pointer_funcs(prop, NULL, "rna_ArmatureModifier_object_set", NULL, "rna_Armature_object_poll");
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK | PROP_OVERRIDABLE);
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_bone_envelopes", PROP_BOOLEAN, PROP_NONE);
|
||||
|
|
|
@ -2423,7 +2423,7 @@ static void rna_def_object(BlenderRNA *brna)
|
|||
/* parent */
|
||||
prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_parent_set", NULL, NULL);
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK | PROP_OVERRIDABLE);
|
||||
RNA_def_property_ui_text(prop, "Parent", "Parent Object");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_dependency_update");
|
||||
|
||||
|
@ -2501,6 +2501,7 @@ static void rna_def_object(BlenderRNA *brna)
|
|||
prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
|
||||
RNA_def_property_float_sdna(prop, NULL, "loc");
|
||||
RNA_def_property_editable_array_func(prop, "rna_Object_location_editable");
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
RNA_def_property_ui_text(prop, "Location", "Location of the object");
|
||||
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
|
||||
|
@ -2508,6 +2509,7 @@ static void rna_def_object(BlenderRNA *brna)
|
|||
prop = RNA_def_property(srna, "rotation_quaternion", PROP_FLOAT, PROP_QUATERNION);
|
||||
RNA_def_property_float_sdna(prop, NULL, "quat");
|
||||
RNA_def_property_editable_array_func(prop, "rna_Object_rotation_4d_editable");
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
RNA_def_property_float_array_default(prop, default_quat);
|
||||
RNA_def_property_ui_text(prop, "Quaternion Rotation", "Rotation in Quaternions");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
|
||||
|
@ -2521,12 +2523,14 @@ static void rna_def_object(BlenderRNA *brna)
|
|||
"rna_Object_rotation_axis_angle_set", NULL);
|
||||
RNA_def_property_editable_array_func(prop, "rna_Object_rotation_4d_editable");
|
||||
RNA_def_property_float_array_default(prop, default_axisAngle);
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
RNA_def_property_ui_text(prop, "Axis-Angle Rotation", "Angle of Rotation for Axis-Angle rotation representation");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
|
||||
|
||||
prop = RNA_def_property(srna, "rotation_euler", PROP_FLOAT, PROP_EULER);
|
||||
RNA_def_property_float_sdna(prop, NULL, "rot");
|
||||
RNA_def_property_editable_array_func(prop, "rna_Object_rotation_euler_editable");
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
RNA_def_property_ui_text(prop, "Euler Rotation", "Rotation in Eulers");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
|
||||
|
||||
|
@ -2539,7 +2543,7 @@ static void rna_def_object(BlenderRNA *brna)
|
|||
|
||||
prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
|
||||
RNA_def_property_float_sdna(prop, NULL, "size");
|
||||
RNA_def_property_flag(prop, PROP_PROPORTIONAL);
|
||||
RNA_def_property_flag(prop, PROP_PROPORTIONAL | PROP_OVERRIDABLE);
|
||||
RNA_def_property_editable_array_func(prop, "rna_Object_scale_editable");
|
||||
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 3);
|
||||
RNA_def_property_float_array_default(prop, default_scale);
|
||||
|
@ -2666,6 +2670,7 @@ static void rna_def_object(BlenderRNA *brna)
|
|||
prop = RNA_def_property(srna, "modifiers", PROP_COLLECTION, PROP_NONE);
|
||||
RNA_def_property_struct_type(prop, "Modifier");
|
||||
RNA_def_property_ui_text(prop, "Modifiers", "Modifiers affecting the geometric data of the object");
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
rna_def_object_modifiers(brna, prop);
|
||||
|
||||
/* constraints */
|
||||
|
@ -2978,6 +2983,7 @@ static void rna_def_object(BlenderRNA *brna)
|
|||
prop = RNA_def_property(srna, "pose", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "pose");
|
||||
RNA_def_property_struct_type(prop, "Pose");
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
RNA_def_property_ui_text(prop, "Pose", "Current pose for armatures");
|
||||
|
||||
/* shape keys */
|
||||
|
|
|
@ -839,6 +839,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
|
|||
/* Transformation settings */
|
||||
prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
|
||||
RNA_def_property_float_sdna(prop, NULL, "loc");
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_location_editable");
|
||||
RNA_def_property_ui_text(prop, "Location", "");
|
||||
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
|
||||
|
@ -846,7 +847,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
|
|||
|
||||
prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
|
||||
RNA_def_property_float_sdna(prop, NULL, "size");
|
||||
RNA_def_property_flag(prop, PROP_PROPORTIONAL);
|
||||
RNA_def_property_flag(prop, PROP_PROPORTIONAL | PROP_OVERRIDABLE);
|
||||
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_scale_editable");
|
||||
RNA_def_property_float_array_default(prop, default_scale);
|
||||
RNA_def_property_ui_text(prop, "Scale", "");
|
||||
|
@ -854,6 +855,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
|
|||
|
||||
prop = RNA_def_property(srna, "rotation_quaternion", PROP_FLOAT, PROP_QUATERNION);
|
||||
RNA_def_property_float_sdna(prop, NULL, "quat");
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_rotation_4d_editable");
|
||||
RNA_def_property_float_array_default(prop, default_quat);
|
||||
RNA_def_property_ui_text(prop, "Quaternion Rotation", "Rotation in Quaternions");
|
||||
|
@ -863,6 +865,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
|
|||
* having a single one is better for Keyframing and other property-management situations...
|
||||
*/
|
||||
prop = RNA_def_property(srna, "rotation_axis_angle", PROP_FLOAT, PROP_AXISANGLE);
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
RNA_def_property_array(prop, 4);
|
||||
RNA_def_property_float_funcs(prop, "rna_PoseChannel_rotation_axis_angle_get",
|
||||
"rna_PoseChannel_rotation_axis_angle_set", NULL);
|
||||
|
@ -873,6 +876,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
|
|||
|
||||
prop = RNA_def_property(srna, "rotation_euler", PROP_FLOAT, PROP_EULER);
|
||||
RNA_def_property_float_sdna(prop, NULL, "eul");
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_rotation_euler_editable");
|
||||
RNA_def_property_ui_text(prop, "Euler Rotation", "Rotation in Eulers");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
|
||||
|
@ -1399,6 +1403,7 @@ static void rna_def_pose(BlenderRNA *brna)
|
|||
prop = RNA_def_property(srna, "bones", PROP_COLLECTION, PROP_NONE);
|
||||
RNA_def_property_collection_sdna(prop, NULL, "chanbase", NULL);
|
||||
RNA_def_property_struct_type(prop, "PoseBone");
|
||||
RNA_def_property_flag(prop, PROP_OVERRIDABLE);
|
||||
RNA_def_property_ui_text(prop, "Pose Bones", "Individual pose bones for the armature");
|
||||
/* can be removed, only for fast lookup */
|
||||
RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, NULL, NULL, NULL, "rna_PoseBones_lookup_string", NULL);
|
||||
|
|
Loading…
Reference in New Issue