📄 fileio.c
字号:
/* ========================================================================== FILEIO_C============================================================================= FUNCTION NAMES read_polygon_indices -- reads the polygon indices file. read_polygon_line -- read the face polyline. read_muscles -- reads the face muscles. read_expression_vectors -- reads a vector of expressions. add_muscle_to_face -- add a muscle to the face. C SPECIFICATIONS read_polygon_indices ( FileName, face ) read_polygon_line ( FileName, face ) read_muscles ( FileName, face ) read_expression_vectors ( FileName, face ) add_muscle_to_face ( m, face ) DESCRIPTION This module is responsible for reading the face data files. This module comes as is with no warranties. SIDE EFFECTS Unknown. HISTORY Created 16-Dec-94 Keith Waters at DEC's Cambridge Research Lab. Modified 22-Nov-96 Sing Bing Kang (sbk@crl.dec.com) modified function read_expression_vectors() to allocate memory to face->expression (done once)============================================================================ */#include <math.h> /* C header for any math functions */#include <stdio.h> /* C header for standard I/O */#include <string.h> /* For String compare */#include <stdlib.h>#ifndef _WIN32#include <sys/types.h>#include <sys/file.h>#endif/* * from /usr/include/sys/types.h * Just in case TRUE and FALSE are not defined */#ifndef TRUE#define TRUE 1#endif#ifndef FALSE#define FALSE 0#endif#include "head.h" /* local header for the face data structure */#include "memory.h"void add_muscle_to_face ( MUSCLE *m , HEAD *face );/* ========================================================================= */ /* read_polygon_indices *//* ========================================================================= */ /*** Read in the face data file (x,y,z)***/voidread_polygon_indices ( char *FileName, HEAD *face ) { FILE *InFile ; int i, ii ; /* * Check the FileName. */ if (( InFile = fopen ( FileName, "r" )) == 0 ) { fprintf ( stderr, "can't open input file: %s\n", FileName ) ; exit(-1) ; } fscanf ( InFile,"%d", &face->npindices ) ; /* * Allocate some memory. */ face->indexlist = ( int * ) malloc ( face->npindices*4 * sizeof ( int )) ; for( i=0, ii=0; i<face->npindices; i++, ii+=4 ) fscanf(InFile,"%d%d%d%d", &face->indexlist[ii], &face->indexlist[ii+1], &face->indexlist[ii+2], &face->indexlist[ii+3] ) ; fclose( InFile ) ; }/* ========================================================================= */ /* read_polygon_line *//* ========================================================================= */ /*** Read in the face data file (x,y,z)***/voidread_polygon_line ( char *FileName, HEAD *face ){ FILE *InFile ; int i, ii ; /* * Check the FileName. */ if (( InFile = fopen ( FileName, "r" )) == 0 ) { fprintf ( stderr, "can't open input file: %s\n", FileName ) ; exit(-1) ; } fscanf ( InFile, "%d", &face->npolylinenodes ) ; /* * Allocate some memory. */ face->polyline = ( float * ) malloc ( face->npolylinenodes*3 * sizeof ( float )) ; for ( i=0, ii=0; i<face->npolylinenodes; i++, ii+=3 ) { fscanf ( InFile,"%f%f%f", &face->polyline[ii], &face->polyline[ii+1], &face->polyline[ii+2] ) ; } fclose ( InFile ) ;}/* ============================================================= read_muscles ( FileName, face ) ========================================================== *//*** This function reads in the muscles.***/voidread_muscles ( char *FileName, HEAD *face ){ FILE *Infile; int i, nm ; MUSCLE *m ; /* * Open the file to be read. */ if((Infile = fopen(FileName,"r")) == 0) { fprintf(stderr,"Opening error on file:%10s\n", FileName) ; exit(0); } fscanf ( Infile, "%d", &nm ) ; for ( i=0; i < nm; i++ ) { m = _new ( MUSCLE ) ; fscanf (Infile, "%s %f %f %f %f %f %f %f %f %f %f", &(*m->name), &m->head[0], &m->head[1], &m->head[2], &m->tail[0], &m->tail[1], &m->tail[2], &m->fs, &m->fe, &m->zone, &m->clampv ) ; m->active = FALSE ; m->mstat = 0.0 ; if (verbose) { fprintf(stderr,"%s: %d\n========================\nhx: %2.2f hy: %2.2f hz: %2.2f\ntx: %2.2f ty: %2.2f tz: %2.2f\n fall start: %2.2f\n fall end: %2.2f\n zone: %2.2f\n clampv: %2.2f mstat: %2.2f\n\n", m->name, i, m->head[0], m->head[1], m->head[2], m->tail[0], m->tail[1], m->tail[2], m->fs, m->fe, m->zone, m->clampv, m->mstat ) ; } add_muscle_to_face ( m, face ) ; } fclose(Infile) ;}/* ========================================================================= */ /* read_expression_vectors *//* ========================================================================= */ /* sbk - added allocated var - 11/22/96 *//*** Read in the expression vectors.*/voidread_expression_vectors ( char *FileName, HEAD *face ){ FILE *InFile ; int i, k ; EXPRESSION *e ; static int allocated = 0; /* * Check the FileName. */ if (( InFile = fopen ( FileName, "r" )) == 0 ) {#if 0 /* Silently ignore the lack of expression vectors. I never got the file. -mjk */ fprintf ( stderr, "can't open input file: %s\n", FileName ) ;#endif face->expression = NULL; return; } fscanf ( InFile, "%d", &face->nexpressions ) ; fprintf( stderr, "Number of expressions = %d\n", face->nexpressions ) ; /* * Allocate some memory. */ if (!allocated) face->expression = (EXPRESSION **)malloc( face->nexpressions* sizeof(EXPRESSION *) ); for ( i=0; i<face->nexpressions; i++) { if (allocated) e = face->expression[i]; else e = face->expression[i] = _new(EXPRESSION) ; fscanf ( InFile, "%s\n", &(*e->name) ) ; fprintf ( stderr, "%s\n", e->name ) ; for ( k=0; k < 17; k++) { fscanf ( InFile,(k==16) ? "%f\n" : "%f ", &e->m[k]) ; fprintf (stderr,"%2.2f ", e->m[k] ) ; } fprintf (stderr, "\n") ; } fclose ( InFile ) ; allocated = 1;}/* =============================================================== add_muscle_to_face ( m, face ) =============================================================== *//*** adds a muscle to the face muscle list.***/voidadd_muscle_to_face ( MUSCLE *m , HEAD *face ){ int nn ; if(face->nmuscles == 0) face->muscle = _new_array(MUSCLE *, 50) ; else if(face->nmuscles % 50 == 0) face->muscle = _resize_array(face->muscle,MUSCLE *,face->nmuscles+50) ; nn = face->nmuscles ; face->muscle[nn] = m ; face->nmuscles++ ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -