standard logo    Personal Education


Sea Captain

We love to visit Boothbay Harbor, Maine and stay at Brown's Wharf on the east side of the harbor with a beautiful view of the "downtown" across the water. A person could sit on the balcony for hours, watching the working lobster boats and, at night, watching the lights on the water. The Boothbay area has many more things to see and do, but the sunsets are worth the trip.

There's a huge statue of a sea captain with his right hand holding a pipe to his mouth standing by the sign to the motel/marina. The nautical theme is carried over into the restaurant and even into the guest rooms, including the lamp on the desk. Of course, the lamp is much smaller than the statue.


Here's my take of a generic sea captain. It's much smaller than the lamp, too.

The first version turned out to be too stubby, and I didn't print it. That was version00. Version01 pleased me quite a bit, but throughout the whole sequence of adding body parts, I had been thinking about and adding the little details along the way like the jacket flap and buttons which is just a tilted rectangle with a set of cylinders along it. Though I printed version01, I used Cura's scaling ability to print it half size, saving time and filament. After a long look, I wasn't happy with the face, feeling the nose was too small and the face too "bland", with eyes that seemed to me to bug out.

stubby tall


Fortunately, there are OpenSCAD methods which let me move forward in steps without printing the whole figure each time I updated. I converted the sequence of instructions which make up the head into a module. Then I temporarily added a cone for support and printed a couple of successive versions of the head by itself. Version02 was an attempt to just inset the eyes as is sometimes done in classical Greek statues, but I clearly overdid it. Version03, where we are at this point, has eyeballs set into the sockets as well as some "cheekbones" giving the face more character, I think.

Modules can be created individually and executed as needed. A module can also be created which contains other modules. In this project, the hand is a module which includes the finger module. The hand and rope coil modules are included within the body module, as well.

Another issue popped up because I wanted to see all the details in context. At the regular size, I was only able to see up to the knee level. It is possible to make the view smaller, but that made details harder to examine, and I still needed to tilt the captain around which obscured the details I wanted to see. A bit of a search revealed that OpenSCAD has a variable which can be used to adjust the vertical position of the viewport. Normally, the viewport centers on the point where the three axis lines meet. The variable $vpt defaults to [0,0,0] so that the view centered at the axis crossover point even if you do not include it in your code. In order to look at the face full size in context with the body, adding the $vpt command, meant I could set the vertical (z) value (by trial and error) until I could look straight at the face. It is still possible to use the mouse to rotate the viewing angle, up, down, left and right.

You can see the viewport status in the status line at the bottom of the OpenSCAD window. The image shown here is the default viewport settings.


Once the viewport has been adjusted with the $vpt variable, the viewport stays where you set it for subsequent preview redraws with <F5>. Removing the command or commenting it out continues to show previews at the adjusted viewport, not back at the axis intersection. However, clicking the reset icon below the preview frame goes back to the default viewport size and angle.



adjusted z value=120
waist view - z adjustment 60
default viewport - z value 0

$vpt=[0,0,120]; // adjust viewport to see upper section by adding to z value.

For my situation, setting the z viewport value to 120 gave me the ability to look at the face details at full size or even larger. Though it isn't important in this project, a wide design could be examined by adjusting the x value. A deep (front to back) design would benefit from setting the y value appropriately. Setting the z value to 60, lets me look at the hands, arms and rope coil.

There were also a couple of other times modules came in handy. Both the rope coil and the hands were developed separately and then repositioned when being added to the main design file for the sea captain.

// each coil is a calculated circle composed of 2mm spheres
// adjusted to be overlapping with slightly different size loops
module rope(){


The separate hand design was, like the rope, incorporated into the main file. There is only one original hand, the right one. The left hand was done using mirror(). Note that the mirror command just reverses the original object, horizontally by default, not leaving the un-flipped original visible, just the reversed version. That means the right hand is just invoked with hand(): while the left hand is mirror() {hand();} (with appropriate positioning using translate and rotate).

This figurine is complex and it took a long time to do the final render <F6>, over half an hour. I didn't accurately time it. The OpenSCAD program fully occupied one of the cores of my four-core CPU during the final render. I confirmed that the rope coils took most of the time. When I commented out the rope coil code, the render was under four minutes. For() loops apparently take a long time to calculate during the render.

I really like the rope, so I read tweets and caught up on some email while the fan whirred to keep the laptop cool. The sea captain printed on my Lulzbot Mini printer without needing any support structure, taking almost six hours to print at full size (15.5cm tall) with the beginner level 20% infill. I have not fiddled with advanced Cura settings too much. Depending on your printer and skills, "your mileage may vary".

Available Files:

captain03.scad - so you can get the full details of the design and fix the mistakes!
captain03.stl - for you salty tars who just want to get printing (large file: 34.44 megabytes)
GPL3 License