コード例 #1
0
char* dgc_next_n_words(char *str, int n) {
    int i;
    char *result;

    result = str;
    for (i = 0; i < n; i++)
        result = dgc_next_word(result);
    return result;
}
コード例 #2
0
int dgc_transform_read(dgc_transform_t t, const char *filename)
{
  FILE *fp;
  char *err, *mark, *unit, line[1001];
  double arg, x, y, z;
  
  /* start with identity transform */
  dgc_transform_identity(t);
  fp = fopen(filename, "r");
  if(fp == NULL) {
    dgc_warning("Error: could not open transform file %s.\n", filename);
    return -1;
  }
  do {
    err = fgets(line, 1000, fp);
    if(err != NULL) {
      unit = dgc_next_word(line);
      mark = dgc_next_word(unit);
      if(strncasecmp(line, "rx ", 3) == 0) {
        arg = strtod(mark, &mark);
        if(strncasecmp(unit, "deg", 3) == 0)
          arg = dgc_d2r(arg);
	dgc_transform_rotate_x(t, arg);	
      }
      else if(strncasecmp(line, "ry ", 3) == 0) {
        arg = strtod(mark, &mark);
        if(strncasecmp(unit, "deg", 3) == 0)
          arg = dgc_d2r(arg);
	dgc_transform_rotate_y(t, arg);
      }
      else if(strncasecmp(line, "rz ", 3) == 0) {
        arg = strtod(mark, &mark);
        if(strncasecmp(unit, "deg", 3) == 0)
          arg = dgc_d2r(arg);
	dgc_transform_rotate_z(t, arg);
      }
      else if(strncasecmp(line, "t ", 2) == 0) {
	char *a = strdup("test");
	x = strtod(mark, &mark);
	y = strtod(mark, &mark);
        z = strtod(mark, &mark);
	
        if(strncasecmp(unit, "in", 2) == 0) {
          x *= 0.0254;
          y *= 0.0254;
          z *= 0.0254;
        }
        else if(strncasecmp(unit, "cm", 2) == 0) {
          x *= 0.01;
          y *= 0.01;
          z *= 0.01;
        }
        dgc_transform_translate(t, x, y, z);
      }
      else {
        dgc_warning("Error: could not parse line \"%s\" from %s\n", 
		    line, filename);
        return -1;
      }
      
    }
  } while(err != NULL);
  fclose(fp);
  return 0;
}
コード例 #3
0
int dgc_transform_read_string(dgc_transform_t t, char *str)
{
  int done;
  char *end, *mark, *mark2, *unit;
  char line[1001];
  double arg, x, y, z;

  /* start with identity transform */
  dgc_transform_identity(t);

  if(str != NULL) {
    mark = str;
    done = 0;
    do {
      end = strchr(mark, '\n');
      if(end == NULL) {
        strcpy(line, mark);
        done = 1;
      }
      else {
        strncpy(line, mark, end - mark + 1);
        line[end - mark + 1] = '\0';
        mark = end + 1;
      }

      if(strlen(line) > 0) {
        unit = dgc_next_word(line);
        mark2 = dgc_next_word((char *)unit);
        
        if(strncasecmp(line, "rx ", 3) == 0) {
          arg = strtod(mark2, &mark2);
          if(strncasecmp(unit, "deg", 3) == 0)
            arg = dgc_d2r(arg);
          dgc_transform_rotate_x(t, arg);
        }
        else if(strncasecmp(line, "ry ", 3) == 0) {
          arg = strtod(mark2, &mark2);
          if(strncasecmp(unit, "deg", 3) == 0)
            arg = dgc_d2r(arg);
          dgc_transform_rotate_y(t, arg);
        }
        else if(strncasecmp(line, "rz ", 3) == 0) {
          arg = strtod(mark2, &mark2);
          if(strncasecmp(unit, "deg", 3) == 0)
            arg = dgc_d2r(arg);
          dgc_transform_rotate_z(t, arg);
        }
        else if(strncasecmp(line, "t ", 2) == 0) {
          x = strtod(mark2, &mark2);
          y = strtod(mark2, &mark2);
          z = strtod(mark2, &mark2);
          if(strncasecmp(unit, "in", 2) == 0) {
            x *= 0.0254;
            y *= 0.0254;
            z *= 0.0254;
          }
          else if(strncasecmp(unit, "cm", 2) == 0) {
            x *= 0.01;
            y *= 0.01;
            z *= 0.01;
          }
          dgc_transform_translate(t, x, y, z);
        }
        else {
          dgc_warning("Error: could not parse line \"%s\" from transform\n", 
		      line);
          return -1;
        }
      }
    } while(!done);
  }
  return 0;
}