trenchfoot 0.2.6__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of trenchfoot might be problematic. Click here for more details.

Files changed (36) hide show
  1. trenchfoot/scenarios/S01_straight_vwalls/metrics.json +1 -1
  2. trenchfoot/scenarios/S01_straight_vwalls/preview_oblique.png +0 -0
  3. trenchfoot/scenarios/S01_straight_vwalls/preview_side.png +0 -0
  4. trenchfoot/scenarios/S01_straight_vwalls/preview_top.png +0 -0
  5. trenchfoot/scenarios/S01_straight_vwalls/trench_scene.obj +11 -19
  6. trenchfoot/scenarios/S02_straight_slope_pipe/metrics.json +1 -1
  7. trenchfoot/scenarios/S02_straight_slope_pipe/preview_oblique.png +0 -0
  8. trenchfoot/scenarios/S02_straight_slope_pipe/preview_side.png +0 -0
  9. trenchfoot/scenarios/S02_straight_slope_pipe/preview_top.png +0 -0
  10. trenchfoot/scenarios/S02_straight_slope_pipe/trench_scene.obj +305 -313
  11. trenchfoot/scenarios/S03_L_slope_two_pipes_box/metrics.json +1 -1
  12. trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_oblique.png +0 -0
  13. trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_side.png +0 -0
  14. trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_top.png +0 -0
  15. trenchfoot/scenarios/S03_L_slope_two_pipes_box/trench_scene.obj +611 -619
  16. trenchfoot/scenarios/S04_U_slope_multi_noise/metrics.json +1 -1
  17. trenchfoot/scenarios/S04_U_slope_multi_noise/preview_oblique.png +0 -0
  18. trenchfoot/scenarios/S04_U_slope_multi_noise/preview_side.png +0 -0
  19. trenchfoot/scenarios/S04_U_slope_multi_noise/preview_top.png +0 -0
  20. trenchfoot/scenarios/S04_U_slope_multi_noise/trench_scene.obj +970 -978
  21. trenchfoot/scenarios/S05_wide_slope_pair/metrics.json +1 -1
  22. trenchfoot/scenarios/S05_wide_slope_pair/preview_oblique.png +0 -0
  23. trenchfoot/scenarios/S05_wide_slope_pair/preview_side.png +0 -0
  24. trenchfoot/scenarios/S05_wide_slope_pair/preview_top.png +0 -0
  25. trenchfoot/scenarios/S05_wide_slope_pair/trench_scene.obj +611 -619
  26. trenchfoot/scenarios/S06_bumpy_wide_loop/metrics.json +1 -1
  27. trenchfoot/scenarios/S06_bumpy_wide_loop/preview_oblique.png +0 -0
  28. trenchfoot/scenarios/S06_bumpy_wide_loop/preview_side.png +0 -0
  29. trenchfoot/scenarios/S06_bumpy_wide_loop/preview_top.png +0 -0
  30. trenchfoot/scenarios/S06_bumpy_wide_loop/trench_scene.obj +682 -690
  31. trenchfoot/trench_scene_generator_v3.py +133 -12
  32. {trenchfoot-0.2.6.dist-info → trenchfoot-0.3.0.dist-info}/METADATA +1 -1
  33. {trenchfoot-0.2.6.dist-info → trenchfoot-0.3.0.dist-info}/RECORD +36 -36
  34. {trenchfoot-0.2.6.dist-info → trenchfoot-0.3.0.dist-info}/WHEEL +0 -0
  35. {trenchfoot-0.2.6.dist-info → trenchfoot-0.3.0.dist-info}/entry_points.txt +0 -0
  36. {trenchfoot-0.2.6.dist-info → trenchfoot-0.3.0.dist-info}/licenses/LICENSE +0 -0
@@ -425,6 +425,7 @@ class SurfaceMeshFiles:
425
425
  obj_path: Path
426
426
  metrics_path: Path
427
427
  preview_paths: Tuple[Path, ...]
428
+ sdf_metadata_path: Optional[Path] = None
428
429
 
429
430
 
430
431
  @dataclass
@@ -435,7 +436,73 @@ class SurfaceMeshResult:
435
436
  metrics: Dict[str, Any]
436
437
  previews: Dict[str, bytes]
437
438
 
