Convert ball-stick model to STL from the command line 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.
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 —

ball,0,0,0
ball,100,0,0
stick,50,0,0,100,0,90,0


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

import &lt;ball-and-stick-definitions.scad&gt;
ball(0,0,0);
ball(100,0,0);
stick(50,0,0,100,0,90,0);


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.