public int Close() { int rc = 0; DfsDLLWrapper.dfsFileClose(pHeader, ref pFile); DfsDLLWrapper.dfsHeaderDestroy(ref pHeader); return(rc); }
protected virtual void Dispose(bool disposing) { if (disposing) { dfsdata = null; } if (_headerPointer != IntPtr.Zero) { DfsDLLWrapper.dfsFileClose(_headerPointer, ref _filePointer); } }
private void _convert2Dfs2() { IntPtr headerPointer = new IntPtr(); IntPtr filePointer = new IntPtr(); try { int maxTimeStep = _getTimeSteps(); _customDFSGrid = false; // Create header System.Reflection.AssemblyName assName = this.GetType().Assembly.GetName(); //if (maxTimeStep <= 1) headerPointer = DfsDLLWrapper.dfsHeaderCreate(FileType.EqtimeFixedspaceAllitems, System.IO.Path.GetFileNameWithoutExtension(_settings.InputFileName), assName.Name, assName.Version.Major, _getItemNum(), StatType.NoStat); /*else * headerPointer = DfsDLLWrapper.dfsHeaderCreate(FileType.NeqtimeFixedspaceAllitems, * System.IO.Path.GetFileNameWithoutExtension(_settings.InputFileName), assName.Name, * assName.Version.Major, _getItemNum(), StatType.NoStat);*/ // Setup header DfsDLLWrapper.dfsSetDataType(headerPointer, 1); double x0 = 0, y0 = 0, dx = 0, dy = 0, j = 0, k = 0, lon0 = 0, lat0 = 0; _getGridOrigo(out x0, out y0, out dx, out dy, out j, out k, out lat0, out lon0); DfsDLLWrapper.dfsSetGeoInfoUTMProj(headerPointer, _settings.MZMapProjectionString, lon0, lat0, _settings.OverwriteRotation); DfsDLLWrapper.dfsSetDeleteValFloat(headerPointer, _fdel); List <DateTime> dateTimes = _util.GetTime(_settings.TimeAxisName); //compute timesteps double timestepSec = 0; for (int timeSteps = 1; timeSteps < dateTimes.Count; timeSteps++) { timestepSec = Math.Round((dateTimes[timeSteps].ToOADate() - dateTimes[timeSteps - 1].ToOADate()) * 86400); } //DfsDLLWrapper.dfsSetEqCalendarAxis(headerPointer, dateTimes[0].ToString("yyyy-MM-dd"), dateTimes[0].ToString("HH:mm:ss"), (int)eumUnit.eumUsec, 0, (int)timestepSec, 0); if (maxTimeStep <= 1) { DfsDLLWrapper.dfsSetEqCalendarAxis(headerPointer, dateTimes[0].ToString("yyyy-MM-dd"), dateTimes[0].ToString("HH:mm:ss"), (int)eumUnit.eumUsec, 0, _settings.TimeStepSeconds, 0); } else { DfsDLLWrapper.dfsSetEqCalendarAxis(headerPointer, dateTimes[0].ToString("yyyy-MM-dd"), dateTimes[0].ToString("HH:mm:ss"), (int)eumUnit.eumUsec, 0, (int)timestepSec, 0); } // Add Items by looping through selected variables int selectedItemCount = 0; for (int itemCount = 0; itemCount < _settings.Variables.Count; itemCount++) { if (_settings.IsVariablesSelected[itemCount]) { IntPtr itemPointer = DfsDLLWrapper.dfsItemD(headerPointer, selectedItemCount + 1); string itemName = _settings.Variables[itemCount]; DfsDLLWrapper.dfsSetItemInfo(headerPointer, itemPointer, _settings.VariablesMappings[itemCount].EUMItemKey, _settings.VariablesMappings[itemCount].EUMItemDesc, _settings.VariablesMappings[itemCount].EUMMappedItemUnitKey, DfsSimpleType.Float); DfsDLLWrapper.dfsSetItemValueType(itemPointer, DataValueType.Instantaneous); //get grid data from nc dimensions //swap range if dx or dy is negative if (dx <= 0) { dx = Math.Abs(dx); _invertxData = true; } if (dy <= 0) { dy = Math.Abs(dy); _invertyData = true; } DfsDLLWrapper.dfsSetItemAxisEqD2(itemPointer, (int)eumUnit.eumUdegree, (int)j, (int)k, (float)x0, (float)y0, (float)dx, (float)dy); selectedItemCount++; } } // Create file DfsDLLWrapper.dfsFileCreate(_settings.OutputFileName, headerPointer, out filePointer); //write data to file (time loop > item loop) for (int timeSteps = 0; timeSteps < dateTimes.Count; timeSteps++) { selectedItemCount = 0; for (int itemCount = 0; itemCount < _settings.Variables.Count; itemCount++) { if (_settings.IsVariablesSelected[itemCount]) { string itemName = _settings.Variables[itemCount]; double dTotalSeconds = (dateTimes[timeSteps].ToOADate() - dateTimes[0].ToOADate()) * 86400; dTotalSeconds = Math.Round(dTotalSeconds, 0, MidpointRounding.AwayFromZero); DfsDLLWrapper.dfsWriteItemTimeStep(headerPointer, filePointer, dTotalSeconds, _getFloatData(itemName, timeSteps, j, k, lat0, lon0, dx, dy)); selectedItemCount++; } } } } catch (Exception ex) { throw new Exception("Convert2Dfs2 Error: " + ex.Message); } finally { // close file and destroy header if (null != filePointer) { DfsDLLWrapper.dfsFileClose(headerPointer, ref filePointer); } if (null != headerPointer) { DfsDLLWrapper.dfsHeaderDestroy(ref headerPointer); } } }