{"record":{"id":"04021e17731800b5","repo":"affaan-m/ECC","slug":"no-mesh-geometry-found-in-mesh","errorCode":null,"errorMessage":"no mesh geometry found in {mesh}","messagePattern":"no mesh geometry found in (.+?)","errorType":"console","errorClass":"SystemExit","httpStatus":null,"severity":"error","filePath":"skills/taste-application/scripts/blender_prop.py","lineNumber":189,"sourceCode":"    grade_hash = _sha256(grade) if grade.is_file() else None\n    import bpy\n    import mathutils\n\n    bpy.ops.wm.read_factory_settings(use_empty=True)\n\n    suffix = mesh.suffix.lower()\n    if suffix in (\".glb\", \".gltf\"):\n        bpy.ops.import_scene.gltf(filepath=str(mesh))\n    elif suffix == \".obj\":\n        bpy.ops.wm.obj_import(filepath=str(mesh))\n    elif suffix == \".fbx\":\n        bpy.ops.import_scene.fbx(filepath=str(mesh))\n    else:\n        raise SystemExit(f\"unsupported mesh format: {suffix}\")\n\n    objs = [o for o in bpy.context.scene.objects if o.type == \"MESH\"]\n    if not objs:\n        raise SystemExit(f\"no mesh geometry found in {mesh}\")\n\n    mn = mathutils.Vector((float(\"inf\"),) * 3)\n    mx = mathutils.Vector((-float(\"inf\"),) * 3)\n    for o in objs:\n        for c in o.bound_box:\n            w = o.matrix_world @ mathutils.Vector(c)\n            mn = mathutils.Vector(min(mn[i], w[i]) for i in range(3))\n            mx = mathutils.Vector(max(mx[i], w[i]) for i in range(3))\n    validate_bounds(mn, mx)\n    center = (mn + mx) / 2.0\n    radius = max((mx - mn).length / 2.0, 1e-4)\n    print(f\"[prop] {len(objs)} mesh object(s), radius {radius:.4f}\")\n\n    pivot = bpy.data.objects.new(\"turntable_pivot\", None)\n    bpy.context.collection.objects.link(pivot)\n    pivot.location = center\n    # Preserve imported hierarchy and world transforms, including PBR meshes.\n    roots = [o for o in bpy.context.scene.objects if o.parent is None and o != pivot]","sourceCodeStart":171,"sourceCodeEnd":207,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/taste-application/scripts/blender_prop.py#L171-L207","documentation":"After importing the mesh file in build(), no objects of type MESH exist in the emptied Blender scene, meaning the file parsed but contained no mesh geometry to build the prop from.","triggerScenarios":"Thrown at skills/taste-application/scripts/blender_prop.py:189 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the source file actually contains mesh data (open it in a 3D viewer)","Re-export ensuring mesh objects (not just empties/cameras/lights) are included","Regenerate the mesh from the provider"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}