diff options
Diffstat (limited to 'source/blender/makesrna/intern')
-rw-r--r-- | source/blender/makesrna/intern/rna_access_compare_override.c | 34 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_collection.c | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_curve.c | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_fcurve.c | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_modifier.c | 133 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_rna.c | 28 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_userdef.c | 5 |
7 files changed, 64 insertions, 154 deletions
diff --git a/source/blender/makesrna/intern/rna_access_compare_override.c b/source/blender/makesrna/intern/rna_access_compare_override.c index ac4553349cc..6fd1609e77b 100644 --- a/source/blender/makesrna/intern/rna_access_compare_override.c +++ b/source/blender/makesrna/intern/rna_access_compare_override.c @@ -908,9 +908,18 @@ static void rna_property_override_apply_ex(Main *bmain, if (opop->subitem_local_name != NULL) { RNA_property_collection_lookup_string( ptr_src, prop_src, opop->subitem_local_name, &private_ptr_item_src); - if (opop->subitem_reference_name != NULL) { - RNA_property_collection_lookup_string( - ptr_dst, prop_dst, opop->subitem_reference_name, &private_ptr_item_dst); + if (opop->subitem_reference_name != NULL && + RNA_property_collection_lookup_string( + ptr_dst, prop_dst, opop->subitem_reference_name, &private_ptr_item_dst)) { + /* This is rather fragile, but the fact that local override IDs may have a different name + * than their linked reference makes it necessary. + * Basically, here we are considering that if we cannot find the original linked ID in + * the local override we are (re-)applying the operations, then it may be because soe of + * those operations have already been applied, and we may already have the local ID + * pointer we want to set. + * This happens e.g. during resync of an override, since we have already remapped all ID + * pointers to their expected values. + * In that case we simply try to get the property from the local expected name. */ } else { RNA_property_collection_lookup_string( @@ -962,6 +971,19 @@ static void rna_property_override_apply_ex(Main *bmain, ptr_item_dst = &private_ptr_item_dst; ptr_item_src = &private_ptr_item_src; ptr_item_storage = &private_ptr_item_storage; + + if (ptr_item_dst->type == NULL) { + printf("Failed to find destination sub-item '%s' of '%s' in new override data '%s'\n", + opop->subitem_reference_name, + op->rna_path, + ptr_dst->owner_id->name); + } + if (ptr_item_src->type == NULL) { + printf("Failed to find source sub-item '%s' of '%s' in old override data '%s'\n", + opop->subitem_local_name, + op->rna_path, + ptr_src->owner_id->name); + } } if (!rna_property_override_operation_apply(bmain, @@ -975,9 +997,9 @@ static void rna_property_override_apply_ex(Main *bmain, ptr_item_src, ptr_item_storage, opop)) { - /* TODO No assert here, would be much much better to just report as warning, - * failing override applications will probably be fairly common! */ - BLI_assert(0); + printf("Failed to apply '%s' override operation on %s\n", + op->rna_path, + ptr_src->owner_id->name); } } } diff --git a/source/blender/makesrna/intern/rna_collection.c b/source/blender/makesrna/intern/rna_collection.c index b0250897d6d..69f8bd85975 100644 --- a/source/blender/makesrna/intern/rna_collection.c +++ b/source/blender/makesrna/intern/rna_collection.c @@ -167,13 +167,17 @@ static bool rna_Collection_objects_override_apply(Main *bmain, Collection *coll_dst = (Collection *)ptr_dst->owner_id; if (ptr_item_dst->type == NULL || ptr_item_src->type == NULL) { - BLI_assert(0 && "invalid source or destination object."); + // BLI_assert(0 && "invalid source or destination object."); return false; } Object *ob_dst = ptr_item_dst->data; Object *ob_src = ptr_item_src->data; + if (ob_src == ob_dst) { + return true; + } + CollectionObject *cob_dst = BLI_findptr( &coll_dst->gobject, ob_dst, offsetof(CollectionObject, ob)); diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index 7e4c9477c6a..b60da2c2260 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -931,17 +931,17 @@ static void rna_def_beztriple(BlenderRNA *brna) /* Boolean values */ prop = RNA_def_property(srna, "select_left_handle", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "f1", 0); + RNA_def_property_boolean_sdna(prop, NULL, "f1", SELECT); RNA_def_property_ui_text(prop, "Handle 1 selected", "Handle 1 selection status"); RNA_def_property_update(prop, 0, "rna_Curve_update_data"); prop = RNA_def_property(srna, "select_right_handle", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "f3", 0); + RNA_def_property_boolean_sdna(prop, NULL, "f3", SELECT); RNA_def_property_ui_text(prop, "Handle 2 selected", "Handle 2 selection status"); RNA_def_property_update(prop, 0, "rna_Curve_update_data"); prop = RNA_def_property(srna, "select_control_point", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "f2", 0); + RNA_def_property_boolean_sdna(prop, NULL, "f2", SELECT); RNA_def_property_ui_text(prop, "Control Point selected", "Control point selection status"); RNA_def_property_update(prop, 0, "rna_Curve_update_data"); diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index d5449a69cf6..ac4395f08c9 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -2016,17 +2016,17 @@ static void rna_def_fkeyframe(BlenderRNA *brna) /* Boolean values */ prop = RNA_def_property(srna, "select_left_handle", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "f1", 0); + RNA_def_property_boolean_sdna(prop, NULL, "f1", SELECT); RNA_def_property_ui_text(prop, "Handle 1 selected", "Left handle selection status"); RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_SELECTED, NULL); prop = RNA_def_property(srna, "select_right_handle", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "f3", 0); + RNA_def_property_boolean_sdna(prop, NULL, "f3", SELECT); RNA_def_property_ui_text(prop, "Handle 2 selected", "Right handle selection status"); RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_SELECTED, NULL); prop = RNA_def_property(srna, "select_control_point", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "f2", 0); + RNA_def_property_boolean_sdna(prop, NULL, "f2", SELECT); RNA_def_property_ui_text(prop, "Select", "Control point selection status"); RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_SELECTED, NULL); diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 94f9fd9bb49..a3458a7b8ff 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -619,128 +619,10 @@ static void rna_UVProject_projectors_begin(CollectionPropertyIterator *iter, Poi static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr) { ModifierData *md = (ModifierData *)ptr->data; - - switch ((ModifierType)md->type) { - case eModifierType_Subsurf: - return &RNA_SubsurfModifier; - case eModifierType_Lattice: - return &RNA_LatticeModifier; - case eModifierType_Curve: - return &RNA_CurveModifier; - case eModifierType_Build: - return &RNA_BuildModifier; - case eModifierType_Mirror: - return &RNA_MirrorModifier; - case eModifierType_Decimate: - return &RNA_DecimateModifier; - case eModifierType_Wave: - return &RNA_WaveModifier; - case eModifierType_Armature: - return &RNA_ArmatureModifier; - case eModifierType_Hook: - return &RNA_HookModifier; - case eModifierType_Softbody: - return &RNA_SoftBodyModifier; - case eModifierType_Boolean: - return &RNA_BooleanModifier; - case eModifierType_Array: - return &RNA_ArrayModifier; - case eModifierType_EdgeSplit: - return &RNA_EdgeSplitModifier; - case eModifierType_Displace: - return &RNA_DisplaceModifier; - case eModifierType_UVProject: - return &RNA_UVProjectModifier; - case eModifierType_Smooth: - return &RNA_SmoothModifier; - case eModifierType_Cast: - return &RNA_CastModifier; - case eModifierType_MeshDeform: - return &RNA_MeshDeformModifier; - case eModifierType_ParticleSystem: - return &RNA_ParticleSystemModifier; - case eModifierType_ParticleInstance: - return &RNA_ParticleInstanceModifier; - case eModifierType_Explode: - return &RNA_ExplodeModifier; - case eModifierType_Cloth: - return &RNA_ClothModifier; - case eModifierType_Collision: - return &RNA_CollisionModifier; - case eModifierType_Bevel: - return &RNA_BevelModifier; - case eModifierType_Shrinkwrap: - return &RNA_ShrinkwrapModifier; - case eModifierType_Mask: - return &RNA_MaskModifier; - case eModifierType_SimpleDeform: - return &RNA_SimpleDeformModifier; - case eModifierType_Multires: - return &RNA_MultiresModifier; - case eModifierType_Surface: - return &RNA_SurfaceModifier; - case eModifierType_Fluid: - return &RNA_FluidModifier; - case eModifierType_Solidify: - return &RNA_SolidifyModifier; - case eModifierType_Screw: - return &RNA_ScrewModifier; - case eModifierType_Ocean: - return &RNA_OceanModifier; - case eModifierType_Warp: - return &RNA_WarpModifier; - case eModifierType_WeightVGEdit: - return &RNA_VertexWeightEditModifier; - case eModifierType_WeightVGMix: - return &RNA_VertexWeightMixModifier; - case eModifierType_WeightVGProximity: - return &RNA_VertexWeightProximityModifier; - case eModifierType_DynamicPaint: - return &RNA_DynamicPaintModifier; - case eModifierType_Remesh: - return &RNA_RemeshModifier; - case eModifierType_Skin: - return &RNA_SkinModifier; - case eModifierType_LaplacianSmooth: - return &RNA_LaplacianSmoothModifier; - case eModifierType_Triangulate: - return &RNA_TriangulateModifier; - case eModifierType_UVWarp: - return &RNA_UVWarpModifier; - case eModifierType_MeshCache: - return &RNA_MeshCacheModifier; - case eModifierType_LaplacianDeform: - return &RNA_LaplacianDeformModifier; - case eModifierType_Weld: - return &RNA_WeldModifier; - case eModifierType_Wireframe: - return &RNA_WireframeModifier; - case eModifierType_DataTransfer: - return &RNA_DataTransferModifier; - case eModifierType_NormalEdit: - return &RNA_NormalEditModifier; - case eModifierType_CorrectiveSmooth: - return &RNA_CorrectiveSmoothModifier; - case eModifierType_MeshSequenceCache: - return &RNA_MeshSequenceCacheModifier; - case eModifierType_SurfaceDeform: - return &RNA_SurfaceDeformModifier; - case eModifierType_WeightedNormal: - return &RNA_WeightedNormalModifier; - case eModifierType_Simulation: -# ifdef WITH_PARTICLE_NODES - return &RNA_SimulationModifier; -# endif - case eModifierType_MeshToVolume: - return &RNA_MeshToVolumeModifier; - /* Default */ - case eModifierType_Fluidsim: /* deprecated */ - case eModifierType_None: - case eModifierType_ShapeKey: - case NUM_MODIFIER_TYPES: - return &RNA_Modifier; + const ModifierTypeInfo *modifier_type = BKE_modifier_get_info(md->type); + if (modifier_type != NULL) { + return modifier_type->srna; } - return &RNA_Modifier; } @@ -6339,15 +6221,6 @@ static void rna_def_modifier_weld(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Merge Distance", "Limit below which to merge vertices"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); - prop = RNA_def_property(srna, "max_interactions", PROP_INT, PROP_UNSIGNED); - RNA_def_property_int_sdna(prop, NULL, "max_interactions"); - RNA_def_property_ui_text( - prop, - "Duplicate Limit", - "For a better performance, limits the number of elements found per vertex. " - "(0 makes it infinite)"); - RNA_def_property_update(prop, 0, "rna_Modifier_update"); - prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "defgrp_name"); RNA_def_property_ui_text( diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c index cab596c10fb..8d87de23b3a 100644 --- a/source/blender/makesrna/intern/rna_rna.c +++ b/source/blender/makesrna/intern/rna_rna.c @@ -1306,8 +1306,6 @@ static int rna_property_override_diff_propptr(Main *bmain, /* If not yet overridden, or if we are handling sub-items (inside a collection)... */ if (op != NULL) { - BKE_lib_override_library_operations_tag(op, IDOVERRIDE_LIBRARY_TAG_UNUSED, false); - if (created || op->rna_prop_type == 0) { op->rna_prop_type = property_type; } @@ -1317,19 +1315,27 @@ static int rna_property_override_diff_propptr(Main *bmain, if (created || rna_itemname_a != NULL || rna_itemname_b != NULL || rna_itemindex_a != -1 || rna_itemindex_b != -1) { - BKE_lib_override_library_property_operation_get(op, - IDOVERRIDE_LIBRARY_OP_REPLACE, - rna_itemname_b, - rna_itemname_a, - rna_itemindex_b, - rna_itemindex_a, - true, - NULL, - &created); + IDOverrideLibraryPropertyOperation *opop; + opop = BKE_lib_override_library_property_operation_get(op, + IDOVERRIDE_LIBRARY_OP_REPLACE, + rna_itemname_b, + rna_itemname_a, + rna_itemindex_b, + rna_itemindex_a, + true, + NULL, + &created); + /* Do not use BKE_lib_override_library_operations_tag here, we do not want to validate + * as used all of its operations. */ + op->tag &= ~IDOVERRIDE_LIBRARY_TAG_UNUSED; + opop->tag &= ~IDOVERRIDE_LIBRARY_TAG_UNUSED; if (r_override_changed) { *r_override_changed = created; } } + else { + BKE_lib_override_library_operations_tag(op, IDOVERRIDE_LIBRARY_TAG_UNUSED, false); + } } } diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 7986e129067..0e1c5af8fae 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -6158,6 +6158,11 @@ static void rna_def_userdef_experimental(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "use_sculpt_vertex_colors", 1); RNA_def_property_ui_text(prop, "Sculpt Vertex Colors", "Use the new Vertex Painting system"); + prop = RNA_def_property(srna, "use_switch_object_operator", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "use_switch_object_operator", 1); + RNA_def_property_ui_text( + prop, "Switch Object Operator", "Enable the operator to switch objects by pressing D"); + prop = RNA_def_property(srna, "use_image_editor_legacy_drawing", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "use_image_editor_legacy_drawing", 1); RNA_def_property_ui_text( |