I regularly have 3D models that consist of a Boolean union of balls and cylinders (molecule models, star maps, mathematical designs), that I then want to convert to a STL model for printing at Shapeways. But I don't know how to easily do that! I already have the model as a series of floating point numbers (four for each ball, and seven for each cylinder), so I don't want to have to go into a graphical interface to click/drag points. Instead I want to convert my lists of floating point numbers to STL from the command line.

I thought this would be a trivial thing, but I cannot find what is the best tool for this. All I need, I think, is a pointer to what tools are most appropriate (although more detailed help will be appreciated :-)) I thought that "gmsh" might be good for this, but it is not immediately clear to me how to use it for that.

I would like the software for this to be "free", in the sense that it does not cost money. Also, I am not a Windows user, so I would like to be able to run this under Linux or macOS.

  • $\begingroup$ Being naive, I asked this on the graphics design stackexchange, and was told to take it here. $\endgroup$ Dec 2 '19 at 11:16
  • 1
    $\begingroup$ Maybe probably perhaps OpenSCAD could use those points of yours. $\endgroup$
    – towe
    Dec 2 '19 at 11:47
  • $\begingroup$ That was the answer on the graphics design stackexchange: graphicdesign.stackexchange.com/questions/131653/… $\endgroup$ Dec 2 '19 at 14:12
  • $\begingroup$ I appreciate the upvote on the GD SE. If you find it acceptable, please click the check mark on that SE. Kevin Reid provided a good answer here and should also receive an upvote and an acceptance. I see no need to post my previously created answer here, especially as you've linked to it via the comment. $\endgroup$
    – fred_dot_u
    Dec 2 '19 at 21:05

I would suggest using OpenSCAD for this. OpenSCAD does not natively support reading data files that aren't 3D/2D models or images, but you can write a simple program to generate OpenSCAD code.

I would suggest first writing an OpenSCAD file that implements your chosen type of "ball" and "stick", perhaps like:

module ball(x, y, z) {
    translate([x, y, z]) 
        sphere(d=10, $fn=60);
module stick(x, y, z, length, rx, ry, rz) {
    translate([x, y, z]) 
    rotate([rx, ry, rz]) 
        cylinder(d=5, length=length, $fn=60, center=true);

Then, take your data file — let's suppose it's a CSV —


and convert it into OpenSCAD by adding the appropriate syntax (this could even be done using a basic find-and-replace tool):

import <ball-and-stick-definitions.scad>

Then, producing the STL is just a matter of running the openscad command on your generated OpenSCAD source code.

If your stick parameters are not Euler angles but "start point" and "end point" you'll have to add the "rotate to point at…" math yourself, but that is within OpenSCAD's capabilities as it has vector math operations and multmatrix, or trigonometry if you prefer to generate Euler angles; you don't need to do that math at the file-conversion stage.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.