There are several free 3D modeling tools available, including Blender and the ubiquitous Google Sketchup, but each has the advantages and drawbacks. Some are designed to produce viewable or artistic 3D scenes, rather than 3D objects. These are often usable for designing 3D printable objects, but they are not optimized for engineering of solid machine components. One tool that is, however, is OpenSCAD.
OpenSCAD is an open source tool, free for use on a variety of computing platforms. OpenSCAD's interface is quite different from other modeling tools in that it doesn't use a "what you see is what you get" approach. Instead it's based on scripts.
To design an object in OpenSCAD you essentially write a "program" that defines the underlying 3D extrusions, sizings or rotations one by one. The scripts also include typical software commands, such as loops and conditionals, which when assembled correctly lead to the definition of the final object.
OpenSCAD reads your script and "compiles" it into a 3D model file, which can then be shared, printed, etc. While OpenSCAD is able to use and manipulate 3D primitive objects, such as boxes, spheres, etc. A key aspect of OpenSCAD is its ability to read two-dimensional DXF files (commonly used for component design) and extrude them using script commands. By reprogramming a script, it is possible to resize or reshape objects in ways that would be tricky using conventional 3D software interfaces.
Written by Clifford Wolf, OpenSCAD's new maintainer is Marius Kintel, who's calling on volunteers to assist in improving OpenSCAD:
we want to open up OpenSCAD development and try to build a more vibrant developer community. Therefore, I'm boldly asking the user community if there are anyone out there who wants to get their hands dirty and help out making OpenSCAD a better piece of software.
OpenSCAD might not be for you, but it is very useful for its intended purpose.