Пример #1
0
void readShape(ifstream* file, Model* m){	
	readVertices(file, m);
	skipLine(file);		// Skip # verts
	skipLine(file);		// Skip blank line
	skipLine(file);		// Skip object name
	
	readFaces(file, m);
	skipLine(file);		// Skip # faces
}
Пример #2
0
int main(int argc, char** argv) {
	char* filein, fileout;
	char buf[BUFSIZE];
	FILE* fin;
	FILE* fout;
	int host, robot;
	char interface[128];
	int index, type, subtype;
	struct PlayerHeader header;

	if (argc != 3) {
		fprintf(stderr, "Syntax: player2dpslam <filein> <fileout>");
		return 1;
	}
	fin = fopen(argv[1], "r");
	if (fin == NULL) {
		fprintf(stderr, "ERROR opening input file %s\n", argv[1]);
		return 1;
	}
	fout = fopen(argv[2], "w");
	if (fout == NULL) {
		fprintf(stderr, "ERROR opening output file %s\n", argv[2]);
		return 1;
	}
	while (!feof(fin)) {
		header.readHeader(fin);
		//header.Print();
		if (header.valid) {
			if (strcmp(header.interfaceName, "laser") == 0) {
				if (state == WAITING_LASER) {
					outputLaser(fin, fout);
					//skipLine(fin);
					state = WAITING_ODOMETRY;				
				}
				else
					skipLine(fin);
			}
			else if (strcmp(header.interfaceName, "position2d") == 0) {
				if (state == WAITING_ODOMETRY) {				
					outputOdometry(fin, fout);
					state = WAITING_LASER;
				}
				else
					skipLine(fin);
			}
		}
		fflush(fout);
	}
	fflush(fout);
	return 0;
}
Пример #3
0
//parses a reading response
void hokuyo_parseReading(HokuyoRangeReading* r, char* buffer){
  char* s=buffer;
  int expectedStatus=0;
  if (s[0]=='M')
    expectedStatus=99;
  if (s[0]=='C')
    expectedStatus=00;
  
  int beamBytes=0;
  if (s[1]=='D') beamBytes=3;
  if (s[0]=='C') beamBytes=3;
  
  if (! beamBytes || ! expectedStatus){
    fprintf(stderr, "Invalid return packet, cannot parse reading\n");
    r->status=-1;
    return;
  }
  s+=2;
  char v[5];
  v[4]=0;
  strncpy(v,s,4); r->startStep=atoi(v); s+=4;
  strncpy(v,s,4); r->endStep=atoi(v);   s+=4;
  v[2]=0; strncpy(v,s,2); r->clusterCount=atoi(v);
  
  s=skipLine(s);
  if (s==0){
    fprintf(stderr, "error, line broken when reading the range parameters\n");
    r->status=-1;
    return;
  }

  strncpy(v,s,2); r->status=atoi(v); s+=2;

  if (r->status==expectedStatus){
  } else {
    fprintf(stderr,"Error, Status=%d",r->status);
    return;
  }
  r->timestamp=parseInt(4,&s);
  s=skipLine(s);

  int i=0;
  while(s!=0){
    r->ranges[i++]=parseInt(beamBytes,&s);
  }
  i--;
  r->n_ranges=i;
}
Пример #4
0
void outputLaser(PlayerHeader h, FILE* fin, FILE* fout) {
	//Expected values:
	//-1.5708 +1.5708 +0.01745329 +5.6000 0181
	double startangle, endangle, increment, minrange, maxrange;
	unsigned int bins;
	fscanf(fin, "%lf%lf%lf%lf%lf%u", &minrange, &startangle, &endangle, &increment, &maxrange, &bins);
	//printf("startangle=%lf endangle=%lf increment=%lf minrange=%lf maxrange=%lf bins=%u\n", startangle, endangle, increment, minrange, maxrange, bins);
	if (bins != 181) {
		fprintf(stderr, "Warning: Expected 181 bins, found %i; skipping line\n\n", bins);
		skipLine(fin);
		state = WAITING_LASER;
		return;	
	}
	//1053653857.29 fly 6665 laser 00 1053652583.773 -1.571 +1.571 0.017453 181
	fprintf(fout, "%lf %u %u %s %u %u %u ", h.time, h.host, h.robot, h.interfaceName, h.index, h.type, h.subtype);
	fprintf(fout, "%lf %lf %lf %lf %lf %u ", minrange, startangle, endangle, increment, maxrange, bins);
	int counter = 0;
	char scanrange[128];
	char intensity[128];
	while (counter < 181) {
		fscanf(fin, "%128s", scanrange);
		fprintf(fout, "%s ", scanrange);
		fscanf(fin, "%128s", intensity);
		fprintf(fout, "%s ", intensity);
		counter++;
	}
	fprintf(fout, "\n");
	fflush(fout);
}
Пример #5
0
/*  From DP_SLAM README, the output format needs to be:
LASER <number> <values>...
<number> is the number of laser readings that were observed. This 
should usually be 181. Those actual laser measurements are the values
that follow, in meters. The laser readings are assumed to start at 
-90 degrees, and occur at every 1 degree up to +90 degrees, with regard
to the robot's facing angle.*/
void outputLaser(FILE* fin, FILE* fout) {
	//Expected values:
	//-1.5708 +1.5708 +0.01745329 +5.6000 0181
	double startangle, endangle, increment, minrange, maxrange;
	unsigned int bins;
	fscanf(fin, "%lf%lf%lf%lf%lf%u", &startangle, &endangle, &increment, &minrange, &maxrange, &bins);
	//printf("%lf %lf %lf %lf %lf %u\n", startangle, endangle, increment, minrange, maxrange, bins);
	if (bins != 181) {
		fprintf(stderr, "Warning: Expected 181 bins, found %i; skipping line\n\n", bins);
		skipLine(fin);
		state = WAITING_LASER;
		return;	
	}
	fprintf(fout, "Laser 181 ");
	int counter = 0;
	char scanrange[128];
	char intensity[128];
	while (counter < 181) {
		fscanf(fin, "%128s", scanrange);
		fprintf(fout, "%s ", scanrange);
		fscanf(fin, "%128s", intensity);
		//Don't output the intensity (DP_SLAM doesn't want it)
		counter++;
	}
	fprintf(fout, "\n");
	fflush(fout);
}
Пример #6
0
 void KmlGenerator::putStationStyle() {
     startStyle("StationStyle");
     putLabelStyle(ColorRGBA(0x00,0x00,0x00,0x00), NORMAL, 0.0f); //invisible labels
     putIconStyle(stationIconHref, Offset(), 0.25f, 0.0f);        //custom icon
     endStyle();
     skipLine();
 }
