[Brlcad-commits] CVS: brlcad/src/conv/patch .cvsignore,NONE,1.1 Makefile.am,NONE,1.1 patch-g.1,NONE,
Open Source Solid Modeling CAD
Brought to you by:
brlcad
Update of /cvsroot/brlcad/brlcad/src/conv/patch In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13556/src/conv/patch Added Files: .cvsignore Makefile.am patch-g.1 patch-g.c patch-g.h pull_comp.sh pull_solidsub.sh rpatch.1 rpatch.c rpatch.f Log Message: moved all the geometry converter directories from src/. to src/conv/. --- NEW FILE: .cvsignore --- patch-g rpatch --- NEW FILE: Makefile.am --- # $Id: Makefile.am,v 1.1 2005/10/27 03:36:04 brlcad Exp $ bin_PROGRAMS = \ patch-g \ rpatch patch_g_SOURCES = patch-g.c patch_g_LDADD = ${LIBRT} ${WDB} rpatch_SOURCES = rpatch.c noinst_HEADERS = patch-g.h man_MANS = patch-g.1 rpatch.1 EXTRA_DIST = \ $(man_MANS) \ pull_comp.sh \ pull_solidsub.sh \ rpatch.f MAINTAINERCLEANFILES = Makefile.in include $(top_srcdir)/misc/Makefile.defs FAST_OBJECTS = \ $(patch_g_OBJECTS) \ $(rpatch_OBJECTS) \ $(bin_PROGRAMS) --- NEW FILE: patch-g.1 --- .TH PATCH-G 1 BRL-CAD ./" P A T C H - G . 1 ./" BRL-CAD ./" ./" Copyright (c) 2005 United States Government as represented by ./" the U.S. Army Research Laboratory. ./" ./" This document is made available under the terms of the GNU Free ./" Documentation License or, at your option, under the terms of the ./" GNU General Public License as published by the Free Software ./" Foundation. Permission is granted to copy, distribute and/or ./" modify this document under the terms of the GNU Free Documentation ./" License, Version 1.2 or any later version published by the Free ./" Software Foundation; with no Invariant Sections, no Front-Cover ./" Texts, and no Back-Cover Texts. Permission is also granted to ./" redistribute this document under the terms of the GNU General ./" Public License; either version 2 of the License, or (at your ./" option) any later version. ./" ./" You should have received a copy of the GNU Free Documentation ./" License and/or the GNU General Public License along with this ./" document; see the file named COPYING for more information. ./" ./"./"./" .SH NAME patch\(hyg \- convert FASTGEN ASCII databases into binary MGED databases. .SH SYNOPSIS .B patch-g [options] output.g .SH DESCRIPTION This program converts FASTGEN geometry into BRL-CAD .IR mged (1) formats. FASTGEN is a modeling system used by the Air Force and Navy to create military target descriptions. FASTGEN databases consist of the following primitives which can be converted by .IR patch-g : polygons, plates, boxes, wedges, cylinders, spheres, and rods. It is recommended that .IR patch-g be run with the .B -p option for most uses. .PP .IR patch-g requires that the FASTGEN file be run through the pre-processor .IR rpatch. This is achieved by executing .IR rpatch < fastgen_file > file.rpatch . Once this step is executed, .IR patch-g can be used to convert the intermediate file into a binary .IR brlcad (1) ".g" file. .PP .IR patch-g will provide messages when encountering problems in the conversion of FASTGEN geometry. For further debugging information, the -d flag with levels 1-3 of debugging can be provided. .PP The available options are: .TP .B -T tolerance_distance The .IR tolerance_distance is specified in inches. Any two vertices within this distance from each other will be considered the same vertex. .TP .B -A perp_tolerance the .IR perp_tolerance is specified as the cosine of an angle (0.0 through 1.0). If the cosine of the angle between two vectors is less than the specified tolerance, then the vectors are considered perpendicular. .TP .B -x librt_debug_flag Specifies a flag for debugging the .IR librt package. .TP .B -X NMG_debug_flag Specifies a flag for NMG routine debugging. .TP .B -p Produce polysolid output rather than the default NMG solids. .TP .B -6 Convert plate-mode triangles using ARB6 solids. .TP .B -f preprocessed_input_file Use the specified file as the input for conversion. .TP .B -i labels_file Specifies desired group names to override defaults. .TP .B -m materials_file Specifies material properties to be assigned to components. .TP .B -a Process phantom armor. .TP .B -n Process volume mode as plate mode. .TP .B -t title Specifies a title for the output model. .TP .B -o top_level_name Specifies a name for the top level object (default is .B all ). .TP .B -r Reverse normals for plate mode triangles. .TP .B -c ``X Y Z'' Specifies centroid for some plate mode surface normal calulations. .TP .B -d debug_level Specifies a debug level (1-3). .SH EXAMPLE .I rpatch < fastgen_file > file.rpatch .br .I patch-g -p -f file.rpatch file.g .SH DIAGNOSTICS The diagnostics are intended to be self-explanatory. .SH SEE ALSO brlcad(1), mged(1) .SH AUTHOR Bill Mermagen, Jr. .SH SOURCE SECAD/VLD Computing Consortium, Bldg 394 .br The U. S. Army Ballistic Research Laboratory .br Aberdeen Proving Ground, MD 21005 .SH BUG REPORTS Reports of bugs or problems should be submitted via electronic mail to <de...@br...>. --- NEW FILE: patch-g.c --- /* P A T C H - G . C * BRL-CAD * * Copyright (C) 1989-2005 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this file; see the file named COPYING for more * information. [...4355 lines suppressed...] slist->outsolid = outsolid; slist->insolid = insolid; slist->inmirror = inmirror; slist->next = (struct subtract_list *)NULL; } else slist->next = add_to_list(slist->next,outsolid,insolid,inmirror); return( slist ); } /* * Local Variables: * mode: C * tab-width: 8 * c-basic-offset: 4 * indent-tabs-mode: t * End: * ex: shiftwidth=4 tabstop=8 */ --- NEW FILE: patch-g.h --- /* P A T C H - G . H * BRL-CAD * * Copyright (C) 2004-2005 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this file; see the file named COPYING for more * information. */ /** @file patch-g.h * */ struct input { fastf_t x, y, z; fastf_t rsurf_thick; int surf_type; int surf_thick; int spacecode; int cc; int ept[10]; int mirror; int vc; int prevsurf_type; char surf_mode; } in[10000]; struct patch_verts { struct vertex *vp; point_t coord; }; struct patch_faces { struct faceuse *fu; fastf_t thick; }; struct patches{ fastf_t x,y,z; int flag; fastf_t radius; int mirror; fastf_t thick; }; struct names{ char ug[16]; char lg[16]; int eqlos, matcode; } nm[9999]; struct subtract_list{ int outsolid, insolid, inmirror; struct subtract_list *next; }; point_t pt[4]; fastf_t vertice[5][3]; fastf_t first[5][3]; fastf_t normal[5][3]; point_t ce[4]; point_t centroid,Centroid; /* object, description centroids */ unsigned char rgb[3]; int debug = 0; float mmtin = 25.4; double conv_mm2in; fastf_t third = 0.333333333; /* char name[17]; */ char cname[17]; char tname[17]; char surf[2]; char thick[3]; char space[2]; int numobj = 0; int nflg = 1; int aflg = 1; /* use phantom armor */ int num_unions = 5; /* number of unions per region */ char *title = "Untitled MGED database"; /* database title */ char *top_level = "all"; /* top-level node name in the database */ int rev_norms = 0; /* reverse normals for plate mode triangles */ int polysolid = 0; /* convert triangle-facetted objects to polysolids */ int arb6 = 0; /* flag: convert plate-mode objects to arb6s */ mat_t m; char *patchfile; char *labelfile=NULL; char *matfile; #define MAX_THICKNESSES 500 /* Maximum number of different thicknesses for a single plate mode solid */ fastf_t thicks[MAX_THICKNESSES]; /* array of unique plate thicknesses */ int nthicks; /* number of unique plate thicknesses for a single plate mode solid */ struct patches list[15000]; fastf_t x[1500],y[1500],z[1500]; int mirror[1500]; fastf_t radius[1500]; fastf_t thk[1500]; struct wmember head; /* solids for current region */ struct wmember heada; /* for component,regions on one side */ struct wmember headb; /* for component,mirror regions */ struct wmember headc; /* second level grouping ? */ struct wmember headd; /* current thousand series group */ struct wmember heade; /* group containing everything */ struct wmember headf; /* check solids group */ /* * Local Variables: * mode: C * tab-width: 8 * c-basic-offset: 4 * indent-tabs-mode: t * End: * ex: shiftwidth=4 tabstop=8 */ --- NEW FILE: pull_comp.sh --- # Usage: pull_comp file component#(s) # This awk program pulls the selected component number(s) from the fastgen # file and prints the result on standard out. nawk ' BEGIN { while( getline < ARGV[1] ){ for( i=2; i<ARGC; i++ ){ if( (substr($0,32,4)+0) == ARGV[i] ) print $0 } } } ' $* # Local Variables: # mode: sh # tab-width: 8 # sh-indentation: 4 # sh-basic-offset: 4 # indent-tabs-mode: t # End: # ex: shiftwidth=4 tabstop=8 --- NEW FILE: pull_solidsub.sh --- # This is an awk program to go through a fastgen file and pull out all the # solid subtraction cases for the fastgen entities wedge,sphere,box, and # cylinder. The component number and the relevant part of that component # description are printed. nawk ' # inside_cyl: find out whether the second of the two cylinders from # comp[m] to comp[n] is inside the first. # We check to see that the origin of the second cylinder is inside the # first, that it is defined in the same direction as the first, and # that the magnitude of the height vector of the second is less than # that of the first. This does not check to see that the second does not # stick out of the first by having a short vector but being defined close # to the top of the first, nor does it check the radii of the cylinders. # Both of these would be easy to add. function inside_cyl(m,n) { for( m += 3; m < n; m += 3 ){ ax = substr(comp[m-3],1,8) ay = substr(comp[m-3],9,8) az = substr(comp[m-3],18,8) ax2 = substr(comp[m-2],1,8) ay2 = substr(comp[m-2],9,8) az2 = substr(comp[m-2],18,9) a_del[0] = ax2 - ax a_del[1] = ay2 - ay a_del[2] = az2 - az bx = substr(comp[m],1,8) by = substr(comp[m],9,8) bz = substr(comp[m],18,8) bx2 = substr(comp[m+1],1,8) by2 = substr(comp[m+1],9,8) bz2 = substr(comp[m+1],18,9) b_del[0] = bx2 - bx b_del[1] = by2 - by b_del[2] = bz2 - bz if( shorter( b_del, a_del ) && between(bx,ax,ax2) && between(by,ay,ay2) && between(bz,az,az2) ) return 1 else return 0 } } # shorter: returns 1 if (a dot b)/|a||b| == 1 and mag(a) <= mag(b), # 0 otherwise function shorter(a,b) { if( (amag=mag(a)) > (bmag=mag(b)) ) { return 0 } adotb = a[0]*b[0] + a[1]*b[1] + a[2]*b[2] cosab = adotb / ( amag * bmag ) if( cosab >= 0.9999 && cosab <= 1.0001 ) return 1 else return 0 } # mag: returns the magnitude of vector a function mag(a) { return sqrt( a[0]*a[0] + a[1]*a[1] + a[2]*a[2] ) } # between: returns 1 if a lies within the range from b to c inclusive of the # base but not of the top of the cylinder (we want to avoid # abutting cylinders), # 0 otherwise # b and c do not have to be in any order ( b and c are the base and top ) function between(a,b,c) { if( a == b && a == c ) return 1 else if( b <= c && a >= b && a < c ) return 1 else if( a > c && a <= b ) return 1 else return 0 } # abs: returns the absolute value of x function abs(x) { if( x >= 0 ) return x else return -x } # main loop { if( NR == 1 ) { comp[nl=1] = $0 prev_cc = substr($0,32,4) } else { comp[nl=1] = prev_line comp[++nl] = $0 } while( getline && ((cc=substr($0,32,4)) == prev_cc )) comp[++nl] = $0 prev_line = $0 prev_cc = substr($0,32,4) # now we can process this component number prev_stype = substr( comp[1],28,1 ) for( i=2 ; i <= nl ; i++ ) { if( prev_stype >= 5 && prev_stype <=8 ) { begini = i - 1 stype = substr( comp[i],28,1 ) while( i <= nl && stype == prev_stype ) { stype = substr(comp[i],28,1) i++ } if( prev_stype == 5 && (i - begini) > 4 ) { printf "component #%s - wedge\n",substr(comp[begini],32,4) for( j = begini; j < i; j++ ) printf "%s\n", comp[j] } else if( prev_stype == 6 && (i - begini) > 2 ) { printf "component #%s - sphere\n",substr(comp[begini],32,4) for( j = begini; j < i; j++ ) printf "%s\n", comp[j] } else if( prev_stype == 7 && (i - begini) > 4 ) { printf "component #%s - box\n",substr(comp[begini],32,4) for( j = begini; j < i; j++ ) printf "%s\n", comp[j] } else if( prev_stype == 8 && (i - begini) > 3 ) { if( inside_cyl( begini,i ) ) { printf "component #%s - cylinder\n",substr(comp[begini],32,4) for( j = begini; j < i; j++ ) printf "%s\n", comp[j] } } } prev_stype = substr( comp[i],28,1 ) } } ' $* # Local Variables: # mode: sh # tab-width: 8 # sh-indentation: 4 # sh-basic-offset: 4 # indent-tabs-mode: t # End: # ex: shiftwidth=4 tabstop=8 --- NEW FILE: rpatch.1 --- .TH RPATCH 1 BRL-CAD ./" R P A T C H . 1 ./" BRL-CAD ./" ./" Copyright (c) 2005 United States Government as represented by ./" the U.S. Army Research Laboratory. ./" ./" This document is made available under the terms of the GNU Free ./" Documentation License or, at your option, under the terms of the ./" GNU General Public License as published by the Free Software ./" Foundation. Permission is granted to copy, distribute and/or ./" modify this document under the terms of the GNU Free Documentation ./" License, Version 1.2 or any later version published by the Free ./" Software Foundation; with no Invariant Sections, no Front-Cover ./" Texts, and no Back-Cover Texts. Permission is also granted to ./" redistribute this document under the terms of the GNU General ./" Public License; either version 2 of the License, or (at your ./" option) any later version. ./" ./" You should have received a copy of the GNU Free Documentation ./" License and/or the GNU General Public License along with this ./" document; see the file named COPYING for more information. ./" ./"./"./" .SH NAME rpatch \- convert FASTGEN ASCII databases into a format suitable for .I patch-g. .SH SYNOPSIS .I rpatch [-D] [-3] < FASTGEN_FILE > OUTPUT_FILE .SH DESCRIPTION This program reformats FASTGEN files to a form usable by .I patch-g. The .I -D option handles type 3 components as donuts rather than triangles. The .I -3 option reads FASTGEN3 format files (coordinates are each 10 columns wide). .SH EXAMPLE .I rpatch < fastgen_file > file.rpatch .SH DIAGNOSTICS The diagnostics are intended to be self-explanatory. .SH SEE ALSO brlcad(1), mged(1), patch-g(1) .SH AUTHOR John R. Anderson .SH BUG REPORTS Reports of bugs or problems should be submitted via electronic mail to <de...@br...>. --- NEW FILE: rpatch.c --- /* R P A T C H . C * BRL-CAD * * Copyright (C) 2004-2005 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this file; see the file named COPYING for more * information. */ /** @file rpatch.c * * Front end to patch. * John R. Anderson * Based on rpatch.f by Bill Mermagen Jr. * This pre-processor program alters the data file format * for use by the main conversion program. */ #include "common.h" #include <stdio.h> #include <ctype.h> #include <math.h> #include <stdlib.h> #if defined HAVE_STRING_H #include <string.h> #else #include <strings.h> #endif #ifndef lint static const char RCSid[] = "@(#)$Header: /cvsroot/brlcad/brlcad/src/conv/patch/rpatch.c,v 1.1 2005/10/27 03:36:04 brlcad Exp $ (BRL)"; #endif #define MAXLINELEN 256 static char *usage="Usage:\n\trpatch [-D] [-3] < fastgen_input_file > file.rp\n\ where -D means that type 3 components are donuts (rather than triangles)\n\ and -3 indicates that the input is in FASTGEN3 format\n"; static int fast3; double get_ftn_float(char *str, unsigned int start_col, char *format) { char *ptr; char tmp_str[MAXLINELEN]; int width,precision; int leading_spaces=1; int i; /* Check that format is legal for floating point or double */ ptr = format; if( *ptr != 'F' && *ptr != 'f' && *ptr != 'E' && *ptr != 'e' && *ptr != 'D' && *ptr != 'd' ) { fprintf( stderr , "Get_ftn_float( str=%s\n, start_col=%d, format=%s )\n", str, start_col, ptr ); fprintf( stderr , "\tformat must be F, E, or D type\n" ); exit( 1 ); } /* if start column is beyond end of input string, return zero */ if( start_col >= strlen( str ) ) return( (double)0.0 ); /* get width from format spec */ ptr++; width = atoi( ptr ); /* make sure input string will fit in tmp_str (minus trailing NULL and a decimal point) */ if( width > MAXLINELEN-2 ) { fprintf( stderr , "Get_ftn_float( str=%s\n, start_col=%d, format=%s )\n", str, start_col, ptr ); fprintf( stderr , "\tfield width (%d) in format is too large. Max allowed is %d\n", width , MAXLINELEN-2 ); exit( 1 ); } /* copy the input string to tmp_str, converting * imbedded blanks to zeros and 'D' or 'd' to 'e' */ for( i=0 ; i<width ; i++ ) { if( isspace( str[start_col+i] ) ) { if( leading_spaces ) tmp_str[i] = ' '; else tmp_str[i] = '0'; } else if( str[start_col+i] == 'D' || str[start_col+i] == 'd' ) { leading_spaces = 0; tmp_str[i] = 'e'; } else { leading_spaces = 0; tmp_str[i] = str[start_col+i]; } } tmp_str[width] = '\0'; /* get precision from format spec */ ptr = strchr( ptr , '.' ); if( ptr ) precision = atoi( ++ptr ); else precision = 0; /* if there is a decimal point, let atof handle the rest (including exponent) */ if( !strchr( tmp_str , '.' ) && precision > 0 ) { /* insert a decimal point where needed */ for( i=0 ; i<precision ; i++ ) tmp_str[width-i] = tmp_str[width-i-1]; tmp_str[width-precision] = '.'; tmp_str[width+1] = '\0'; /* and atof can handle it from here */ } return( atof( tmp_str ) ); } int get_ftn_int(char *str, unsigned int start_col, char *format) { char *ptr; char tmp_str[MAXLINELEN]; int leading_spaces=1; int width; int i; /* check that format id for an integer */ ptr = format; if( *ptr != 'I' && *ptr != 'i' ) { fprintf( stderr , "Get_ftn_int( str=%s\n, start_col=%d, format=%s )\n", str, start_col, ptr ); fprintf( stderr , "\tformat must be I type\n" ); exit( 1 ); } /* if start column is beyond end of input string, return zero */ if( start_col >= strlen( str ) ) return( 0 ); /* get width from format spec */ ptr++; width = atoi( ptr ); /* make sure input string will fit in tmp_str */ if( width > MAXLINELEN-1 ) { fprintf( stderr , "Get_ftn_int( str=%s\n, start_col=%d, format=%s )\n", str, start_col, ptr ); fprintf( stderr , "\tfield width (%d) in format is too large. Max allowed is %d\n", width , MAXLINELEN-1 ); exit( 1 ); } /* copy the input string to tmp_str, converting * imbedded blanks to zeros */ for( i=0 ; i<width ; i++ ) { if( isspace( str[start_col+i] ) ) { if( leading_spaces ) tmp_str[i] = ' '; else tmp_str[i] = '0'; } else { leading_spaces = 0; tmp_str[i] = str[start_col+i]; } } tmp_str[width] = '\0'; return( atoi( tmp_str ) ); } int main(int argc, char **argv) { char line[MAXLINELEN]; float x,y,z,hold,work; char minus; int ity,ity1,ico,isq[8],m,n,cc,tmp; int i; int type3_is_donut=0; int c; fast3 = 0; if( argc > 2 ) { fprintf( stderr, usage ); exit( 1 ); } /* Get command line arguments. */ while ((c = getopt(argc, argv, "D3")) != EOF) { switch (c) { case 'D': /* donuts */ type3_is_donut = 1; break; case '3': /* FASTGEN3 format?? */ fast3 = 1; break; default: fprintf( stderr, "Illegal option (%c)\n", c ); case '?': fprintf( stderr, usage ); exit( 1 ); } } while( fgets(line, sizeof(line), stdin) ) { if( strlen( line ) <= 1 ) continue; line[strlen(line)-1] = '\0'; /* eliminate \n */ if( fast3 ) { x = get_ftn_float( line , 0 , "f10.3" ); y = get_ftn_float( line , 10 , "f10.3" ); z = get_ftn_float( line , 20 , "f10.3" ); tmp = get_ftn_int( line , 30 , "i6" ); cc = get_ftn_int( line , 36 , "i4" ); isq[0] = get_ftn_int( line , 40 , "i10" ); for( i=1 ; i<8 ; i++ ) isq[i] = get_ftn_int( line , 50 + (i-1)*4 , "i4" ); m = get_ftn_int( line , 74 , "i3" ); n = get_ftn_int( line , 77 , "i3" ); } else { x = get_ftn_float( line , 0 , "f8.3" ); y = get_ftn_float( line , 8 , "f8.3" ); z = get_ftn_float( line , 16 , "f9.3" ); tmp = get_ftn_int( line , 25 , "i6" ); cc = get_ftn_int( line , 31 , "i4" ); isq[0] = get_ftn_int( line , 35 , "i11" ); for( i=1 ; i<8 ; i++ ) isq[i] = get_ftn_int( line , 46 + (i-1)*4 , "i4" ); m = get_ftn_int( line , 74 , "i3" ); n = get_ftn_int( line , 77 , "i3" ); } /* get plate mode flag */ minus = '+'; if( tmp < 0 ) { tmp = (-tmp); minus = '-'; } /* get solid type */ hold = (float)tmp/10000.0; work = hold * 10.0; ity = work; hold = work - ity; if( ity == 4 ) ity = 8; else if( ity == 3 && type3_is_donut ) ity = 4; /* get thickness */ work = hold * 100.0; ico = work; hold = work - ico; /* get space code */ work = hold * 10.0; ity1 = work; hold = work - ity1; /* write output */ printf( "%8.3f %8.3f %9.3f %c %2d %2d %1d %4d %11d ", x,y,z,minus,ity,ico,ity1,cc,isq[0] ); for( i=1 ; i<8 ; i++ ) printf( "%5d" , isq[i] ); printf( " %3d %3d\n" , m , n ); } return 0; } /* * Local Variables: * mode: C * tab-width: 8 * c-basic-offset: 4 * indent-tabs-mode: t * End: * ex: shiftwidth=4 tabstop=8 */ --- NEW FILE: rpatch.f --- c Front end to patch. c Bill Mermagen Jr. c This pre-processor program alters the data file format c for use by the main conversion program. An End-of-File c flag is used in the read statement to prevent loss of data c and provide a clean exit from this processing loop. program miniconv real x,y,z,hold,work character minus*1 integer ity,ity1,ico, isq(8), m, n, k, cc, tmp 30 read(*,100,END=75) x,y,z,tmp,cc,(isq(k),k=1,8),m,n minus = '+' c Set volume mode / plate mode flag if (tmp.lt.0) then tmp = abs(tmp) minus = '-' end if hold = real(tmp/10000.0) c Isolate solid type code work = hold*10.0 ity = int(work) hold = work-ity c New line added per Bob Strausser (Survice Engineering): if( ity.eq.4 ) ity = 8 c Isolate thickness / radius value (1/100's inch) work = hold*100.0 ico = int(work) hold = work-ico c Isolate space type code work = hold*10.0 ity1 = int(work) hold = work-ity1 c Write output file to new format for the conversion program write(*,101) x,y,z,minus,ity,ico,ity1,cc,(isq(k),k=1,8),m,n c Read next element code line go to 30 75 continue stop 100 format(f8.3,f8.3,f9.3,i6,i4,i11,7i4,2i3) 101 format(f8.3,' ',f8.3,' ',f9.3,' ',a1,' ',i2,' ',i2,' ',i1,' ', 1 i4,' ',i11,' ',7i5,' ',i3,' ',i3) 200 format(f7.4,f7.4) end |