void SplineGeometry::LoadData(std::istream& infile) { MESHIT_LOG_INFO("Load 2D Geometry"); Point2d x; char buf[50], ch; std::string keyword; std::string flag; int nb_domains = 0; TestComment(infile); // refinement factor infile >> elto0; while (infile.good()) { TestComment(infile); infile >> keyword; ch = TestComment(infile); if (keyword == "points") { std::vector<GeomPoint> points; std::vector<PointIndex> point_ids; size_t point_id; size_t nb_points = 0; while (!isalpha(static_cast<int>(ch))) { infile >> point_id; // point ids are 1-based if (point_id > nb_points) nb_points = point_id; point_ids.push_back(point_id); infile >> x.X() >> x.Y() >> ch; Flags flags; while (ch == '-') { infile >> flag; flags.SetCommandLineFlag(flag); ch = TestComment(infile); } infile.unget(); ch = TestComment(infile); points.push_back(GeomPoint(x, flags.GetNumFlag("ref", 1.0), flags.GetNumFlag("maxh", 1e99))); } geompoints.resize(nb_points); for (size_t i = 0; i < nb_points; i++) { geompoints[point_ids[i] - 1] = points[i]; } } else if (keyword == "segments") {
void SplineGeometry2d :: LoadData ( ifstream & infile ) { enum { D = 2 }; int nump, numseg, leftdom, rightdom; Point<D> x; int hi1, hi2, hi3; double hd; char buf[50], ch; materials.SetSize(0); maxh.SetSize(0); infile >> elto0; TestComment ( infile ); infile >> nump; for (int i = 0; i < nump; i++) { TestComment ( infile ); for(int j=0; j<D; j++) infile >> x(j); infile >> hd; Flags flags; ch = 'a'; // infile >> ch; do { infile.get (ch); } while (isspace(ch) && ch != '\n'); while (ch == '-') { char flag[100]; flag[0]='-'; infile >> (flag+1); flags.SetCommandLineFlag (flag); ch = 'a'; do { infile.get (ch); } while (isspace(ch) && ch != '\n'); } if (infile.good()) infile.putback (ch); geompoints.Append (GeomPoint<D>(x, hd)); geompoints.Last().hpref = flags.GetDefineFlag ("hpref"); geompoints.Last().hmax = 1e99; } // PrintMessage (3, nump, " points loaded"); TestComment ( infile ); infile >> numseg; bcnames.SetSize(numseg); for ( int i = 0; i < numseg; i++ ) bcnames[i] = 0; // "default"; SplineSeg<D> * spline = 0; // PrintMessage (3, numseg, " segments loaded"); for (int i = 0; i < numseg; i++) { TestComment ( infile ); infile >> leftdom >> rightdom; infile >> buf; // type of spline segement if (strcmp (buf, "2") == 0) { // a line infile >> hi1 >> hi2; spline = new LineSeg<D>(geompoints[hi1-1], geompoints[hi2-1]); } else if (strcmp (buf, "3") == 0)
void SplineGeometry<D> :: LoadDataV2 ( ifstream & infile ) { cout << "Load Geometry V2" << endl; int nump, numseg, leftdom, rightdom; Point<D> x; int hi1, hi2, hi3; double hd; char buf[50], ch; int pointnr; string keyword; ARRAY < GeomPoint<2> > infilepoints (0); ARRAY <int> pointnrs (0); nump = 0; int numdomains = 0; TestComment ( infile ); // refinement factor infile >> elto0; TestComment ( infile ); // test if next ch is a letter, i.e. new keyword starts bool ischar = false; while ( infile.good() ) { infile >> keyword; ischar = false; if ( keyword == "points" ) { cout << "load points" << endl; infile.get(ch); infile.putback(ch); // test if ch is a letter if ( int(ch) >= 65 && int(ch) <=90 ) ischar = true; if ( int(ch) >= 97 && int(ch) <= 122 ) ischar = true; while ( ! ischar ) { TestComment ( infile ); infile >> pointnr; // pointnrs 1-based if ( pointnr > nump ) nump = pointnr; pointnrs.Append(pointnr); for(int j=0; j<D; j++) infile >> x(j); // hd is now optional, default 1 // infile >> hd; hd = 1; Flags flags; // get flags, ch = 'a'; // infile >> ch; do { infile.get (ch); // if another int-value, set refinement flag to this value // (corresponding to old files) if ( int (ch) >= 48 && int(ch) <= 57 ) { infile.putback(ch); infile >> hd; infile.get(ch); } } while (isspace(ch) && ch != '\n'); while (ch == '-') { char flag[100]; flag[0]='-'; infile >> (flag+1); flags.SetCommandLineFlag (flag); ch = 'a'; do { infile.get (ch); } while (isspace(ch) && ch != '\n'); } if (infile.good()) infile.putback (ch); if ( hd == 1 ) hd = flags.GetNumFlag ( "ref", 1.0); // geompoints.Append (GeomPoint<D>(x, hd)); infilepoints.Append ( GeomPoint<D>(x, hd) ); infilepoints.Last().hpref = flags.GetDefineFlag ("hpref"); TestComment(infile); infile.get(ch); infile.putback(ch); // test if letter if ( int(ch) >= 65 && int(ch) <=90 ) ischar = true; if ( int(ch) >= 97 && int(ch) <= 122 ) ischar = true; } // infile.putback (ch); geompoints.SetSize(nump); for ( int i = 0; i < nump; i++ ) { geompoints[pointnrs[i] - 1] = infilepoints[i]; geompoints[pointnrs[i] - 1].hpref = infilepoints[i].hpref; } TestComment(infile); } else if ( keyword == "segments" )