[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