{"id":18485341,"url":"https://github.com/haskell-things/implicitpipe","last_synced_at":"2025-09-04T16:46:46.719Z","repository":{"id":41891141,"uuid":"260453653","full_name":"Haskell-Things/implicitpipe","owner":"Haskell-Things","description":"OpenGL 3D viewer for ImplicitCAD","archived":false,"fork":false,"pushed_at":"2023-11-12T12:29:00.000Z","size":997,"stargazers_count":20,"open_issues_count":4,"forks_count":2,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-06-10T11:58:06.295Z","etag":null,"topics":["gpipe","implicitcad"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Haskell-Things.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-01T12:26:50.000Z","updated_at":"2024-10-01T19:40:51.000Z","dependencies_parsed_at":"2024-11-06T13:00:35.286Z","dependency_job_id":null,"html_url":"https://github.com/Haskell-Things/implicitpipe","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Haskell-Things/implicitpipe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Haskell-Things%2Fimplicitpipe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Haskell-Things%2Fimplicitpipe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Haskell-Things%2Fimplicitpipe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Haskell-Things%2Fimplicitpipe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Haskell-Things","download_url":"https://codeload.github.com/Haskell-Things/implicitpipe/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Haskell-Things%2Fimplicitpipe/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260162105,"owners_count":22967979,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gpipe","implicitcad"],"created_at":"2024-11-06T12:44:54.568Z","updated_at":"2025-06-16T12:32:28.961Z","avatar_url":"https://github.com/Haskell-Things.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# implicitpipe\n\n[![IRC](https://img.shields.io/badge/irc.libera.chat-%23ImplicitCAD-blue.svg)](https://libera.chat/)\n\nOpenGL 3D viewer for [ImplicitCAD](https://github.com/colah/ImplicitCAD).\n\nAllows quick preview of ImplicitCAD `SymbolicObj3` objects by transforming\n`NormedTriangleMesh` into format accepted by [GPipe](https://github.com/tobbebex/GPipe-Core).\n\nBased on [GPipe-Test](https://github.com/plredmond/GPipe-Test)\n\n## Build\n\n### With Nix\n\n* `nix-build`\n* `./result/bin/implicitview examples-haskell/SomeModule.hs`\n\nor enter development shell using `nix-shell` where you can use\n```\ncabal run implicitview\n```\nor `cabal repl`.\n\n### With Stack\n\n* `stack build`\n* `stack run implicitview examples-haskell/SomeModule.hs`\n\n## Executables\n\n### `implicitview`\n\nLike [ghcid](https://hackage.haskell.org/package/ghcid) for ImplicitCAD. Features autoreload functionality\nthat can reload both Haskell modules via [hint](https://hackage.haskell.org/package/hint) or ExtOpenSCAD\nfiles using ImplicitCADs SCAD engine.\n\nTry it on provided examples:\n\n```\nimplicitview examples-haskell/SomeModule.hs\n```\n\nor ExtOpenSCAD variant:\n\n```\nimplicitview examples-escad/obj.escad\n```\n\nWhile the application is running you can open the source file\nin your editor and it will automatically reload the preview on saves.\n\nHaskell loader expects `obj :: SymbolicObj3` variable and optionally\nallows changing resolution by also defining `res` variable\n(tried types for `res` are `Double`, `Int` and `Integer`).\n\nExtOpenSCAD loader works with standard `$res` variable. It renders\nboth 2D and 3D objects by unioning and extruding 2D ones by 1mm.\nTo achieve the same with Haskell loader, extrude your 2D objects\nusing `extrudeR 0 (unionR 0 objs2) 1`.\n\n`implicitview` supports viewer configuration via command line, for full list of options see:\n\n```\nimplicitview --help\n```\n\nAn example of some parameters:\n\n```\nimplicitview --rotate  --rotate-init 1 --rotate-step 0.01 --zoom 0.5 example-escad/obj.escad\n```\n\n### `implicitanim`\n\nDemo of animation functionality.\n\n## Controls\n\nLeft mouse button controls camera rotation, scroll wheel zooming,\nholding space increases animation speed.\n\n* `N` or `~` key switches smoothing of normals (off by default)\n* `1` .. `0` switches shader\n* `Tab` switches to next shader\n* `R` toggles autorotation\n* `C` toggles autoscaling of object on reloads\n* `Q` for quit\n\n## REPL Usage\n\nVia `cabal repl`:\n\n```haskell\nimport Graphics.Implicit\nimport Graphics.Implicit.Viewer\n\nview $ sphere 10\n\nanimate $ \\t -\u003e unionR 1 [ sphere 5, cylinder2 1 3 (4 + 5 * t) ]\n```\n\n### Animations\n\nSupport for animating objects is available - objects\ncan be parametrized by time variable in `[0..1]` interval\nand viewed using `animate` function.\n\n``` haskell\nanimSample :: Double -\u003e SymbolicObj3\nanimSample t = sphere (2 + t*2)\n\nanimate animSample\n```\n\nAnimations are experimental and are currently being reworked\nto use composable `Animation` wrapper similar to\n[Reanimate.Animation](https://hackage.haskell.org/package/reanimate/docs/Reanimate-Animation.html).\n\n## Gallery\n\n### `implicitview`\n\n[![implicitview](./img/i_thumb.png)](https://raw.githubusercontent.com/sorki/implicitpipe/master/img/i.png)\n\n### `implicitanim`\n\n[![implicitanim](./img/anim_smaller.gif)](https://raw.githubusercontent.com/sorki/implicitpipe/master/img/anim_smaller.gif)\n\n### `example-haskell` object with edges shader\n\n[![edges](./img/scene_edges.png)](https://raw.githubusercontent.com/sorki/implicitpipe/master/img/scene_edges.gif)\n\n### `example-haskell` wireframe shader\n\n[![wireframe](./img/scene_wire.png)](https://raw.githubusercontent.com/sorki/implicitpipe/master/img/scene_wire.gif)\n\n### `demoLetterI` with smoothed normals\n\n[![smoothed demo letter](./img/i_smoothed_thumb.png)](https://raw.githubusercontent.com/sorki/implicitpipe/master/img/i_smoothed.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaskell-things%2Fimplicitpipe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaskell-things%2Fimplicitpipe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaskell-things%2Fimplicitpipe/lists"}