mesh_process op• Datenarten: mesh → measurement
• Aufruf: import fullseye as fs; fs.ledger.mesh_volume(mesh) -> 'float' (die Implementierung direkt: import mesh_props; mesh_props.mesh_volume(mesh) -> 'float'; aus dem Register: ops3d.get("mesh_volume"))
Vorzeichenbehaftetes Volumen, das ein geschlossenes Dreiecksnetz einschließt → float.
Nach dem Divergenzsatz (divergence theorem) gilt V = (1/6)·Σ v0 · (v1 × v2). Ist der Umlauf der Flächen nach außen gerichtet (rechtshändig), ist das Ergebnis positiv, nach innen negativ -- das Vorzeichen ist selbst die Orientierungsprüfung: Kommt ein negativer Wert zurück, sind die Normalen umgedreht.
Args:
mesh: Tupel aus (vertices (N,3), faces (M,3)).
Returns:
Vorzeichenbehaftetes Volumen (float, Kubik (Potenz 3) der Koordinateneinheit).
Raises:
ValueError: wenn mesh nicht die 2 Elemente (vertices, faces) sind, die Form ungültig ist,
Koordinaten nicht endlich sind, ein Index nicht ganzzahlig oder außerhalb des Bereichs ist oder es leer ist.
★Die Ausgabe von voxel_to_mesh (marching cubes) hat einen nach innen gerichteten Umlauf; unverändert übergeben ergibt sie einen negativen Wert (gemessen: -985.67 für einen Würfel aus 1000 Voxeln). "Negativ = Normalen umgedreht" stimmt, aber bei dieser Kombination ist umgedreht der Standard; wer nur das Volumen will, nimmt abs() oder dreht den Umlauf mit faces[:, ::-1] um. Als Orientierungsprüfung dient es für Meshes, deren Umlauf man selbst festgelegt (oder deren Orientierung man vereinheitlicht) hat.
Grenze (honest): Der Divergenzsatz gilt nur für geschlossene Flächen. Für ein offenes Mesh (einen Scan mit Löchern) wird zwar eine Zahl zurückgegeben, sie ist aber "das Volumen des Körpers, dessen Löcher zum Ursprung hin verschlossen wurden", nicht die gewünschte Größe. Ob es geschlossen ist, erkennt man daran,
ob boundary_vertices leer ist oder boundary_edges von mesh_edge_stats 0 ist -- das zuerst prüfen. Bei einem Mesh mit Selbstschnitten werden überlappende Bereiche vorzeichenbehaftet doppelt gezählt (auch das ist Verhalten genau nach dem Satz und wird nicht erkannt).
Reference (public): Das Polyedervolumen über den Divergenzsatz ist eine Standardformel. Zum Beispiel C. Zhang & T. Chen, "Efficient feature extraction for 2D/3D objects in mesh representation", ICIP 2001.
• blender_interop — Zusammen mit Blender — Form bauen, mit fullseye messen (Fallstricke: Achsen, Einheiten, Referenzdaten)
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• hull_bounds — py -3.11 examples_3d/hull_bounds.py
• mesh_props — py -3.11 examples_3d/mesh_props.py
• minimal_surfaces — py -3.11 examples_3d/minimal_surfaces.py
measurement als Eingabe)vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance · snell_angle
mesh_process)laplacian_smooth · taubin_smooth · decimate_qem · face_normals · vertex_normals · mesh_area · vertex_curvature · face_areas
*Provenance: mesh_props.py — 3D Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.