implicitpipe
implicitpipe copied to clipboard
OpenGL 3D viewer for ImplicitCAD
implicitpipe
OpenGL 3D viewer for ImplicitCAD.
Allows quick preview of ImplicitCAD SymbolicObj3 objects by transforming
NormedTriangleMesh into format accepted by GPipe.
Based on GPipe-Test
Build
With Nix
nix-build./result/bin/implicitview examples-haskell/SomeModule.hs
or enter development shell using nix-shell where you can use
cabal run implicitview
or cabal repl.
With Stack
stack buildstack run implicitview examples-haskell/SomeModule.hs
Executables
implicitview
Like ghcid for ImplicitCAD. Features autoreload functionality that can reload both Haskell modules via hint or ExtOpenSCAD files using ImplicitCADs SCAD engine.
Try it on provided examples:
implicitview examples-haskell/SomeModule.hs
or ExtOpenSCAD variant:
implicitview examples-escad/obj.escad
While the application is running you can open the source file in your editor and it will automatically reload the preview on saves.
Haskell loader expects obj :: SymbolicObj3 variable and optionally
allows changing resolution by also defining res variable
(tried types for res are Double, Int and Integer).
ExtOpenSCAD loader works with standard $res variable. It renders
both 2D and 3D objects by unioning and extruding 2D ones by 1mm.
To achieve the same with Haskell loader, extrude your 2D objects
using extrudeR 0 (unionR 0 objs2) 1.
implicitview supports viewer configuration via command line, for full list of options see:
implicitview --help
An example of some parameters:
implicitview --rotate --rotate-init 1 --rotate-step 0.01 --zoom 0.5 example-escad/obj.escad
implicitanim
Demo of animation functionality.
Controls
Left mouse button controls camera rotation, scroll wheel zooming, holding space increases animation speed.
Nor~key switches smoothing of normals (off by default)1..0switches shaderTabswitches to next shaderRtoggles autorotationCtoggles autoscaling of object on reloadsQfor quit
REPL Usage
Via cabal repl:
import Graphics.Implicit
import Graphics.Implicit.Viewer
view $ sphere 10
animate $ \t -> unionR 1 [ sphere 5, cylinder2 1 3 (4 + 5 * t) ]
Animations
Support for animating objects is available - objects
can be parametrized by time variable in [0..1] interval
and viewed using animate function.
animSample :: Double -> SymbolicObj3
animSample t = sphere (2 + t*2)
animate animSample
Animations are experimental and are currently being reworked
to use composable Animation wrapper similar to
Reanimate.Animation.


