System Information
Operating system: Windows-10-10.0.18362-SP0 64 Bits
Graphics card: GeForce GTX 1080 Ti/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 436.30
Blender Version
Broken: version: 2.83 (sub 11), branch: master, commit date: 2020-04-04 16:55, hash: rB505a19ed75b2
Worked: 2.82a
Short description of error
Calling Archipack's floor operator bpy.ops.archipack.floor() with the tile_30x60.py preset crashes a Blender debug build. The issue seems to be a call to bmesh.ops.bevel() in archipack_floor.py which triggers an assert due to a normal being zero.
BM_loop_interp_from_face(BMesh * bm, BMLoop * l_dst, const BMFace * f_src, const bool do_vertex, const bool do_multires) Line 748 C bev_create_ngon(BMesh * bm, BMVert * * vert_arr, const int totv, BMFace * * face_arr, BMFace * facerep, BMEdge * * edge_arr, int mat_nr, bool do_interp) Line 684 C bevel_build_poly(BevelParams * bp, BMesh * bm, BevVert * bv) Line 5236 C build_vmesh(BevelParams * bp, BMesh * bm, BevVert * bv) Line 5482 C BM_mesh_bevel(BMesh * bm, const float offset, const int offset_type, const int segments, const float profile, const bool vertex_only, const bool use_weights, const bool limit_offset, const MDeformVert * dvert, const int vertex_group, const int mat, const bool loop_slide, const bool mark_seam, const bool mark_sharp, const bool harden_normals, const int face_strength_mode, const int miter_outer, const int miter_inner, const float spread, const float smoothresh, const bool use_custom_profile, const CurveProfile * custom_profile, const int vmesh_method) Line 7296 C bmo_bevel_exec(BMesh * bm, BMOperator * op) Line 100 C BMO_op_exec(BMesh * bm, BMOperator * op) Line 221 C BPy_BMO_call(BPy_BMeshOpFunc * self, _object * args, _object * kw) Line 817 C
Exact steps for others to reproduce the error
- Open the preferences and enable the Archipack add-on (Edit > Preferences > Add-ons)
- Render presets thumbs in Archipacks preferences (this will already cause the error in a subprocess during the thumbnail creation)
- Switch to the Scripting workspace and run the following script
import bpy
from pathlib import Path
preset_paths = bpy.utils.script_paths("presets")
for path in preset_paths:
archipack_preset = Path(path) / "archipack_floor" / "tile_30x60.py"
if archipack_preset.is_file():
bpy.ops.archipack.floor("INVOKE_DEFAULT", filepath=str(archipack_preset), auto_manipulate=False)
break