Antimony – A fresh look at CAD software
mattkeeter.com
mattkeeter.com
I've worked in CAD translators for the last two decades. Though both the IGES and STEP file formats include CSG modeling features, I have never implemented them. To the best of my recollection, I've never even had a request from a customer to do so. A pity, I think they'd be fun to try to implement... and most of the thorny bugs would officially be the B-rep geometry kernel's, not mine. :)
The whole history of AutoCad's feature evolution is that of a successful startup. There's an overview on AutoDesk's website:
http://autodesk.blogs.com/between_the_lines/autocad-release-...
And of course in the 1980's Lisps were tech's "the sharing economy". One of the reasons I went to vocational school to study drafting was to get my hands on AutoCad to get my hands on AutoLisp to get my hands on a Lisp. In 1991, I was doing timed Cad competitions using R10. My secret weapon was twenty minutes writing my own "PGP" command aliases in AutoLisp with edlin before I started drawing. That's how I won my copy of R11.
So I'm glad you did it too. Thanks.
That sounds like a great story. Would you consider sharing it?
https://www.fourmilab.ch/autofile/www/chapter2_35.html
"Lisp?!?! Why the Hell did you pick the most arcane, obscure, and hopelessly-rooted-in-the-computer-science-department language in the world for an AutoCAD programming language? Over the next six months, all of us will have the opportunity to answer this question."
That was in 1985. Not so much has changed in 30 years :P
But yes, I found AutoLisp to be very useful for automating things. The place I used to work for had to have the CNC machines cut out differently sized shapes from a library of shapes, so I created functions to draw each library shape for me quickly.
This is a lot easier than trying to form four mutually tangent circular arcs into an oval by constructing everything by hand.
Sure, I could construct everything by hand, but that's pretty unreasonable when I'm redoing the same basic shapes all day.
Blending shapes is neat trick but the market cares most about fundamental operations and it seems to me that the fundamentals are harder to implement with CSG.
(And it was written in Miranda!)
Is that a history joke you snuck in there?
http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier#B.C3.A9zier_...
Bézier curves are ubiquitous in computer graphics. They were introduced implicitly into theoretical mathematics long before computers, primarily by the French mathematician Charles Hermite and the Russian mathematician Sergei Bernstein. But it was only the work of Pierre Bézier, an employee of the automobile maker Renault, and of Paul de Casteljau, of Citroen, that made these curves familiar to graphics specialists. Recently, the polynomials defined by Bernstein have become again of interest to mathematicians. http://www.ams.org/samplings/feature-column/fcarc-bezier
Wikipedia expands:
Bézier curves were adopted as the standard curve of the PostScript language and subsequently were adopted by vector programs such as Adobe Illustrator, CorelDRAW and Inkscape. Most outline fonts, including TrueType and PostScript Type 1, are defined with Bézier curves. http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier#B.C3.A9zier_...
... though almost certainly CorelDraw (and Quark xPress?) came before Illustrator, and PostScript's popularization came through the rather embrace-and-extend PDF format it spawned.
FWIW, I have fond memories of doing CSG with Povray - http://povray.org/ - as an 11 year old. When the supply of new DOS games ran out, it sure beat writing batch file viruses, the other primary form of entertainment.
Postscript became popular[1] well before any version of the PDF format existed. It was popularized by the Apple Laserwriter, the first printer to natively support it.
[1] Well, I suppose it depends on what one means by 'popular'. I think creating the desktop publishing industry counts; YMMV.
The problem of course, is that once there's a column with acanthus leaves, splines are the way to model its details and a WYSIWG needs them. For architecture, splines are in the aesthetic details, but constructive solids are a good tool for representing the important part of the constructed solids that are buildings.
I enjoy every new CAD program (solvespace, implicitCAD, nanoCAD, ...) when they come but each time it lacks this vital function. Even fat dinausors like CATIA, Pro/E, Inventor & co have a very poor ux at that level.
So I will recommend to master the rules of technical drawings and geometric dimensionning and tolerancing before going to deep in 3D. Likewise, BRep, CSG, constraints solvers, code/GUI will be just straightforward "plugins". It's safer and more useable in real life.
By the way, the Purdue University have some good innovative lectures, ie. Erep [1]
Computer Aided Engineering Design by Anupam Saxena & Birendra Sahay is cool and informative.
In general, the Indian Institute of Technology of Kampur [2] has some pretty intense books on the subject.
Finally, Knowledge-based engineering [127] will extend a lot your future awesome opensource haskell CAD package!
[1] https://www.cs.purdue.edu/homes/cmh/distribution/papers/Erep...
[2] http://www.iitk.ac.in/cad/
[127] https://en.wikipedia.org/wiki/Knowledge-based_engineering
* Gears and sprockets * Fasteners (nuts & bolts) * Electrical components (ICs, etc)
For anything else they aren't at all suitable. It's just a million times easier to be able to click on dimensions on the actual sketch and change them. You're never going to see a power tool or a tractor or whatever designed in OpenSCAD.
Few 2D drawing programs are specified in code - the only ones I can think of are things like TikZ for Latex, and ... well there's a reason only Latex geeks use them. They aren't very easy to use.
The main reason they exist is that it is much (like 100 times) easier to write a code-drive CAD system than a GUI-driven one.
The reason they exist is because they are very well suited for making changes on the model ... on shallow and deep level. It might be easer to "click on dimensions on the actual sketch and change them" for a few elements, but try making a fundamental change without code.
GUI vs. code/config file preference seems to be a personal disposition not only for CAD but for all kinds of software.
The difference between point and clicking dimensions in those tools and how they are supposed to be used is greater than the difference between pecking in Notepad and being a power user in Emacs/Vim.
Parametric CAD is far better about keeping relevant dimension values, formulas, and model constraints right where they're relevant and trivial to visually comprehend in terms of their function in the model.
A better analogy for the uninitiated would be the frustration of a spreadsheet where the cell values and formulas had to be edited on some entirely separate text code UI sheet, requiring flipping back and forth and holding stuff in short-term memory to do anything to the model.
That said, I'm actually quite interested to play with Antimony. At first blush, it looks far more appealing than OpenSCAD for practical applications. Over time, it's UI might be able to converge functionally to the mature CAD packages, but allow for greater insight into how the engine is really building up the model, especially in complex projects. Constraint debugging in parametric CAD can occasionally be a frustrating kind of hell. Antimony and/or its descendents may be able to help out with that.
I beg to differ on this, I've been using OpenSCAD for a couple of years now, and the two most complicated designs I have done were for a dual drive robot base and a simple 3-axis CNC machine. Many of the parts were COTS (which I built modules for) and the rest were designed for these projects, including some parts which were sent directly to my 3D printer. In doing this, I've been developing various functions and modules that simplify common operations such as attaching two separate parts and using difference to form a free fit hole for a specific type of screw. I find this to be much easier than clicking on dimensions in a sketch, but this is because I have all of the mental habits developed by learning to build complex software.
https://www.dropbox.com/s/fu7xc4cjda2kyx4/lego7.png?dl=0
https://www.dropbox.com/s/33dws1ug5vzyfe6/lego6.png?dl=0
https://www.dropbox.com/s/7z85257nidmpkdz/lego5.png?dl=0
https://www.dropbox.com/s/ks8ctcfcbxan3dq/lego1.png?dl=0
Anyway, as much as I enjoyed creating the truck, the reality is that a decent mechanical engineer, experienced in SolidWorks, CATIA, or other parametric CAD, could have built the truck in a fraction of the time that it took me. Furthermore, I'm pretty sure that even I would have been faster in a parametric modeler, and I'm a software engineer.
EDIT: I should also mention that the Javascript binding was primarily for developers to test out the modelling kernel's API, rather than creating actual parts.
i bet if you look at your design code, most of the parametrization and solid are there just to work around the fact that you can't tie one side of a cube to another.
to me at least, that's the killer feature that open scad lacks.
See the presentation video where it's driven from a GUI.
I'm also confused about the grandparent comment, since the video clearly shows direct manipulation of the actual sketch.
Increasing the level of abstraction makes it more rewarding to express the designs in code instead of dragging things with a mouse.
The tree rep is very cool. It could probably render implicitly using distance fields without even needing triangulation. http://iquilezles.org/www/articles/distfunctions/distfunctio...
Wow, that looks amazing. Thanks for the pointer!
(Pretending to add value, it's eminently googleable)
Only problem, to me, is that it seems like a lot of work to get a UI like this off the ground. It'd be lovely to see support of a node-based UI built into some common UI frameworks.
[1] http://worrydream.com/DrawingDynamicVisualizationsTalkAddend...
Did you try sketchup?
Funny, I'd be way more interested in the software engineering tools that are inspired by drafting tables than the mechanical engineering tools inspired by text editors.
If you spend some time with anyone proficient with the big CAD/CAE programs you will see how efficient they are. OpenSCAD and others are familiar to programmers so they are easier to learn, but if you learn CAD/CAE software they make text editors feel clumsy and slow. For an added bonus, use one of the input controllers specifically built for CAD/CAE, it opens a whole other world.
Nowadays when you need to cater to web browsers and mobile devices with a large range of screen sizes, even those are largely eschewed because the layout has to be redone at run time anyway. But there are still some in use by people who work on fixed size form layouts.
Does it use a geometric modeling kernel? e.g open source Open CASCADE (http://en.wikipedia.org/wiki/Open_Cascade_Technology ) ?
Two other open source CAD come to my mind that use Python as primary scritping language: FreeCAD and the unmaintained HeeksCAD: http://en.wikipedia.org/wiki/FreeCAD , http://en.wikipedia.org/wiki/HeeksCAD
Antimony looks like a nice entry-level program for this sort of thing. It's way ahead of mesh editors. Those are for graphics, not physical objects. In a mesh editor, you can't move a hole cleanly. In a mesh, the concept of "hole" has been lost.
What you get with the big expensive programs is 1) a GUI that scales well when you need to design something complicated (people do jet engines in these programs), 2) a constraint solver, where you can specify constraints and let the system work out a solution, and 3) lots of additional engineering tools. It's nice to see the low end catching up.
Perhaps the emphasis on CAD instead of computer graphics is the primary differentiating factor, but it's really too early to tell.
Good luck.
I find openscad quite painful to use, I whish I learned about Antimony before. I think this has lot of potential, as a lightweigth, intuitive, free software, notably in the maker/diyer scene.
add --std=c99 to CFLAGS and --std=c++11 to CXXFLAGS in Makefile
Still doesn't build, see: http://pastebin.com/T17kCyG3
You probably already knew that, but I think it means the cure is probably to install Qt 5.4 (or the prerelease 5.5) from source.
Do you see other compile problems if you run make -k, or just that one?
edit: there seems to be a slight problem with text rendering tho(only lowercase 'a' and bullet points are drawn), see http://imgur.com/MiX1hvL More of a qt5 issue I think
According to https://wiki.archlinux.org/index.php/Uniform_Look_for_Qt_and... qt5 attempts to be smart with guessing the desktop environment under wich it is running.
I'm a physicist and I only used one CAD software occasionally. In the CAD software I used I had to clone primitive objects to use them in multiple operations. If I wanted to change one dimension I had to update all the clones. Simply the acyclic graph model works better for this than the tree model. (Also some operations were irreversible, that was absolutely inexcusable.)
This grew out of my thesis work (2011-2013); in rough chronological order, here are a few documents from that time period:
http://fab.cba.mit.edu/classes/S62.12/people/keeter.matt/ind...
http://www.mattkeeter.com/projects/kokopelli/
BTW I was ray tracing CSG objects for RT chess back in 2001. Here's a pic:http://www.caiman.us/scripts/fw/f282.html I implemented a primitive called quadratic lathe which took 3 points on a curve and revolved them around the vertical axis as an implicit surface intersected with a slab to limit the vertical span. Most of the chess pieces were created by sketching them on graph paper and putting the profile coordinates into code.
If you want to run it, beware of potential malware from sites that have it. Also, replace the SDL dll in there - somehow a bad version got in our original zip. I may not have source for the game any more, but the renderer has progressed a bit and now supports multithreading.
Because 3D printing supposes a very robust 3D CAD.
I think that Antimony kind of suffers from the same problem, but because it's using distance fields rather than plain CSG, it does have a “blend” operation (https://github.com/mkeeter/antimony/blob/develop/py/fab/shap...) that attempts to fillet the union of two shapes. Now, Antimony has inversion (complement, more or less), and set A \ B is just A ∩ B', which by De Morgan's Laws is equivalent to (A' ∪ B)'. So what happens if you attempt to approximate a filleted A \ B with invert(blend(invert(A), B))? I don’t know. But damn, I’m sure tempted to try it!
Of course, even if that works, that won’t fillet a specific edge resulting from the subtraction. It will fillet all of them. Invariably, that is what I want.
Guess what makes you a student? Any community college class. So go take a welding class.
Oh well, at least homebrew licenses are getting rarer and rarer these days.
what are you claiming here?
"Permission is hereby granted, [snip] including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software"
The right to sell the software is part of the open source and free software definitions. A license needs to specify this, because by default copyright law does not grant this right. This homebrew license does not allow selling the software, thus it fails to be open source.
Failing to meet this part of the definition is why MAME wasn't open source either until last week.
MAME was not free because they explicitly said "Redistributions may not be sold, nor may they be used in a commercial product or activity."
Well, no, copyright law works by "anything explicitly made exclusive to the copyright holder by law, and not explicitly allowed by either other provisions of law or the copyright holder is forbidden, unless its in the rather ill-defined -- far from explicitly delimited -- domain of 'fair-use', or implicitly permitted by the copyright holder under implicit license, or..."
It does, but I agree that the author should choose an established license instead of trying to make one up by putting 3 lines in the README: https://github.com/mkeeter/antimony
.. with fairly similar goals - only not for architecture, but rather 3d-printig ..
instead of using a popup menu for your commands consider using a drop down list with autocomplete -- and fuzzy matching
like sublimetext Ctrl+P.. to see a demo of this goto http://www.sublimetext.com/ and see slide #4 at the top of the page
I've been using SolveSpace: http://solvespace.com/index.pl
There is a Mac port but it's still on a branch. You can find a link to it in the forum thread here:
http://solvespace.com/forum.pl?action=viewthread&parent=586
Like the windows version it is a single executable file, so just put it somewhere and run it. It's worth reading the reference from top to bottom. Fantastic little program.
123Design comes to mind [1]
You can also peruse the comparison of CAD software at Wikipedia. [2]
1. http://www.123dapp.com/design 2. http://en.wikipedia.org/wiki/Comparison_of_computer-aided_de...
http://www.autodesk.com/education/free-software/all
Very easy to obtain, but it can't be used for commercial applications obviously.
There's also OpenSCAD (GPL):