[Bf-blender-cvs] [b1f3cf1] temp-array-modifier: Cleanup
Campbell Barton
noreply at git.blender.org
Tue Aug 12 01:57:21 CEST 2014
Commit: b1f3cf1f5bc8caf60c4b386718a92c3b495afaf2
Author: Campbell Barton
Date: Tue Aug 12 09:57:08 2014 +1000
Branches: temp-array-modifier
https://developer.blender.org/rBb1f3cf1f5bc8caf60c4b386718a92c3b495afaf2
Cleanup
===================================================================
M source/blender/blenkernel/BKE_cdderivedmesh.h
M source/blender/blenkernel/intern/cdderivedmesh.c
M source/blender/modifiers/intern/MOD_array.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_cdderivedmesh.h b/source/blender/blenkernel/BKE_cdderivedmesh.h
index 02aa7f5..b0ade7b 100644
--- a/source/blender/blenkernel/BKE_cdderivedmesh.h
+++ b/source/blender/blenkernel/BKE_cdderivedmesh.h
@@ -58,9 +58,12 @@ struct DerivedMesh *CDDM_from_bmesh(struct BMesh *bm, const bool use_mdisps);
DerivedMesh *CDDM_from_editbmesh(struct BMEditMesh *em, const bool use_mdisps, const bool use_tessface);
/* merge verts */
-/* Constants for merge_mode of CDDM_merge_verts. Refer to cdderivedmesh.c for details. */
-#define CDDM_MERGE_VERTS_DUMP_IF_MAPPED 1
-#define CDDM_MERGE_VERTS_DUMP_IF_EQUAL 2
+/* Enum for merge_mode of CDDM_merge_verts.
+ * Refer to cdderivedmesh.c for details. */
+enum {
+ CDDM_MERGE_VERTS_DUMP_IF_MAPPED,
+ CDDM_MERGE_VERTS_DUMP_IF_EQUAL,
+};
DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int tot_vtargetmap, const int merge_mode);
/* creates a CDDerivedMesh from the given curve object */
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 5abf5db..68fb01d 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -2570,17 +2570,17 @@ void CDDM_calc_normals_tessface(DerivedMesh *dm)
}
#if 1
+
/**
- * Poly compare with vtargetmap
- * Function used by #CDDM_merge_verts.
- * The function compares poly_source after applying vtargetmap, with poly_target.
- * The two polys are identical if they share the same vertices in the same order, or in reverse order,
- * but starting position loopstart may be different.
- * The function is called with direct_reverse=1 for same order (i.e. same normal),
- * and may be called again with direct_reverse=-1 for reverse order.
- * \return 1 if polys are identical, 0 if polys are different.
+ * Poly compare with vtargetmap
+ * Function used by #CDDM_merge_verts.
+ * The function compares poly_source after applying vtargetmap, with poly_target.
+ * The two polys are identical if they share the same vertices in the same order, or in reverse order,
+ * but starting position loopstart may be different.
+ * The function is called with direct_reverse=1 for same order (i.e. same normal),
+ * and may be called again with direct_reverse=-1 for reverse order.
+ * \return 1 if polys are identical, 0 if polys are different.
*/
-
static int cddm_poly_compare(MLoop *mloop_array, MPoly *mpoly_source, MPoly *mpoly_target, const int *vtargetmap, const int direct_reverse)
{
int vert_source, first_vert_source, vert_target;
@@ -2897,15 +2897,15 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
/* Can we optimise by reusing an old pmap ? How do we know an old pmap is stale ? */
/* When called by MOD_array.c, the cddm has just been created, so it has no valid pmap. */
BKE_mesh_vert_poly_map_create(&cddm->pmap, &cddm->pmap_mem,
- cddm->mpoly, cddm->mloop,
- totvert, totpoly, totloop);
- } /* Done preparing for fast poly compare */
+ cddm->mpoly, cddm->mloop,
+ totvert, totpoly, totloop);
+ } /* done preparing for fast poly compare */
mp = cddm->mpoly;
for (i = 0; i < totpoly; i++, mp++) {
MPoly *mp_new;
-
+
ml = cddm->mloop + mp->loopstart;
/* check faces with all vertices merged */
@@ -3018,13 +3018,13 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
mp_new->loopstart = STACK_SIZE(mloop) - c;
STACK_PUSH(oldp, i);
- } /* End of the loop that tests polys */
+ } /* end of the loop that tests polys */
if (poly_ghash) {
BLI_ghash_free(poly_ghash, NULL, NULL);
MEM_freeN(poly_keys);
}
-
+
/*create new cddm*/
cddm2 = (CDDerivedMesh *) CDDM_from_template((DerivedMesh *)cddm, STACK_SIZE(mvert), STACK_SIZE(medge), 0, STACK_SIZE(mloop), STACK_SIZE(mpoly));
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index dd9c727..adbaa3d 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -363,13 +363,14 @@ static DerivedMesh *arrayModifier_doArray(
Scene *scene, Object *ob, DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
{
+ const float eps = 1e-6f;
MVert *mv, *mv_prev, *result_dm_verts, *src_mvert;
MEdge *me;
MLoop *ml;
MPoly *mp;
int i, j, c, count;
- float length= amd->length;
+ float length = amd->length;
/* offset matrix */
float offset[4][4];
float scale[3];
@@ -436,7 +437,7 @@ static DerivedMesh *arrayModifier_doArray(
unit_m4(obinv);
mul_m4_series(result_mat, offset,
- obinv, amd->offset_ob->obmat);
+ obinv, amd->offset_ob->obmat);
copy_m4_m4(offset, result_mat);
}
@@ -465,13 +466,15 @@ static DerivedMesh *arrayModifier_doArray(
if (amd->fit_type == MOD_ARR_FITLENGTH || amd->fit_type == MOD_ARR_FITCURVE) {
float dist = len_v3(offset[3]);
- if (dist > 1e-6f)
+ if (dist > eps) {
/* this gives length = first copy start to last copy end
* add a tiny offset for floating point rounding errors */
- count = (length + 1e-6f) / dist;
- else
+ count = (length + eps) / dist;
+ }
+ else {
/* if the offset has no translation, just make one copy */
count = 1;
+ }
}
if (count < 1)
@@ -614,22 +617,21 @@ static DerivedMesh *arrayModifier_doArray(
int start_cap_start = result_nverts - start_cap_nverts - end_cap_nverts;
invert_m4_m4(start_offset, offset);
bm_merge_dm_transform(result_dm, start_cap_dm, start_offset,
- result_nverts - start_cap_nverts - end_cap_nverts,
- result_nedges - start_cap_nedges - end_cap_nedges,
- result_nloops - start_cap_nloops - end_cap_nloops,
- result_npolys - start_cap_npolys - end_cap_npolys,
- start_cap_nverts, start_cap_nedges, start_cap_nloops, start_cap_npolys
- );
+ result_nverts - start_cap_nverts - end_cap_nverts,
+ result_nedges - start_cap_nedges - end_cap_nedges,
+ result_nloops - start_cap_nloops - end_cap_nloops,
+ result_npolys - start_cap_npolys - end_cap_npolys,
+ start_cap_nverts, start_cap_nedges, start_cap_nloops, start_cap_npolys);
/* Identify doubles with first chunk */
if (amd->flags & MOD_ARR_MERGE) {
map_doubles(full_doubles_map,
- result_dm_verts,
- first_chunk_start,
- first_chunk_nverts,
- start_cap_start,
- start_cap_nverts,
- amd->merge_dist,
- false);
+ result_dm_verts,
+ first_chunk_start,
+ first_chunk_nverts,
+ start_cap_start,
+ start_cap_nverts,
+ amd->merge_dist,
+ false);
}
}
@@ -638,22 +640,21 @@ static DerivedMesh *arrayModifier_doArray(
int end_cap_start = result_nverts - end_cap_nverts;
mul_m4_m4m4(end_offset, current_offset, offset);
bm_merge_dm_transform(result_dm, end_cap_dm, end_offset,
- result_nverts - end_cap_nverts,
- result_nedges - end_cap_nedges,
- result_nloops - end_cap_nloops,
- result_npolys - end_cap_npolys,
- end_cap_nverts, end_cap_nedges, end_cap_nloops, end_cap_npolys
- );
+ result_nverts - end_cap_nverts,
+ result_nedges - end_cap_nedges,
+ result_nloops - end_cap_nloops,
+ result_npolys - end_cap_npolys,
+ end_cap_nverts, end_cap_nedges, end_cap_nloops, end_cap_npolys);
/* Identify doubles with last chunk */
if (amd->flags & MOD_ARR_MERGE) {
map_doubles(full_doubles_map,
- result_dm_verts,
- last_chunk_start,
- last_chunk_nverts,
- end_cap_start,
- end_cap_nverts,
- amd->merge_dist,
- false);
+ result_dm_verts,
+ last_chunk_start,
+ last_chunk_nverts,
+ end_cap_start,
+ end_cap_nverts,
+ amd->merge_dist,
+ false);
}
} /* Done capping */
@@ -661,8 +662,9 @@ static DerivedMesh *arrayModifier_doArray(
tot_doubles = 0;
if (full_doubles_map) {
for (i = 0; i < result_nverts; i++) {
- if (full_doubles_map[i]!=-1)
+ if (full_doubles_map[i] != -1) {
tot_doubles++;
+ }
}
if (tot_doubles > 0) {
result_dm = CDDM_merge_verts(result_dm, full_doubles_map, tot_doubles, CDDM_MERGE_VERTS_DUMP_IF_EQUAL);
More information about the Bf-blender-cvs
mailing list