Пример #7
0
    void KmlGenerator::putIsoLines(const std::string &interpolatorName) {
        
        const unsigned int nData = std::min(maxDataProcessed, sensorData.nMeasures);
        const std::vector<IsoLineList<double,4u,float>> &interpIsolines = isolines.at(interpolatorName);

        putFolder("Isolines", "Data isolines (" + interpolatorName + ")", false, true);
        
        unsigned int j = 0;
        for(const auto &temporalIsolines : interpIsolines) {
            unsigned int i = 1;
            for(const auto &isoline : temporalIsolines) {
                putColorLineStrings("Isolines level " + std::to_string(i++), 
                        "Isovalue: " + std::to_string(isoline.value) + " mg/m³",
                        "IsoLine_", 
                        isoline.lines,
                        defaultVisibleInterpolatorId.compare(interpolatorName) == 0,
                        sensorData.getTime(j), 
                        sensorData.getTime(j+1, true)
                    );
            }
            j++;
        }

        endFolder();
        skipLine();
    }
Пример #8
0
	int Tokenizer::readInt(bool skipline) {
		if (util::getNumberOfNumbersInString(m_sText) == 0)
			roe_except("no ints found in '" + m_sText + "'", "readInt");
		int i = util::parseInt(util::getFirstNumberOfStringAndErase(m_sText));
		if (skipline) skipLine(1);
		return i;
	}
Пример #9
0
	double Tokenizer::readDouble(bool skipline) {
		if (util::getNumberOfNumbersInString(m_sText) == 0)
			roe_except("no doubles found in '" + m_sText + "'", "readDouble");
		double d = util::parseDouble(util::getFirstNumberOfStringAndErase(m_sText));
		if (skipline) skipLine(1);
		return d;
	}
Пример #10
0
	std::string Tokenizer::readString(bool skipline) {
		if (util::getNumberOfStringsInString(m_sText, m_cStringDelim) == 0)
			roe_except("no strings found in '" + m_sText + "'", "readString");
		std::string s = util::getFirstStringOfStringAndErase(m_sText, m_cStringDelim);
		if (skipline) skipLine(1);
		return s;
	}
