Chained segment offsetting for ray-based solid representations AbstractWe present a novel approach to offset solids in the context of fabrication. Our input solids can be given under any representation: boundary meshes, voxels, indicator functions or CSG expressions. The result is a ray-based representation of the offset solid directly used for visualization and fabrication: We never need to recover a boundary mesh in our context.We define the offset solid as a sequence of morphological operations along line segments. This is equivalent to offsetting the surface by a solid defined as a Minkowski sum of segments, also known as a zonotope. A zonotope may be used to approximate the Euclidean ball with precise error bounds.We propose two complementary implementations. The first is dedicated to solids represented by boundary meshes. It performs offsetting by modifying the mesh in sequence. The result is a mesh improper for direct display, but that can be resolved into the correct offset solid through a ray representation. The major advantage of this first approach is that no loss of information -- re-sampling -- occurs during the offsetting sequence. However, it applies only to boundary meshes and cannot mix sequences of dilations and erosions. Our second implementation is more general as it applies directly to a ray-based representation of any solid and supports any sequence of erosion and dilation along segments. We discuss its fast implementation on modern graphics hardware. Together, the two approaches result in a versatile tool box for the efficient offsetting of solids in the context of fabrication. VideoAcknowledgmentsThis work was funded by ERC grant ShapeForge (StG- 2012-307877). Jonàs Martínez has been partially sup ported by an ERCIM postdoctoral fellowship. Bibtex@article{MHCL15, author = "Jonas Martinez and Samuel Hornus and Frédéric Claux and Sylvain Lefebvre", title = "Chained segment offsetting for ray-based solid representations ", journal = "Computers & Graphics ", volume = "46", number = "0", pages = "36 - 47", year = "2015"} |