[Bf-blender-cvs] [4f1c1bbe7ab] blender2.8: Icons: geometry now checks quantized area

Campbell Barton noreply at git.blender.org
Wed Aug 15 05:26:24 CEST 2018


Commit: 4f1c1bbe7ab0846879de7e6499738d9778265a1f
Author: Campbell Barton
Date:   Wed Aug 15 13:13:45 2018 +1000
Branches: blender2.8
https://developer.blender.org/rB4f1c1bbe7ab0846879de7e6499738d9778265a1f

Icons: geometry now checks quantized area

Previously back-facing normal was checked which isn't ideal
because a triangle that starts out zero-area may become
visible once it's coordinates are quantized.

===================================================================

M	release/datafiles/blender_icons_geom.py

===================================================================

diff --git a/release/datafiles/blender_icons_geom.py b/release/datafiles/blender_icons_geom.py
index bb7a6568767..f3af7f997c1 100644
--- a/release/datafiles/blender_icons_geom.py
+++ b/release/datafiles/blender_icons_geom.py
@@ -43,6 +43,11 @@ the ``.dat`` file extension should be used.
 # This script writes out geometry-icons.
 import bpy
 
+# Generic functions
+
+def area_tri_signed_2x_v2(v1, v2, v3):
+	return (v1[0] - v2[0]) * (v2[1] - v3[1]) + (v1[1] - v2[1]) * (v3[0] - v2[0])
+
 
 class TriMesh:
     """
@@ -116,10 +121,7 @@ def mesh_data_lists_from_mesh(me, material_colors):
     tris_data = []
 
     for p in me_polys:
-        # Backface culling (allows using spheres without tedious manual deleting).
-        if p.normal.z <= 0.0:
-            continue
-
+        # Note, all faces are handled, backfacing/zero area is checked just before writing.
         material_index = p.material_index
         if material_index < len(material_colors):
             base_color = material_colors[p.material_index]
@@ -179,7 +181,7 @@ def mesh_data_lists_from_objects(ob_parent, ob_children):
     for ob in (ob_parent, *ob_children):
         with TriMesh(ob) as me:
             if has_parent:
-                me.transform(parent_matrix_inverted * ob.matrix_world)
+                me.transform(parent_matrix_inverted @ ob.matrix_world)
 
             tris_data.extend(
                 mesh_data_lists_from_mesh(
@@ -243,10 +245,18 @@ def write_mesh_to_py(fh, ob, ob_children):
     # X, Y
     fw(bytes((0, 0)))
 
-    for (_, tri_coords, _) in tris_data:
-        for vert in tri_coords:
-            fw(bytes(vert_as_byte_pair(vert)))
-    for (_, _, tri_color) in tris_data:
+    # Once converted into bytes, the triangle might become zero area
+    tri_skip = [False] * len(tris_data)
+    for i, (_, tri_coords, _) in enumerate(tris_data):
+        tri_coords_as_byte = [vert_as_byte_pair(vert) for vert in tri_coords]
+        if area_tri_signed_2x_v2(*tri_coords_as_byte) <= 0:
+            tri_skip[i] = True
+            continue
+        for vert_byte in tri_coords_as_byte:
+            fw(bytes(vert_byte))
+    for i, (_, _, tri_color) in enumerate(tris_data):
+        if tri_skip[i]:
+            continue
         for color in tri_color:
             fw(bytes(color))



More information about the Bf-blender-cvs mailing list