Пример #11
0
bool StelJsonParserInstance::skipAndConsumeChar(char r)
{
	char c;
	while (getChar(&c))
	{
		switch (c)
		{
			case ' ':
			case '\t':
			case '\n':
			case '\r':
				break;
			case '/':
				{
					if (!getChar(&c))
						throw std::runtime_error(qPrintable(QString("Unexpected '/%1' in the JSON content").arg(c)));

					if (c=='/')
						skipLine();
					else
					{
						// We have a problem, we removed a '/'.. This should never happen with properly formatted JSON though
						throw std::runtime_error(qPrintable(QString("Unexpected '/%1' in the JSON content").arg(c)));
					}
				}
				break;
			default:
				if (r==c)
					return true;
				ungetChar(c);
				return false;
		}
	}
	return false;
}
Пример #12
0
void StelJsonParserInstance::skipJson()
{
	// There is a weakness in this code -- it will cause any standalone '/' to be absorbed.
	char c;
	while (getChar(&c))
	{
		switch (c)
		{
			case ' ':
			case '\t':
			case '\n':
			case '\r':
				break;
			case '/':
				{
					if (!getChar(&c))
						return;

					if (c=='/')
						skipLine();
					else
					{
						// We have a problem, we removed a '/'.. This should never happen with properly formatted JSON though
						throw std::runtime_error(qPrintable(QString("Unexpected '/%1' in the JSON content").arg(c)));
					}
				}
				break;
			default:
				ungetChar(c);
				return;
		}
	}
}
Пример #13
0
	bool Tokenizer::readBool(bool skipline) {
		if (util::getNumberOfBoolsInString(m_sText) == 0)
			roe_except("no bool found in '" + m_sText + "'", "readBool");
		bool b = util::getFirstBoolOfStringAndErase(m_sText);
		if (skipline) skipLine(1);
		return b;
	}
Пример #14
0
    void KmlGenerator::putIsoContours(const std::string &interpolatorName) {
        
        const unsigned int nData = std::min(maxDataProcessed, sensorData.nMeasures);
        const std::vector<IsoContourList<double,4u,float>> &interpIsocontours = isocontours.at(interpolatorName);

        putFolder("Isocontours", "Data isocontours (" + interpolatorName + ")", false, false);
        
        unsigned int j = 0;
        for(const auto &temporalIsocontours : interpIsocontours) {
            unsigned int i = 1;
            for(auto isocontour = std::next(temporalIsocontours.begin()); isocontour != temporalIsocontours.end(); ++isocontour) {
                auto prev = std::prev(isocontour);
                putColorPolygons("Isocontour level " + std::to_string(i++), 
                        "Min value: " + std::to_string(isocontour->lowerValue) + " mg/m³\n"
                        "Max value: " + std::to_string(isocontour->upperValue) + " mg/m³", 
                        "IsoContour_", 
                        ColorMultiLine<double,4u>(isocontour->lines, isocontour->color),
                        ColorMultiLine<double,4u>(prev->lines, prev->color),
                        false,
                        sensorData.getTime(j), 
                        sensorData.getTime(j+1, true),
                        ABSOLUTE
                    );
            }
            j++;
        }

        endFolder();
        skipLine();
    }
Пример #15
0
void InConfig::skipWhitespace(PhysicalInStream& stream)
{
  while(!isEof(stream) && isWhitespace())
  {
    while(!isEof(stream) && InText::isWhitespace())
      nextChar(stream);
    if(!isEof(stream))
    {
      if(theChar == '/' && theNextChar == '/')
        skipLine(stream);
      else if(theChar == '/' && theNextChar == '*')
        skipComment(stream);
      else if(theChar == '#')
        skipLine(stream);
    }
  }
}
Пример #16
0
scene* sceneLoad()
{
	int i, numSpheres = 0, numLights = 0, antiAliasing, resolution, recursion;
	FILE *sceneFile = fopen("scene.dat", "r");
	if (!sceneFile) {
		printf("Scene file 'scene.dat' not found!");
		return NULL;
	}

	scene *s = (scene*)malloc(sizeof(scene));

	skipLine(sceneFile);
	(void) fscanf(sceneFile, "%f %f %f", &s->bgcolor.x, &s->bgcolor.y, &s->bgcolor.z);

	skipLine(sceneFile);
	(void) fscanf(sceneFile, "%f %f %f", &s->camera.x, &s->camera.y, &s->camera.z);

	skipLine(sceneFile);
	(void) fscanf(sceneFile, "%d %d %d %d %d", &numSpheres, &numLights, &resolution, &antiAliasing, &recursion);
	s->numSpheres = numSpheres + 0.5f;
	s->numLights = numLights + 0.5f;
	s->resolution = resolution + 0.5;
	s->antiAliasing = antiAliasing + 0.5;
	s->rayDepth = recursion + 0.5;

	skipLine(sceneFile);
	for (i = 0; i < numSpheres; i++)
	{
		(void) fscanf(sceneFile, "%f %f %f", &s->spheres[i].position.x, &s->spheres[i].position.y, &s->spheres[i].position.z);
		(void) fscanf(sceneFile, "%f %f %f", &s->spheres[i].color.x, &s->spheres[i].color.y, &s->spheres[i].color.z);
		(void) fscanf(sceneFile, "%f", &s->spheres[i].radius);
		(void) fscanf(sceneFile, "%f", &s->spheres[i].reflection);
	}

	skipLine(sceneFile);
	for (i = 0; i < numLights; i++)
	{
		(void) fscanf(sceneFile, "%f %f %f", &s->lights[i].position.x, &s->lights[i].position.y, &s->lights[i].position.z);
		(void) fscanf(sceneFile, "%f %f %f", &s->lights[i].color.x, &s->lights[i].color.y, &s->lights[i].color.z);
	}

	fclose(sceneFile);

	return s;
}
Пример #17
0
 void KmlGenerator::putStations() {
     putFolder("Stations", "Station locations", false, true);
     for (unsigned int i = 0; i < sensorData.nStations; i++) {
         putPlaceMark(*sensorData.stationNames[i], sensorData.stationDescription(i,getCurrentIndentLevel()+2), "StationStyle", 
                 sensorData.x[i], sensorData.y[i], 0.0, CLAMP_TO_GROUND);
     }
     endFolder();
     skipLine();
 }
