[Haskell-cafe] ANN: mecha-0.0.1
Luke Palmer
lrpalmer at gmail.com
Sat Oct 31 19:53:40 EDT 2009
Neat! What a cool idea.
On Sat, Oct 31, 2009 at 5:27 PM, Tom Hawkins <tomahawkins at gmail.com> wrote:
> Mecha is a little solid modeling language intended for machine design.
> Mecha has two layers: a pure functional layer for defining solids
> (aka. parts), and a monadic layer for arranging parts into assemblies.
> Solids (parts) are built using set operations on solid primitives. A
> solid primitives is simply a predicate that says whether a point in
> space is inside the solid:
>
> data Solid = Solid (Vector -> Bool)
With a type like this, how is it possible to make solids without hard edges?
> Mesh generation is performed by adaptive marching cubes.
>
> It's slow, especially if you don't have graphics hardware. And solids
> with hard edges don't render very clean. But the basics work.
>
> Here's a simple example:
>
> example :: IO ()
> example = view design
>
> design :: Asm ()
> design = do
> a <- part 1 0.06 8 $ difference sphereCube cyl3
> b <- part 1 0.08 8 $ sphereCube
> c <- part 1.5 0.08 8 $ cyl3
> color (0, 0, 0.8) $ place a
> move (-4, 0, 0) $ color (0.8, 0, 0) $ place b
> move ( 0, 4, 0) $ color (0, 0.8, 0) $ place c
Why did you choose a monadic interface? Is there a technical or
semantic problem with a statement like:
design =
let a = part 1 0.06 8 $ difference sphereCube cyl3
b = part 1 0.08 8 $ sphereCube
c = part 1.5 0.08 8 $ cyl3
in mconcat [ color (0, 0, 0.8) a
, move (-4, 0, 0) . color (0.8, 0, 0) $ b
, move (0, 4, 0) . color (0, 0.8, 0) $ b
]
Luke
More information about the Haskell-Cafe
mailing list