Future of ImplicitCAD

1,155 views
Skip to first unread message

Christopher Olah

unread,
Dec 8, 2012, 6:29:03 PM12/8/12
to impli...@googlegroups.com
Hey All,

ImplicitCAD has been around for a bit over a year now. We've made a
ton of progress. Huge progress has been made on performance. There are
all sorts of cool new features. We have a lovely website
(www.implicitcad.org) to teach people about ImplicitCAD. We have use
in the wild for serious projects
(https://github.com/nathan7/nateplate/). And there are other
contributors! It's been very exciting to watch ImplicitCAD grow.

I wanted to use this thread as an opportunity to brain storm about the
future of ImplicitCAD. If there's a crazy idea bouncing around in your
head or something that is irking you, please mention it.

================

**Parametric Functions / Polygon / Triangle Mesh**: Better support for
polygons and support for triangle meshes. These have the added benefit
of making it easy to inject parametric function approximations, which
are the natural way to describe many things (eg. gears). If we added
resolution as an argument to get_implicit, we could emulate support
for parametric functions described objects by always sampling much
lower than the resolution of rendering.

**Import Format Support**: In particular, a DXF and SVG importer would
be really nice.

**Geometric Constraints**: In a programmatic CAD tool these would
essentially be logic programming. You'd describe a geometric situation
and get back values solving it, to save you the trouble of calculating
them yourself. It would also be less bug prone. Unfortunately, open
source implementations seem to be limited and not in C (which we could
FFI to). If we want this, we will probably have to write our own in C
or Haskell.

**Integrating module calls and expressions in extopenscad**: The
motivating example here is `rotate_extrude(shape = square(10, 20))
{...}` which we have the math implemented for, but lack a way to
describe in extopenscad.

**Extopenscad interfaces**: Objects can describe positions to attach
things at. Possibly using normal vectors to do alignment and snapping.

**GPU acceleration (for raytracing?)**: The GPU acceleration part is
probably self explanatory, but it would be a great way to speed things
up, since everything is ludicrously parallel. In particular, if we
could get real time raytracing, it would make a very compelling
interface for native use.

**Google Native Client?**: Google Native Client is a way to run
programs natively for web applications. It seems likely LLVM will
support it at some point in the future, which would be really
interesting for us...

**Other Languages?** Presently, you can only really design ImplicitCAD
objects in Haskell and extopenscad. But there are interpreters for
lots of other languages written in Haskell --
http://www.haskell.org/haskellwiki/Applications_and_libraries/Compilers_and_interpreters.
I wonder how many we could inject the ImplicitCAD API into the
execution environment with? ImplicitCAD objects being possible to
design in Python/Ruby/Javascript/Perl/etc would be really cool.
Especially if we could still import between them.

**CLI Variable Setting**: "<nathan7> Passing variables to extopenscad.
like I can do extopenscad -Dbuild=production and stuff" -- Sounds like
a great idea to me!

**Optional Dependencies**: As we require more and more elaborate
dependencies, ImplicitCAD becomes harder to build. Thoughts on ways we
could make features/dependencies optional without increasing
maintenance work are appreciated.

**Packaging / Binaries**: I think it is important for us to provide
packages / compiled binaries to help with adoption. I'm working on a
Fedora package. Anyone interested in taking on a platform?

=====

So, what else? The website is also fair game.

Chris

Sebastien Zany

unread,
Dec 8, 2012, 10:22:15 PM12/8/12
to Christopher Olah, impli...@googlegroups.com
Pullbacks by automorphisms of R^3



--



Christopher Olah

unread,
Dec 9, 2012, 8:28:37 AM12/9/12
to Sebastien Zany, impli...@googlegroups.com
> Pullbacks by automorphisms of R^3

And specifically the spherical and cylindrical coordinate transforms.

Also, LaTeX support.

Chris

Reinoud Zandijk

unread,
Dec 10, 2012, 2:08:12 PM12/10/12
to impli...@googlegroups.com
OK, from me here,

i've seen some Haskell examples you made for ImplicitCAD like

out =
union [

    rectR 0 (-40,-40) (40,40),

    translate (40,40) (circle 30) ]

could we extract some form of alternate file format from this? say with limited haskell syntax like (thinking out loud here, don't keep me to it! :)

  union [rectR 0 (-x+3,-x+6) (x+6,x+61) | x<-[1..4]]

or

  center obj = translate (size.x(obj)/2, size.y(obj)/2, size.z(obj)/2) obj
  centeredcubeR r w h d = center (cubeR (0,0,0) (w, h, d));

  out = union [
      center . cubeR 1 20 20 20 :: colour blue, material pla,
      center . sphere 16        :: colour red, material abs, density 10%];

any ideas?

Cheers,
Reinoud

Ben Gamari

unread,
Dec 10, 2012, 2:29:10 PM12/10/12
to Reinoud Zandijk, impli...@googlegroups.com
Reinoud Zandijk <rei...@tomaatnet.nl> writes:

> OK, from me here,
>
> i've seen some Haskell examples you made for ImplicitCAD like
>
> out = union [
>
> rectR 0 (-40,-40) (40,40),
>
> translate (40,40) (circle 30) ]
>
> could we extract some form of alternate file format from this? say with
> limited haskell syntax like (thinking out loud here, don't keep me to it! :)
>
Frankly, I envision myself simply using implicitcad as a Haskell library
much of the time. No matter how much work you put into a dedicated DSL,
you'll never beat a full programming language. Personally I'm not
convinced that it's worth the effort to develop OpenSCAD into a
fully-fledged language. That being said, I of course can't complain if
someone else takes on this task.

Cheers,

- Ben

Christopher Olah

unread,
Dec 10, 2012, 11:34:36 PM12/10/12
to Ben Gamari, Reinoud Zandijk, impli...@googlegroups.com
> Frankly, I envision myself simply using implicitcad as a Haskell library
> much of the time. No matter how much work you put into a dedicated DSL,
> you'll never beat a full programming language. Personally I'm not
> convinced that it's worth the effort to develop OpenSCAD into a
> fully-fledged language. That being said, I of course can't complain if
> someone else takes on this task.

Originally, ImplicitCAD was just a Haskell library. ExtOpenScad was
added because people were terrified of Haskell and there is a ton of
existing OpenSCAD code.

The Haskell API is kind of crude, but I certainly think it could be a
very nice way to design objects. And if we make it easy to integrate
Haskell/extopenscad code, perhaps some people will switch to Haskell.
Frameworks are known to drive adoption.

But I think extopenscad is essential for us to get initial adoption.


Reinound, you've done a great job capturing some of the ways designing
an object in Haskell could be very elegant. But why use a Haskell
inspired markup language and not just Haskell? The motivation between
extopenscad is the existing OpenSCAD users, what would the motivation
behind this be?

Chris

Sebastien Zany

unread,
Dec 10, 2012, 11:53:20 PM12/10/12
to Christopher Olah, Ben Gamari, Reinoud Zandijk, impli...@googlegroups.com
+1 for Haskell EDSL.

"But I think extopenscad is essential for us to get initial adoption."

This is an assumption that ought to be tested.

Sent from my iPhone
> --
>
>

Ben Gamari

unread,
Dec 11, 2012, 12:14:20 AM12/11/12
to Christopher Olah, impli...@googlegroups.com, Reinoud Zandijk


On Dec 10, 2012 11:34 PM, "Christopher Olah" <christoph...@gmail.com> wrote:
>
> Originally, ImplicitCAD was just a Haskell library. ExtOpenScad was
> added because people were terrified of Haskell and there is a ton of
> existing OpenSCAD code.
>

Sure, and I think this was the right thing to do both from the standpoint of adoption and practicality: even for someone with a working knowledge of Haskell it is infinitesimally easier to start a design with OpenSCAD syntax than it is with the Haskell interface.

> The Haskell API is kind of crude, but I certainly think it could be a
> very nice way to design objects. And if we make it easy to integrate
> Haskell/extopenscad code, perhaps some people will switch to Haskell.
> Frameworks are known to drive adoption.
>
> But I think extopenscad is essential for us to get initial adoption.
>

Definitely. I think as long as we can provide support for a proper superset of the openscad syntax we've done what is necessary. Any further features exposed through the OpenSCAD frontend are gravy.

Beyond my work on mirror support what other features remain outstanding towards full OpenSCAD support?

Cheers,

- Ben

Matthew Sorensen

unread,
Dec 11, 2012, 1:04:22 AM12/11/12
to Ben Gamari, impli...@googlegroups.com, Reinoud Zandijk, Christopher Olah

Minkowski sum - all of the literature I looked at indicates this is non-trivial to express implicitly.

--
 
 

Gordon Wrigley

unread,
Dec 11, 2012, 3:03:32 AM12/11/12
to Matthew Sorensen, Ben Gamari, impli...@googlegroups.com, Reinoud Zandijk, Christopher Olah
I don't think minkowski sum is widely used, so as long as it fails in a clear and informative manner it probably doesn't matter.
The bigger issue is likely to be minor incompatibilities, just because you've covered 99% of the feature set it isn't reasonable to expect the majority of existing openscad files to work, there will be bugs and small semantic differences that need to be found and fixed.
Support for mixing openscad and haskell is an interesting notion.


--
 
 

Reinoud Zandijk

unread,
Dec 11, 2012, 8:10:21 AM12/11/12
to impli...@googlegroups.com, Ben Gamari, Reinoud Zandijk
Hi Chris,


On Tuesday, December 11, 2012 5:34:36 AM UTC+1, Christopher Olah wrote:
Originally, ImplicitCAD was just a Haskell library. ExtOpenScad was
added because people were terrified of Haskell and there is a ton of
existing OpenSCAD code.

True, though i don't know if i would call it `a ton of code', its there for sure as thingiverse alone reports 4314 things.

But I think extopenscad is essential for us to get initial adoption.
 
That, regretably, is true though i've also seen a couple of programs written in perl/python/whatever generating openscad code; it will help adoption for sure.

Reinoud, you've done a great job capturing some of the ways designing
an object in Haskell could be very elegant. But why use a Haskell
inspired markup language and not just Haskell? The motivation between
extopenscad is the existing OpenSCAD users, what would the motivation
behind this be?
 
The motivation behind this proposed interface Haskell inspired language is to isolate the specification from the implementation without dictating a language. It will also permit to use variables and/or constructors that may or might become part of the Haskell language.

The big problem in this whole idea is as expected: where to draw a line? what to allow in this language without making its implementation a PITA? only strict math insprired Haskell like features? like assignments, generators, multiple case logic and function definition and such? But then in what form? Haskell allows some things to be written down in more than one way. And what form would be acceptable and not confusing/conflicting with most functional languages? Would such a language be easier to learn and integrate than raw Haskell that is far too feature rich?

As for extra properties in my example it may be better to specify say
---
  arm = union [cube ..., ....];
  leg  = union [....];
  vol1 = volume [material ABS, density "1-x+y/2", color RGB (0.1, 0.2, 0.3)] arm;
  vol2 = volume [material PLA, density 1, color ... ] leg;
  out = [vol1, vol2];
---
? and thus won't allow volumes to be unioned with a cube later on due to the type?

In short, what i'd like to see it being able to specify enough for the full support of the See the wikipedia page (http://en.wikipedia.org/wiki/Additive_Manufacturing_File_Format) on it, also known as STL2.

Any ideas?
With regards,
Reinoud

cfh...@gmail.com

unread,
Dec 15, 2012, 4:03:34 PM12/15/12
to impli...@googlegroups.com
My context: I am looking at ImplicitCAD as a key component of an open source hardware toolchain which produces a full set of production documents and CAM files. Despite the potential power of ImplicitCAD and Haskell I do not expect ImplicitCAD to BE the entire toolchain. IC's primary role is to convert a text-based programming file into "geometry".

1. I am uncomfortable with the fact that all IC outputs, 2D and 3D, seem to be limited-resolution "renders". Other tools later in the chain could sometimes benefit from machine-precision geometry information. For this purpose I envision adding a "point" data type whose position is computed according to the geometric model and is output directly without a rendering approximation step.

2. I would like to see identifiers which can be attached to geometric features. They need not have semantic content; as a bare minimum UUIDs would suffice if other tools in the toolchain are doing the interpretation. For example, I might want to label a hole diameter with a tolerance, an object with a material type, or a feature with a label or note. The most obvious applications don't require us to think hard about composition rules: the hole remains distinct in the rendering, its annotation "ream to 0.375 +/- 0.0002 inch dia" remains attached to the surface or path rendered, and all is fine. However I do think it is useful to consider rules for composing identifiers, to support user-defined composition rules based on identifier classes, and to provide some default rules for common use, e.g. if a 2D output path contains elements generated from three underlying objects with distinct identifiers, the path could bear all, none, or a single priority-based identifier in each class.

My 2c

Chuck

Gordon Wrigley

unread,
Dec 16, 2012, 7:08:05 AM12/16/12
to cfh...@gmail.com, impli...@googlegroups.com
How would your point data type represent curved surfaces?


--



cfh...@gmail.com

unread,
Dec 16, 2012, 12:30:09 PM12/16/12
to impli...@googlegroups.com, cfh...@gmail.com
On Sunday, December 16, 2012 4:08:05 AM UTC-8, Gordon Wrigley wrote:
> How would your point data type represent curved surfaces?
>

I think you misunderstand my intent. There is nothing wrong with the existing ImplicitCAD mechanisms for representing 3-manifolds (solids), 2-manifolds (surfaces), or 1-manifolds (curves). What is missing is a representation for 0-manifolds.

Perhaps a concrete example is in order. Remember, I want to make concrete objects with real-world fabrication processes. Suppose I want to make something with a number of round holes -- perhaps a circuit board or even an engine block. The best way to make these holes is with a drill, and a drilling machine needs (x,y) positioning coordinates.

At present I can define the holes in a circuit board, for example with the extopenSCAD "circle" primitive, and I can render an svg file which makes a pretty picture of the board. The picture is a useful and necessary artifact, but it does not directly give me the (x,y) coordinates for the drilling machine. I would have to post-process the svg file, identify the circles (actually the approximating polygons), estimate their center coordinates, and produce my CNC drill file from that. I would prefer to have a more direct route from "part program" (in extopenSCAD) to CAM file (x,y drill coordinates in g-code).

Bottom line, we have a "sphere" primitive. We have a "circle" primitive. Let's have a "point" primitive, too.

While I have been focusing first on the simplest manufacturing processes (e.g. drilling holes), it is probably useful to consider that even the most sophisticated manufacturing processes rarely use *surface* representations directly. When "the rubber meets the road", it is almost always a 2-manifold ("tool path" in 3-space, or in higher dimensions for 4- or 5-axis machine tools) that cuts the metal or adds the plastic.

Cheers,
Chuck

cfh...@gmail.com

unread,
Dec 16, 2012, 12:35:44 PM12/16/12
to impli...@googlegroups.com, cfh...@gmail.com
**correction**

On Sunday, December 16, 2012 9:30:09 AM UTC-8, cfh...@gmail.com wrote:
> On Sunday, December 16, 2012 4:08:05 AM UTC-8, Gordon Wrigley wrote:
> > How would your point data type represent curved surfaces?
> >
>
> I think you misunderstand my intent. There is nothing wrong with the existing ImplicitCAD mechanisms for representing 3-manifolds (solids), 2-manifolds (surfaces), or 1-manifolds (curves). What is missing is a representation for 0-manifolds.
>

[...]


> While I have been focusing first on the simplest manufacturing processes (e.g. drilling holes), it is probably useful to consider that even the most sophisticated manufacturing processes rarely use *surface* representations directly. When "the rubber meets the road", it is almost always a 2-manifold ("tool path" in 3-space, or in higher dimensions for 4- or 5-axis machine tools) that cuts the metal or adds the plastic.

Woopsie! That tool path curve would be a 1-manifold, of course, not a 2-manifold!

C

Christopher Olah

unread,
Dec 17, 2012, 12:26:38 PM12/17/12
to cfh...@gmail.com, impli...@googlegroups.com
>> "But I think extopenscad is essential for us to get initial adoption."
> This is an assumption that ought to be tested.

I have tried this quite a bit. I presented my early work on
ImplicitCAD, without extopenscad, at NYC Maker Faire. The reaction
ranged from unenthusiastic to negative; several people, unprompted,
told me I needed to interpret OpenSCAD.

It has been observed that frameworks often drive adoption of
languages. Perhaps ImplicitCAD can help with Haskell. But low barrier
to entry and backwards compatibility are an important starting point.

The more interesting conversation, I think, is crafting an
exceptionally nice Haskell API. I'll raise this in another thread.

> Beyond my work on mirror support what other features remain outstanding towards full OpenSCAD support?

There's a can of worms... I'll start a thread on this in a moment.

>> 1. I am uncomfortable with the fact that all IC outputs, 2D and 3D, seem to be limited-resolution "renders".

This is an issue of output formats, not ImplicitCAD. As an example of
a format where we don't do this, certain ImplicitCAD objects can be
compiled into OpenSCAD ones and, for exmple, circles will come through
as precise circles.

>> Other tools later in the chain could sometimes benefit from machine-precision geometry information.

The problem is that ImplicitCAD allows describing objects that I'm not
aware of any other formats being able to describe precisely.

This is why we are interested in also handling gcode generation -- it
really isn't possible to pass on all the information we have about the
object.

>> For this purpose I envision adding a "point" data type whose position is computed according to the geometric model and is output directly without a rendering approximation step.
> Perhaps a concrete example is in order. Remember, I want to make concrete objects with real-world fabrication processes. Suppose I want to make something with a number of round holes -- perhaps a circuit board or even an engine block. The best way to make these holes is with a drill, and a drilling machine needs (x,y) positioning coordinates.

At least in this case, I don't think any sort of point input format is
necessary. It would be trivial to extract circles being cut away and
handle them specially.

>> 2. I would like to see identifiers which can be attached to geometric features.

This is an extremely good point, and something I've been meaning to
work on for a while. Meta data for materials, colors, feature labels
for diagrams, and so forth are things we really need to add. (I'll
start a thread about revamping SymbolicObj{2,3}.)

An example of a particularly challenging type of object to support
would be metal folding, where we may need to attach information about
tapping to holes, and also lines to fold on.

Chris

cfh...@gmail.com

unread,
Dec 17, 2012, 1:16:17 PM12/17/12
to impli...@googlegroups.com, cfh...@gmail.com
On Monday, December 17, 2012 9:26:38 AM UTC-8, Christopher Olah wrote:
> CH>> 1. I am uncomfortable with the fact that all IC outputs, 2D and 3D, seem to be limited-resolution "renders".

>
> This is an issue of output formats, not ImplicitCAD. As an example of
> a format where we don't do this, certain ImplicitCAD objects can be
> compiled into OpenSCAD ones and, for exmple, circles will come through
> as precise circles.

As an element of a toolchain, it is very helpful if the output is in a format that is already used in the field. It may be sad, but autocad dxf is probably the most widely readable format for 2D/3D point/line/arc geometry. I would recommend putting more emphasis on this than on gcode (see below).

> CH>> Other tools later in the chain could sometimes benefit from machine-precision geometry information.


>
> The problem is that ImplicitCAD allows describing objects that I'm not
> aware of any other formats being able to describe precisely.

>
> This is why we are interested in also handling gcode generation -- it
> really isn't possible to pass on all the information we have about the
> object.

This sounds good in the abstract, but I would caution against investing a large effort here at this time. G-code generation is about modeling a manufacturing process, above and beyond modeling an object. You need expertise in the intended manufacturing process to write a good CAM postprocessor. This subject gets very deep, and we will need a lot more Haskell programmers involved before we are touching commercial-strength applications like http://www.mastercam.com . In the mean time, let's prioritize the task of getting the *part geometry* information out of ImplicitCAD accurately, over the task of turning ImplicitCAD into ImplicitCAD/CAM.

> CH>> For this purpose I envision adding a "point" data type whose position is computed according to the geometric model and is output directly without a rendering approximation step.
>
> CH>> Perhaps a concrete example is in order. Remember, I want to make concrete objects with real-world fabrication processes. Suppose I want to make something with a number of round holes -- perhaps a circuit board or even an engine block. The best way to make these holes is with a drill, and a drilling machine needs (x,y) positioning coordinates.


>
> At least in this case, I don't think any sort of point input format is
> necessary. It would be trivial to extract circles being cut away and
> handle them specially.

I'm surprised you prefer the special-case "hack" over a general solution, but I'm a pragmatist; I'll take whatever method gives me the data I need to make accurate parts!

> >> 2. I would like to see identifiers which can be attached to geometric features.
>
> This is an extremely good point, and something I've been meaning to
> work on for a while. Meta data for materials, colors, feature labels
> for diagrams, and so forth are things we really need to add. (I'll
> start a thread about revamping SymbolicObj{2,3}.)
>

http://amf.wikispaces.com/ metadata may be a good starting point.


> An example of a particularly challenging type of object to support
> would be metal folding, where we may need to attach information about
> tapping to holes, and also lines to fold on.

+1 on sheet metal folding, I could use it right away!! (I'm in a laser-cutter/plasma table world these days, can you tell? ;) ) This seems like a natural ("bend 45 degrees around axis A" analogous to "extrude 50mm along axis A"). There may be some difficult corner cases but for most situations this may not be all that hard to implement.

>
>
>
> Chris

Nils McCarthy

unread,
Dec 18, 2012, 7:34:47 PM12/18/12
to impli...@googlegroups.com
Hi!


On Saturday, December 8, 2012 3:29:03 PM UTC-8, Christopher Olah wrote:
**Parametric Functions / Polygon / Triangle Mesh**: Better support for
polygons and support for triangle meshes. These have the added benefit
of making it easy to inject parametric function approximations, which
are the natural way to describe many things (eg. gears). If we added
resolution as an argument to get_implicit, we could emulate support
for parametric functions described objects by always sampling much
lower than the resolution of rendering.

Allowing for non-algebraic structures would also allow computation of things that aren't easy to calculate implicitly, like minkowski sums.  If minkowski(a,b) is requested, and both a and b are already defined by meshes, it could use an existing minkowski polyhedron algorithm to produce an exact sum.  If not, it could generate a mesh approximation at the requested resolution.

**Import Format Support**: In particular, a DXF and SVG importer would
be really nice.

STL import would be useful too.

**Geometric Constraints**:  In a programmatic CAD tool these would

+1, but this seems like a longer term goal
 
So, what else? The website is also fair game.

Here's my wish list:

* Faster STL export:  I have a not-very-involved model that I'm trying to export to STL with reasonable resolution (I'm targeting 3d printing), and it's taking a really long time and runs out of memory.  I have some ideas on some optimizations that could be done:

** Optimize the generated expression for speedier evaluation.  Maybe some common subexpression elimination?  Perhaps use some symbolic algebra package to do some simplifications?  This might require getImplicit to be structured a bit differently, but I think it could be a big win to, say, not multiply a whole bunch of things by sin(0) or cos(90) and add them together for every single point when doing a rotation transformation.  Also, pulling out matrices and premultiplying them together when doing something like translate(...) rotate(...) translate(...) union { ... } might help also.

** Faster meshing algorithm.  I thought I remember reading something about a faster O(surface area) algorithm for generating meshes than the O(volume) algorithm that it looks like it's using now.  What happened to that?

* Voxel output.  I'm not sure if there's a popular standard format for voxel data yet, but I have a friend who works at a 3d printing shop says they're planning to start accepting voxel data files sometime within the next year.  This sounds like the ideal geometrization for 3d printing; it gives detail more efficiently than a polyhedron, but is not nearly as equipment specific as gcode.

* More versatile metadata facitlity for describing objects.  It seems like there's a lot of additional information about structures that we might like to include.  Here are some ideas:
** Material
** Color
** Transparency (even if we're not targetting to become a full-featured raytracer, it would still be useful for debugging purposes to be able to emulate e.g. the "%" operator in openscad)
** Whether the object is better defined by a mesh or implicitly
** Maybe the bounding box could use this metadata facility too?  I don't know if that makes sense or not.

That's all I have for now.  :)

-nils

willia...@gmail.com

unread,
Dec 19, 2012, 8:02:57 PM12/19/12
to impli...@googlegroups.com
Wow, so many great ideas!

• Geometric Constraints: This would be fantastic, though I'm under the impression that it would be a lot of work.

• GPU Acceleration: I'm very interested in using OpenCL/GL, particularly because one may be able to efficiently render implicit objects without converting to / approximating with polygonal geometry.

• Haskell API: This is my main use, and I think Haskell is an ideal platform for CAD. I'm not dissatisfied by the current API at all, but I look forward to improvements.

• Metadata: This is crucial to so many applications. Since it's not all that difficult to add, it should probably be at the top of my list (if my list was actually in some kind of order).

• Complete Set of Modeling Operations: I miss some common operations such as fillet/chamfer, loft/sweep, revolve, etc. It would be nice to have those.

• Symbolic Simplification: This is more of an optimization, but it would be interesting to use symbolic algebra to simplify implicit objects.

• Simulation/FEA: Physical simulation (gears, joints, bearings, etc.) would be really cool, let alone some of the more advanced finite element analysis stuff. Most other software out there is either really simplistic, cumbersome/buggy, or insanely complex. I think programmatic objects would make for a great medium.

• File Import: This was the first thing I noticed was missing when I was checking ImplicitCAD out. It didn't put me off, but it will some people.

Whew, that's all I've got for now!

'Till next time,
Will

Will Knop

unread,
Dec 19, 2012, 10:21:21 PM12/19/12
to impli...@googlegroups.com, willia...@gmail.com
Here's another:

• Blending Operations: It seems like ImplicitCAD has some blending functionality already, but this paper generalizes and expounds on the idea.

Christopher Olah

unread,
Dec 20, 2012, 2:40:19 AM12/20/12
to Will Knop, impli...@googlegroups.com, willia...@gmail.com
> • Simulation/FEA: Physical simulation (gears, joints, bearings, etc.) would be really cool, let alone some of the more advanced finite element analysis stuff. Most other software out there is either really simplistic, cumbersome/buggy, or insanely complex. I think programmatic objects would make for a great medium.

This reminds me of another point: PDEs simulation. It shouldn't be too
hard to support some sort of simple modelling for waves, diffusion,
etc. And this would be a really neat feature.

For creating engineering diagrams, does anyone have a good reference
for what they should look like?

Chris

Matthew Sorensen

unread,
Dec 20, 2012, 3:34:11 AM12/20/12
to Christopher Olah, Will Knop, impli...@googlegroups.com, willia...@gmail.com
>Material properties metadata
>Simulation/FEA
>PDEs simulation
>Voxel output.
>Gcode
>metal folding, engineering diagrams, gcode, etc

While all of this would be awesome, sane software engineering/generally practicality predicts that if we try to support everything we'll get distracted, write a lot of half-assed implementations of sweet features, while not making much progress on improving ImplicitCAD's core. This seems especially true given that all of these tasks are non-trivial and ImplictCAD's core focus is also non-trivially difficult. Perhaps this suggests that building a nice API that exposes enough of the internals to implement such features is the way to go.

>http://amf.wikispaces.com/ metadata may be a good starting point.
>In short, what i'd like to see it being able to specify enough for the full support of the AMF, also known as STL2.

I'm also interested in AMF support - so much so that I have a working implementation (https://github.com/matthewSorensen/ImplicitCAD/tree/amf) and an accompanying library (https://github.com/matthewSorensen/blaze-amf). I even own a real copy of the AMF standard! However, it just exports triangles and meshes at the moment, as ImplictCAD has no other metadata to think about.

On Wed, Dec 19, 2012 at 11:40 PM, Christopher Olah <christoph...@gmail.com> wrote:
Simulation/FEA

Will Knop

unread,
Dec 20, 2012, 8:03:05 AM12/20/12
to impli...@googlegroups.com, Christopher Olah, Will Knop, willia...@gmail.com
>Material properties metadata
>Simulation/FEA
>PDEs simulation
>Voxel output.
>Gcode
>metal folding, engineering diagrams, gcode, etc

While all of this would be awesome, sane software engineering/generally practicality predicts that if we try to support everything we'll get distracted, write a lot of half-assed implementations of sweet features, while not making much progress on improving ImplicitCAD's core. This seems especially true given that all of these tasks are non-trivial and ImplictCAD's core focus is also non-trivially difficult. Perhaps this suggests that building a nice API that exposes enough of the internals to implement such features is the way to go.

That's how I interpreted the purpose of this thread-- list possible future uses of ImplicitCAD so one can plan core features properly. I'm of the mind that if the core features are there and development is active, eventually someone will come along and implement various high level features.

Reinoud Zandijk

unread,
Dec 20, 2012, 8:11:09 AM12/20/12
to Matthew Sorensen, Christopher Olah, Will Knop, impli...@googlegroups.com, willia...@gmail.com
Hi Matthew,

On Thu, Dec 20, 2012 at 12:34:11AM -0800, Matthew Sorensen wrote:
> I'm also interested in AMF support - so much so that I have a working
> implementation (https://github.com/matthewSorensen/ImplicitCAD/tree/amf)
> and an accompanying library (https://github.com/matthewSorensen/blaze-amf).
> I even own a real copy of the AMF standard! However, it just
> exports triangles and meshes at the moment, as ImplictCAD has no other
> metadata to think about.

I've looked at the implementation but there some points i'd like to stress: 1)
it allways specifies vertex normals regardless if they exist or not. 2) It
doesn't specify the edge tangents where needed...

My solution would be to calculate all three edge tangents for each triangle
and then if all the edge tangents for a point indicate a vertex normal use
that normal and if the two edge tangents over an edge are flat, remove the
edge tangents too.

It might not trivial to do that in ImplicitCAD since it uses global operations
on the end result of the triangulations though (memory wise).

With regards,
Reinoud

Gordon Wrigley

unread,
Dec 20, 2012, 2:30:27 AM12/20/12
to Will Knop, impli...@googlegroups.com, willia...@gmail.com
If geometric constraints means what I think it does then that's the feature whose absence hurts me the most in openscad. Bolting parts together to form whole machines and in turn controlling the shape of those parts so they fit their space in the machine. These things are manual, tedious and hard in openscad.


On Thu, Dec 20, 2012 at 3:21 AM, Will Knop <william.k...@gmail.com> wrote:
Here's another:

• Blending Operations: It seems like ImplicitCAD has some blending functionality already, but this paper generalizes and expounds on the idea.

--
 
 

Reinoud Zandijk

unread,
Dec 21, 2012, 8:14:18 AM12/21/12
to impli...@googlegroups.com
Hi Will, hi folks,

(thinking aloud here)

On Thu, Dec 20, 2012 at 07:30:27AM +0000, Gordon Wrigley wrote:
> If geometric constraints means what I think it does then that's the feature
> whose absence hurts me the most in openscad. Bolting parts together to form
> whole machines and in turn controlling the shape of those parts so they fit
> their space in the machine. These things are manual, tedious and hard in
> openscad.

I have to agree; i've discussed OpenSCAD/ImplicitCAD with a friend of mine who
is a heavy 3d CAD user (Catia V, SolidWorks) and this is one of his main
objections against using it. He said it might be good for parts creation but
it sucked on assembly since that all has to be done manually.

There are some `tricks' to do assembly in OpenSCAD but it mostly comes down to
having one static object and bolting the others to it by coordinate
calculation, not ideal.

Looking at other specification languages solutions like BRLcad and PLaSM, i
notice that their hardly if any got support for assembly. The BRLcad webpage
has the most compresensive tutorial on it and somewhat adresses it. They
suggest, logically, to keep assembly in mind when designing objects by having
a good origin and orientation for reuse, duh!

What could help is an named attachment primitive, either of both of a surface
for plane specification and an attachment point for positioning. Having a
surface to attach to reduces the attachment to only have 3 degrees of freedom
(place+rotation), having a point too reduces it to 1 degree of freedom
(rotation). This final freedom then needs to be fixed using a 2nd mounting
point.

Self adjusting objects that change on their placement just mean that some
objects need modification after placement by allowing them to be say drilled
out by a connecting rod. Or do you envision say only specifying an attachment
point without orientation and let the orientation be determined by the
solution of the placement?

Programs like SolidWorks have 2d constraint solving where you can use the
resulting values/lengths/angles etc. to build your 3d object. Later on, when
assembling 3d objects one can say specify the drill-holes in a sheet by
linking it to the bolt placements in another.

Lots of parameter passing can be linked if we allow 1) angle and position
query 2) refer to placement/rotation by refering to named values calculated
when assembling and most importantly: good design with construction is mind :)

Thoughts?
Reinoud

Gordon Wrigley

unread,
Dec 21, 2012, 8:51:51 AM12/21/12
to Reinoud Zandijk, impli...@googlegroups.com
FYI There is some interesting work around doing this sort of stuff in scad libraries, like this:


Reinoud

--



Reinoud Zandijk

unread,
Dec 21, 2012, 10:21:54 AM12/21/12
to Gordon Wrigley, impli...@googlegroups.com
On Fri, Dec 21, 2012 at 01:51:51PM +0000, Gordon Wrigley wrote:
> FYI There is some interesting work around doing this sort of stuff in scad
> libraries, like this:
> http://www.iearobotics.com/blog/2012/09/10/enhancing-openscad-with-the-attach-library/

SNAP! good to see!

Ok, now we need to implement that attach module together with the vector
module either so that it works in ImplicitCAD or as a build-in :)

Ideas?

Cheers,
Reinoud

Will Knop

unread,
Dec 21, 2012, 11:52:46 AM12/21/12
to impli...@googlegroups.com, Will Knop
Seeing how there seems to be considerable interest in industry/application-specific functionality, perhaps we should discuss how ImplicitCAD might be extended without bloating the core. Monads?

Ben Gamari

unread,
Dec 21, 2012, 12:04:15 PM12/21/12
to Will Knop, impli...@googlegroups.com, Will Knop
How exactly are you proposing a monad be used here? I'm really not
convinced that a monadic interface necessary or desireable
here. Especially if we are going to discuss doing transformations to
other computational frameworks (e.g. OpenCL), I think the power of a
monadic interface is strongly undesireable. If I'm not mistaken, all we
want to do here is build a static object graph.

Cheers,

- Ben

Will Knop

unread,
Dec 21, 2012, 11:44:48 PM12/21/12
to impli...@googlegroups.com, Will Knop
Hi Ben, I was referring to PDES (partial discrete event simulation) and FEA (finite element analysis) mainly, but for export/rendering it makes sense to me as well since the pure functions of an object do not need to otherwise be able to generate the output format (e.g. meshes, slices, voxels, STL, OpenCL kernels, etc.). Additionally, each of these processes' metadata is really only useful for itself. E.g. FEA associates lots of parameters to describe an object in its simulation context, and OpenCL requires a state machine to manage partial transfer of the object graph to the compute device(s) as well as manipulate textures and lighting. So, it seems like metadata should go along for the ride with its associated "task monad".

Will

Will Knop

unread,
Dec 22, 2012, 1:34:00 AM12/22/12
to impli...@googlegroups.com, Will Knop
That said, perhaps monads aren't the best abstraction, but it seems necessary to plan something to separate the massive amount of complicated task-related stuff from the very elegant core implicits and transforms. Perhaps someone with more advanced Haskell-fu than I could make some suggestions?

Chuck Harrison

unread,
Jan 10, 2013, 12:19:07 AM1/10/13
to impli...@googlegroups.com, Ben Gamari, Reinoud Zandijk
ExtOpenScad feature suggestions:

1. variables can take on object values e.g. x = square([1,1]); and can be passed as function/module arguments
2. functions can have bodies e.g. function foo(t) { ... return z; } , to allow complex logic inside functions
3. functions can be defined with another language (e.g. Haskell) then used in extopenscad syntax
4. bare braces { ... } , primarily for variable scoping

Also trying to make up my mind about the openScad use/include mechanism vs. c-header-style includes, & the repeated-include issue.

Cheers,
  Chuck


On Monday, December 10, 2012 8:34:36 PM UTC-8, Christopher Olah wrote:
> Frankly, I envision myself simply using implicitcad as a Haskell library
> much of the time. No matter how much work you put into a dedicated DSL,
> you'll never beat a full programming language. Personally I'm not
> convinced that it's worth the effort to develop OpenSCAD into a
> fully-fledged language. That being said, I of course can't complain if
> someone else takes on this task.

Originally, ImplicitCAD was just a Haskell library. ExtOpenScad was
added because people were terrified of Haskell and there is a ton of
existing OpenSCAD code.

The Haskell API is kind of crude, but I certainly think it could be a
very nice way to design objects. And if we make it easy to integrate
Haskell/extopenscad code, perhaps some people will switch to Haskell.
Frameworks are known to drive adoption.

But I think extopenscad is essential for us to get initial adoption.


Reinound, you've done a great job capturing some of the ways designing
an object in Haskell could be very elegant. But why use a Haskell
inspired markup language and not just Haskell? The motivation between
extopenscad is the existing OpenSCAD users, what would the motivation
behind this be?

Chris
Reply all
Reply to author
Forward
0 new messages