Пример #18
0
/* From DP_SLAM readme, odometry format needs to be:
ODOMETRY <x> <y> <theta>
The first argument denotes this as a reading from the robot's odometer. 
<x> and <y> are the robot's current position from some arbitrary 
starting point. These measures are in meters. <theta> is robot's 
current facing angle, in radians.*/
void outputOdometry(FILE* fin, FILE* fout) {
//1245349407.171 16777343 6665 position2d 00 001 001 +00.439 -00.027 -0.101 +00.000 +00.000 +00.000 0
	float x, y, theta;
	fprintf(fout, "Odometry ");
	fscanf(fin, "%f%f%f", &x, &y, &theta);
	fprintf(fout, "%f %f %f \n", x, y, theta);
	printf("%f %f %f \n", x, y, theta);
	skipLine(fin);
	fflush(fout);
}
Пример #19
0
	void Tokenizer::readLine(std::string& s, bool skipline) {
		std::string::size_type pos = m_sText.find("\n");
		if (pos == std::string::npos) {
			s = m_sText;
		}
		else {
			s = m_sText.substr(0,pos);
		}
		if (skipline) skipLine(1);
	}
Пример #20
0
    void KmlGenerator::putKmlHeader() {
        time_t t = time(0);
        std::tm *now = localtime(&t);

        startKml();
        skipLine();
        putComment("=====================================================================================================================");
        putComment("This file was generated automatically with real meteorological data and is part of the Ensimag visualization project.");
        putComment("=====================================================================================================================");
        skipLine();
        startDocument("Root");
        putName("Environemental contaminant viewer");
        putDescription("PM10 particles");
        putDate(*now, YYYY_MM_DD_hh_mm_ss);
        putAuthor("Jean-Baptiste Keck");
        putAuthor("Alexandre Ribard");
        skipLine();
        putVisibility(true);
        putOpen(true);
        skipLine();
    }
Пример #21
0
	std::string Tokenizer::readLine(bool skipline) {
		std::string::size_type pos = m_sText.find("\n");
		std::string s;
		if (pos == std::string::npos) {
			s = m_sText;
		}
		else {
			s = m_sText.substr(0,pos);
		}
		if (skipline) skipLine(1);
		return s;
	}
