OSErr GridCurrentMover_c::TextRead(char *path, char *topFilePath) { // this code is for curvilinear grids OSErr err = 0; short gridType, selectedUnits; char fileNamesPath[256], filePath[256]; Boolean isNetCDFPathsFile = false; TimeGridVel *newTimeGrid = nil; memset(fileNamesPath, 0, 256); memset(filePath, 0, 256); strcpy(filePath,path); // this gets altered in IsNetCDFPathsFile, eventually change that function // NetCDF is a binary file format, so we will continue to just pass in a path. if (IsNetCDFFile(path, &gridType) || IsNetCDFPathsFile(filePath, &isNetCDFPathsFile, fileNamesPath, &gridType)) { if (gridType == CURVILINEAR) { newTimeGrid = new TimeGridVelCurv(); } else if (gridType == TRIANGULAR) { newTimeGrid = new TimeGridVelTri(); } else { newTimeGrid = new TimeGridVelRect(); } if (newTimeGrid) { // TODO: This would be more efficient if IsNetCDFFile() would leave the file // open and pass back an active ncid err = newTimeGrid->TextRead(filePath, topFilePath); if(err) return err; this->SetTimeGrid(newTimeGrid); } if (isNetCDFPathsFile) { //char errmsg[256]; err = timeGrid->ReadInputFileNames(fileNamesPath); if (err) return err; timeGrid->DisposeAllLoadedData(); //err = ((NetCDFMover*)newMover)->SetInterval(errmsg); // if set interval here will get error if times are not in model range } return err; } // All other file formats are line-formatted text files vector<string> linesInFile; if (ReadLinesInFile(path, linesInFile)) { linesInFile = rtrim_empty_lines(linesInFile); } else return -1; // we failed to read in the file. if (IsPtCurFile(linesInFile)) { newTimeGrid = new TimeGridCurTri(); if (newTimeGrid) { //err = this->InitMover(newTimeGrid); //if(err) goto Error; // do this in two steps since we need the uncertainty parameters for the grid mover err = dynamic_cast<TimeGridCurTri*>(newTimeGrid)->ReadHeaderLines(path,&fUncertainParams); err = newTimeGrid->TextRead(path,""); if(err) return err; // set the TCurrentMover uncertainty parameters // only along and across can be set in the file (uncertainty min is not implemented so should stay zero fDownCurUncertainty = -fUncertainParams.alongCurUncertainty; fUpCurUncertainty = fUncertainParams.alongCurUncertainty; fRightCurUncertainty = fUncertainParams.crossCurUncertainty; fLeftCurUncertainty = -fUncertainParams.crossCurUncertainty; this->SetTimeGrid(newTimeGrid); if (!err) /// JLM 5/3/10 { //char errmsg[256]; //err = timeGrid->ReadInputFileNames(fileNamesPath); timeGrid->DisposeAllLoadedData(); //if(!err) err = timeGrid->SetInterval(errmsg,model->GetModelTime()); // if set interval here will get error if times are not in model range } } } else if (IsGridCurTimeFile(linesInFile, &selectedUnits)) { //cerr << "we are opening a GridCurTimeFile..." << "'" << path << "'" << endl; newTimeGrid = new TimeGridCurRect(); //timeGrid = new TimeGridVel(); if (newTimeGrid) { //err = this->InitMover(timeGrid); //if(err) goto Error; dynamic_cast<TimeGridCurRect*>(newTimeGrid)->fUserUnits = selectedUnits; err = newTimeGrid->TextRead(path,""); if(err) goto Error; this->SetTimeGrid(newTimeGrid); if (!err /*&& isNetCDFPathsFile*/) /// JLM 5/3/10 { //char errmsg[256]; //err = timeGrid->ReadInputFileNames(fileNamesPath); /*if(!err)*/ timeGrid->DisposeAllLoadedData(); //if(!err) err = timeGrid->SetInterval(errmsg,model->GetModelTime()); // if set interval here will get error if times are not in model range } } } else { err = -1; return err; } Error: // JLM 10/27/98 //if(newMover) {newMover->Dispose();delete newMover;newMover = 0;}; //return 0; return err; }
OSErr GridWindMover_c::TextRead(char *path, char *topFilePath) { // this code is for curvilinear grids OSErr err = 0; char fileNamesPath[256], filePath[256]; short gridType, selectedUnits; Boolean isNetCDFPathsFile = false; TimeGridVel *newTimeGrid = 0; //cerr << "GridWindMover_c::TextRead(): path = " << endl << path << endl; // this gets altered in IsNetCDFPathsFile, eventually change that function strcpy(filePath, path); if (IsNetCDFFile(path, &gridType) || IsNetCDFPathsFile(filePath, &isNetCDFPathsFile, fileNamesPath, &gridType)) { if (gridType == CURVILINEAR) { newTimeGrid = new TimeGridWindCurv(); } else { newTimeGrid = new TimeGridWindRect(); } if (newTimeGrid) { //err = newGridWindMover->InitMover(timeGrid); //if(err) goto Error; if (!err) { err = newTimeGrid->TextRead(filePath, topFilePath); } if (err) goto Error; this->SetTimeGrid(newTimeGrid); } if (!err && isNetCDFPathsFile) { //char errmsg[256]; err = timeGrid->ReadInputFileNames(fileNamesPath); if (!err) timeGrid->DisposeAllLoadedData(); //if(!err) err = newMover->SetInterval(errmsg); // if set interval here will get error if times are not in model range if (err) return err; } } else if (IsGridWindFile(path, &selectedUnits)) { char errmsg[256]; newTimeGrid = new TimeGridCurRect(); //timeGrid = new TimeGridVel(); if (newTimeGrid) { //err = this->InitMover(timeGrid); //if(err) goto Error; dynamic_cast<TimeGridCurRect*>(newTimeGrid)->fUserUnits = selectedUnits; err = newTimeGrid->TextRead(path,""); if(err) goto Error; this->SetTimeGrid(newTimeGrid); if (!err) { //char errmsg[256]; //err = timeGrid->ReadInputFileNames(fileNamesPath); //if(!err) timeGrid->DisposeAllLoadedData(); //if(!err) err = timeGrid->SetInterval(errmsg,model->GetModelTime()); // if set interval here will get error if times are not in model range } } } Error: // JLM 10/27/98 //if(newMover) {newMover->Dispose();delete newMover;newMover = 0;}; //return 0; return err; }