C
C Program to convert GOCAD triangulated surfaces into a file with points
C and a file with triangles
C
C Version: 5.50
C Date: 2000, July 17
C
C Coded by: Ludek Klimes
C Department of Geophysics, Charles University Prague,
C Ke Karlovu 3, 121 16 Praha 2, Czech Republic,
C E-mail: klimes@seis.karlov.mff.cuni.cz
C
C.......................................................................
C
C Description of data files:
C
C Input data read from the standard input device (*):
C The data are read by the list directed input (free format) and
C consist of a single string 'SEP':
C 'SEP'...String in apostrophes containing the name of the input
C SEP parameter or history file with the input data.
C No default, 'SEP' must be specified and cannot be blank.
C
C
C Input data file 'SEP':
C File 'SEP' has the form of the SEP
C parameter file. The parameters, which do not differ from their
C defaults, need not be specified in file 'SEP'.
C Data specifying input files:
C TSURF='string'... Name of the file with GOCAD triangulated surfaces.
C Description of file TSURF
C No default, TSURF must be specified.
C Data specifying output files:
C VRTX='string'... Name of the file with vertices of the polygons.
C If the filename is blank, the file is not generated.
C Description of file VRTX
C Default: VRTX='vrtx.out'
C PLGNS='string'... Name of the file describing the triangles.
C If the filename is blank, the file is not generated.
C Description of file PLGNS
C Default: PLGNS='trgl.out'
C Optional data to shift the triangles:
C SHIFT1=real, SHIFT2=real, SHIFT3=real... All triangle vertices
C will be shifted by vector (SHIFT1,SHIFT2,SHIFT3).
C SHIFT1=0., SHIFT2=0., SHIFT3=0.
C
C
C Input file TSURF with the GOCAD triangulated surfaces:
C The file consists of lines (1) and lines (2):
C For each vertex:
C (1) VRTX,NAME,X1,X2,X3
C VRTX... String VRTX without apostrophes.
C NAME... Index of the vertex (integer).
C X1,X2,X3... Coordinates of the vertex.
C For each triangle:
C (2) TRGL,NAME1,NAME2,NAME3
C TRGL... String TRGL without apostrophes.
C NAME1,NAME2,NAME3... Indices of the vertices of the triangle
C (integers).
C
C
C Output file VRTX with the vertices:
C (1) / (a slash)
C (2) For each vertex data (2.1):
C (2.1) 'NAME',X1,X2,X3,/
C 'NAME'..Name of the vertex. String in apostrophes containing
C the index of the vertex.
C X1,X2,X3... Coordinates of the vertex.
C /... A slash.
C (3) / (a slash followed by a comment)
C (4) / (a slash followed by a comment)
C
C
C Output file PLGNS with the triangles:
C For each triangle data (1):
C (1) 'NAME1','NAME2','NAME3',/
C 'NAME1','NAME2','NAME3'... Names of the vertices. Strings in
C apostrophes containing the indices of the vertices.
C /... List of vertices is terminated by a slash.
C
C=======================================================================
C
CHARACTER*80 FILE,FVRTX,FTRGL
INTEGER LU1,LU2,LU3,LU4
PARAMETER (LU1=1,LU2=2,LU3=3,LU4=4)
CHARACTER*4 KEY
CHARACTER*76 LINE
CHARACTER*34 FORMAT
INTEGER I0,I1,I2,I3
REAL SHIFT1,SHIFT2,SHIFT3
REAL X(3),X1,X2,X3,X1MIN,X1MAX,X2MIN,X2MAX,X3MIN,X3MAX
EQUIVALENCE (X(1),X1),(X(2),X2),(X(3),X3)
C
C.......................................................................
C
C Reading main input data:
WRITE(*,'(A)') '+TSURF: Enter input filename: '
FILE=' '
READ (*,*) FILE
IF(FILE.EQ.' ') THEN
C TSURF-01
CALL ERROR('TSURF-01: No input file specified')
C Input file in the form of the SEP (Stanford Exploration Project)
C parameter or history file must be specified.
C There is no default filename.
END IF
WRITE(*,'(A)') '+TSURF: Working... '
C
C Opening input and output files:
CALL RSEP1(LU1,FILE)
CALL RSEP3T('TSURF',FILE ,' ')
IF(FILE.EQ.' ') THEN
C TSURF-02
CALL ERROR('TSURF-02: No GOCAD file specified')
C Input file TSURF with the GOCAD triangulated surfaces must be
C specified.
C There is no default filename.
END IF
CALL RSEP3T('VRTX' ,FVRTX,'vrtx.out')
CALL RSEP3T('PLGNS',FTRGL,'trgl.out')
OPEN(LU1,FILE=FILE,STATUS='OLD')
IF(FVRTX.NE.' ') THEN
OPEN(LU2,FILE=FVRTX)
WRITE(LU2,'(A)') '/'
END IF
IF(FTRGL.NE.' ') THEN
OPEN(LU3,FILE=FTRGL)
END IF
C
C Optional shift:
CALL RSEP3R('SHIFT1',SHIFT1,0.)
CALL RSEP3R('SHIFT2',SHIFT2,0.)
CALL RSEP3R('SHIFT3',SHIFT3,0.)
C
C Preparation for the loop over lines of the input GOCAD file
OPEN(LU4,STATUS='SCRATCH')
FORMAT(1:10)='(A,I6.6,A,'
NPTS=0
C
C Loop over lines of the input GOCAD file with the TSURF object
10 CONTINUE
READ(LU1,'(2A)',END=90) KEY,LINE
WRITE(LU4,'(A)') LINE
BACKSPACE(LU4)
IF(KEY.EQ.'VRTX') THEN
C Writing the vertex
IF(FVRTX.NE.' ') THEN
READ(LU4,*) I0,X1,X2,X3
X1=X1+SHIFT1
X2=X2+SHIFT2
X3=X3+SHIFT3
IF(NPTS.EQ.0) THEN
X1MIN=X1
X2MIN=X2
X3MIN=X3
X1MAX=X1
X2MAX=X2
X3MAX=X3
ELSE
X1MIN=AMIN1(X1,X1MIN)
X2MIN=AMIN1(X2,X2MIN)
X3MIN=AMIN1(X3,X3MIN)
X1MAX=AMAX1(X1,X1MAX)
X2MAX=AMAX1(X2,X2MAX)
X3MAX=AMAX1(X3,X3MAX)
END IF
NPTS=NPTS+1
CALL FORM2(3,X,X,FORMAT(11:34))
WRITE(LU2,FORMAT) '''',I0,''' ',X1,' ',X2,' ',X3,' /'
END IF
ELSE IF(KEY.EQ.'TRGL') THEN
C Writing the triangle
IF(FTRGL.NE.' ') THEN
READ(LU4,*) I1,I2,I3
WRITE(LU3,'(4(A,I6.6))')'''',I1,''' ''',I2,''' ''',I3,''' /'
END IF
ELSE
C TSURF-03
CALL ERROR('TSURF-03: Unexpected key string')
C Only key strings VRTX and TRGL may be used in the input GOCAD
C file.
END IF
GO TO 10
C
C Closing input and output files:
90 CONTINUE
CLOSE(LU1)
IF(FVRTX.NE.' ') THEN
FORMAT(1:10)='(A, '
X1=X1MIN
X2=X2MIN
X3=X3MIN
CALL FORM2(3,X,X,FORMAT(11:34))
WRITE(LU2,FORMAT) '/ Minimum coordinates: ',X1,' ',X2,' ',X3
X1=X1MAX
X2=X2MAX
X3=X3MAX
CALL FORM2(3,X,X,FORMAT(11:34))
WRITE(LU2,FORMAT) '/ Maximum coordinates: ',X1,' ',X2,' ',X3
CLOSE(LU2)
END IF
IF(FTRGL.NE.' ') THEN
CLOSE(LU3)
END IF
CLOSE(LU4)
WRITE(*,'(A)') '+TSURF: Done. '
STOP
END
C
C=======================================================================
C
INCLUDE 'error.for'
C error.for
INCLUDE 'sep.for'
C sep.for
INCLUDE 'forms.for'
C forms.for
INCLUDE 'length.for'
C length.for
C
C=======================================================================
C