#ifndef NMCALCULATIONUTILS_H #define NMCALCULATIONUTILS_H #include #include #include #include #include "nmCalculation_global.h" #include "nmCalculationDefine.h" #include class QMutex; class NMCALCULATION_EXPORT nmCalculationUtils { public: nmCalculationUtils(); static bool copyFileToDir(QString filePath, QString destDir); static bool createDirectoryIfNotExists(QString directoryPath); static bool copyFile(const std::string& sourcePath, const std::string& destinationPath); static bool removeDirectory(const QString &dirPath); static bool writeFile(const QStringList& content, const QString &filePath); static QStringList readFile(const QString & filePath); /** @brief 返回自动拟合运行工作区根目录:系统临时目录/WTAI/AutoFit。 */ static QString autoFitTemporaryRootPath(); /** @brief 创建一个仅供单次自动拟合使用的唯一工作目录。 */ static QString createAutoFitTemporaryDirectory(); /** @brief 仅删除由 createAutoFitTemporaryDirectory() 创建的直属子目录。 */ static bool removeAutoFitTemporaryDirectory(const QString& directoryPath); /** @brief 清理超过指定小时数的异常退出残留目录。 */ static void cleanupStaleAutoFitTemporaryDirectories(int maximumAgeHours = 72); /** @brief 获取串行保护 HX_NWTM.dll 全部入口的进程级互斥锁。 */ static QMutex* getHxNwtmDllMutex(); /** @brief 删除 HX_NWTM_GRID 在当前工作目录生成的调试 CSV。 */ static void cleanupPebiGridDebugFiles(); /** * @brief 将数据层使用的毫达西转换为PEBI求解器使用的达西。 * @param dPermeabilityMilliDarcy 渗透率,单位为mD。 * @return 渗透率,单位为D。 */ static double milliDarcyToDarcy(double dPermeabilityMilliDarcy); // 调用求解器Kriging接口,对targetPoints中的坐标依次进行属性插值. // measurementPoints与measurementValues按下标一一对应. // 成功时outputValues与targetPoints数量相同且顺序一致;失败时清空outputValues. static bool calculateKriging(const QVector& targetPoints, const QVector& measurementPoints, const QVector& measurementValues, double nugget, double sill, double range, int model, const QString& licensePath, QVector& outputValues, QString* errorMessage = 0, const QAtomicInt* pCancelRequested = 0); }; #endif // NMCALCULATIONUTILS_H