[Bf-blender-cvs] [3955fb3dcc6] fracture_modifier: compile fixes after merge
Martin Felke
noreply at git.blender.org
Tue Sep 12 13:27:38 CEST 2017
Commit: 3955fb3dcc6fba39faa02e88760ef0ef0ddae5cc
Author: Martin Felke
Date: Tue Sep 12 13:26:30 2017 +0200
Branches: fracture_modifier
https://developer.blender.org/rB3955fb3dcc6fba39faa02e88760ef0ef0ddae5cc
compile fixes after merge
===================================================================
M source/blender/blenkernel/BKE_blender_version.h
M source/blender/blenkernel/BKE_rigidbody.h
M source/blender/blenkernel/intern/rigidbody.c
M source/blender/editors/object/object_modifier.c
M source/blender/editors/physics/rigidbody_object.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index 553748d920e..a004e76d657 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -35,7 +35,7 @@
/* used by packaging tools */
/* can be left blank, otherwise a,b,c... etc with no quotes */
-#define BLENDER_VERSION_CHAR rc
+#define BLENDER_VERSION_CHAR
/* alpha/beta/rc/release, docs use this */
#define BLENDER_VERSION_CYCLE release
diff --git a/source/blender/blenkernel/BKE_rigidbody.h b/source/blender/blenkernel/BKE_rigidbody.h
index 7b55e983587..15c0ae1580b 100644
--- a/source/blender/blenkernel/BKE_rigidbody.h
+++ b/source/blender/blenkernel/BKE_rigidbody.h
@@ -97,7 +97,7 @@ void BKE_rigidbody_calc_center_of_mass(struct Object *ob, float r_center[3]);
struct RigidBodyWorld *BKE_rigidbody_get_world(struct Scene *scene);
void BKE_rigidbody_remove_object(struct Scene *scene, struct Object *ob);
void BKE_rigidbody_remove_constraint(struct Scene *scene, struct Object *ob);
-float BKE_rigidbody_calc_volume(struct DerivedMesh *dm, struct RigidBodyOb *rbo, Object *ob);
+float BKE_rigidbody_calc_volume_dm(struct DerivedMesh *dm, struct RigidBodyOb *rbo, Object *ob);
void BKE_rigidbody_calc_shard_mass(struct Object* ob, struct MeshIsland* mi, struct DerivedMesh* dm);
void BKE_rigidbody_calc_threshold(float max_con_mass, struct FractureModifierData* rmd, struct RigidBodyShardCon *con);
float BKE_rigidbody_calc_max_con_mass(struct Object* ob);
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 95ca54e7ef3..de4b194089f 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -292,124 +292,6 @@ static DerivedMesh *rigidbody_get_mesh(Object *ob)
}
}
-/* create collision shape of mesh - convex hull */
-static rbCollisionShape *rigidbody_get_shape_convexhull_from_mesh(Object *ob, float margin, bool *can_embed)
-{
- rbCollisionShape *shape = NULL;
- DerivedMesh *dm = NULL;
- MVert *mvert = NULL;
- int totvert = 0;
-
- if (ob->type == OB_MESH && ob->data) {
- dm = rigidbody_get_mesh(ob);
- mvert = (dm) ? dm->getVertArray(dm) : NULL;
- totvert = (dm) ? dm->getNumVerts(dm) : 0;
- }
- else {
- printf("ERROR: cannot make Convex Hull collision shape for non-Mesh object\n");
- }
-
- if (totvert) {
- shape = RB_shape_new_convex_hull((float *)mvert, sizeof(MVert), totvert, margin, can_embed);
- }
- else {
- printf("ERROR: no vertices to define Convex Hull collision shape with\n");
- }
-
- if (dm && ob->rigidbody_object->mesh_source == RBO_MESH_BASE)
- dm->release(dm);
-
- return shape;
-}
-
-/* create collision shape of mesh - triangulated mesh
- * returns NULL if creation fails.
- */
-static rbCollisionShape *rigidbody_get_shape_trimesh_from_mesh(Object *ob)
-{
- rbCollisionShape *shape = NULL;
-
- if (ob->type == OB_MESH) {
- DerivedMesh *dm = NULL;
- MVert *mvert;
- const MLoopTri *looptri;
- int totvert;
- int tottri;
- const MLoop *mloop;
-
- dm = rigidbody_get_mesh(ob);
-
- /* ensure mesh validity, then grab data */
- if (dm == NULL)
- return NULL;
-
- mvert = dm->getVertArray(dm);
- totvert = dm->getNumVerts(dm);
- looptri = dm->getLoopTriArray(dm);
- tottri = dm->getNumLoopTri(dm);
- mloop = dm->getLoopArray(dm);
-
- /* sanity checking - potential case when no data will be present */
- if ((totvert == 0) || (tottri == 0)) {
- printf("WARNING: no geometry data converted for Mesh Collision Shape (ob = %s)\n", ob->id.name + 2);
- }
- else {
- rbMeshData *mdata;
- int i;
-
- /* init mesh data for collision shape */
- mdata = RB_trimesh_data_new(tottri, totvert);
-
- RB_trimesh_add_vertices(mdata, (float *)mvert, totvert, sizeof(MVert));
-
- /* loop over all faces, adding them as triangles to the collision shape
- * (so for some faces, more than triangle will get added)
- */
- if (mvert && looptri) {
- for (i = 0; i < tottri; i++) {
- /* add first triangle - verts 1,2,3 */
- const MLoopTri *lt = &looptri[i];
- int vtri[3];
-
- vtri[0] = mloop[lt->tri[0]].v;
- vtri[1] = mloop[lt->tri[1]].v;
- vtri[2] = mloop[lt->tri[2]].v;
-
- RB_trimesh_add_triangle_indices(mdata, i, UNPACK3(vtri));
- }
- }
-
- RB_trimesh_finish(mdata);
-
- /* construct collision shape
- *
- * These have been chosen to get better speed/accuracy tradeoffs with regards
- * to limitations of each:
- * - BVH-Triangle Mesh: for passive objects only. Despite having greater
- * speed/accuracy, they cannot be used for moving objects.
- * - GImpact Mesh: for active objects. These are slower and less stable,
- * but are more flexible for general usage.
- */
- if (ob->rigidbody_object->type == RBO_TYPE_PASSIVE) {
- shape = RB_shape_new_trimesh(mdata);
- }
- else {
- shape = RB_shape_new_gimpact_mesh(mdata);
- }
- }
-
- /* cleanup temp data */
- if (ob->rigidbody_object->mesh_source == RBO_MESH_BASE) {
- dm->release(dm);
- }
- }
- else {
- printf("ERROR: cannot make Triangular Mesh collision shape for non-Mesh object\n");
- }
-
- return shape;
-}
-
/* Create new physics sim collision shape for object and store it,
* or remove the existing one first and replace...
*/
@@ -487,7 +369,7 @@ static void rigidbody_validate_sim_shape(Object *ob, bool rebuild)
if (!(rbo->flag & RBO_FLAG_USE_MARGIN) && has_volume)
hull_margin = 0.04f;
if (ob->type == OB_MESH && ob->data) {
- new_shape = rigidbody_get_shape_convexhull_from_mesh(ob, hull_margin, &can_embed);
+ new_shape = rigidbody_get_shape_convexhull_from_mesh((Mesh *)ob->data, hull_margin, &can_embed);
}
else {
printf("ERROR: cannot make Convex Hull collision shape for non-Mesh object\n");
@@ -513,107 +395,6 @@ static void rigidbody_validate_sim_shape(Object *ob, bool rebuild)
}
}
-/* --------------------- */
-
-/* helper function to calculate volume of rigidbody object */
-// TODO: allow a parameter to specify method used to calculate this?
-void BKE_rigidbody_calc_volume(Object *ob, float *r_vol)
-{
- RigidBodyOb *rbo = ob->rigidbody_object;
-
- float size[3] = {1.0f, 1.0f, 1.0f};
- float radius = 1.0f;
- float height = 1.0f;
-
- float volume = 0.0f;
-
- /* if automatically determining dimensions, use the Object's boundbox
- * - assume that all quadrics are standing upright on local z-axis
- * - assume even distribution of mass around the Object's pivot
- * (i.e. Object pivot is centralized in boundbox)
- * - boundbox gives full width
- */
- // XXX: all dimensions are auto-determined now... later can add stored settings for this
- BKE_object_dimensions_get(ob, size);
-
- if (ELEM(rbo->shape, RB_SHAPE_CAPSULE, RB_SHAPE_CYLINDER, RB_SHAPE_CONE)) {
- /* take radius as largest x/y dimension, and height as z-dimension */
- radius = MAX2(size[0], size[1]) * 0.5f;
- height = size[2];
- }
- else if (rbo->shape == RB_SHAPE_SPHERE) {
- /* take radius to the largest dimension to try and encompass everything */
- radius = max_fff(size[0], size[1], size[2]) * 0.5f;
- }
-
- /* calculate volume as appropriate */
- switch (rbo->shape) {
- case RB_SHAPE_BOX:
- volume = size[0] * size[1] * size[2];
- break;
-
- case RB_SHAPE_SPHERE:
- volume = 4.0f / 3.0f * (float)M_PI * radius * radius * radius;
- break;
-
- /* for now, assume that capsule is close enough to a cylinder... */
- case RB_SHAPE_CAPSULE:
- case RB_SHAPE_CYLINDER:
- volume = (float)M_PI * radius * radius * height;
- break;
-
- case RB_SHAPE_CONE:
- volume = (float)M_PI / 3.0f * radius * radius * height;
- break;
-
- case RB_SHAPE_CONVEXH:
- case RB_SHAPE_TRIMESH:
- {
- if (ob->type == OB_MESH) {
- DerivedMesh *dm = rigidbody_get_mesh(ob);
- MVert *mvert;
- const MLoopTri *lt = NULL;
- int totvert, tottri = 0;
- const MLoop *mloop = NULL;
-
- /* ensure mesh validity, then grab data */
- if (dm == NULL)
- return;
-
- mvert = dm->getVertArray(dm);
- totvert = dm->getNumVerts(dm);
- lt = dm->getLoopTriArray(dm);
- tottri = dm->getNumLoopTri(dm);
- mloop = dm->getLoopArray(dm);
-
- if (totvert > 0 && tottri > 0) {
- BKE_mesh_calc_volume(mvert, totvert, lt, tottri, mloop, &volume, NULL);
- }
-
- /* cleanup temp data */
- if (ob->rigidbody_object->mesh_source == RBO_MESH_BASE) {
- dm->release(dm);
- }
- }
- else {
- /* rough estimate from boundbox as fallback */
- /* XXX could implement other types of geometry here (curves, etc.) */
- volume = size[0] * size[1] * size[2];
- }
- break;
- }
-
-#if 0 // XXX: not defined yet
- case RB_SHAPE_COMPOUND:
- volume = 0.0f;
- break;
-#endif
- }
-
- /* return the volume calculated */
- if (r_vol) *r_vol = volume;
-}
-
void BKE_rigidbody_calc_center_of_mass(Object *ob, float r_center[3])
{
RigidBodyOb *rbo = ob->rigidbody_object;
@@ -2214,7 +1995,7 @@ static void rigidbody_update_simulation_post_step(RigidBodyWorld *rbw)
/* handle regular rigidbodies */
if (ob && ob->rigidbody_object && !modFound) {
- RigidBodyOb *rbo = ob->rigidbody_object;
+ rbo = ob->rigidbody_object;
/* reset kinematic state for transformed objects */
if (rbo && (ob->flag & SELECT) && (G.moving & G_TRANSFORM_OBJ)) {
RB_body_set_kinematic_state(rbo->physics_object, rbo->flag & RBO_FLAG_KINEMATIC || rbo->flag & RBO_FLAG_DISABLED);
@@ -2921,7 +2702,7 @@ static float box_volume(float size[3])
}
/* helper function to calculate volume of rigidbody object */
-float BKE_rigidbody_calc_volume(DerivedMesh *dm, RigidBodyOb *rbo, Object* ob)
+float BKE_rigidbody_calc_volume_dm(DerivedMesh *dm, RigidBodyOb *rbo, Object* ob)
{
float loc[3] = {0.0f, 0.0f, 0.0f};
float size[3] = {1.0f, 1.0f, 1.0f};
@@ -3029,7 +2810,7 @@ void BKE_rigidbody_calc_shard_mass(Object *ob, MeshIsland *mi, DerivedMesh *orig
if (ob->type == OB_MESH) {
/* if we have a mesh, determine its volume */
dm_ob = CDDM_from_mesh(ob->data);
- vol_ob = BKE_rigidbody_calc_volume(dm_ob, ob->rigidbody_object, ob);
+ vol_ob = BKE_r
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list