Skip to content
Browse files

Add version 0.95 from upstream

  • Loading branch information
Anthony D. Martin authored and hroncok committed Oct 22, 2013
0 parents commit 989046217f74e55072c96f8e50572aee592abb76
Showing with 6,584 additions and 0 deletions.
  1. +475 −0 ADMESH.DOC
  2. +339 −0 COPYING
  3. +42 −0 ChangeLog
  4. +19 −0 INSTALL
  5. +21 −0
  6. +105 −0 README
  7. +517 −0 admesh.c
  8. +86 −0 block.stl
  9. +752 −0 configure
  10. +30 −0
  11. +1,123 −0 connect.c
  12. +762 −0 getopt.c
  13. +129 −0 getopt.h
  14. +180 −0 getopt1.c
  15. +391 −0 normals.c
  16. +242 −0 shared.c
  17. +173 −0 stl.h
  18. +466 −0 stl_io.c
  19. +360 −0 stlinit.c
  20. +372 −0 util.c

Large diffs are not rendered by default.


Large diffs are not rendered by default.

@@ -0,0 +1,42 @@
Tue Aug 1 03:25:46 PDT 1995 Anthony Martin <>

* Fix it so that big endian systems write a little endian file
Also, write null characters after the label in stl_write_binary

Tue Aug 1 03:25:46 PDT 1995 Anthony Martin <>

* Change stl_fill_holes so that duplicate facets are not likely
to be generated. Should improve quality of filled holes.

Wed Aug 2 16:56:03 PDT 1995 Anthony Martin <>

* Add support for generating shared vertices
* Move fclose(stl->fp) to stl_open()

Tue Oct 31 13:56:25 PST 1995 Anthony Martin <>

* Don't use area any more to see whether or not the normal should
be calculated. Just go ahead and calculate the normal, and let the
code in stl_normalize vector() take care of the case of a normal
with zero area.
* Changes call to stl_check_normal_vector() in stl_add_facet() so
that it doesn't check the normal vector after it adds it. Just
caused accounting error for normals fixed.

Wed Nov 1 08:39:17 PST 1995 Anthony Martin <>
* Initialize normal vector to 0,0,0 when a new facet is added.

Sat Jan 20 23:43:01 PST 1996 Anthony Martin <>
* stlinit.c Initialize pointers to NULL. Check whether they have
been allocated before free()ing them. Duh.

Thu Jan 25 16:02:57 PST 1996 Anthony Martin <>
* shared.c Add fclose(fp); to stl_write_off().
* stl_io.c Add dxf write capability
* shared.c Add vrml write capability

Fri Jul 26 11:31:50 PDT 1996 Anthony Martin <>
* Update normals after rotation
* Add code to calculate the volume of the part

@@ -0,0 +1,19 @@
To install ADMesh, you will need a system with a c compiler.
Do the following:

1. Get the file admesh-0.95.tar.gz
2. Extract the archive. i.e. type something like the following:
tar -zxvf admesh-0.95.tar.gz
or if that doesn't work, try the following:
cat admesh-0.95.tar.gz | gzip -d | tar xvf -
The source files will be extracted into a directory called admesh-0.95
3. cd admesh-0.95
4. type the following:

That should do it. You should have an executable file called admesh. There
is only the one stand-alone executable and there are no configuration files
or environment variables to be set. I don't believe that that the included
configure script will run under MS-DOS or Windows, so you will need to edit
the included file by hand to compile it.
@@ -0,0 +1,21 @@
#! /bin/sh

SHELL = /bin/sh
CC = @CC@
CFLAGS = -I@srcdir@ @CFLAGS@
.SUFFIXES: .c .o

OBJ = admesh.o connect.o stl_io.o stlinit.o util.o normals.o shared.o @LIBOBJS@

all: @srcdir@/configure $(OBJ)
$(CC) @LDFLAGS@ -o admesh $(OBJ) @LIBS@

rm -f $(OBJ) admesh core admesh.core core.admesh
rm -f config.h config.log config.status\
config.cache Makefile

@@ -0,0 +1,105 @@
ADMesh version 0.95

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.


* 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.95 =================
Input file : sphere.stl
File type : Binary STL file
Header : Processed by ADMesh version 0.95
============== 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)

There are a few features that are "missing" from ADMesh but that might be
added in the future. These include:
* Display capability
* Slicing
* Splitting a file into smaller files

ADMesh is free but Copyrighted software. It is distributed under the terms
of the GNU General Public License (GPL). It is NOT in the public domain and
its source code cannot be used in commercial software. Details of the GPL
are in the file COPYING that comes with the ADMesh software package.

ADMesh can be obtained via http from:
or visit my home page at:

Send questions, comments, suggestions, etc. to me at the following address.
Anthony D. Martin

0 comments on commit 9890462

Please sign in to comment.
You can’t perform that action at this time.