Fix invalid rigid body constraint values during 2.83 development

Own error in cleanup from 5dcb6fb22f unintentionally
changed enum values. Although this code violated our own
rules to use explicit values to avoid this happening.
This commit is contained in:
Campbell Barton 2020-04-23 11:46:52 +10:00
parent c632396733
commit c3accabef9
Notes: blender-bot 2023-02-14 06:49:57 +01:00
Referenced by issue #75991, Blender crashes when opening file with RigidBodyConstraints from pre-2.83
3 changed files with 51 additions and 25 deletions

View File

@ -27,7 +27,7 @@
* \note Use #STRINGIFY() rather than defining with quotes.
*/
#define BLENDER_VERSION 283
#define BLENDER_SUBVERSION 13
#define BLENDER_SUBVERSION 14
/** Several breakages with 280, e.g. collections vs layers. */
#define BLENDER_MINVERSION 280
#define BLENDER_MINSUBVERSION 0

View File

@ -4998,19 +4998,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
/**
* Versioning code until next subversion bump goes here.
*
* \note Be sure to check when bumping the version:
* - #do_versions_after_linking_280 in this file.
* - "versioning_userdef.c", #BLO_version_defaults_userpref_blend
* - "versioning_userdef.c", #do_versions_theme
*
* \note Keep this message at the bottom of the function.
*/
{
/* Keep this block, even when empty. */
if (!MAIN_VERSION_ATLEAST(bmain, 283, 14)) {
/* Solidify modifier merge tolerance. */
if (!DNA_struct_elem_find(fd->filesdna, "SolidifyModifierData", "float", "merge_tolerance")) {
for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
@ -5023,5 +5011,43 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
}
/* Enumerator was incorrect for a time in 2.83 development.
* Note that this only corrects values known to be invalid. */
for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
RigidBodyCon *rbc = ob->rigidbody_constraint;
if (rbc != NULL) {
enum {
INVALID_RBC_TYPE_SLIDER = 2,
INVALID_RBC_TYPE_6DOF_SPRING = 4,
INVALID_RBC_TYPE_MOTOR = 7,
};
switch (rbc->type) {
case INVALID_RBC_TYPE_SLIDER:
rbc->type = RBC_TYPE_SLIDER;
break;
case INVALID_RBC_TYPE_6DOF_SPRING:
rbc->type = RBC_TYPE_6DOF_SPRING;
break;
case INVALID_RBC_TYPE_MOTOR:
rbc->type = RBC_TYPE_MOTOR;
break;
}
}
}
}
/**
* Versioning code until next subversion bump goes here.
*
* \note Be sure to check when bumping the version:
* - #do_versions_after_linking_280 in this file.
* - "versioning_userdef.c", #BLO_version_defaults_userpref_blend
* - "versioning_userdef.c", #do_versions_theme
*
* \note Keep this message at the bottom of the function.
*/
{
/* Keep this block, even when empty. */
}
}

View File

@ -306,28 +306,28 @@ typedef enum eRigidBodyCon_Type {
/** lets bodies rotate around a specified point */
RBC_TYPE_POINT = 0,
/** lets bodies rotate around a specified axis */
RBC_TYPE_HINGE,
RBC_TYPE_HINGE = 1,
/** simulates wheel suspension */
/* RBC_TYPE_HINGE2, */ /* UNUSED */
/* RBC_TYPE_HINGE2 = 2, */ /* UNUSED */
/** restricts movent to a specified axis */
RBC_TYPE_SLIDER,
RBC_TYPE_SLIDER = 3,
/** lets object rotate within a specified cone */
/* RBC_TYPE_CONE_TWIST, */ /* UNUSED */
/* RBC_TYPE_CONE_TWIST = 4, */ /* UNUSED */
/** allows user to specify constraint axes */
RBC_TYPE_6DOF,
RBC_TYPE_6DOF = 5,
/** like 6DOF but has springs */
RBC_TYPE_6DOF_SPRING,
RBC_TYPE_6DOF_SPRING = 6,
/** simulates a universal joint */
/* RBC_TYPE_UNIVERSAL, */ /* UNUSED */
/* RBC_TYPE_UNIVERSAL = 7, */ /* UNUSED */
/** glues two bodies together */
RBC_TYPE_FIXED,
RBC_TYPE_FIXED = 8,
/** similar to slider but also allows rotation around slider axis */
RBC_TYPE_PISTON,
RBC_TYPE_PISTON = 9,
/** Simplified spring constraint with only once axis that's
* automatically placed between the connected bodies */
/* RBC_TYPE_SPRING, */ /* UNUSED */
/* RBC_TYPE_SPRING = 10, */ /* UNUSED */
/** dirves bodies by applying linear and angular forces */
RBC_TYPE_MOTOR,
RBC_TYPE_MOTOR = 11,
} eRigidBodyCon_Type;
/* Spring implementation type for RigidBodyOb */