Customizable shipping container
This is a customizable parametric international shipping container. I needed this for some architectural modeling and made it as customizable as possible.
The model supports containers of different dimensions, different container and wall styles, different forms of assembly, as well as some supplemental architectural features, such as windows and interior walls.
It builds on an earlier model by gudnyboyz, from which it inherits the architectural features such as windows, internal walls and text. I completely rewrote the geometry, wall styles, infill and parts placement, added some finer geometry such as frame bars and ISO1161 corner castings, and made it customizable.
The reference version of the script is maintained on Github at https://github.com/phrxmd/container..
Usage
Use the customizer to generate the kind of container you want, which gives you a fair amount of customization. Or download the script into OpenSCAD for additional customization, such as architectural features like windows, internal walls, inscribed text, or cutaway side panels.
Some of the easily accessibly customization features include:
- Dimensions: length, width and height)
- Scale - standard is 1:100, set to 1:87 for H0 scale, 1:160 for N scale
- Thickness of walls in the model, so that it is scale-independent
- Wall style: flat, corrugated, doors, or no walls at all
- Fill style: hollow or solid box, tanktainer or internal architectural walls
- Assembly style: a box, a box with a separate lid, or parts that can be glued together
Basic customization
The script generates a standard shipping container with a frame and ISO
1161 corner castings. Most aspects of the container's appearance, such
as the container size and the wall styles, can be customized by changing
single variables in the script.
Measurements
The measurements of the container are specified by
CONTAINER_LENGTH = 6.06;CONTAINER_WIDTH = 2.44;CONTAINER_HEIGHT = 2.59;SCALE = 100;WALL_THICKNESS = 1.5;INTERNAL_WALL_THICKNESS = 1.5;ASSEMBLY_TOLERANCE = 0.1;Here, the first four measurements refer to the container dimensions and
the scale:
CONTAINER_LENGTH: Length of the container (in m). Standard lengths are
6.06 for a 20', 12.19 for a 40' container.CONTAINER_WIDTH: Width of the container (in m). The standard width is
2.44.CONTAINER_HEIGHT: Height of the container (in m). Standard heights are
2.59, or 2.90 for a High Cube container.SCALE: The scale of the model. Standard is 100, tcommon scales
would be 87 for H0 scale, 160 for N scale and so on.
The other settings refer to the generated model:
WALL_THICKNESS: The thickness of the container's external walls
(in mm).INTERNAL_WALL_THICKNESS: The thickness of the container's internal
walls (in mm). For placing internal walls, see "Architectural
features" below.ASSEMBLY_TOLERANCE: The tolerance between wall parts when generated as
separate parts. By default this is 0.1 mm.
Styles
The look of the container is determined by a set of style directives:
FRONT_WALL_STYLE="door";BACK_WALL_STYLE="ridges";RIGHT_WALL_STYLE="ridges";LEFT_WALL_STYLE="ridges";TOP_COVER_STYLE="ridges";BOTTOM_COVER_STYLE="flat";CONTAINER_INFILL_STYLE="walls";Wall styles
All walls support the following styles:
"none": generates an empty wall that consists only of the
container frame."flat": generates a flat wall without ridges."ridges": generates a corrugated wall with ridges.The front and back walls (
FRONT_WALL_STYLE,BACK_WALL_STYLE) additionally
support the following style:"door": generates a simple door that is inset somewhat and has
a few ridges, hinges, a center divider and a horizontal latch.
The bottom cover (
BOTTOM_COVER_STYLE) additionally supports the
following style:"crossbars": generates a container bottom with a few wide
crossbars.
Fill styles
The Fill style (CONTAINER_INFILL_STYLE) determines the container's interior.
Currently there are the following fill styles:
"none": generates a hollow, empty container."infill": generates a solid container that is easy to print as a
single object without overhangs."walls": generates a hollow container with walls placed on the
inside (see "Architectural features" below)."tank": generates a tanktainer with a single tank on the inside.
Most useful with the walls set to"none".
Assembly
The container can be generated as a solid object or disassembled into
several pieces. This is governed by the assembly style directive:
ASSEMBLY_STYLE = "parts";DISTANCE_BETWEEN_PARTS = 3; Currently the following assembly styles are supported:
"box": generates the container as a single box"lid": generates the container as a box, and places the top cover
separately"parts": generates all walls separately, face up, except the
bottom, which will be generated in place. This makes it easy to
print interior walls, but it also means that a container bottom with
ridges can be hard to print."faceup": generates all walls separately, face up. This assembly
style means that interior walls cannot be placed, as they would
extend below the Z plane. They will be ignored."facedown": generates all walls separately, face down."custom": custom placement for every part, see below.
All wall parts are generated with 45° edges in order to make it easier
to assemble the container.
The part distance DISTANCE_BETWEEN_PARTS (in mm) specifies the distance between the
disassembled parts.
Custom assembly
If the standard assembly styles are not flexible enough (e.g. if you
have a window in a single wall that needs to be placed upside down for
printing without supports), you can customize the placement for all
walls individually:
CUSTOM_FRONT_WALL_PLACEMENT = "faceup";CUSTOM_BACK_WALL_PLACEMENT = "faceup";CUSTOM_LEFT_WALL_PLACEMENT = "facedown";CUSTOM_RIGHT_WALL_PLACEMENT = "faceup";CUSTOM_TOP_COVER_PLACEMENT = "inplace";CUSTOM_BOTTOM_COVER_PLACEMENT = "inplace"; // inplace = facedownThere are three placement options for each wall:
"inplace": generates the wall in place"faceup": generates the wall face down. This means it can be
printed on the flat back side, with 45° overhangs (and some extra
overhangs for the frame parts)"facedown": generates the wall in place. This means that it needs
to be printed on the ridged front side. This may be useful in some
cases to avoid overhangs.
Note that there is no sanity check. It's easy to generate a container
with all side walls placed separately, but with the top generated"inplace" and hanging in the air.
Advanced customization
Architectural features
Advanced architectural features, such as openings, windows, interior
walls or text, can be placed individually.
In order to define such architectural features, find the FEATURES = [
list and add your desired features in there.
Whether architectural features are placed or not can be controlled
separately. Placement of windows (including openings) and interior and
exterior text can be controlled using the dedicated variables:
PLACE_WINDOWS = false;PLACE_TEXT_INT = false;PLACE_TEXT_EXT = true;The placement of interior walls is enabled by setting the fill style of
the container to "walls".
Openings
An opening is a hole in the container from floor to ceiling, essentially
a missing section of wall.
Example:
opening(wall=RIGHT, x=0.5, width=4)Here:
wall: the wall you want the opening on:RIGHT,LEFT,FRONT,BACKx: the position (in m) where the opening startswidth: the width (in m) of the opening
Windows
A window is a smaller opening in a container wall with a frame. Note
that window frames stick out at 90° angles, so they need some care when
3D-printing. Containers with windows are easier to print as separate
walls (using the "parts" assembly directive).
Example:
window(wall=LEFT, x=0.75, y=0.8, width=1.8, height=1.7)Here:
wall: the side you want the window on:RIGHT,LEFT,FRONT,BACKx: the position (in m) to start the windowy: the height off the ground (in m) of the windowwidth: the width (in m) of the windowheight: the height (in m) of the window
Note that there is no sanity check of the window's dimensions, so you
need to take care that your windows are not higher or wider than the
container wall.
Walls
Walls are placed internally in the container. Walls can be either be
placed lengthwise (in X direction) or across (in Y direction).
Example:
wall(dir="x", x=1, y=1.2, length=1.5)Here:
dir: the direction of the wall:"x","y"x: the position (in m) to start the wally: the position (in m) to start the walllength: the length (in m) of the wall
Interior text
Interior text is embedded in the floor of the container in the inside.
So far it can be placed only in X direction.
Example:
text_int(text="Robe", x=0.25, y=2.1, size=6)text: the text to show (keep it short!)x: the position (in m) to start the texty: the position (in m) to start the textsize: the text font size. For the font, Arial is used by default.
Exterior text
Exterior text is embedded in the floor of the container on the outside.
This makes most sense with the "flat" bottom style, as other bottom
styles will interfere with the text. So far it can be placed only in X
direction.
Example:
text_ext(text=str("1:",SCALE), x=0.25, y=2.1, size=6)text: the text to show (keep it short!). In the example, this
prints the scale of the model into the bottom, using the OpenSCADstr()functionx: the position (in m) to start the texty: the position (in m) to start the text +=size=: the text font
size. For the font, Arial is used by default.
Other customizable dimensions
Most dimensions of the container are specified through variables and can
be customized. Note that it is easy to break the model in this way.
Some of the more useful customization options specify the dimensions of
the container frame, and the orientation of the side panels and walls to
the container frame:
FRAME_THICKNESS = 0.10: Dimension of the container frame (in m).
The default assumes 10 cm or 4x4" bars.FRAME_INSET_X = 0.02: Offset of the vertical frame bars in X
direction (in m), default: 2 cm.FRAME_INSET_Y = 0.02: Offset of the vertical frame bars in X
direction (in m), default 2 cm.TOP_INSET = 0.02: Offset of the top panel below the top frame (in
m), default 2 cm.SIDE_INSET = 0.03: Offset of the side panels towards the inside of
the container (in m), default 3 cm.
The defaults look good in a model. However, they can make the container
hard to print when the side panels or frame parts are printed on the
side. In those cases, it may be preferable to set them to 0.
Todo
Here are some of things that could be supported in the future:
- Support rotation of text
- More realistic corner placement for very long containers (45' and
53'), which have corner castings also along the bars - Wall ridges at 90° angles look OK in the model, but customizable angles would be better
- Forklift holes for 20' containers (in both X and Y direction)
- More different door styles, e.g. a simple door that prints well at
small scales, or a more complex door that has more realistic
latches.