From: Gordon K. <kin...@us...> - 2007-06-17 07:49:14
|
Update of /cvsroot/teem/teem/src/limn In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv12194 Modified Files: enumsLimn.c io.c limn.h polydata.c Log Message: added limnPrimitiveNoop, which is a way of selectively tagging some polydata is moot; also added limnHestPolyDataOFF for hest-based reading of OFF files Index: enumsLimn.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/enumsLimn.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** enumsLimn.c 14 Feb 2007 04:55:47 -0000 1.8 --- enumsLimn.c 17 Jun 2007 07:49:14 -0000 1.9 *************** *** 116,119 **** --- 116,120 ---- _limnPrimitiveStr[][AIR_STRLEN_SMALL] = { "(unknown limnPrimitive)", + "noop", "triangles", "tristrip", *************** *** 126,129 **** --- 127,131 ---- _limnPrimitiveDesc[][AIR_STRLEN_MED] = { "unknown limnPrimitive", + "no-op", "triangle soup", "triangle strip", *************** *** 135,138 **** --- 137,141 ---- char _limnPrimitiveStrEqv[][AIR_STRLEN_SMALL] = { + "noop", "triangles", "tristrip", *************** *** 145,148 **** --- 148,152 ---- int _limnPrimitiveValEqv[] = { + limnPrimitiveNoop, limnPrimitiveTriangles, limnPrimitiveTriangleStrip, Index: polydata.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/polydata.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** polydata.c 17 Apr 2007 21:59:10 -0000 1.24 --- polydata.c 17 Jun 2007 07:49:14 -0000 1.25 *************** *** 237,250 **** } - #if 0 - - /* GLK got lazy Sun Feb 5 18:31:57 EST 2006 and didn't bring this uptodate - with the new limnPolyData */ - int limnPolyDataCopyN(limnPolyData *pldB, const limnPolyData *pldA, unsigned int num) { char me[]="limnPolyDataCopyN", err[BIFF_STRLEN]; ! unsigned int ii, jj; if (!( pldB && pldA )) { --- 237,245 ---- } int limnPolyDataCopyN(limnPolyData *pldB, const limnPolyData *pldA, unsigned int num) { char me[]="limnPolyDataCopyN", err[BIFF_STRLEN]; ! unsigned int ii, jj, size; if (!( pldB && pldA )) { *************** *** 252,276 **** biffAdd(LIMN, err); return 1; } ! if (limnPolyDataAlloc(pldB, num*pldA->xyzwNum, ! num*pldA->indxNum, num*pldA->primNum)) { sprintf(err, "%s: couldn't allocate output", me); biffAdd(LIMN, err); return 1; } for (ii=0; ii<num; ii++) { ! memcpy(pldB->vert + ii*pldA->xyzwNum, pldA->vert, ! pldA->xyzwNum*sizeof(limnVrt)); for (jj=0; jj<pldA->indxNum; jj++) { (pldB->indx + ii*pldA->indxNum)[jj] = pldA->indx[jj] + ii*pldA->xyzwNum; } ! memcpy(pldB->type + ii*pldA->primNum, pldA->type, ! pldA->primNum*sizeof(signed char)); ! memcpy(pldB->icnt + ii*pldA->primNum, pldA->icnt, ! pldA->primNum*sizeof(unsigned int)); } return 0; } - #endif - /* ******** limnPolyDataTransform_f, limnPolyDataTransform_d --- 247,281 ---- biffAdd(LIMN, err); return 1; } ! if (limnPolyDataAlloc(pldB, limnPolyDataInfoBitFlag(pldA), num*pldA->xyzwNum, ! num*pldA->indxNum, num*pldA->primNum)) { sprintf(err, "%s: couldn't allocate output", me); biffAdd(LIMN, err); return 1; } for (ii=0; ii<num; ii++) { ! size = pldA->xyzwNum*sizeof(float)*4; ! memcpy(pldB->xyzw + ii*size, pldA->xyzw, size); for (jj=0; jj<pldA->indxNum; jj++) { (pldB->indx + ii*pldA->indxNum)[jj] = pldA->indx[jj] + ii*pldA->xyzwNum; } ! size = pldA->primNum*sizeof(signed char); ! memcpy(pldB->type + ii*size, pldA->type, size); ! size = pldA->primNum*sizeof(unsigned int); ! memcpy(pldB->icnt + ii*size, pldA->icnt, size); ! if (pldA->rgba) { ! size = pldA->rgbaNum*sizeof(unsigned char)*4; ! memcpy(pldB->rgba + ii*size, pldA->rgba, size); ! } ! if (pldA->norm) { ! size = pldA->normNum*sizeof(float)*3; ! memcpy(pldB->norm + ii*size, pldA->norm, size); ! } ! if (pldA->tex2) { ! size = pldA->tex2Num*sizeof(float)*2; ! memcpy(pldB->tex2 + ii*size, pldA->tex2, size); ! } } return 0; } /* ******** limnPolyDataTransform_f, limnPolyDataTransform_d *************** *** 339,342 **** --- 344,350 ---- for (primIdx=0; primIdx<pld->primNum; primIdx++) { switch(pld->type[primIdx]) { + case limnPrimitiveNoop: + /* no increment */ + break; case limnPrimitiveTriangles: ret += pld->icnt[primIdx]/3; *************** *** 469,472 **** --- 477,483 ---- area[primIdx] = 0; switch (pld->type[primIdx]) { + case limnPrimitiveNoop: + area[primIdx] = 0.0; + break; case limnPrimitiveTriangles: triNum = pld->icnt[primIdx]/3; Index: limn.h =================================================================== RCS file: /cvsroot/teem/teem/src/limn/limn.h,v retrieving revision 1.101 retrieving revision 1.102 diff -C2 -d -r1.101 -r1.102 *** limn.h 23 Apr 2007 08:05:09 -0000 1.101 --- limn.h 17 Jun 2007 07:49:14 -0000 1.102 *************** *** 194,205 **** enum { limnPrimitiveUnknown, /* 0 */ ! limnPrimitiveTriangles, /* 1: triangle soup (for GL_TRIANGLES) */ ! limnPrimitiveTriangleStrip, /* 2: triangle strip (for GL_TRIANGLE_STRIP) */ ! limnPrimitiveTriangleFan, /* 3: triangle fan (for GL_TRIANGLE_FAN) */ ! limnPrimitiveQuads, /* 4: quad soup (for GL_QUADS) */ ! limnPrimitiveLineStrip, /* 5: line strip (for GL_LINE_STRIP) */ limnPrimitiveLast }; ! #define LIMN_PRIMITIVE_MAX 5 /* --- 194,206 ---- enum { limnPrimitiveUnknown, /* 0 */ ! limnPrimitiveNoop, /* 1: no-op primitive, nothing drawn */ ! limnPrimitiveTriangles, /* 2: triangle soup (for GL_TRIANGLES) */ ! limnPrimitiveTriangleStrip, /* 3: triangle strip (for GL_TRIANGLE_STRIP) */ ! limnPrimitiveTriangleFan, /* 4: triangle fan (for GL_TRIANGLE_FAN) */ ! limnPrimitiveQuads, /* 5: quad soup (for GL_QUADS) */ ! limnPrimitiveLineStrip, /* 6: line strip (for GL_LINE_STRIP) */ limnPrimitiveLast }; ! #define LIMN_PRIMITIVE_MAX 6 /* *************** *** 673,676 **** --- 674,678 ---- LIMN_EXPORT int limnPolyDataVTKWrite(FILE *file, const limnPolyData *pld); LIMN_EXPORT int limnPolyDataOFFRead(limnPolyData *pld, FILE *file); + LIMN_EXPORT hestCB *limnHestPolyDataOFF; /* shapes.c */ Index: io.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/io.c,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** io.c 17 Apr 2007 21:59:09 -0000 1.37 --- io.c 17 Jun 2007 07:49:14 -0000 1.38 *************** *** 469,472 **** --- 469,480 ---- } + for (primIdx=0; primIdx<pld->primNum; primIdx++) { + if (limnPrimitiveNoop == pld->type[primIdx]) { + sprintf(err, "%s: sorry, can't save with prim[%u] type %s", me, + primIdx, airEnumStr(limnPrimitive, pld->type[primIdx])); + biffAdd(LIMN, err); return 1; + } + } + mop = airMopNew(); *************** *** 911,914 **** --- 919,971 ---- int + _limnHestPolyDataOFFParse(void *ptr, char *str, char err[AIR_STRLEN_HUGE]) { + char me[] = "_limnHestPolyDataOFFParse", *nerr; + limnPolyData **lpldP; + airArray *mop; + FILE *file; + + if (!(ptr && str)) { + sprintf(err, "%s: got NULL pointer", me); + return 1; + } + + lpldP = (limnPolyData **)ptr; + if (!strlen(str)) { + /* got empty filename; user didn't really want data, that's okay*/ + *lpldP = NULL; + return 0; + } + + file = fopen(str, "rb"); + if (!file) { + sprintf(err, "%s: couldn't open \"%s\" for reading", me, str); + return 1; + } + mop = airMopNew(); + airMopAdd(mop, file, (airMopper)airFclose, airMopAlways); + *lpldP = limnPolyDataNew(); + airMopAdd(mop, *lpldP, (airMopper)limnPolyDataNix, airMopOnError); + if (limnPolyDataOFFRead(*lpldP, file)) { + airMopAdd(mop, nerr = biffGetDone(LIMN), airFree, airMopOnError); + strncpy(err, nerr, AIR_STRLEN_HUGE-1); + airMopError(mop); + return 1; + } + airMopOkay(mop); + return 0; + } + + hestCB + _limnHestPolyDataOFF = { + sizeof(limnPolyData *), + "polydata", + _limnHestPolyDataOFFParse, + (airMopper)limnPolyDataNix + }; + + hestCB * + limnHestPolyDataOFF = &_limnHestPolyDataOFF; + + int limnPolyDataVTKWrite(FILE *file, const limnPolyData *pld) { char me[]="limnPolyDataVTKWrite", err[BIFF_STRLEN]; *************** *** 955,958 **** --- 1012,1020 ---- } break; + default: + sprintf(err, "%s: sorry, type %s (prim %u) not handled here", me, + airEnumStr(limnPrimitive, pld->type[prmIdx]), prmIdx); + biffAdd(LIMN, err); return 1; + break; } indx += idxNum; |