Mesh: Update addons for auto smooth removal #104609
@ -17,10 +17,12 @@ def create_and_link_mesh(name, faces, face_nors, points, global_matrix):
|
|||||||
mesh.from_pydata(points, [], faces)
|
mesh.from_pydata(points, [], faces)
|
||||||
|
|
||||||
if face_nors:
|
if face_nors:
|
||||||
# Note: we store 'temp' normals in loops, since validate() may alter final mesh,
|
# Write imported normals to a temporary attribute so they are interpolated by #mesh.validate().
|
||||||
# we can only set custom lnors *after* calling it.
|
# It's important to validate before calling #mesh.normals_split_custom_set() which expects a
|
||||||
|
# valid mesh.
|
||||||
lnors = tuple(chain(*chain(*zip(face_nors, face_nors, face_nors))))
|
lnors = tuple(chain(*chain(*zip(face_nors, face_nors, face_nors))))
|
||||||
mesh.loops.foreach_set("normal", lnors)
|
mesh.attributes.new("temp_custom_normals", 'FLOAT_VECTOR', 'CORNER')
|
||||||
|
mesh.attributes["temp_custom_normals"].data.foreach_set("vector", lnors)
|
||||||
|
|
||||||
mesh.transform(global_matrix)
|
mesh.transform(global_matrix)
|
||||||
|
|
||||||
@ -29,11 +31,12 @@ def create_and_link_mesh(name, faces, face_nors, points, global_matrix):
|
|||||||
|
|
||||||
if face_nors:
|
if face_nors:
|
||||||
clnors = array.array('f', [0.0] * (len(mesh.loops) * 3))
|
clnors = array.array('f', [0.0] * (len(mesh.loops) * 3))
|
||||||
mesh.loops.foreach_get("normal", clnors)
|
mesh.attributes["temp_custom_normals"].data.foreach_get("vector", clnors)
|
||||||
|
|
||||||
mesh.polygons.foreach_set("use_smooth", [True] * len(mesh.polygons))
|
mesh.polygons.foreach_set("use_smooth", [True] * len(mesh.polygons))
|
||||||
|
|
||||||
mesh.normals_split_custom_set(tuple(zip(*(iter(clnors),) * 3)))
|
mesh.normals_split_custom_set(tuple(zip(*(iter(clnors),) * 3)))
|
||||||
|
mesh.attributes.remove(mesh.attributes["temp_custom_normals"])
|
||||||
|
|
||||||
mesh.update()
|
mesh.update()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user