# 3D Mesh Analyzer (STL, OBJ, PLY) > Check a 3D mesh: volume, area, size, watertightness, holes and print material. Upload an STL, OBJ or PLY mesh to measure its volume, surface area, bounding box and centroid, find holes, non-manifold edges, flipped triangles and separate parts, and estimate print material by volume × density with an optional infill approximation. Part of usefulweb.app (https://usefulweb.app/). Part of [Renderloom](https://renderloom.usefulweb.app/) (ownerApp: renderloom). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://renderloommeshanalyzer.usefulweb.app/ (interactive tool at https://renderloommeshanalyzer.usefulweb.app/tool) - JSON API: POST https://renderloommeshanalyzer.usefulweb.app/api/v1/calculate with a JSON object of inputs (schema: https://renderloommeshanalyzer.usefulweb.app/api/v1/tool) - OpenAPI: https://renderloommeshanalyzer.usefulweb.app/openapi.json - MCP (Streamable HTTP): https://renderloommeshanalyzer.usefulweb.app/mcp - tool `renderloom_mesh_analyzer` ## Inputs - file (file): Mesh file (STL, OBJ or PLY) - Binary or ASCII STL, OBJ, or ASCII/binary PLY up to 30 MB and 500000 triangles. - meshText (textarea): Or paste an ASCII STL, OBJ or PLY mesh - unit (select): Model units - STL and PLY store no units. Choose the units the model was drawn in. - weld (select): Vertex welding - material (select): Print material - density (number): Custom density (g/cm³, 0 = use the material) - infill (number): Infill (%; leave empty for a solid part) - shellMm (number): Shell thickness for the infill estimate (mm) ## Method - The file is parsed locally (binary STL is recognised by its 84 + 50 × n byte length; ASCII STL, OBJ and PLY by their headers). Vertices are welded within the chosen tolerance by grid hashing; the first vertex in file order is kept. - Each undirected edge is counted: one triangle = open boundary edge, three or more = non-manifold edge, two triangles traversing it in the same direction = inconsistent winding. Boundary edges are chained into hole loops. Parts are triangles connected through shared edges. - Watertight means no boundary or non-manifold edges, consistent winding and no vertex joining separate surface fans. The Euler characteristic is V − E + F; for a watertight mesh with C parts the total genus is C − χ/2. - Signed volume uses the divergence theorem, Σ a · (b × c) / 6 over all triangles; a negative value means the normals point inward. Area is Σ |(b − a) × (c − a)| / 2. The PCA box uses the eigenvectors of the area-weighted surface covariance; it is not the minimal bounding box. - Triangle quality is 4√3 × area / (sum of squared edge lengths): 1 for an equilateral triangle, near 0 for slivers. Mass = volume × density. With infill, a shell of surface area × shell thickness is solid and the remaining volume is filled at the infill percentage. ## Limits - Volume, centroid and material figures are only meaningful for watertight meshes. Self-intersections are not detected. The infill estimate is a rough shell-plus-infill approximation, not a slicer result.