2020# call. A CGAL corefinement visitor propagates a per-face tag through every
2121# step so every output triangle carries [mesh_id, face_id] of its origin.
2222#
23- # The default kernel is EPECK ( exact=True). Constructions are computed in
24- # CGAL's Exact_predicates_exact_constructions_kernel, which handles the
25- # degenerate triple intersection where the three axis-aligned cylinders meet
26- # at the origin without any geometric workarounds. Set exact=False to use
27- # EPICK, in which case the cylinders should be shifted by a sub-millimetre
28- # amount to avoid the "Non-handled triple intersection" precondition .
23+ # The chain runs in CGAL's exact-constructions kernel (EPECK), which
24+ # handles the degenerate triple intersection where the three axis-aligned
25+ # cylinders meet at the origin without any geometric workarounds. Pass
26+ # `hybrid=True` to switch to the EPICK mesh + EPECK vertex_point_map
27+ # scheme from CGAL's "consecutive boolean operations with exact point
28+ # maps" example .
2929# =============================================================================
3030
3131cube = Box (2 ).to_vertices_and_faces (triangulated = True )
@@ -50,7 +50,6 @@ def cylinder_along(axis, radius=0.8):
5050V , F , S = boolean_chain_with_face_source (
5151 [cube , sphere , cyl_x , cyl_y , cyl_z ],
5252 ["intersection" , "difference" , "difference" , "difference" ],
53- exact = False ,
5453)
5554
5655# =============================================================================
0 commit comments