[Bf-blender-cvs] [4681e66f156] temp-fracture-modifier-2.8: removing shards from fracture modifer (work in progress)

Martin Felke noreply at git.blender.org
Tue Aug 14 15:01:06 CEST 2018


Commit: 4681e66f156dd46d1683eeec7e09dede8ba24351
Author: Martin Felke
Date:   Tue Aug 14 15:00:28 2018 +0200
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rB4681e66f156dd46d1683eeec7e09dede8ba24351

removing shards from fracture modifer (work in progress)

only dealing with mesh_islands now, they have been partially rewritten as well

===================================================================

M	intern/rigidbody/RBI_api.h
M	intern/rigidbody/rb_bullet_api.cpp
M	source/blender/blenkernel/BKE_fracture.h
M	source/blender/blenkernel/BKE_fracture_util.h
M	source/blender/blenkernel/BKE_rigidbody.h
M	source/blender/blenkernel/intern/fracture.c
M	source/blender/blenkernel/intern/fracture_automerge.c
M	source/blender/blenkernel/intern/fracture_constraints.c
M	source/blender/blenkernel/intern/fracture_dynamic.c
M	source/blender/blenkernel/intern/fracture_external.c
M	source/blender/blenkernel/intern/fracture_prefractured.c
M	source/blender/blenkernel/intern/fracture_rigidbody.c
M	source/blender/blenkernel/intern/fracture_util.c
M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/editors/object/object_modifier.c
M	source/blender/makesdna/DNA_fracture_types.h
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesdna/DNA_rigidbody_types.h
M	source/blender/makesrna/intern/rna_fracture.c
M	source/blender/makesrna/intern/rna_fracture_api.c
M	source/blender/makesrna/intern/rna_rigidbody.c
M	source/blender/modifiers/intern/MOD_fracture.c

===================================================================

diff --git a/intern/rigidbody/RBI_api.h b/intern/rigidbody/RBI_api.h
index 8727c375e93..cf3ebccdea6 100644
--- a/intern/rigidbody/RBI_api.h
+++ b/intern/rigidbody/RBI_api.h
@@ -69,10 +69,12 @@ typedef struct rbConstraint rbConstraint;
 /* Collision feedback (manifolds and contact points */
 typedef struct rbContactPoint {
 	float contact_force;
-	int contact_body_indexA;
-	int contact_body_indexB;
 	float contact_pos_world_onA[3];
 	float contact_pos_world_onB[3];
+	void *contact_islandA;
+	void *contact_islandB;
+	void *contact_objectA;
+	void *contact_objectB;
 } rbContactPoint;
 
 /*Subclass because of Internal Tick Callback... sigh why doesnt this work with a simple collision callback ? */
