⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 showme.c

📁 一个用于三角剖分的类.实用性非常好。对于需要从多边形
💻 C
📖 第 1 页 / 共 5 页
字号:
    syntax();  }  if (!strcmp(&filename[strlen(filename) - 5], ".node")) {    filename[strlen(filename) - 5] = '\0';    start_image = NODE;  }  if (!strcmp(&filename[strlen(filename) - 5], ".poly")) {    filename[strlen(filename) - 5] = '\0';    start_image = POLY;  }  if (!strcmp(&filename[strlen(filename) - 4], ".ele")) {    filename[strlen(filename) - 4] = '\0';    start_image = ELE;  }  if (!strcmp(&filename[strlen(filename) - 5], ".edge")) {    filename[strlen(filename) - 5] = '\0';    start_image = EDGE;  }  if (!strcmp(&filename[strlen(filename) - 5], ".part")) {    filename[strlen(filename) - 5] = '\0';    start_image = PART;  }  if (!strcmp(&filename[strlen(filename) - 4], ".adj")) {    filename[strlen(filename) - 4] = '\0';    start_image = ADJ;  }  increment = 0;  j = 1;  while (filename[j] != '\0') {    if ((filename[j] == '.') && (filename[j + 1] != '\0')) {      increment = j + 1;    }    j++;  }  meshnumber = 0;  if (increment > 0) {    j = increment;    do {      if ((filename[j] >= '0') && (filename[j] <= '9')) {        meshnumber = meshnumber * 10 + (int) (filename[j] - '0');      } else {        increment = 0;      }      j++;    } while (filename[j] != '\0');  }  if (increment > 0) {    filename[increment - 1] = '\0';  }  if (meshnumber == 0) {    start_inc = 0;    loweriteration = 0;  } else {    start_inc = 1;    loweriteration = meshnumber - 1;  }  set_filenames(filename, loweriteration);}void free_inc(inc)int inc;{  if (loaded[inc][NODE]) {    free(nodeptr[inc]);  }  if (loaded[inc][POLY]) {    if (polynodes[inc] > 0) {      free(polynodeptr[inc]);    }    free(polyedgeptr[inc]);    free(polyholeptr[inc]);  }  if (loaded[inc][ELE]) {    free(eleptr[inc]);  }  if (loaded[inc][PART]) {    free(partpart[inc]);    free(partcenter[inc]);    free(partshift[inc]);  }  if (loaded[inc][EDGE]) {    free(edgeptr[inc]);    free(normptr[inc]);  }  if (loaded[inc][ADJ]) {    free(adjptr[inc]);  }  if (loaded[inc][VORO]) {    free(vnodeptr[inc]);    free(vedgeptr[inc]);    free(vnormptr[inc]);  }}void move_inc(inc)int inc;{  int i;  free_inc(1 - inc);  for (i = 0; i < IMAGE_TYPES; i++) {    loaded[1 - inc][i] = loaded[inc][i];    loaded[inc][i] = 0;    xlo[1 - inc][i] = xlo[inc][i];    ylo[1 - inc][i] = ylo[inc][i];    xhi[1 - inc][i] = xhi[inc][i];    yhi[1 - inc][i] = yhi[inc][i];  }  nodes[1 - inc] = nodes[inc];  node_dim[1 - inc] = node_dim[inc];  nodeptr[1 - inc] = nodeptr[inc];  polynodes[1 - inc] = polynodes[inc];  poly_dim[1 - inc] = poly_dim[inc];  polyedges[1 - inc] = polyedges[inc];  polyholes[1 - inc] = polyholes[inc];  polynodeptr[1 - inc] = polynodeptr[inc];  polyedgeptr[1 - inc] = polyedgeptr[inc];  polyholeptr[1 - inc] = polyholeptr[inc];  elems[1 - inc] = elems[inc];  ele_corners[1 - inc] = ele_corners[inc];  eleptr[1 - inc] = eleptr[inc];  edges[1 - inc] = edges[inc];  edgeptr[1 - inc] = edgeptr[inc];  normptr[1 - inc] = normptr[inc];  subdomains[1 - inc] = subdomains[inc];  partpart[1 - inc] = partpart[inc];  partcenter[1 - inc] = partcenter[inc];  partshift[1 - inc] = partshift[inc];  adjsubdomains[1 - inc] = adjsubdomains[inc];  adjptr[1 - inc] = adjptr[inc];  vnodes[1 - inc] = vnodes[inc];  vnode_dim[1 - inc] = vnode_dim[inc];  vnodeptr[1 - inc] = vnodeptr[inc];  vedges[1 - inc] = vedges[inc];  vedgeptr[1 - inc] = vedgeptr[inc];  vnormptr[1 - inc] = vnormptr[inc];  firstnumber[1 - inc] = firstnumber[inc];  firstnumber[inc] = -1;}void unload_inc(inc)int inc;{  int i;  current_image = NOTHING;  for (i = 0; i < IMAGE_TYPES; i++) {    loaded[inc][i] = 0;    firstnumber[inc] = -1;  }}void showme_init(){  current_image = NOTHING;  current_inc = 0;  explosion = STARTEXPLOSION;  unload_inc(0);  unload_inc(1);}char *readline(string, infile, infilename)char *string;FILE *infile;char *infilename;{  char *result;  do {    result = fgets(string, INPUTLINESIZE, infile);    if (result == (char *) NULL) {      printf("  Error:  Unexpected end of file in %s.\n",             infilename);      exit(1);    }    while ((*result != '\0') && (*result != '#')           && (*result != '.') && (*result != '+') && (*result != '-')           && ((*result < '0') || (*result > '9'))) {      result++;    }  } while ((*result == '#') || (*result == '\0'));  return result;}char *findfield(string)char *string;{  char *result;  result = string;  while ((*result != '\0') && (*result != '#')         && (*result != ' ') && (*result != '\t')) {    result++;  }  while ((*result != '\0') && (*result != '#')         && (*result != '.') && (*result != '+') && (*result != '-')         && ((*result < '0') || (*result > '9'))) {    result++;  }  if (*result == '#') {    *result = '\0';  }  return result;}int load_node(fname, firstnumber, nodes, dim, ptr, xmin, ymin, xmax, ymax)char *fname;int *firstnumber;int *nodes;int *dim;REAL **ptr;REAL *xmin;REAL *ymin;REAL *xmax;REAL *ymax;{  FILE *infile;  char inputline[INPUTLINESIZE];  char *stringptr;  int extras;  int nodemarks;  int index;  int nodenumber;  int i, j;  int smallerr;  REAL x, y;  *xmin = *ymin = 0.0;  *xmax = *ymax = 1.0;  if (!quiet) {    printf("Opening %s.\n", fname);  }  infile = fopen(fname, "r");  if (infile == (FILE *) NULL) {    printf("  Error:  Cannot access file %s.\n", fname);    return 1;  }  stringptr = readline(inputline, infile, fname);  *nodes = (int) strtol (stringptr, &stringptr, 0);  if (*nodes < 3) {    printf("  Error:  %s contains %d points.\n", fname, *nodes);    return 1;  }  stringptr = findfield(stringptr);  if (*stringptr == '\0') {    *dim = 2;  } else {    *dim = (int) strtol (stringptr, &stringptr, 0);  }  if (*dim < 1) {    printf("  Error:  %s has dimensionality %d.\n", fname, *dim);    return 1;  }  if (*dim != 2) {    printf("  I only understand two-dimensional meshes.\n");    return 1;  }  stringptr = findfield(stringptr);  if (*stringptr == '\0') {    extras = 0;  } else {    extras = (int) strtol (stringptr, &stringptr, 0);  }  if (extras < 0) {    printf("  Error:  %s has negative value for number of attributes.\n",           fname);    return 1;  }  stringptr = findfield(stringptr);  if (*stringptr == '\0') {    nodemarks = 0;  } else {    nodemarks = (int) strtol (stringptr, &stringptr, 0);  }  if (nodemarks < 0) {    printf("  Warning:  %s has negative value for number of point markers.\n",           fname);  }  if (nodemarks > 1) {    printf(   "  Warning:  %s has value greater than one for number of point markers.\n",           fname);  }  *ptr = (REAL *) malloc((*nodes + 1) * *dim * sizeof(REAL));  if (*ptr == (REAL *) NULL) {    printf("  Out of memory.\n");    return 1;  }  index = *dim;  smallerr = 1;  for (i = 0; i < *nodes; i++) {    stringptr = readline(inputline, infile, fname);    nodenumber = (int) strtol (stringptr, &stringptr, 0);    if ((i == 0) && (*firstnumber == -1)) {      if (nodenumber == 0) {        *firstnumber = 0;      } else {        *firstnumber = 1;      }    }    if ((nodenumber != *firstnumber + i) && (smallerr)) {      printf("  Warning:  Points in %s are not numbered correctly\n", fname);      printf("            (starting with point %d).\n", *firstnumber + i);      smallerr = 0;    }    for (j = 0; j < *dim; j++) {      stringptr = findfield(stringptr);      if (*stringptr == '\0') {        printf("Error:  Point %d is missing a coordinate in %s.\n",               *firstnumber + i, fname);        free(*ptr);        return 1;      }      (*ptr)[index++] = (REAL) strtod(stringptr, &stringptr);    }  }  fclose(infile);  index = *dim;  *xmin = *xmax = (*ptr)[index];  *ymin = *ymax = (*ptr)[index + 1];  for (i = 2; i <= *nodes; i++) {    index += *dim;    x = (*ptr)[index];    y = (*ptr)[index + 1];    if (x < *xmin) {      *xmin = x;    }    if (y < *ymin) {      *ymin = y;    }    if (x > *xmax) {      *xmax = x;    }    if (y > *ymax) {      *ymax = y;    }  }  if (*xmin == *xmax) {    *xmin -= 0.5;    *xmax += 0.5;  }  if (*ymin == *ymax) {    *ymin -= 0.5;    *ymax += 0.5;  }  return 0;}int load_poly(inc, fname, firstnumber, pnodes, dim, edges, holes, nodeptr,              edgeptr, holeptr, xmin, ymin, xmax, ymax)int inc;char *fname;int *firstnumber;int *pnodes;int *dim;int *edges;int *holes;REAL **nodeptr;int **edgeptr;REAL **holeptr;REAL *xmin;REAL *ymin;REAL *xmax;REAL *ymax;{  FILE *infile;  char inputline[INPUTLINESIZE];  char *stringptr;  int extras;  int nodemarks;  int segmentmarks;  int index;  int nodenumber, edgenumber, holenumber;  int maxnode;  int i, j;  int smallerr;  REAL x, y;  if (!quiet) {    printf("Opening %s.\n", fname);  }  infile = fopen(fname, "r");  if (infile == (FILE *) NULL) {    printf("  Error:  Cannot access file %s.\n", fname);    return 1;  }  stringptr = readline(inputline, infile, fname);  *pnodes = (int) strtol (stringptr, &stringptr, 0);  if (*pnodes == 0) {    if (!loaded[inc][NODE]) {      if (load_image(inc, NODE)) {        return 1;      }    }    maxnode = nodes[inc];    *xmin = xlo[inc][NODE];    *ymin = ylo[inc][NODE];    *xmax = xhi[inc][NODE];    *ymax = yhi[inc][NODE];  } else {    if (*pnodes < 1) {      printf("  Error:  %s contains %d points.\n", fname, *pnodes);      return 1;    }    maxnode = *pnodes;  }  stringptr = findfield(stringptr);  if (*stringptr == '\0') {    *dim = 2;  } else {    *dim = (int) strtol (stringptr, &stringptr, 0);  }  if (*dim < 1) {    printf("  Error:  %s has dimensionality %d.\n", fname, *dim);    return 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -