Skip to content
CLI and C library for processing triangulated solid meshes
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Fix big-endian binary stl reading (#26) Apr 12, 2018
.gitignore Include generated doc in doc as well Jul 20, 2014
.travis.yml Travis: Run CI on Mac OS X and clang Mar 29, 2016
ChangeLog.old Create automake rules so we actually build. Oct 22, 2013
INSTALL Generate nicer ChangeLog Jul 20, 2014 Fix version in README Mar 20, 2017
SYSTEM.xml Add XML files for abi-compliance-checker Jul 10, 2014
admesh-doc.txt Renamed ADMESH.DOC to avoid confusion by file extension Oct 22, 2013
admesh.1 Propred content for the manpage Oct 22, 2013 modified to work with os x 10.9 Sep 16, 2014
block.stl Add version 0.95 from upstream Oct 22, 2013 Bump version to 0.99.0dev Mar 20, 2017 Update the fortag script to sort the tags by date Jul 29, 2014 Provide libadmesh for linking purposes. Oct 22, 2013

About this release and repository:

ADMesh was released as an application in 1995/96. Not much happened since then. As the code of this project might bring use for others, this "fork" was created to provide a shared library. Once done that, I've collected lots of bugfixes from the world around us.

No further development will be done, but bugs will be resolved, if possible.

Don't patch this project downstream but use this code, so all can benefit from the changes. Pull requests are welcome, but be sure to generate no warnings.

Grab the 0.98.3 tarball:

About ADMesh:

ADMesh is a program for processing triangulated solid meshes. Currently, ADMesh only reads the STL file format that is used for rapid prototyping applications, although it can write STL, VRML, OFF, and DXF files.

Additional information regarding the underlying algorithms of ADMesh can be found in Anthony Martin's Masters Thesis available from here:


  • Read and write binary and ASCII STL files
  • Check STL files for flaws (i.e. unconnected facets, bad normals)
  • Repair facets by connecting nearby facets that are within a given tolerance
  • Fill holes in the mesh by adding facets.
  • Repair normal directions (i.e. facets should be CCW)
  • Repair normal values (i.e. should be perpendicular to facet with length=1)
  • Remove degenerate facets (i.e. facets with 2 or more vertices equal)
  • Translate in x, y, and z directions
  • Rotate about the x, y, and z axes
  • Mirror about the xy, yz, and xz planes
  • Scale the part by a factor
  • Merge 2 STL files into one
  • Write an OFF file
  • Write a VRML file
  • Write a DXF file
  • Calculate the volume of a part

ADMesh outputs the following statistics after processing:

================= Results produced by ADMesh version 0.98.3 =================
Input file         : sphere.stl
File type          : Binary STL file
Header             : Processed by ADMesh version 0.98.3
============== Size ==============
Min X = -1.334557, Max X = 1.370952
Min Y = -1.377953, Max Y = 1.377230
Min Z = -1.373225, Max Z = 1.242838
========= Facet Status ========== Original ============ Final ====
Number of facets                 :  3656                3656
Facets with 1 disconnected edge  :    18                   0
Facets with 2 disconnected edges :     3                   0
Facets with 3 disconnected edges :     0                   0
Total disconnected facets        :    21                   0
=== Processing Statistics ===     ===== Other Statistics =====
Number of parts       :     1        Volume   :  10.889216
Degenerate facets     :     0
Edges fixed           :    24
Facets removed        :     0
Facets added          :     0
Facets reversed       :     0
Backwards edges       :     0
Normals fixed         :     0

There are two different algorithms used for fixing unconnected facets. The first algorithm finds an unconnected edge, and then checks nearby within a given tolerance for another unconnected edge. It then fixes edges within tolerance. Some meshes can be completely fixed just using this method. If there are still unconnected facets after this "nearby check" has been done, then a second algorithm is used. This algorithm just fills any holes in the mesh by adding facets until all of the holes are filled. Using these two algorithms, almost any imperfect STL file can be "fixed" 100% so that there are 0 unconnected facets. Whether the resulting mesh is what you really want is another question since there is no way for ADMesh to add information that isn't there.

At this point ADMesh is only command-line driven and has no windowing capabilities. This should make it extremely easy to port to any UNIX-like system, and it shouldn't have any problems compiling on Windows NT, and some people have had success compiling it under DOS or Windows using DJGPP.

ADMesh was developed on a 486/66 with 16Mb running the Linux operating system. It has also been compiled and run on the following systems: SunOS 4.1.3 IRIX 5.2 Please let me know about successes or failures with other systems.

On my Linux system with 16Mb of memory, I can easily process files that have up to about 200,000 facets. Files larger than this can be processed, but the system begins to slow down significantly due to swapping. A system with more memory will be able to process greater numbers of facets more easily. Following are some indications of process times:

  • 40,000 facets: 10 seconds
  • 80,000 facets: 20 seconds
  • 160,000 facets: 50 seconds
  • 320,000 facets: 13 minutes (heavy swapping occurred)

Note that those times were calculated around 1996.

ADMesh is free but copyrighted software. It is distributed under the terms of the GNU General Public License (GPL). Details of the GPL are in the file COPYING that comes with the ADMesh software package.

You can’t perform that action at this time.