diff --git a/utils/misc/mshsort.cpp b/utils/misc/mshsort.cpp index 021844ff57158c308c8355aac1cd82a5e039e65c..d1117edd0e05971e49768d238895409f699ec234 100644 --- a/utils/misc/mshsort.cpp +++ b/utils/misc/mshsort.cpp @@ -1,4 +1,4 @@ -// $Id: mshsort.cpp,v 1.4 2004-11-08 17:03:07 geuzaine Exp $ +// $Id: mshsort.cpp,v 1.5 2004-12-17 06:15:52 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -201,7 +201,8 @@ double readMesh(FILE *fp, map<int, node*> &nodes, vector<element*> &elements) return version; } -void printMesh(FILE *fp, double version, map<int, node*> nodes, vector<element*> elements) +void printMesh(FILE *fp, double version, map<int, node*> nodes, vector<element*> elements, + int nodeStartIndex=1, int elementStartIndex=1) { map<int, node*>::const_iterator it = nodes.begin(); map<int, node*>::const_iterator ite = nodes.end(); @@ -216,9 +217,8 @@ void printMesh(FILE *fp, double version, map<int, node*> nodes, vector<element*> fprintf(fp, "$NOD\n"); fprintf(fp, "%d\n", (int)nodes.size()); - int index = 1; for(;it!=ite;++it){ - it->second->setNum(index++); + it->second->setNum(nodeStartIndex++); it->second->print(fp, version); } @@ -233,7 +233,7 @@ void printMesh(FILE *fp, double version, map<int, node*> nodes, vector<element*> fprintf(fp, "%d\n", (int)elements.size()); for(unsigned int i = 0; i < elements.size(); i++){ - elements[i]->setNum(i+1); + elements[i]->setNum(elementStartIndex++); elements[i]->print(fp, version); } @@ -245,9 +245,10 @@ void printMesh(FILE *fp, double version, map<int, node*> nodes, vector<element*> int main(int argc, char **argv) { - if(argc < 2 || argc > 3){ + if(argc < 2){ fprintf(stderr, "mshsort, a utility to reorder the node and element lists in Gmsh MSH files\n"); - fprintf(stderr, "Usage: %s in.msh [out.msh]\n", argv[0]); + fprintf(stderr, "Usage: %s in.msh [out.msh] [node_start_index] [element_start_index]\n", + argv[0]); exit(1); } @@ -256,7 +257,7 @@ int main(int argc, char **argv) fprintf(stderr, "Error: Unable to open input file '%s'\n", argv[1]); exit(1); } - if(argc == 3){ + if(argc >= 3){ if(!(out = fopen(argv[2], "w"))){ fprintf(stderr, "Error: Unable to open output file '%s'\n", argv[2]); exit(1); @@ -265,9 +266,12 @@ int main(int argc, char **argv) else{ out = stdout; } + + int nodeStartIndex = (argc >= 4) ? atoi(argv[3]) : 1; + int elementStartIndex = (argc >= 5) ? atoi(argv[4]) : 1; map<int, node*> nodes; vector<element*> elements; double version = readMesh(in, nodes, elements); - printMesh(out, version, nodes, elements); + printMesh(out, version, nodes, elements, nodeStartIndex, elementStartIndex); }