[Bf-blender-cvs] [bdb170c] fracture_modifier: refactored function for loading fracture modifier out
Martin Felke
noreply at git.blender.org
Sun Jan 11 18:05:01 CET 2015
Commit: bdb170ca60e272500789f89c63d3393b040e5c8b
Author: Martin Felke
Date: Sun Jan 11 17:21:39 2015 +0100
Branches: fracture_modifier
https://developer.blender.org/rBbdb170ca60e272500789f89c63d3393b040e5c8b
refactored function for loading fracture modifier out
===================================================================
M source/blender/blenloader/intern/readfile.c
===================================================================
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 403ad7e..da58dc5 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4748,6 +4748,120 @@ static void read_meshIsland(FileData *fd, MeshIsland **address)
mi->participating_constraints = NULL;
}
+/*refactor this loading routine out, for better readability*/
+static void load_fracture_modifier(FileData* fd, FractureModifierData *fmd)
+{
+ FracMesh* fm;
+
+ fm = fmd->frac_mesh = newdataadr(fd, fmd->frac_mesh);
+
+ fmd->refresh = false; /* do not execute modifier here yet*/
+ fmd->refresh_constraints = false;
+ fmd->nor_tree = NULL;
+ fmd->face_pairs = NULL;
+
+ if (fm == NULL) {
+
+ fmd->dm = NULL;
+ fmd->meshIslands.first = NULL;
+ fmd->meshIslands.last = NULL;
+ fmd->visible_mesh = NULL;
+ fmd->visible_mesh_cached = NULL;
+ zero_m4(fmd->origmat);
+ fmd->meshConstraints.first = NULL;
+ fmd->meshConstraints.last = NULL;
+ fmd->explo_shared = false;
+ fmd->refresh = false; /* do not execute modifier */
+ fmd->refresh_constraints = false;
+ fmd->max_vol = 0;
+ fmd->refresh_images = false;
+ }
+ else {
+ MeshIsland *mi;
+ MVert *mverts;
+ int vertstart = 0;
+ Shard *s;
+ int count = 0;
+
+ link_list(fd, &fmd->frac_mesh->shard_map);
+ for (s = fmd->frac_mesh->shard_map.first; s; s = s->next) {
+ read_shard(fd, &s);
+ }
+
+ fmd->dm = NULL;
+ fmd->visible_mesh = NULL;
+
+ link_list(fd, &fmd->islandShards);
+ for (s = fmd->islandShards.first; s; s = s->next) {
+ read_shard(fd, &s);
+ }
+
+ link_list(fd, &fmd->meshIslands);
+ count = BLI_listbase_count(&fmd->islandShards);
+
+ if ((fmd->islandShards.first == NULL || count == 0) && fm->shard_count > 0) {
+ /* oops, a refresh was missing, so disable this flag here better, otherwise
+ * we attempt to load non existing data */
+ fmd->shards_to_islands = false;
+ }
+ else if (fm->shard_count == 0) {
+ fmd->shards_to_islands = true;
+ }
+
+ /* ugly ugly, need only the shard... the rest is to be generated on demand... */
+ BKE_fracture_create_dm(fmd, true);
+
+ if (fm->shard_count == 0) {
+ fmd->shards_to_islands = false;
+ }
+
+ fmd->visible_mesh_cached = CDDM_copy(fmd->dm);
+ if (fmd->visible_mesh == NULL) {
+ fmd->visible_mesh = DM_to_bmesh(fmd->visible_mesh_cached, true);
+ }
+
+ DM_ensure_tessface(fmd->visible_mesh_cached);
+ DM_ensure_normals(fmd->visible_mesh_cached);
+ DM_update_tessface_data(fmd->visible_mesh_cached);
+
+ /* re-init cached verts here... */
+ mverts = CDDM_get_verts(fmd->visible_mesh_cached);
+
+ for (mi = fmd->meshIslands.first; mi; mi = mi->next) {
+ MVert *mv;
+ int k = 0;
+ read_meshIsland(fd, &mi);
+ mi->vertices_cached = MEM_mallocN(sizeof(MVert*) * mi->vertex_count, "mi->vertices_cached readfile");
+ mv = mi->physics_mesh->getVertArray(mi->physics_mesh);
+
+ for (k = 0; k < mi->vertex_count; k++) {
+ MVert* v = mverts + vertstart + k ;
+ MVert* v2 = mv + k;
+ mi->vertices_cached[k] = v;
+ mi->vertco[k*3] = v->co[0];
+ mi->vertco[k*3+1] = v->co[1];
+ mi->vertco[k*3+2] = v->co[2];
+
+ if (mi->vertno != NULL && fmd->fix_normals) {
+ short sno[3];
+ sno[0] = mi->vertno[k*3];
+ sno[1] = mi->vertno[k*3+1];
+ sno[2] = mi->vertno[k*3+2];
+ copy_v3_v3_short(v->no, sno);
+ copy_v3_v3_short(v2->no, sno);
+ }
+ }
+ vertstart += mi->vertex_count;
+ }
+
+ fmd->refresh_constraints = true;
+ fmd->meshConstraints.first = NULL;
+ fmd->meshConstraints.last = NULL;
+
+ fmd->refresh_images = true;
+ }
+}
+
static void direct_link_modifiers(FileData *fd, ListBase *lb)
{
ModifierData *md;
@@ -5010,115 +5124,7 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
}
else if (md->type == eModifierType_Fracture) {
FractureModifierData *fmd = (FractureModifierData *)md;
- FracMesh* fm;
-
- fm = fmd->frac_mesh = newdataadr(fd, fmd->frac_mesh);
-
- fmd->refresh = false; /* do not execute modifier here yet*/
- fmd->refresh_constraints = false;
- fmd->nor_tree = NULL;
- fmd->face_pairs = NULL;
-
- if (fm == NULL) {
-
- fmd->dm = NULL;
- fmd->meshIslands.first = NULL;
- fmd->meshIslands.last = NULL;
- fmd->visible_mesh = NULL;
- fmd->visible_mesh_cached = NULL;
- zero_m4(fmd->origmat);
- fmd->meshConstraints.first = NULL;
- fmd->meshConstraints.last = NULL;
- fmd->explo_shared = false;
- fmd->refresh = false; /* do not execute modifier */
- fmd->refresh_constraints = false;
- fmd->max_vol = 0;
- fmd->refresh_images = false;
- }
- else {
- MeshIsland *mi;
- MVert *mverts;
- int vertstart = 0;
- Shard *s;
- int count = 0;
-
- link_list(fd, &fmd->frac_mesh->shard_map);
- for (s = fmd->frac_mesh->shard_map.first; s; s = s->next) {
- read_shard(fd, &s);
- }
-
- fmd->dm = NULL;
- fmd->visible_mesh = NULL;
-
- link_list(fd, &fmd->islandShards);
- for (s = fmd->islandShards.first; s; s = s->next) {
- read_shard(fd, &s);
- }
-
- link_list(fd, &fmd->meshIslands);
- count = BLI_listbase_count(&fmd->islandShards);
-
- if ((fmd->islandShards.first == NULL || count == 0) && fm->shard_count > 0) {
- /* oops, a refresh was missing, so disable this flag here better, otherwise
- * we attempt to load non existing data */
- fmd->shards_to_islands = false;
- }
- else if (fm->shard_count == 0) {
- fmd->shards_to_islands = true;
- }
-
- /* ugly ugly, need only the shard... the rest is to be generated on demand... */
- BKE_fracture_create_dm(fmd, true);
-
- if (fm->shard_count == 0) {
- fmd->shards_to_islands = false;
- }
-
- fmd->visible_mesh_cached = CDDM_copy(fmd->dm);
- if (fmd->visible_mesh == NULL) {
- fmd->visible_mesh = DM_to_bmesh(fmd->visible_mesh_cached, true);
- }
-
- DM_ensure_tessface(fmd->visible_mesh_cached);
- DM_ensure_normals(fmd->visible_mesh_cached);
- DM_update_tessface_data(fmd->visible_mesh_cached);
-
- /* re-init cached verts here... */
- mverts = CDDM_get_verts(fmd->visible_mesh_cached);
-
- for (mi = fmd->meshIslands.first; mi; mi = mi->next) {
- MVert *mv;
- int k = 0;
- read_meshIsland(fd, &mi);
- mi->vertices_cached = MEM_mallocN(sizeof(MVert*) * mi->vertex_count, "mi->vertices_cached readfile");
- mv = mi->physics_mesh->getVertArray(mi->physics_mesh);
-
- for (k = 0; k < mi->vertex_count; k++) {
- MVert* v = mverts + vertstart + k ;
- MVert* v2 = mv + k;
- mi->vertices_cached[k] = v;
- mi->vertco[k*3] = v->co[0];
- mi->vertco[k*3+1] = v->co[1];
- mi->vertco[k*3+2] = v->co[2];
-
- if (mi->vertno != NULL && fmd->fix_normals) {
- short sno[3];
- sno[0] = mi->vertno[k*3];
- sno[1] = mi->vertno[k*3+1];
- sno[2] = mi->vertno[k*3+2];
- copy_v3_v3_short(v->no, sno);
- copy_v3_v3_short(v2->no, sno);
- }
- }
- vertstart += mi->vertex_count;
- }
-
- fmd->refresh_constraints = true;
- fmd->meshConstraints.first = NULL;
- fmd->meshConstraints.last = NULL;
-
- fmd->refresh_images = true;
- }
+ load_fracture_modifier(fd, fmd);
}
}
}
More information about the Bf-blender-cvs
mailing list