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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs