RapCAD preview release

I decided to build a binary release of RapCAD so that people can have a look at how things are coming along without having to compile it. Its very much in a pre-alpha state so don’t expect to be able to just try out your latest greatest design and just expect it to work. Furthermore it can’t currently create any output in the form of an STL file or GCode, so it really is just a release that will let you preview a design. That said there are some nice features that I would like people to try out and see what they think. Language features such as true variables and functions with bodies seem redundant now when other projects such as openscadpy are boasting full python language integration. Having said that RapCAD scripts and OpenSCAD scripts are a DSL which is nice to use and since it has no general purpose language features such as reading or writing files, network access, etc. The scene descriptions are inherently more secure. While the authors of the software RapCAD, OpenSCAD and openscadpy are known and trusted, the authors of scene description scripts uploaded to to Thingiverse may or may not be trusted. By limiting the language features to the domain of scene description this mitigates any risk.

The features that I am developing now could go into openscad eventually, although some of the things that I am doing would require a substantial re-write of the openscad backend, such as dropping openscads 2D subsystem. (It turns out that the entire 2D subsystem can actually be done using 3D shells that have no internal volume, including boolean set operations) For those who want to try out this release instructions for installation on three popular operating systems; Windows, Ubuntu and MacOSX, can be found in the Download Page

I intend to create binary releases about once a month from now on. Next month I hope to have a release with OFF file export (Its supported natively by CGAL so should be easy to implement) and maybe native support for Bezier surfaces since I have been very interested in the work done by WilliamAAdams here is a sneak peak:

The linear_extrude is not quite working the way I would like yet, as currently it evaluates it by creating a volume for each facet and doing a union of all of these volumes. With it taking 2 seconds for each volume union, the total rendering time is a completely unacceptable 39 minutes! I would like it to work by just creating one volume, but I haven’t worked out how to find the perimeter of the Bezier surface yet.

On the other hand creating a convex hull of two Bezier surfaces works at a comparatively much more acceptable speed, about 18 seconds.


10 thoughts on “RapCAD preview release”

  1. This is great news/progress. I would not worry about the Python thing. I personally don’t program in Python, and prefer to have a purpose built language such as OpenScad/RapCAD.

    For the Bezier thing, you can look at my latest library: http://www.thingiverse.com/thing:8983

    That version creates one giant volume, eliminating the internal walls. The edge is pretty easy to find, it’s the boundaries of the curves at u==0, u==1, v==0, v==1.

  2. Yes I appreciate that the edge of the bezier surface is pretty easy to find, and I may well make the bezier surface module itself export this metadata to work around this specific problem. What I was trying to achieve though, is something more general, so for instance if I create a polyhedron such as:


    I would like to find the perimeter of this surface. I posted a message to cgal-discuss about this: https://lists-sop.inria.fr/sympa/arc/cgal-discuss/2011-06/msg00011.html
    There is an answer now so I am going to read it.

  3. To improve the speed of the Bezier module, you can do some pre-computation:

    Point BezierSurfaceModule::pointOnBez(Points cps, double u){
    double x=bez03(u)*cps[0].getX()+bez13(u)*cps[1].getX()+bez23(u)*cps[2].getX()+bez33(u)*cps[3].getX();
    double y=bez03(u)*cps[0].getY()+bez13(u)*cps[1].getY()+bez23(u)*cps[2].getY()+bez33(u)*cps[3].getY();
    double z=bez03(u)*cps[0].getZ()+bez13(u)*cps[1].getZ()+bez23(u)*cps[2].getZ()+bez33(u)*cps[3].getZ(); return Point(x,y,z);}

    You can pull ou the bez03, 13, 23, 33 calculations as the same value of ‘u’ is used repeatedly. That will speed things up quite a bit I think.

  4. Hello,
    you’ve supplied natty and oneric pkgs.
    Can src be found for Lucid? ( still LTS , i’m running LinuxCNC)

  5. Hi, I’m trying to decide whether to get my students working with openscad, your rapcad or openscadpy. I’m trying to figure out your comment saying that repcad is a “more secure option than downloading some script kiddies python script off of thingiverse”. What makes rapcad a more secure option than openscadpy? I’m just trying to figure out if that point is a consideration for us or if that was just an opportunity for a bit of name calling (which would seem strange since the script kiddies working on that seem to include Marius and Clifford, according to the project’s github checkins)

    1. Firstly no, this is not name calling. The point I was trying to make is that openscadpy combines the power of python into a language like openscad. Typically RapCAD and Openscad scripts are safe as they are mearly a scene descriptive languages, they have no power to modify files, implant viruses, steal passwords, or anything else that a python program could potentially do. Usually you would take an evaluated risk when using any python script, you might trust the author, or you might read over the scripts source to decide if its malicious or not. Since RapCAD and OpenSCAD are not general purpose programming languages the possibility to have a malicious intent within the script is not viable. The “script kiddy” in this post does not refer to a known person such as marius, clifford, or any of the authors of openscadpy for that matter, it refers to a malicious author of a python based scene description intended to be used with openscadpy.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s