STL files and Fortran

Radiolaria-cad-550x557 For me, Stl files came into existence via solidworks.

For passing solidworks files from my lab to the machining department, we had to export the solidworks model to stl file formats.

That was it. After that i had no contact with them until this year when I again got some stl models. I was using meshlab to read and view them. Then one boring day decided to see what was inside these files. That enquiry resulted into a small project and the following program is the result of that project.

Binary stl file reader in Fortran.
There are many programs available to read stl files, some in matlab, some in c but there wasn’t any available in fortran. I found one fortran stl file reader but that only worked for ASCII stl files.

Thus began this project to read the binary stl files via fortran. After multiple visits to wikipedia, and endless hours of debugging, I have the complete fortran program to read binary stl file.

So here’s the result.

Fortran STL file reader

 

program stlread

! Program to Read Binary STL file.
! programmed by Sukhbinder Singh
! stores normals and the triangles in the normals and triangles arrays.
!
! 23rd May 2011

real*4 n(3),x1(3),x2(3),x3(3)
integer*2 padding
integer*4 ntri,iunit,irc
character(len=80) title, filename
double precision, allocatable :: normals(:,:),triangles(:,:)

filename=”C:\Documents and Settings\sukhbinder\Desktop\projects\stlbinaryread\sample.stl”

iunit=13

open(unit=iunit,file=filename,status=’old’,form=’unformatted’, &
& access=’direct’,recl=80)

read(iunit,rec=1)title
close(iunit,status=’keep’)

open(unit=iunit,file=filename,status=’old’,form=’unformatted’, &
& access=’direct’,recl=4)

read(iunit,rec=21)ntri
close(iunit,status=’keep’)

open(unit=iunit,file=filename,status=’old’,form=’unformatted’, &
& access=’direct’,recl=2)
irc=(80+4)/2+1

allocate(normals(3,ntri))
allocate(triangles(3,ntri*3))

k=1
do i=1,ntri
call readbin(iunit,n(1),irc)
call readbin(iunit,n(2),irc)
call readbin(iunit,n(3),irc)

call readbin(iunit,x1(1),irc)
call readbin(iunit,x1(2),irc)
call readbin(iunit,x1(2),irc)

call readbin(iunit,x2(1),irc)
call readbin(iunit,x2(2),irc)
call readbin(iunit,x2(3),irc)

call readbin(iunit,x3(1),irc)
call readbin(iunit,x3(2),irc)
call readbin(iunit,x3(3),irc)

normals(1,i)=n(1)
normals(2,i)=n(2)
normals(3,i)=n(3)

triangles(1,k)=x1(1)
triangles(2,k)=x1(2)
triangles(3,k)=x1(3)

triangles(1,k+1)=x2(1)
triangles(2,k+1)=x2(2)
triangles(3,k+1)=x2(3)
triangles(1,k+2)=x3(1)
triangles(2,k+2)=x3(2)
triangles(3,k+2)=x3(3)

k=k+3
read(iunit,rec=irc)padding
irc=irc+1
end do

write(*,*) trim(filename),’ has this title ‘,trim(title),’ and has’,ntri, ‘ triangles’
end program

subroutine readbin(iunit,a,irc)
real*4 a,b
integer*2 ib(2)
equivalence(b,ib)

read(iunit,rec=irc)ib(1)
irc=irc+1
read(iunit,rec=irc)ib(2)
irc=irc+1

a=b

end

About these ads

Tagged: , ,

4 thoughts on “STL files and Fortran

  1. [...] STL file reader in fortran [...]

  2. thomas January 11, 2012 at 8:26 pm Reply

    Hi Sukhbinder, your contribution here is amazing.I cannot get my data from a solidwork stl appear correctly however. My suspecion is that perhaps because the solidwork file was made on a 64 bits machine, and I am running your fortran on a 32 bits laptop, the error appears. What do you think? Can this be the source to my frustration?

    All the best
    Thomas

    • sukhbinder January 12, 2012 at 2:39 pm Reply

      Thanks Thomas. I don’t think 64 bit or 32bit should be an issue. During this weekend I will give it a check.

      Can you by any chance upload a similar model for me to test in my laptop.

      Cheers

  3. [...] the post STL files and fortran, I posted a fortran binary stl file reader [...]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 809 other followers

%d bloggers like this: