//**************************************************************************** // // * The file format is simple // first line: an integer with the number of control points // other lines: one line per control point // either 3 (X,Y,Z) numbers on the line, or 6 numbers (X,Y,Z, orientation) //============================================================================ void CTrack:: readPoints(const char* filename) //============================================================================ { mDeleteAll(); FILE* fp = fopen(filename,"r"); if (!fp) { printf("Can't Open File!\n"); } else { char buf[512]; // first line = number of points fgets(buf,512,fp); size_t npts = (size_t) atoi(buf); if( (npts<4) || (npts>65535)) { printf("Illegal Number of Points Specified in File"); } else { CPs.clear(); // get lines until EOF or we have enough points while( (CPs.size() < npts) && fgets(buf,512,fp) ) { Ogre::Vector3 pos,orient; std::vector<const char*> words; breakString(buf,words); if (words.size() >= 3) { pos.x = (float) strtod(words[0],0); pos.y = (float) strtod(words[1],0); pos.z = (float) strtod(words[2],0); } else { pos.x=0; pos.y=0; pos.z=0; } if (words.size() >= 6) { orient.x = (float) strtod(words[3],0); orient.y = (float) strtod(words[4],0); orient.z = (float) strtod(words[5],0); } else { orient.x = 0; orient.y = 1; orient.z = 0; } orient.normalise(); mAdd(ControlPoint(pos,orient)); } } fclose(fp); } }
// the file format is simple // first line: an integer with the number of control points // other lines: one line per control point // either 3 (X,Y,Z) numbers on the line, or 6 numbers (X,Y,Z, orientation) void World::readPoints(const char* filename) { FILE* fp = fopen(filename,"r"); if (!fp) { fl_alert("Can't Open File!\n"); } else { char buf[512]; // first line = number of points fgets(buf,512,fp); size_t npts = (size_t) atoi(buf); if( (npts<4) || (npts>65535)) { fl_alert("Illegal Number of Points Specified in File"); } else { points.clear(); // get lines until EOF or we have enough points while( (points.size() < npts) && fgets(buf,512,fp) ) { Pnt3f pos,orient; vector<const char*> words; breakString(buf,words); if (words.size() >= 3) { pos.x = (float) strtod(words[0],0); pos.y = (float) strtod(words[1],0); pos.z = (float) strtod(words[2],0); } else { pos.x=0; pos.y=0; pos.z=0; } if (words.size() >= 6) { orient.x = (float) strtod(words[3],0); orient.y = (float) strtod(words[4],0); orient.z = (float) strtod(words[5],0); } else { orient.x = 0; orient.y = 1; orient.z = 0; } orient.normalize(); points.push_back(ControlPoint(pos,orient)); } } fclose(fp); } trainU = 0; }
void paintCode(pPdf417param p) { pdf417class pp; arrayList list; int maxErr, fixedColumn, lenErr, tot, skipRowColAdjust, pad; pp.param = p; p->error = 0; if (p->options & PDF417_USE_RAW_CODEWORDS) { if (p->lenCodewords > MAX_DATA_CODEWORDS || p->lenCodewords < 1 || p->lenCodewords != p->codewords[0]) { p->error = PDF417_ERROR_INVALID_PARAMS; return; } } else { if (p->lenText < 0) p->lenText = strlen(p->text); if (p->lenText > ABSOLUTE_MAX_TEXT_SIZE) { p->error = PDF417_ERROR_TEXT_TOO_BIG; return; } listInit(&list); breakString(&pp, &list); dumpList(&pp, &list); assemble(&pp, &list); listFree(&list); if (p->error) return; p->codewords[0] = p->lenCodewords = pp.cwPtr; } maxErr = maxPossibleErrorLevel(MAX_DATA_CODEWORDS + 2 - p->lenCodewords); if (!(p->options & PDF417_USE_ERROR_LEVEL)) { if (p->lenCodewords < 41) p->errorLevel = 2; else if (p->lenCodewords < 161) p->errorLevel = 3; else if (p->lenCodewords < 321) p->errorLevel = 4; else p->errorLevel = 5; } if (p->errorLevel < 0) p->errorLevel = 0; else if (p->errorLevel > maxErr) p->errorLevel = maxErr; if (p->codeColumns < 1) p->codeColumns = 1; else if (p->codeColumns > 30) p->codeColumns = 30; if (p->codeRows < 3) p->codeRows = 3; else if (p->codeRows > 90) p->codeRows = 90; lenErr = 2 << p->errorLevel; fixedColumn = !(p->options & PDF417_FIXED_ROWS); skipRowColAdjust = 0; tot = p->lenCodewords + lenErr; if (p->options & PDF417_FIXED_RECTANGLE) { tot = p->codeColumns * p->codeRows; if (tot > MAX_DATA_CODEWORDS + 2) { tot = getMaxSquare(p); } if (tot < p->lenCodewords + lenErr) tot = p->lenCodewords + lenErr; else skipRowColAdjust = 1; } else if (!(p->options & (PDF417_FIXED_COLUMNS | PDF417_FIXED_ROWS))) { double c, b; fixedColumn = 1; if (p->aspectRatio < 0.001) p->aspectRatio = 0.001f; else if (p->aspectRatio > 1000) p->aspectRatio = 1000; b = 73 * p->aspectRatio - 4; c = (-b + sqrt(b * b + 4 * 17 * p->aspectRatio * (p->lenCodewords + lenErr) * p->yHeight)) / (2 * 17 * p->aspectRatio); p->codeColumns = (int)(c + 0.5); if (p->codeColumns < 1) p->codeColumns = 1; else if (p->codeColumns > 30) p->codeColumns = 30; } if (!skipRowColAdjust) { if (fixedColumn) { p->codeRows = (tot - 1) / p->codeColumns + 1; if (p->codeRows < 3) p->codeRows = 3; else if (p->codeRows > 90) { p->codeRows = 90; p->codeColumns = (tot - 1) / 90 + 1; } } else { p->codeColumns = (tot - 1) / p->codeRows + 1; if (p->codeColumns > 30) { p->codeColumns = 30; p->codeRows = (tot - 1) / 30 + 1; } } tot = p->codeRows * p->codeColumns; } if (tot > MAX_DATA_CODEWORDS + 2) { tot = getMaxSquare(p); } p->errorLevel = maxPossibleErrorLevel(tot - p->lenCodewords); lenErr = 2 << p->errorLevel; pad = tot - lenErr - p->lenCodewords; pp.cwPtr = p->lenCodewords; while (pad--) p->codewords[pp.cwPtr++] = TEXT_MODE; p->codewords[0] = p->lenCodewords = pp.cwPtr; calculateErrorCorrection(&pp, pp.param->lenCodewords); pp.param->lenCodewords = tot; outPaintCode(&pp); }
// report methods void MSIntTableColumn::breakProcess(MSIndexVector& i_) { MSString buffer; MSInt aInt((int)(MSIndexedFunctions::computeIndexedFunction(vector(),weights(),i_,breakProcessMode()))); breakString()<<aInt.format(buffer,format()); }
const char *MSIntTableColumn::formatBreak(MSString &buffer_,unsigned row_,unsigned) { if (row_<breakString().length()) buffer_=breakString()(row_); return buffer_.string(); }