OpenGL 3D viewer for ImplicitCAD.
Allows quick preview of ImplicitCAD SymbolicObj3
objects by transforming
NormedTriangleMesh
into format accepted by GPipe.
Based on GPipe-Test
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
.
stack build
stack run implicitview examples-haskell/SomeModule.hs
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
Demo of animation functionality.
Left mouse button controls camera rotation, scroll wheel zooming, holding space increases animation speed.
N
or~
key switches smoothing of normals (off by default)1
..0
switches shaderTab
switches to next shaderR
toggles autorotationC
toggles autoscaling of object on reloadsQ
for quit
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) ]
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.