438
- def persist(self, out_dir: str | Path, *, include_previews: bool = False) -> SurfaceMeshFiles:
439
+ def _build_sdf_metadata(self) -> Dict[str, Any]:
440
+ """Build SDF metadata for downstream consumers.
441
+
442
+ This metadata enables generic mesh-to-SDF pipelines to correctly
443
+ interpret the mesh geometry without trenchfoot-specific heuristics.
444
+ """
445
+ # Extract trench opening polygon from the trench cap geometry
446
+ trench_opening_vertices = None
447
+ if "trench_cap_for_volume" in self.groups:
448
+ V_cap, F_cap = self.groups["trench_cap_for_volume"]
449
+ if V_cap.size > 0:
450
+ # Get unique vertices at z ≈ ground level (the top cap boundary)
451
+ # These form the trench opening polygon
452
+ z_level = float(np.median(V_cap[:, 2]))
453
+ xy_coords = V_cap[:, :2]
454
+ # Use convex hull to get ordered boundary vertices
455
+ try:
456
+ from scipy.spatial import ConvexHull
457
+ hull = ConvexHull(xy_coords)
458
+ boundary_indices = hull.vertices
459
+ trench_opening_vertices = xy_coords[boundary_indices].tolist()
460
+ except ImportError:
461
+ # Fallback: just use unique xy coords (unordered)
462
+ trench_opening_vertices = xy_coords.tolist()
463
+
464
+ # Determine geometry type
465
+ is_closed = _is_path_closed(self.spec.path_xy)
466
+ geometry_type = "closed_well" if is_closed else "open_trench"
467
+
468
+ # Build surface group info
469
+ surface_groups = {}
470
+ for name in self.groups:
471
+ if name in _INTERNAL_GROUPS:
472
+ continue
473
+ if "bottom" in name:
474
+ surface_groups[name] = {"normal_direction": "up", "surface_type": "floor"}
475
+ elif "wall" in name:
476
+ surface_groups[name] = {"normal_direction": "inward", "surface_type": "wall"}
477
+ elif "ground" in name:
478
+ surface_groups[name] = {"normal_direction": "up", "surface_type": "ground"}
479
+ elif "pipe" in name:
480
+ surface_groups[name] = {"normal_direction": "outward", "surface_type": "embedded_object"}
481
+ elif "box" in name or "sphere" in name:
482
+ surface_groups[name] = {"normal_direction": "outward", "surface_type": "embedded_object"}
483
+ else:
484
+ surface_groups[name] = {"normal_direction": "unknown", "surface_type": "other"}
485
+
486
+ return {
487
+ "sdf_metadata": {
488
+ "version": "1.0",
489
+ "normal_convention": "into_void",
490
+ "geometry_type": geometry_type,
491
+ "trench_opening": {
492
+ "type": "polygon",
493
+ "vertices_xy": trench_opening_vertices,
494
+ "z_level": self.spec.ground.z0 if self.spec.ground else 0.0,
495
+ },
496
+ "surface_groups": surface_groups,
497
+ "embedded_objects": {
498
+ "pipes": self.object_counts.get("pipes", 0),
499
+ "boxes": self.object_counts.get("boxes", 0),
500
+ "spheres": self.object_counts.get("spheres", 0),
501
+ },
502
+ }
503
+ }
504
+
505
+ def persist(self, out_dir: str | Path, *, include_previews: bool = False, include_sdf_metadata: bool = True) -> SurfaceMeshFiles:
439
506
  out_path = Path(out_dir)
440
507
  out_path.mkdir(parents=True, exist_ok=True)
441
508
  obj_path = out_path / "trench_scene.obj"
@@ -445,13 +512,27 @@ class SurfaceMeshResult:
445
512
  metrics_path = out_path / "metrics.json"
446
513
  with metrics_path.open("w") as fh:
447
514
  json.dump(self.metrics, fh, indent=2)
515
+
516
+ # Export SDF metadata
517
+ sdf_metadata_path = None
518
+ if include_sdf_metadata:
519
+ sdf_metadata = self._build_sdf_metadata()
520
+ sdf_metadata_path = out_path / "sdf_metadata.json"
521
+ with sdf_metadata_path.open("w") as fh:
522
+ json.dump(sdf_metadata, fh, indent=2)
523
+
448
524
  preview_paths: List[Path] = []
449
525
  if include_previews and self.previews:
450
526
  for name, data in self.previews.items():
451
527
  target = out_path / f"preview_{name}.png"
452
528
  target.write_bytes(data)
453
529
  preview_paths.append(target)
454
- return SurfaceMeshFiles(obj_path=obj_path, metrics_path=metrics_path, preview_paths=tuple(preview_paths))
530
+ return SurfaceMeshFiles(
531
+ obj_path=obj_path,
532
+ metrics_path=metrics_path,
533
+ preview_paths=tuple(preview_paths),
534
+ sdf_metadata_path=sdf_metadata_path,
535
+ )
455
536
 
456
537
  def _ground_fn(g: GroundSpec):
457
538
  sx, sy = g.slope