diff --git a/intern/rigidbody/rb_bullet_api.cpp b/intern/rigidbody/rb_bullet_api.cpp
index 7e21e95e2d2..2c27b699969 100644
--- a/intern/rigidbody/rb_bullet_api.cpp
+++ b/intern/rigidbody/rb_bullet_api.cpp
@@ -322,7 +322,6 @@ static void tickCallback(btDynamicsWorld *world, btScalar timeStep)
 				//odd check, but in debug mode we had already numcontacts = 2 but didnt have ANY contacts... gah
 				if (tworld->m_contactCallback && j < contactManifold->getNumContacts())
 				{
-
 					rbContactPoint* cp = tworld->make_contact_point(pt, obA, obB);
 					broken = weakenCompound(obA, cp->contact_force, pt.getPositionWorldOnA(), fworld);
 					broken = broken || weakenCompound(obB, cp->contact_force, pt.getPositionWorldOnB(), fworld);
@@ -368,10 +367,15 @@ rbContactPoint* TickDiscreteDynamicsWorld::make_contact_point(btManifoldPoint& p
 	rbRigidBody* rbA = (rbRigidBody*)(bodyA->getUserPointer());
 	rbRigidBody* rbB = (rbRigidBody*)(bodyB->getUserPointer());
 	if (rbA)
-		cp->contact_body_indexA = rbA->linear_index;
+	{
+		cp->contact_islandA = rbA->meshIsland;
+		cp->contact_objectA = rbA->blenderOb;
+	}
 
-	if (rbB)
-		cp->contact_body_indexB = rbB->linear_index;
+	if (rbB) {
+		cp->contact_islandB = rbB->meshIsland;
+		cp->contact_objectB = rbB->blenderOb;
+	}
 
 	cp->contact_force = point.getAppliedImpulse();
 	copy_v3_btvec3(cp->contact_pos_world_onA, point.getPositionWorldOnA());
diff --git a/source/blender/blenkernel/BKE_fracture.h b/source/blender/blenkernel/BKE_fracture.h
index 4416824f0a9..1a9453be3d7 100644
--- a/source/blender/blenkernel/BKE_fracture.h
+++ b/source/blender/blenkernel/BKE_fracture.h
@@ -73,9 +73,6 @@ typedef struct FracPointCloud {
 } FracPointCloud;
 
 
-void BKE_fracture_dynamic_free(struct FractureModifierData *fmd,
-                               bool do_free_sequence, bool do_free_rigidbody, struct Scene* scene);
-
 struct Mesh* BKE_fracture_prefractured_apply(struct FractureModifierData *fmd, struct Object *ob, struct Mesh *mesh,
                                              struct Depsgraph *depsgraph);
 
@@ -85,16 +82,16 @@ struct Mesh* BKE_fracture_external_apply(struct FractureModifierData *fmd, struc
 
 struct Mesh* BKE_fracture_mesh_from_packdata(struct FractureModifierData *fmd, struct Mesh *derivedData);
 
-void BKE_fracture_initialize(struct FractureModifierData* fmd, struct Object *ob,
+void BKE_fracture_refresh(struct FractureModifierData* fmd, struct Object *ob,
                                      struct Mesh* mesh, struct Depsgraph *depsgraph);
 
-void BKE_fracture_autohide_refresh(struct FractureModifierData* fmd, struct Object *ob);
-void BKE_fracture_automerge_refresh(struct FractureModifierData* fmd);
+void BKE_fracture_autohide_refresh(struct FractureModifierData* fmd, struct Object *ob, struct Mesh *me_assembled);
+void BKE_fracture_automerge_refresh(struct FractureModifierData* fmd, struct Mesh *me_assembled);
 struct Mesh *BKE_fracture_result_mesh(struct FractureModifierData* fmd, struct Mesh *dm, struct Object* ob, bool validMesh,
                                       struct Scene* scene);
 
 FracPointCloud BKE_fracture_points_get(struct Depsgraph *depsgraph, struct FractureModifierData *emd,
-                                       struct Object *ob, struct Mesh *fracmesh, ShardID id);
+                                       struct Object *ob, struct MeshIsland *mi);
 
 void BKE_fracture_face_calc_center_mean(struct Mesh *dm, struct MPoly *mp, float r_cent[3]);
 
@@ -107,17 +104,17 @@ void BKE_fracture_shared_verts_free(struct ListBase* lb);
 struct Mesh *BKE_fracture_autohide_do(struct FractureModifierData *fmd, struct Mesh *dm, struct Object *ob, struct Scene* sc);
 
 struct FracMesh* BKE_fracture_fracmesh_copy(struct FracMesh* fm);
-void BKE_fracture_simulation_free(struct FractureModifierData *fmd, bool do_free_seq, bool do_free_rigidbody, struct Scene *scene);
+void BKE_fracture_simulation_free(struct FractureModifierData *fmd, struct Scene *scene);
 
-void BKE_fracture_meshislands_free(struct FractureModifierData* fmd, struct ListBase* meshIslands, bool do_free_rigidbody, struct Scene* scene);
+void BKE_fracture_meshislands_free(struct FractureModifierData* fmd, struct ListBase* meshIslands, struct Scene* scene);
 
-void BKE_fracture_free(struct FractureModifierData *fmd, bool do_free_seq, bool do_free_rigidbody, struct Scene *scene);
+void BKE_fracture_free(struct FractureModifierData *fmd, struct Scene *scene);
 
-void BKE_fracture_do(struct FractureModifierData *fmd, ShardID id, struct Object *obj, struct Mesh *dm,
-                     struct Depsgraph *depsgraph, struct Main *bmain);
+void BKE_fracture_do(struct FractureModifierData *fmd, struct MeshIsland *mi, struct Object *obj,
+                     struct Depsgraph *depsgraph, struct Main *bmain, struct Scene *scene);
 
 void BKE_fracture_normal_find(struct Mesh *dm, struct KDTree *tree, float co[3], short no[3], short rno[3], float range);
-void BKE_fracture_physics_mesh_normals_fix(struct FractureModifierData *fmd, struct Shard* s, struct MeshIsland* mi, int i,
+void BKE_fracture_physics_normals_fix(struct FractureModifierData *fmd, struct MeshIsland* mi, int i,
                                            struct Mesh* orig_dm);
 
 void BKE_fracture_collect_layers(struct Shard* s, struct Mesh *dm, int vertstart, int polystart, int loopstart, int edgestart);
@@ -157,7 +154,7 @@ struct Mesh* BKE_fracture_shard_to_mesh(struct Shard *s, bool doCustomData);
 float BKE_shard_calc_minmax(struct Shard *shard);
 void BKE_fracture_shard_free(struct Shard *s, bool doCustomData);
 
-bool BKE_fracture_shard_center_centroid_area(struct Shard *shard, float cent[3]);
+bool BKE_fracture_mesh_center_centroid_area(struct Mesh *shard, float cent[3]);
 void BKE_fracture_custom_data_mesh_to_shard(struct Shard *s, struct Mesh *dm);
 
 
@@ -169,7 +166,7 @@ void BKE_bm_mesh_hflag_flush_vert(struct BMesh *bm, const char hflag);
 void BKE_fracture_constraint_create(struct Scene *scene, struct FractureModifierData *fmd,
                                                      struct MeshIsland *mi1, struct MeshIsland *mi2, short con_type, float thresh);
 
-bool BKE_fracture_dynamic_lookup_mesh_state(struct FractureModifierData *fmd, int frame, int do_lookup, struct Scene* scene);
+bool BKE_fracture_dynamic_lookup_mesh_state(struct FractureModifierData *fmd, int frame);
 
 struct MDeformVert* BKE_fracture_shards_to_islands(struct FractureModifierData* fmd, struct Object* ob, struct Mesh *orig_dm,
                                                    struct Scene *scene);
@@ -180,12 +177,11 @@ void BKE_fracture_fill_vgroup(struct FractureModifierData *rmd, struct Mesh *dm,
 void BKE_fracture_do_halving(struct FractureModifierData *fmd, struct Object* ob, struct Mesh *dm, struct Mesh *orig_dm,
                              bool is_prehalving, ShardID id, struct Scene* scene);
 
-struct Mesh* BKE_fracture_assemble_mesh_from_shards(struct FractureModifierData *fmd, bool doCustomData, bool use_packed);
+struct Mesh* BKE_fracture_assemble_mesh_from_islands(struct FractureModifierData *fmd, struct ListBase *islands, struct Object *ob);
 
-void BKE_fracture_modifier_free(struct FractureModifierData *fmd, bool do_free_seq, bool do_free_rigidbody, struct Scene *scene);
+void BKE_fracture_modifier_free(struct FractureModifierData *fmd, struct Scene *scene);
 
-void BKE_fracture_mesh_island_free(struct FractureModifierData *rmd, struct MeshIsland *mi, bool remove_rigidbody,
-                                   struct Scene* scene);
+void BKE_fracture_mesh_island_free(struct MeshIsland *mi, struct Scene* scene);
 
 short BKE_fracture_collect_materials(struct Main* bmain, struct Object* o, struct Object* ob, int matstart, struct GHash** mat_index_map);
 
@@ -200,5 +196,18 @@ struct Mesh* BKE_fracture_bmesh_to_mesh(struct BMesh* bm);
 void BKE_update_velocity_layer(struct FractureModifierData *fmd);
 bool BKE_rigidbody_remove_modifier(struct RigidBodyWorld* rbw, struct ModifierData *md, struct Object *ob);
 
+void BKE_fracture_dynamic_do(struct FractureModifierData *fmd, struct Object* ob, struct Scene* scene,
+                             struct Depsgraph* depsgraph, struct Main* bmain);
+
+void BKE_fracture_dynamic_free(struct FractureModifierData *fmd, struct Scene *scene);
+
+void BKE_fracture_external_constraints_setup(struct FractureModifierData *fmd, struct Scene *scene, struct Object *ob);
+void BKE_fracture_dynamic_new_entries_add(struct FractureModifierData* fmd, struct Scene *scene, bool is_new);
+
+struct Mesh* BKE_fracture_apply(struct FractureModifierData *fmd, struct Object *ob, struct Mesh *me, struct Depsgraph* depsgraph);
+
+struct MeshIsland *BKE_fracture_mesh_island_create(struct Mesh* me, struct Main* bmain, struct Scene *scene, struct Object *ob);
+void BKE_fracture_mesh_boundbox_calc(struct Mesh *me, float r_loc[], float r_size[]);
+
 
 #endif /* BKE_FRACTURE_H */
diff --git a/source/blender/blenkernel/BKE_fracture_util.h b/source/blender/blenkernel/BKE_fracture_util.h
index db4912764b0..96625022509 100644
--- a/source/blender/blenkernel/BKE_fracture_util.h
+++ b/source/blender/blenkernel/BKE_fracture_util.h
@@ -35,12 +35,12 @@
 
 #include "DNA_fracture_types.h"
 
-Shard *BKE_fracture_shard_boolean(Object *obj, Mesh *dm_parent, Shard* child, short inner_material_index, int num_cuts, float fractal,
-                                  Shard **other, float mat[4][4], float radius, bool use_smooth_inner, int num_levels, char uv_layer[],
+MeshIsland *BKE_fracture_shard_bo

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list