[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56125] trunk/blender: add mesh distort display mode (highlights distorted faces)
Campbell Barton
ideasman42 at gmail.com
Thu Apr 18 06:24:27 CEST 2013
Revision: 56125
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56125
Author: campbellbarton
Date: 2013-04-18 04:24:18 +0000 (Thu, 18 Apr 2013)
Log Message:
-----------
add mesh distort display mode (highlights distorted faces)
Modified Paths:
--------------
trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
trunk/blender/source/blender/blenkernel/BKE_editmesh_bvh.h
trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c
trunk/blender/source/blender/blenkernel/intern/scene.c
trunk/blender/source/blender/blenloader/intern/readfile.c
trunk/blender/source/blender/editors/mesh/editmesh_knife.c
trunk/blender/source/blender/makesdna/DNA_scene_types.h
trunk/blender/source/blender/makesrna/intern/rna_scene.c
Modified: trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_view3d.py 2013-04-18 02:01:59 UTC (rev 56124)
+++ trunk/blender/release/scripts/startup/bl_ui/space_view3d.py 2013-04-18 04:24:18 UTC (rev 56125)
@@ -2643,6 +2643,10 @@
layout.prop(statvis, "thickness_samples")
elif statvis_type == 'INTERSECT':
pass
+ elif statvis_type == 'DISTORT':
+ row = layout.row(align=True)
+ row.prop(statvis, "distort_min", text="")
+ row.prop(statvis, "distort_max", text="")
class VIEW3D_PT_view3d_curvedisplay(Panel):
Modified: trunk/blender/source/blender/blenkernel/BKE_editmesh_bvh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_editmesh_bvh.h 2013-04-18 02:01:59 UTC (rev 56124)
+++ trunk/blender/source/blender/blenkernel/BKE_editmesh_bvh.h 2013-04-18 04:24:18 UTC (rev 56125)
@@ -41,7 +41,7 @@
typedef struct BMBVHTree BMBVHTree;
-BMBVHTree *BKE_bmbvh_new(struct BMEditMesh *em, int flag, float (*cos_cage)[3], const bool cos_cage_free);
+BMBVHTree *BKE_bmbvh_new(struct BMEditMesh *em, int flag, const float (*cos_cage)[3], const bool cos_cage_free);
void BKE_bmbvh_free(BMBVHTree *tree);
struct BVHTree *BKE_bmbvh_tree_get(BMBVHTree *tree);
struct BMFace *BKE_bmbvh_ray_cast(BMBVHTree *tree, const float co[3], const float dir[3],
Modified: trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c 2013-04-18 02:01:59 UTC (rev 56124)
+++ trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c 2013-04-18 04:24:18 UTC (rev 56125)
@@ -1556,7 +1556,7 @@
static void statvis_calc_overhang(
BMEditMesh *em,
- float (*polyNos)[3],
+ const float (*polyNos)[3],
/* values for calculating */
const float min, const float max, const char axis,
/* result */
@@ -1616,7 +1616,7 @@
static void statvis_calc_thickness(
BMEditMesh *em,
- float (*vertexCos)[3],
+ const float (*vertexCos)[3],
/* values for calculating */
const float min, const float max, const int samples,
/* result */
@@ -1732,7 +1732,7 @@
static void statvis_calc_intersect(
BMEditMesh *em,
- float (*vertexCos)[3],
+ const float (*vertexCos)[3],
/* result */
unsigned char (*r_face_colors)[4])
{
@@ -1797,6 +1797,72 @@
BKE_bmbvh_free(bmtree);
}
+static void statvis_calc_distort(
+ BMEditMesh *em,
+ const float (*vertexCos)[3],
+ /* values for calculating */
+ const float min, const float max,
+ /* result */
+ unsigned char (*r_face_colors)[4])
+{
+ BMIter iter;
+ BMesh *bm = em->bm;
+ BMFace *f;
+ float f_no[3];
+ int index;
+ const float minmax_irange = 1.0f / (max - min);
+
+ /* fallback */
+ const char col_fallback[4] = {64, 64, 64, 255};
+
+ /* now convert into global space */
+ BM_ITER_MESH_INDEX (f, &iter, bm, BM_FACES_OF_MESH, index) {
+ float fac;
+
+ if (f->len == 3) {
+ fac = -1.0f;
+ }
+ else {
+ BMLoop *l_iter, *l_first;
+ if (vertexCos) {
+ BM_face_normal_update_vcos(bm, f, f_no, vertexCos);
+ }
+ else {
+ copy_v3_v3(f_no, f->no);
+ }
+
+ fac = 0.0f;
+ l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+ do {
+ float no_corner[3];
+ if (vertexCos) {
+ normal_tri_v3(no_corner,
+ vertexCos[BM_elem_index_get(l_iter->prev->v)],
+ vertexCos[BM_elem_index_get(l_iter->v)],
+ vertexCos[BM_elem_index_get(l_iter->next->v)]);
+ }
+ else {
+ BM_loop_calc_face_normal(l_iter, no_corner);
+ }
+ fac = max_ff(fac, angle_normalized_v3v3(f_no, no_corner));
+ } while ((l_iter = l_iter->next) != l_first);
+ fac /= (float)M_1_PI;
+ }
+
+ /* remap */
+ if (fac >= min) {
+ float fcol[3];
+ fac = (fac - min) * minmax_irange;
+ CLAMP(fac, 0.0f, 1.0f);
+ weight_to_rgb(fcol, fac);
+ rgb_float_to_uchar(r_face_colors[index], fcol);
+ }
+ else {
+ copy_v4_v4_char((char *)r_face_colors[index], (const char *)col_fallback);
+ }
+ }
+}
+
void BKE_editmesh_statvis_calc(BMEditMesh *em, DerivedMesh *dm,
MeshStatVis *statvis,
unsigned char (*r_face_colors)[4])
@@ -1808,7 +1874,7 @@
case SCE_STATVIS_OVERHANG:
{
statvis_calc_overhang(
- em, bmdm ? bmdm->polyNos : NULL,
+ em, bmdm ? (const float (*)[3])bmdm->polyNos : NULL,
statvis->overhang_min / (float)M_PI,
statvis->overhang_max / (float)M_PI,
statvis->overhang_axis,
@@ -1819,7 +1885,7 @@
{
const float scale = 1.0f / mat4_to_scale(em->ob->obmat);
statvis_calc_thickness(
- em, bmdm ? bmdm->vertexCos : NULL,
+ em, bmdm ? (const float (*)[3])bmdm->vertexCos : NULL,
statvis->thickness_min * scale,
statvis->thickness_max * scale,
statvis->thickness_samples,
@@ -1829,10 +1895,19 @@
case SCE_STATVIS_INTERSECT:
{
statvis_calc_intersect(
- em, bmdm ? bmdm->vertexCos : NULL,
+ em, bmdm ? (const float (*)[3])bmdm->vertexCos : NULL,
r_face_colors);
break;
}
+ case SCE_STATVIS_DISTORT:
+ {
+ statvis_calc_distort(
+ em, bmdm ? (const float (*)[3])bmdm->vertexCos : NULL,
+ statvis->distort_min / (float)M_PI,
+ statvis->distort_max / (float)M_PI,
+ r_face_colors);
+ break;
+ }
}
}
Modified: trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c 2013-04-18 02:01:59 UTC (rev 56124)
+++ trunk/blender/source/blender/blenkernel/intern/editmesh_bvh.c 2013-04-18 04:24:18 UTC (rev 56125)
@@ -47,13 +47,13 @@
BMEditMesh *em;
BMesh *bm;
- float (*cos_cage)[3];
+ const float (*cos_cage)[3];
bool cos_cage_free;
int flag;
};
-BMBVHTree *BKE_bmbvh_new(BMEditMesh *em, int flag, float (*cos_cage)[3], const bool cos_cage_free)
+BMBVHTree *BKE_bmbvh_new(BMEditMesh *em, int flag, const float (*cos_cage)[3], const bool cos_cage_free)
{
/* could become argument */
const float epsilon = FLT_EPSILON * 2.0f;
Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c 2013-04-18 02:01:59 UTC (rev 56124)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c 2013-04-18 04:24:18 UTC (rev 56125)
@@ -525,6 +525,8 @@
sce->toolsettings->statvis.overhang_max = DEG2RADF(45.0f);
sce->toolsettings->statvis.thickness_max = 0.1f;
sce->toolsettings->statvis.thickness_samples = 1;
+ sce->toolsettings->statvis.distort_min = DEG2RADF(5.0f);
+ sce->toolsettings->statvis.distort_max = DEG2RADF(45.0f);
sce->toolsettings->proportional_size = 1.0f;
Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c 2013-04-18 02:01:59 UTC (rev 56124)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c 2013-04-18 04:24:18 UTC (rev 56125)
@@ -9356,6 +9356,9 @@
statvis->thickness_max = 0.1f;
statvis->thickness_samples = 1;
+
+ statvis->distort_min = DEG2RADF(5.0f);
+ statvis->distort_max = DEG2RADF(45.0f);
}
}
Modified: trunk/blender/source/blender/editors/mesh/editmesh_knife.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_knife.c 2013-04-18 02:01:59 UTC (rev 56124)
+++ trunk/blender/source/blender/editors/mesh/editmesh_knife.c 2013-04-18 04:24:18 UTC (rev 56125)
@@ -209,7 +209,7 @@
ANGLE_135
} angle_snapping;
- float (*cagecos)[3];
+ const float (*cagecos)[3];
} KnifeTool_OpData;
static ListBase *knife_get_face_kedges(KnifeTool_OpData *kcd, BMFace *f);
@@ -327,7 +327,7 @@
return NULL;
}
-static KnifeVert *new_knife_vert(KnifeTool_OpData *kcd, const float co[3], float *cageco)
+static KnifeVert *new_knife_vert(KnifeTool_OpData *kcd, const float co[3], const float cageco[3])
{
KnifeVert *kfv = BLI_mempool_calloc(kcd->kverts);
@@ -2987,7 +2987,7 @@
BM_mesh_elem_index_ensure(kcd->em->bm, BM_VERT);
- kcd->cagecos = BKE_editmesh_vertexCos_get(kcd->em, scene, NULL);
+ kcd->cagecos = (const float (*)[3])BKE_editmesh_vertexCos_get(kcd->em, scene, NULL);
kcd->bmbvh = BKE_bmbvh_new(kcd->em,
BMBVH_RETURN_ORIG |
Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h 2013-04-18 02:01:59 UTC (rev 56124)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h 2013-04-18 04:24:18 UTC (rev 56125)
@@ -946,6 +946,9 @@
float thickness_min, thickness_max;
char thickness_samples;
char _pad2[3];
+
+ /* distort */
+ float distort_min, distort_max;
} MeshStatVis;
@@ -1466,6 +1469,7 @@
#define SCE_STATVIS_OVERHANG 0
#define SCE_STATVIS_THICKNESS 1
#define SCE_STATVIS_INTERSECT 2
+#define SCE_STATVIS_DISTORT 3
/* toolsettings->particle.selectmode for particles */
#define SCE_SELECT_PATH 1
Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c 2013-04-18 02:01:59 UTC (rev 56124)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c 2013-04-18 04:24:18 UTC (rev 56125)
@@ -2009,6 +2009,7 @@
{SCE_STATVIS_OVERHANG, "OVERHANG", 0, "Overhang", ""},
{SCE_STATVIS_THICKNESS, "THICKNESS", 0, "Thickness", ""},
{SCE_STATVIS_INTERSECT, "INTERSECT", 0, "Intersect", ""},
+ {SCE_STATVIS_DISTORT, "DISTORT", 0, "Distort", ""},
{0, NULL, 0, NULL, NULL}};
srna = RNA_def_struct(brna, "MeshStatVis", NULL);
@@ -2062,12 +2063,27 @@
RNA_def_property_ui_text(prop, "Thickness Max", "Maximum for measuring thickness");
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list