@@ -577,6 +658,7 @@ def _extend_polyline_ends(
577
658
 
578
659
  return L_ext, R_ext
579
660
 
661
+
580
662
  def make_trench_from_path_sloped(path_xy: List[Tuple[float,float]], width_top: float, depth: float, wall_slope: float, ground) -> Tuple[Dict,str,str,dict]:
581
663
  # Build top and bottom rings by offsetting centerline
582
664
  half_top = width_top/2.0
@@ -619,7 +701,8 @@ def make_trench_from_path_sloped(path_xy: List[Tuple[float,float]], width_top: f
619
701
 
620
702
  bot_verts, bot_faces = _triangulate_annulus(outer_bot, inner_bot[::-1])
621
703
  V_bottom = np.column_stack([bot_verts, np.concatenate([z_outer_bot, z_inner_bot[::-1]])])
622
- F_bottom = bot_faces[:, ::-1] # flip for outward normals
704
+ # Floor normals point UP (+z) into the trench void for correct SDF sign
705
+ F_bottom = _ensure_upward_normals(V_bottom, bot_faces)
623
706
 
624
707
  # Outer wall: connects outer_top to outer_bot (facing outward from trench)
625
708
  n_outer = len(outer_top)
@@ -679,7 +762,8 @@ def make_trench_from_path_sloped(path_xy: List[Tuple[float,float]], width_top: f
679
762
  V_cap = np.column_stack([poly_top, z_top])
680
763
  V_bottom = np.column_stack([poly_bot, z_bot])
681
764
  F_cap = tris_top
682
- F_bottom = tris_bot[:, ::-1] # outward
765
+ # Floor normals point UP (+z) into the trench void for correct SDF sign
766
+ F_bottom = _ensure_upward_normals(V_bottom, tris_bot)
683
767
 
684
768
  # Walls: connect corresponding indices
685
769
  N = len(poly_top)
@@ -714,6 +798,38 @@ def make_trench_from_path_sloped(path_xy: List[Tuple[float,float]], width_top: f
714
798
 
715
799
  return groups, poly_top, poly_bot, extra
716
800
 
801
+ def _ensure_upward_normals(V: np.ndarray, F: np.ndarray) -> np.ndarray:
802
+ """Ensure all faces have upward-pointing normals (+z).
803
+
804
+ For horizontal surfaces like trench floors, normals should point UP
805
+ into the void for correct SDF computation. This function flips any
806
+ faces with downward-pointing normals.
807
+
808
+ Parameters
809
+ ----------
810
+ V : np.ndarray
811
+ Vertices (n, 3)
812
+ F : np.ndarray
813
+ Faces (m, 3) - indices into V
814
+
815
+ Returns
816
+ -------
817
+ np.ndarray
818
+ Faces with consistent upward normals (may have winding flipped)
819
+ """
820
+ F_out = F.copy()
821
+ p0 = V[F[:, 0]]
822
+ p1 = V[F[:, 1]]
823
+ p2 = V[F[:, 2]]
824
+ normals = np.cross(p1 - p0, p2 - p0)
825
+
826
+ # Flip faces with negative z-component normals
827
+ down_mask = normals[:, 2] < 0
828
+ F_out[down_mask] = F_out[down_mask, ::-1]
829
+
830
+ return F_out
831
+
832
+
717
833
  def _triangulate_annulus(outer: np.ndarray, inner: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:
718
834
  """Triangulate the annular region between outer and inner polygons.
719
835
 
@@ -821,19 +937,21 @@ def make_ground_surface_plane(path_xy: List[Tuple[float,float]], width_top: floa
821
937
  combined_xy, tris = _triangulate_annulus(ground_outer, trench_outer)
822
938
  Vg = np.array([[x, y, gfun(x, y)] for (x, y) in combined_xy], float)
823
939
 
940
+ # Ground normals should point UP (+z) into the air
941
+ tris = _ensure_upward_normals(Vg, tris)
942
+
824
943
  return {"ground_surface": (Vg, tris)}
825
944
  else:
826
- # Open paths: ground forms annulus with flat extensions past trench endpoints
827
- # Both inner and outer rings are extended by the margin distance to create
828
- # ground buffer at trench ends. Using the same extension for both ensures
829
- # the rings have matching topology for proper triangulation.
945
+ # Open paths: ground forms annulus with extensions past trench endpoints.
946
+ # The outer ring (ground boundary) is extended, but the inner ring (trench
947
+ # opening) stays at its original position. This creates ground fill at the
948
+ # trench ends rather than extending the trench opening itself.
830
949
 
831
- # Inner boundary: trench opening, extended at ends
950
+ # Inner boundary: trench opening at original position (not extended)
832
951
  L_inner, R_inner = _offset_polyline(path_xy, half_top)
833
- L_inner_ext, R_inner_ext = _extend_polyline_ends(L_inner, R_inner, path_xy, m)
834
- inner_ring = _ensure_ccw(_ring_from_LR(L_inner_ext, R_inner_ext))
952
+ inner_ring = _ensure_ccw(_ring_from_LR(L_inner, R_inner))
835
953
 
836
- # Outer boundary: offset by margin, also extended at ends
954
+ # Outer boundary: offset by margin, extended at ends
837
955
  L_outer, R_outer = _offset_polyline(path_xy, half_top + m)
838
956
  L_outer_ext, R_outer_ext = _extend_polyline_ends(L_outer, R_outer, path_xy, m)
839
957
  outer_ring = _ensure_ccw(_ring_from_LR(L_outer_ext, R_outer_ext))
@@ -844,6 +962,9 @@ def make_ground_surface_plane(path_xy: List[Tuple[float,float]], width_top: floa
844
962
  # Apply ground elevation to get 3D vertices
845
963
  Vg = np.array([[x, y, gfun(x, y)] for (x, y) in combined_xy], float)
846
964
 
965
+ # Ground normals should point UP (+z) into the air
966
+ tris = _ensure_upward_normals(Vg, tris)
967
+
847
968
  return {"ground_surface": (Vg, tris)}
848
969
 
849
970
  def _half_width_at_depth(half_top: float, slope: float, top_z: float, z: float) -> float:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trenchfoot
3
- Version: 0.2.6
3
+ Version: 0.3.0
4
4
  Summary: Synthetic trench scenario generator bundle (surfaces + volumetrics).
5
5
  Author: Liam Moore
6
6
  License-File: LICENSE
@@ -6,63 +6,63 @@ trenchfoot/gmsh_sloped_trench_mesher.py,sha256=D7EL6V0wkE6tvDARmm006yZE6KEzCl25O
6
6
  trenchfoot/plot_mesh.py,sha256=26dOlVfaM1WsUfr_sXVqA7axtY9qjY3WCNM7cUBTS7Q,3810
7
7
  trenchfoot/render_colors.py,sha256=EfldvoshgaZ6iZFk-UDL67-tvwGYaiZFS2NQZBMwhDM,1596
8
8
  trenchfoot/scene_spec_example.json,sha256=UcV25ku422UO0ZZPDrJwrT1zwmjoOIpnBdLuEdh-AZA,1028
9
- trenchfoot/trench_scene_generator_v3.py,sha256=lL_tsQEEKbWBthqsMKA2GQmRyglioKeRtYuHVP81ZIg,44512
9
+ trenchfoot/trench_scene_generator_v3.py,sha256=9d93JK1rl61iq4fPxjiENEiFdX0Zhw306UQISeWnnvg,49277
10
10
  trenchfoot/scenarios/SUMMARY.json,sha256=uylEzgzIqk5pGBfWVchVFnwwIDGBjNTDY_E23L_iakI,9372
11
- trenchfoot/scenarios/S01_straight_vwalls/metrics.json,sha256=3kDgodQ0X3AlUK9wl-o_6JB1cykk7WlKArN5_kB6VFo,691
11
+ trenchfoot/scenarios/S01_straight_vwalls/metrics.json,sha256=7VDscjZdxNPgNZaPHzRHYBJ1a5amNgJ7XYKCezVJJKQ,691
12
12
  trenchfoot/scenarios/S01_straight_vwalls/preview.png,sha256=adsx3-6oMu9WaixggXRhuXi_KM-q5s2RNSBLR_stq80,199624
13
- trenchfoot/scenarios/S01_straight_vwalls/preview_oblique.png,sha256=mS6IamQbrYdqPtwAZCnEdr-cetkhlaSWJiLrxtYGJdA,134360
14
- trenchfoot/scenarios/S01_straight_vwalls/preview_side.png,sha256=ev4KUmit--YeSCHHs95We4R1OzQzRs09TT-HlSL1Fu0,33335
15
- trenchfoot/scenarios/S01_straight_vwalls/preview_top.png,sha256=rYUctk4KOEQlyCc5mgqMWc4EXiXt4r2MPDRoPlIvZDs,40032
13
+ trenchfoot/scenarios/S01_straight_vwalls/preview_oblique.png,sha256=SYgRPLOQNiW56HuSy9zL6ImPNV1S0LHaLYLBLQbcny0,133551
14
+ trenchfoot/scenarios/S01_straight_vwalls/preview_side.png,sha256=zBqMghMiEAYvcePgIPBgLJAYgVk0YA2ioSzF5CkL9io,33807
15
+ trenchfoot/scenarios/S01_straight_vwalls/preview_top.png,sha256=L0qGIFib1cAwSwJJ16cRtYSlPMOo4uQhNGt6OvM58XQ,39495
16
16
  trenchfoot/scenarios/S01_straight_vwalls/scene.json,sha256=kbHRC9zMVDGHbuLh2wRsvchfVfcbdDEVvxsMwHHBoHw,343
17
- trenchfoot/scenarios/S01_straight_vwalls/trench_scene.obj,sha256=Lmk178HkRqpT4fTMH2cPFn1JwxUfNymoKmEEeLGdJ1M,737
17
+ trenchfoot/scenarios/S01_straight_vwalls/trench_scene.obj,sha256=w2ShsfQEBm8236cSMh-bWL5NO1LBBVLRpqdD0b6dUcM,649
18
18
  trenchfoot/scenarios/S01_straight_vwalls/meshes/trench_scene_culled.obj,sha256=6-usCEpAfhhZcdCxAy7NcXrkBwv-mEh40A6zN50k0Jo,519
19
19
  trenchfoot/scenarios/S01_straight_vwalls/point_clouds/culled/resolution0p050.pth,sha256=w4AKFbud2V0NhAtudGXXheLynAq-NLxUFSPxLczK3T0,1352093
20
20
  trenchfoot/scenarios/S01_straight_vwalls/point_clouds/full/resolution0p050.pth,sha256=w4AKFbud2V0NhAtudGXXheLynAq-NLxUFSPxLczK3T0,1352093
21
21
  trenchfoot/scenarios/S01_straight_vwalls/volumetric/trench_volume.msh,sha256=mpKNhdAPEogyDQrE9IGTgg535ZBNYXiLpIcmvl6QYPA,15007
22
- trenchfoot/scenarios/S02_straight_slope_pipe/metrics.json,sha256=RlJMV4VOXAZDUw7RDJFpsDKnMf9qlK652gOAihMIrAI,940
22
+ trenchfoot/scenarios/S02_straight_slope_pipe/metrics.json,sha256=0URXUt9fcQ6PG0HP-SRIfdfddPlTwP6PbYfV4NYjjXs,954
23
23
  trenchfoot/scenarios/S02_straight_slope_pipe/preview.png,sha256=Aj5XpJMSdRNqnrPzL4oe-d0RjLdFT2V7OFrrZxwlsx8,251134
24
- trenchfoot/scenarios/S02_straight_slope_pipe/preview_oblique.png,sha256=3smrylqFAawK6yafmmJjfo1_rAXJYQeIVOAcEWr17Xo,174348
25
- trenchfoot/scenarios/S02_straight_slope_pipe/preview_side.png,sha256=Lb85fVi-_M9bj8PEOFe8hlQ9ZXZI6KwuLrqk4NQKF-I,56406
26
- trenchfoot/scenarios/S02_straight_slope_pipe/preview_top.png,sha256=BGoLqSmBgWlysgArltv08THH5_JYcyEYipNueT37BFw,58363
24
+ trenchfoot/scenarios/S02_straight_slope_pipe/preview_oblique.png,sha256=8gTOJkd63NtXRkHcS31Sun_ClXiufqsxFeTVrPcG1no,173774
25
+ trenchfoot/scenarios/S02_straight_slope_pipe/preview_side.png,sha256=Zwft-WEogsjPGcaUl7-Xd4kRIjewlbJ9h52MjS0pXB4,56706
26
+ trenchfoot/scenarios/S02_straight_slope_pipe/preview_top.png,sha256=Su71iVHxgWIVPaYde4qnMiBR_gXix1n9bCSgmiYkO6M,57538
27
27
  trenchfoot/scenarios/S02_straight_slope_pipe/scene.json,sha256=W1ApzLHEnHQn-7AdWxh2xiEinj6Yb7830sQXNxmmmDw,486
28
- trenchfoot/scenarios/S02_straight_slope_pipe/trench_scene.obj,sha256=AUBGuQ-adAlMbjNCloPQpmEnNRuEbOa82wla9lHidas,333293
28
+ trenchfoot/scenarios/S02_straight_slope_pipe/trench_scene.obj,sha256=DKM_PM45M8bRb2uXfZWn1plwYriU-q5nYhbPKk4tje0,333169
29
29
  trenchfoot/scenarios/S02_straight_slope_pipe/meshes/trench_scene_culled.obj,sha256=OOiw80NuCBejzeN3MWAip9Haw8yQsLZEdlMQdDIgEMU,847
30
30
  trenchfoot/scenarios/S02_straight_slope_pipe/point_clouds/culled/resolution0p050.pth,sha256=Ug9hTIsm6iQKRs9cucXJyJpxpSvQ5f2GS1ytZmxi1mE,1623389
31
31
  trenchfoot/scenarios/S02_straight_slope_pipe/point_clouds/full/resolution0p050.pth,sha256=JgIRni8xWKtz2mm0gpSdmavGe-FF71mDervavM4Rqw8,1718877
32
32
  trenchfoot/scenarios/S02_straight_slope_pipe/volumetric/trench_volume.msh,sha256=kNFAqjr7dM-KX4JQV1u5GbHbWWFIfiEur1wV1fJCePA,47084
33
- trenchfoot/scenarios/S03_L_slope_two_pipes_box/metrics.json,sha256=6BCgighy5tk7unG4DER1FHyGBVSSYxgxPI7XaCq-OGQ,1124
33
+ trenchfoot/scenarios/S03_L_slope_two_pipes_box/metrics.json,sha256=R_CWIwgPj-wPksszZapQMaTB2SmUR39NTZsJQlxbRew,1111
34
34
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview.png,sha256=q0V_2HSLUl2ovWLc4INKV87aLVh3vzqabMyKr8XEWEg,224248
35
- trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_oblique.png,sha256=4UFRyZFuiF1ORqE-XRa8qwGxMaQvy-ioqt5Ol9Y7spA,155752
36
- trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_side.png,sha256=MW6QGkVIl6ioyVi-6mhVvEaI-mWfqJqGrVLos1KRiwI,51327
37
- trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_top.png,sha256=hV24b3W6GXQQhuJzAy0NYmhYAqbtWcKhMsVZl_tsymw,47541
35
+ trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_oblique.png,sha256=Nvp0hvmG9HvZgbiEgbbI3uJtCLNFgLdamh8p2dw3ucY,154869
36
+ trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_side.png,sha256=57DnWIuV4p-7eguJVSshd0SZ0COy7Y2cedUMp_DrrjY,51284
37
+ trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_top.png,sha256=rs-CMZwaNUl5xef85WEckQqm_UqNrGcfE39nofvsp0E,48235
38
38
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/scene.json,sha256=10azlgelNGCDG6dyWsAKVviXXZaoYnAMvJxvvj-HyS8,940
39
- trenchfoot/scenarios/S03_L_slope_two_pipes_box/trench_scene.obj,sha256=BxyEG5t_IwnQt4HDQIUw3YSjxSTJkvHWOS0F_7oCiK4,656109
39
+ trenchfoot/scenarios/S03_L_slope_two_pipes_box/trench_scene.obj,sha256=APHNgcc715-lk360CAOpr6zPVcsEDrY4eHEV6z6dU38,655978
40
40
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/meshes/trench_scene_culled.obj,sha256=At4lipowr_3MY1rxmcKa479F_mQ-jJDVQJe0yHTrFSc,1835
41
41
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/point_clouds/culled/resolution0p050.pth,sha256=KqbuoZ1tUPDhlnDgmhd-7WBb92TABsEmOzEsB__KtlA,2456029
42
42
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/point_clouds/full/resolution0p050.pth,sha256=4fXvfu0TMO9FJaoqYrW21SCGe3eKuSLkSUl9CdE14rw,2622685
43
43
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/volumetric/trench_volume.msh,sha256=cPgHKHlzPPtWX8H1yaxAYsEgYba3fr2JjfPvgg2a000,87383
44
- trenchfoot/scenarios/S04_U_slope_multi_noise/metrics.json,sha256=OJSwQvFYkT4_Andg0xATHFcbT8JNbCEPTLirpeKrBhs,1294
44
+ trenchfoot/scenarios/S04_U_slope_multi_noise/metrics.json,sha256=3dm1ciLvFDj66ouuzhPo6-W0fPg0NRdbh2NPpg8tN-0,1293
45
45
  trenchfoot/scenarios/S04_U_slope_multi_noise/preview.png,sha256=ZbLgrL0nRtUX1y77i7b3LCxw4w_j5Ivmmh0i2YzrBDs,238958
46
- trenchfoot/scenarios/S04_U_slope_multi_noise/preview_oblique.png,sha256=23cjuwJsr_iDg4DpcM8gXF-pvBdYr3GB0r7PNblU3xI,164624
47
- trenchfoot/scenarios/S04_U_slope_multi_noise/preview_side.png,sha256=lBSecGIvTjdRJu-t5JmyS9XB4pLONwPG1NL6El0IT6E,77695
48
- trenchfoot/scenarios/S04_U_slope_multi_noise/preview_top.png,sha256=06AXZhtgZ_LBSgN2tnlo7Zf7rNl2E_W9W_O18Oy2rec,64172
46
+ trenchfoot/scenarios/S04_U_slope_multi_noise/preview_oblique.png,sha256=HKUWhUuuql2YZzqq4B5oDpQSCWy9RhuwY_JxVZ-bEbg,162693
47
+ trenchfoot/scenarios/S04_U_slope_multi_noise/preview_side.png,sha256=S7n1ivuo1PFcMp_WuEEnJnCx2JMP5yiCCCYOFDzJtfY,77730
48
+ trenchfoot/scenarios/S04_U_slope_multi_noise/preview_top.png,sha256=auLgGMvU1bRua43WrU-O2WelPy0TbPZZD7ALFIvqlqk,65419
49
49
  trenchfoot/scenarios/S04_U_slope_multi_noise/scene.json,sha256=ePFijY2uoZt6P5bVW2GSI8GKSA3CUMupIiQ1RnJkLxM,1119
50
- trenchfoot/scenarios/S04_U_slope_multi_noise/trench_scene.obj,sha256=mWmifSfIKrW87eAMUEDQdmjOWjlDj2jnPjI7aJ2QGZg,1188450
50
+ trenchfoot/scenarios/S04_U_slope_multi_noise/trench_scene.obj,sha256=oP9_lBey8yRWrzoCAc2IBM2uKBMQVXudFuEh_l6Q-Hw,1188305
51
51
  trenchfoot/scenarios/S04_U_slope_multi_noise/meshes/trench_scene_culled.obj,sha256=ykw_tzhXknXt3DbmSk3cBzbOL91Jm4zxjthp799YkWw,3206
52
52
  trenchfoot/scenarios/S04_U_slope_multi_noise/volumetric/trench_volume.msh,sha256=7KfGkJAlv19rzbaPhzbmy9UWo42Db_4VhAtisn6aMak,144623
53
- trenchfoot/scenarios/S05_wide_slope_pair/metrics.json,sha256=aQYz9R_5UhuU8OHfRXVrH76bPvtWpAfMnb997FWX_x4,1113
54
- trenchfoot/scenarios/S05_wide_slope_pair/preview_oblique.png,sha256=Ijdt2T8aKusXpENefS7l3W96bkoy2689NNyl1Mld_-I,140048
55
- trenchfoot/scenarios/S05_wide_slope_pair/preview_side.png,sha256=c5d_Q50i46rZ8zJRly5n6BJs02Mm9XVWGCwiEJDNxSI,67942
56
- trenchfoot/scenarios/S05_wide_slope_pair/preview_top.png,sha256=f59EOAR06rcXnMjCviwLZI-if5bl55jbqPn4SvDQDkg,56139
53
+ trenchfoot/scenarios/S05_wide_slope_pair/metrics.json,sha256=NC0pGEZOqQhIa_wxtRWIKcnf728ONljxFbFuJU2dwq8,1112
54
+ trenchfoot/scenarios/S05_wide_slope_pair/preview_oblique.png,sha256=S0MwfT2bC0T7AAUsqwDAIBxxRea6lHeYhQYrumwJfFU,139982
55
+ trenchfoot/scenarios/S05_wide_slope_pair/preview_side.png,sha256=8hiJ5ZZZ6iqIdPakWsgWDPrJnEuU7Qqy-odjnR38ocM,67796
56
+ trenchfoot/scenarios/S05_wide_slope_pair/preview_top.png,sha256=bDdjWwBN6QQfZ2kV71VbV_Q59nrPYAiUMh3ivRo4L9M,57737
57
57
  trenchfoot/scenarios/S05_wide_slope_pair/scene.json,sha256=5JMFXLxjjkT3_xrmJU7SX3FYSHM2rgL63nehik0c_JY,1030
58
- trenchfoot/scenarios/S05_wide_slope_pair/trench_scene.obj,sha256=GqL6MSPOs7mWltMXwgvoVxAReorCgut2Wq_nGyoRa6g,691395
58
+ trenchfoot/scenarios/S05_wide_slope_pair/trench_scene.obj,sha256=M60Tx0KmeAvo7qg3ho_rjEMBc47pxmpOcHouZzPMxg4,691243
59
59
  trenchfoot/scenarios/S05_wide_slope_pair/volumetric/trench_volume.msh,sha256=pHrj2dJgpSklpxiHHThiZINJQWpUdvkfhUnVBpKASEM,123235
60
- trenchfoot/scenarios/S06_bumpy_wide_loop/metrics.json,sha256=97OpIW7mH_MDMKqV8NubdNJaKe85WCNspSwUEnXWVls,1135
61
- trenchfoot/scenarios/S06_bumpy_wide_loop/preview_oblique.png,sha256=QKd2cxKN1xsnUZzvZ8KusECgFFGpp_a1EnVw-5EGMic,180714
62
- trenchfoot/scenarios/S06_bumpy_wide_loop/preview_side.png,sha256=YoRcgzGjHMh6l8YQQJ_qGNBow2favj0QqtKxXbtmV-U,88829
63
- trenchfoot/scenarios/S06_bumpy_wide_loop/preview_top.png,sha256=CqwNV-iR6TWvJ_yR0LMBhE6UF84KudRyFp9d4WUaSEA,89008
60
+ trenchfoot/scenarios/S06_bumpy_wide_loop/metrics.json,sha256=5TJctEUvwnR_DPV1s7eu1LDeJuzM0y9txOjaXfFVmwc,1136
61
+ trenchfoot/scenarios/S06_bumpy_wide_loop/preview_oblique.png,sha256=Kw8agcTy3VTZ9OM-dNR46hXJ2sKJZN9xwozX0fNicbU,180697
62
+ trenchfoot/scenarios/S06_bumpy_wide_loop/preview_side.png,sha256=6e8YF0oPJ045jax9w2grPUvO6j1OAod3iD81XXDldb0,88884
63
+ trenchfoot/scenarios/S06_bumpy_wide_loop/preview_top.png,sha256=nvbwTseVTuw6lNjsUB2JdbFacngFbzjYzDUaAk_ayLs,89085
64
64
  trenchfoot/scenarios/S06_bumpy_wide_loop/scene.json,sha256=SzjQgccYU1KRIiXVp-LwnLpf7pLkBotQ9_baHljd46g,1105
65
- trenchfoot/scenarios/S06_bumpy_wide_loop/trench_scene.obj,sha256=wdqTWXK_dQSFPNjkS1aJXSHIqvzJNwXeU_yIahjaXp8,847293
65
+ trenchfoot/scenarios/S06_bumpy_wide_loop/trench_scene.obj,sha256=JJXACWwS1WmLTkj0FKNEp8Ub2DT8EoH2YPZGYUmiOjc,847049
66
66
  trenchfoot/scenarios/S06_bumpy_wide_loop/volumetric/trench_volume.msh,sha256=r8KJMR5TxykP1_oeYbPnsckStGZDZ2-7e8KCAHPBh5I,279971
67
67
  trenchfoot/scenarios/S07_circular_well/metrics.json,sha256=RLjk54Ho5cRVB-aZ7F2x6PBXkycp4pLKlN3bVgbuagE,1390
68
68
  trenchfoot/scenarios/S07_circular_well/preview_oblique.png,sha256=ogcl8HnszT6otoZuRu_P5J_wbzuwA54FL1lOPAEBv3M,201455
@@ -71,8 +71,8 @@ trenchfoot/scenarios/S07_circular_well/preview_top.png,sha256=X1P0g8kblJLsxOpYiZ
71
71
  trenchfoot/scenarios/S07_circular_well/scene.json,sha256=bvror2YX6aNbsEc25-N7JO3ysH2dTLGyEE6zGzZysXQ,3146
72
72
  trenchfoot/scenarios/S07_circular_well/trench_scene.obj,sha256=leTTT0i5xE-fvFSzHLNf_JBsU0AN3YqadDx4HmNmFhU,1618101
73
73
  trenchfoot/scenarios/S07_circular_well/volumetric/trench_volume.msh,sha256=dqhtd3SFKj5RLT_BcWIIvVGCbAqvOx7RX25-K7NKX10,615212
74
- trenchfoot-0.2.6.dist-info/METADATA,sha256=AijPsKWxr7-QImLYBajDcizcl4DSAXOja0piH89jrCA,5292
75
- trenchfoot-0.2.6.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
76
- trenchfoot-0.2.6.dist-info/entry_points.txt,sha256=5TejAGmc4GnNYLn7MhhLtSCNz9240RvzcNaetF4IHfg,119
77
- trenchfoot-0.2.6.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
78
- trenchfoot-0.2.6.dist-info/RECORD,,
74
+ trenchfoot-0.3.0.dist-info/METADATA,sha256=_N5N5_BZvcb3JmbEKrtaosI3BEe1DIh0fOzIunUNF88,5292
75
+ trenchfoot-0.3.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
76
+ trenchfoot-0.3.0.dist-info/entry_points.txt,sha256=5TejAGmc4GnNYLn7MhhLtSCNz9240RvzcNaetF4IHfg,119
77
+ trenchfoot-0.3.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
78
+ trenchfoot-0.3.0.dist-info/RECORD,,