{
  "measured_on": "2026-09-14",
  "question": "whether the order of mesh repairs changes the result",
  "object": "icosphere, subdivisions 4, scaled to 100 mm across, then damaged four ways at once: 6 hole patches, 400 faces given private copies of their corners, 2 faces with no area, and a triangle count to be halved",
  "trimesh_version": "5.1.0",
  "numpy_version": "2.5.2",
  "operations": [
    {
      "operation": "weld",
      "what_it_does": "merge corners that sit at the same coordinates"
    },
    {
      "operation": "fill",
      "what_it_does": "close the boundary loops with new triangles"
    },
    {
      "operation": "degen",
      "what_it_does": "drop faces that enclose no area"
    },
    {
      "operation": "simplify",
      "what_it_does": "decimate to roughly half the triangle count"
    }
  ],
  "truth": {
    "vertices": 2562,
    "faces": 5120,
    "boundary_edges": 0,
    "nonmanifold_edges": 0,
    "shells": 1,
    "watertight": true,
    "volume_mm3": 522467.3685
  },
  "defective_state": {
    "vertices": 3762,
    "faces": 5098,
    "boundary_edges": 2360,
    "nonmanifold_edges": 2,
    "shells": 401,
    "watertight": false
  },
  "orders_tried": 24,
  "orders_closed": 4,
  "closing_orders": [
    "degen then weld then simplify then fill",
    "weld then degen then simplify then fill",
    "weld then simplify then degen then fill",
    "weld then simplify then fill then degen"
  ],
  "rows": [
    {
      "order": "weld then fill then degen then simplify",
      "faces": 2547,
      "boundary_edges": 23,
      "nonmanifold_edges": 0,
      "shells": 1,
      "watertight": false,
      "volume_error_percent": 0.1868,
      "operations_that_raised": []
    },
    {
      "order": "weld then fill then simplify then degen",
      "faces": 2547,
      "boundary_edges": 23,
      "nonmanifold_edges": 0,
      "shells": 1,
      "watertight": false,
      "volume_error_percent": 0.1868,
      "operations_that_raised": []
    },
    {
      "order": "weld then degen then fill then simplify",
      "faces": 2547,
      "boundary_edges": 23,
      "nonmanifold_edges": 0,
      "shells": 1,
      "watertight": false,
      "volume_error_percent": 0.1868,
      "operations_that_raised": []
    },
    {
      "order": "weld then degen then simplify then fill",
      "faces": 2558,
      "boundary_edges": 0,
      "nonmanifold_edges": 0,
      "shells": 1,
      "watertight": true,
      "volume_error_percent": 0.11,
      "operations_that_raised": []
    },
    {
      "order": "weld then simplify then fill then degen",
      "faces": 2558,
      "boundary_edges": 0,
      "nonmanifold_edges": 0,
      "shells": 1,
      "watertight": true,
      "volume_error_percent": 0.1101,
      "operations_that_raised": []
    },
    {
      "order": "weld then simplify then degen then fill",
      "faces": 2558,
      "boundary_edges": 0,
      "nonmanifold_edges": 0,
      "shells": 1,
      "watertight": true,
      "volume_error_percent": 0.1101,
      "operations_that_raised": []
    },
    {
      "order": "fill then weld then degen then simplify",
      "faces": 2945,
      "boundary_edges": 19,
      "nonmanifold_edges": 720,
      "shells": 1,
      "watertight": false,
      "volume_error_percent": 0.3076,
      "operations_that_raised": []
    },
    {
      "order": "fill then weld then simplify then degen",
      "faces": 2945,
      "boundary_edges": 19,
      "nonmanifold_edges": 714,
      "shells": 1,
      "watertight": false,
      "volume_error_percent": 0.3074,
      "operations_that_raised": []
    },
    {
      "order": "fill then degen then weld then simplify",
      "faces": 2945,
      "boundary_edges": 19,
      "nonmanifold_edges": 720,
      "shells": 1,
      "watertight": false,
      "volume_error_percent": 0.3076,
      "operations_that_raised": []
    },
    {
      "order": "fill then degen then simplify then weld",
      "faces": 2946,
      "boundary_edges": 25,
      "nonmanifold_edges": 20,
      "shells": 203,
      "watertight": false,
      "volume_error_percent": 0.2348,
      "operations_that_raised": []
    },
    {
      "order": "fill then simplify then weld then degen",
      "faces": 2944,
      "boundary_edges": 25,
      "nonmanifold_edges": 20,
      "shells": 203,
      "watertight": false,
      "volume_error_percent": 0.2349,
      "operations_that_raised": []
    },
    {
      "order": "fill then simplify then degen then weld",
      "faces": 2944,
      "boundary_edges": 25,
      "nonmanifold_edges": 20,
      "shells": 203,
      "watertight": false,
      "volume_error_percent": 0.2349,
      "operations_that_raised": []
    },
    {
      "order": "degen then weld then fill then simplify",
      "faces": 2547,
      "boundary_edges": 23,
      "nonmanifold_edges": 0,
      "shells": 1,
      "watertight": false,
      "volume_error_percent": 0.1868,
      "operations_that_raised": []
    },
    {
      "order": "degen then weld then simplify then fill",
      "faces": 2558,
      "boundary_edges": 0,
      "nonmanifold_edges": 0,
      "shells": 1,
      "watertight": true,
      "volume_error_percent": 0.11,
      "operations_that_raised": []
    },
    {
      "order": "degen then fill then weld then simplify",
      "faces": 2945,
      "boundary_edges": 19,
      "nonmanifold_edges": 720,
      "shells": 1,
      "watertight": false,
      "volume_error_percent": 0.3076,
      "operations_that_raised": []
    },
    {
      "order": "degen then fill then simplify then weld",
      "faces": 2946,
      "boundary_edges": 25,
      "nonmanifold_edges": 20,
      "shells": 203,
      "watertight": false,
      "volume_error_percent": 0.2348,
      "operations_that_raised": []
    },
    {
      "order": "degen then simplify then weld then fill",
      "faces": 2955,
      "boundary_edges": 50,
      "nonmanifold_edges": 32,
      "shells": 119,
      "watertight": false,
      "volume_error_percent": 1.2162,
      "operations_that_raised": []
    },
    {
      "order": "degen then simplify then fill then weld",
      "faces": 2955,
      "boundary_edges": 50,
      "nonmanifold_edges": 32,
      "shells": 119,
      "watertight": false,
      "volume_error_percent": 1.2162,
      "operations_that_raised": []
    },
    {
      "order": "simplify then weld then fill then degen",
      "faces": 2953,
      "boundary_edges": 50,
      "nonmanifold_edges": 32,
      "shells": 119,
      "watertight": false,
      "volume_error_percent": 1.2173,
      "operations_that_raised": []
    },
    {
      "order": "simplify then weld then degen then fill",
      "faces": 2953,
      "boundary_edges": 50,
      "nonmanifold_edges": 32,
      "shells": 119,
      "watertight": false,
      "volume_error_percent": 1.2173,
      "operations_that_raised": []
    },
    {
      "order": "simplify then fill then weld then degen",
      "faces": 2953,
      "boundary_edges": 50,
      "nonmanifold_edges": 32,
      "shells": 119,
      "watertight": false,
      "volume_error_percent": 1.2173,
      "operations_that_raised": []
    },
    {
      "order": "simplify then fill then degen then weld",
      "faces": 2953,
      "boundary_edges": 50,
      "nonmanifold_edges": 32,
      "shells": 119,
      "watertight": false,
      "volume_error_percent": 1.2173,
      "operations_that_raised": []
    },
    {
      "order": "simplify then degen then weld then fill",
      "faces": 2953,
      "boundary_edges": 50,
      "nonmanifold_edges": 32,
      "shells": 119,
      "watertight": false,
      "volume_error_percent": 1.2173,
      "operations_that_raised": []
    },
    {
      "order": "simplify then degen then fill then weld",
      "faces": 2953,
      "boundary_edges": 50,
      "nonmanifold_edges": 32,
      "shells": 119,
      "watertight": false,
      "volume_error_percent": 1.2173,
      "operations_that_raised": []
    }
  ],
  "precedence": [
    {
      "constraint": "weld before fill",
      "orders_with_this": 12,
      "orders_closed": 4,
      "share_closed": 0.3333,
      "required": true
    },
    {
      "constraint": "weld before degen",
      "orders_with_this": 12,
      "orders_closed": 3,
      "share_closed": 0.25,
      "required": false
    },
    {
      "constraint": "weld before simplify",
      "orders_with_this": 12,
      "orders_closed": 4,
      "share_closed": 0.3333,
      "required": true
    },
    {
      "constraint": "fill before weld",
      "orders_with_this": 12,
      "orders_closed": 0,
      "share_closed": 0.0,
      "required": false
    },
    {
      "constraint": "fill before degen",
      "orders_with_this": 12,
      "orders_closed": 1,
      "share_closed": 0.0833,
      "required": false
    },
    {
      "constraint": "fill before simplify",
      "orders_with_this": 12,
      "orders_closed": 0,
      "share_closed": 0.0,
      "required": false
    },
    {
      "constraint": "degen before weld",
      "orders_with_this": 12,
      "orders_closed": 1,
      "share_closed": 0.0833,
      "required": false
    },
    {
      "constraint": "degen before fill",
      "orders_with_this": 12,
      "orders_closed": 3,
      "share_closed": 0.25,
      "required": false
    },
    {
      "constraint": "degen before simplify",
      "orders_with_this": 12,
      "orders_closed": 2,
      "share_closed": 0.1667,
      "required": false
    },
    {
      "constraint": "simplify before weld",
      "orders_with_this": 12,
      "orders_closed": 0,
      "share_closed": 0.0,
      "required": false
    },
    {
      "constraint": "simplify before fill",
      "orders_with_this": 12,
      "orders_closed": 4,
      "share_closed": 0.3333,
      "required": true
    },
    {
      "constraint": "simplify before degen",
      "orders_with_this": 12,
      "orders_closed": 2,
      "share_closed": 0.1667,
      "required": false
    }
  ],
  "layouts": [
    {
      "layout_seed": 11,
      "defective_state": {
        "vertices": 3762,
        "faces": 5098,
        "boundary_edges": 2360,
        "nonmanifold_edges": 2,
        "shells": 401,
        "watertight": false
      },
      "orders_closed": 4,
      "orders_tried": 24,
      "closing_orders": [
        "degen then weld then simplify then fill",
        "weld then degen then simplify then fill",
        "weld then simplify then degen then fill",
        "weld then simplify then fill then degen"
      ]
    },
    {
      "layout_seed": 23,
      "defective_state": {
        "vertices": 3762,
        "faces": 5098,
        "boundary_edges": 2338,
        "nonmanifold_edges": 2,
        "shells": 401,
        "watertight": false
      },
      "orders_closed": 4,
      "orders_tried": 24,
      "closing_orders": [
        "degen then weld then simplify then fill",
        "weld then degen then simplify then fill",
        "weld then simplify then degen then fill",
        "weld then simplify then fill then degen"
      ]
    },
    {
      "layout_seed": 47,
      "defective_state": {
        "vertices": 3762,
        "faces": 5098,
        "boundary_edges": 2319,
        "nonmanifold_edges": 2,
        "shells": 401,
        "watertight": false
      },
      "orders_closed": 4,
      "orders_tried": 24,
      "closing_orders": [
        "degen then weld then simplify then fill",
        "weld then degen then simplify then fill",
        "weld then simplify then degen then fill",
        "weld then simplify then fill then degen"
      ]
    },
    {
      "layout_seed": 99,
      "defective_state": {
        "vertices": 3762,
        "faces": 5098,
        "boundary_edges": 2331,
        "nonmanifold_edges": 2,
        "shells": 401,
        "watertight": false
      },
      "orders_closed": 4,
      "orders_tried": 24,
      "closing_orders": [
        "degen then weld then simplify then fill",
        "weld then degen then simplify then fill",
        "weld then simplify then degen then fill",
        "weld then simplify then fill then degen"
      ]
    }
  ],
  "same_orders_close_every_layout": true,
  "not_measured_here": [
    "What any named repair tool does. The four operations here are the ones every tool exposes, but Meshmixer, Netfabb, MeshLab and Blender each implement them differently and some chain several of them behind a single button, which is exactly why the order is usually invisible to the person clicking it.",
    "Whether an automatic hole fill produces the shape the designer wanted. Closing a boundary loop and closing it correctly are different questions, and only the first one is measured here. A large hole spanning a concave region can be closed into a surface nobody intended.",
    "Meshes whose defects interact with the shape, such as a hole that spans a thin wall or self intersections. The defects here are placed at random on a convex surface, which is the easy case; the ordering result is a lower bound on how much the choice matters."
  ]
}