Пример #22
0
static void parse_DIMACS_main(B& in, Solver& S) {
    vec<Lit> lits;
    for (;;){
        skipWhitespace(in);
        if (*in == EOF)
            break;
        else if (*in == 'c' || *in == 'p')
            skipLine(in);
        else
            readClause(in, S, lits),
            S.addClause(lits);
    }
}
Пример #23
0
void realNumberOfCPU(int* nRealCPU, int* nCPU)
{
	char buffer [STAT_BUFSIZ];
	char* p = buffer;

	fileToBuffer(buffer, sizeof buffer, FILENAME);

	// cpu
	p = skipLine(p);

	for(nRealCPU = 0; ; nRealCPU++)
	{
		if(!checkCPULine(p, nRealCPU))
		{
			nRealCPU--;
			break;
		}

		p = skipLine(p);
	}

	nCPU = MIN(MONITA_NCPU - 1, nRealCPU);
}
Пример #24
0
int
readMMHeader(
	     SCOTCH_Num * vertnbr,
	     SCOTCH_Num * edgenbr,
FILE * const stream)
{
  int c;
  SCOTCH_Num vertnum0, vertnum1;
  int symmetric = 0;
  char firstline[1024];
  int pos = 0;

  memSet(firstline, '\0', 1024);
  fgets(firstline, 16, stream);

  if (strcmp(firstline, "%%MatrixMarket "))
    return (-1);

  while (((c = fgetc(stream)) != '\n') && (c != EOF)) {
    firstline[pos++] = toupper(c);
    if (pos == 1024)
      return (-1);
  }
  firstline[pos] = '\0';

  if (strstr(firstline, "SYMMETRIC"))
    symmetric = 1;

  while ((c = fgetc(stream)) == '%') {
    if (skipLine(stream) != 0)
      return (-1);                                /* End of file reached */
  }
  ungetc (c, stream);

  if (intLoad (stream, &vertnum0) != 1) {         /* Read row number */
    return (-1);
  }
  if (intLoad (stream, &vertnum1) != 1) {         /* Read col number */
    return (-1);
  }
  if (vertnum0 != vertnum1) {                     /* Non square matrix */
      return (-1);
  }
  *vertnbr = vertnum1;
  if (intLoad (stream, edgenbr) != 1) { /* Read edge number */
    return (-1);
  }
  *edgenbr -= *vertnbr;           /* No loop in graph */
  return (symmetric);
}
Пример #25
0
static void getCharacter(void)
{
  /* Get the next character from the line buffer.  If EOL, get next line */

  inChar = *(FP->cp)++;
  if (!inChar)
    {
      /* We have used all of the characters on this line.  Read the next
       * line of data
       */

      skipLine();
    }
}
Пример #26
0
void PlayerHeader::readHeader(FILE* fp) {
	char buf[BUFSIZE];
	fscanf(fp, "%128s", buf);
	if (buf[0] == '#') {
		// A comment is encountered, assume this is not a valid header
		// Skip everything in a line that's started with a comment
		skipLine(fp);
		valid = false;
		return;
	}
	valid = true;
	time = atof(buf);
	fscanf(fp, "%u%u%128s%u%u%u", &host, &robot, interfaceName, &index, &type, &subtype);
}
Пример #27
0
void outputOdometry(PlayerHeader h, FILE* fin, FILE* fout) {
//1245349407.171 fly 6665 position2d 00 001 001 +00.439 -00.027 -0.101 +00.000 +00.000 +00.000 0
//1053653857.290 fly 6665 position 00 1053652583.883 +01.200 -00.910 -1.501 -0.005 +0.000 +0.000
	float x, y, theta;
	float a, b, c, d;
	fprintf(fout, "%lf %u %u %s %u %u %u ", h.time, h.host, h.robot, h.interfaceName, h.index, h.type, h.subtype);
	fscanf(fin, "%f%f%f", &x, &y, &theta, &a, &b, &c, &d);
	float newtheta = sqrt(abs(theta));
	if (theta < 0) newtheta *= -1;
	fprintf(fout, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f\n", x, y, newtheta, a, b, c, d);
	printf("%.2f\n", theta);
	skipLine(fin);
	fflush(fout);
}
Пример #28
0
void MeshManager::getVector2(std::vector<glm::vec2>* vertices, char* buffer, int* i){
	getNextWord(buffer, i);
	float x, y;

	copyNextWord(tempBuffer, BUFFERSIZE, buffer, i);
	x = (float) fast_atof(tempBuffer);

	copyNextWord(tempBuffer, BUFFERSIZE, buffer, i);
	y = (float) fast_atof(tempBuffer);

	vertices->push_back(glm::vec2(x, y));

	skipLine(buffer, i);
}
Пример #29
0
void
MIFrfile::skipImport()
{
  int ch;

  skipLine();

  while ((ch = getChar()) != EOF) {
    switch (ch) {
      case '&':
      case '=':
        skipLine();
        break;
      case '\n':
      case '\r':
      case ' ':
        break;
      default:
        ungetChar(ch);
        return;
    }
  }
}
Пример #30
0
unsigned int hokuyo_readStatus(HokuyoURG* urg, char* cmd){
  char buf[URG_BUFSIZE];
  write (urg->fd,  cmd, strlen(cmd));
  while (1){
    int c=hokuyo_readPacket(urg, buf, URG_BUFSIZE,10);
    if (c>0 && !strncmp(buf,cmd+1,strlen(cmd)-1)){
      char*s=buf;
      s=skipLine(s);
      char v[3]={s[0], s[1], 0};
      return atoi(v);
    }
  }
  return 0;
    
}