diff --git a/src/CAD/IFox.CAD.Shared/Runtime/Env.cs b/src/CAD/IFox.CAD.Shared/Runtime/Env.cs index 645734f7236e6a69673fa3ebdc9e9a28a410aabb..37007fd8c6cde1c9cff040fc2b22b0d1913b20ff 100644 --- a/src/CAD/IFox.CAD.Shared/Runtime/Env.cs +++ b/src/CAD/IFox.CAD.Shared/Runtime/Env.cs @@ -111,6 +111,17 @@ public static Point3d LastPoint set => Acaop.SetSystemVariable("LASTPOINT", value); } + /// + /// 获取文档创建时间 + /// + /// + public static DateTime CreateTime => GetDateTimeFromJulian((double)Acaop.GetSystemVariable("tdcreate")); + + /// + /// 文档上次保存的时间 + /// + public static DateTime UpdateTime => GetDateTimeFromJulian((double)Acaop.GetSystemVariable("tdupdate")); + #region Dimblk /// @@ -583,16 +594,17 @@ public static void AppendSupportPath(params string[] folders) .Select(item => item[^1] == '\\' ? item.Remove(item.Length - 1) : item) .ToHashSet(); - foreach (var folder in folders) { + foreach (var folder in folders) + { if (!Directory.Exists(folder)) continue; - var folderLower = + var folderLower = folder[^1] == '\\' ? folder.Remove(folder.Length - 1).ToLower() : folder.ToLower(); if (!acadPathLowerArr.Contains(folderLower)) acadPath = folder + ";" + acadPath; //加到前面方便检查 } SetEnv("ACAD", acadPath); } - + /// /// 删除支持搜索文件目录 /// @@ -601,10 +613,11 @@ public static void RemoveSupportPath(params string[] folders) { if (!folders.Any()) return; var acadPathArr = GetEnv("ACAD").Split(';').ToList(); - foreach (var folder in folders) { - var folderLower = + foreach (var folder in folders) + { + var folderLower = folder[^1] == '\\' ? folder.Remove(folder.Length - 1).ToLower() : folder.ToLower(); - acadPathArr.RemoveAll(item => + acadPathArr.RemoveAll(item => (item[^1] == '\\' ? item.Remove(item.Length - 1).ToLower() : item.ToLower()) == folderLower); } SetEnv("ACAD", string.Join(";", acadPathArr)); @@ -623,12 +636,13 @@ public static void AppendTrustedPath(params string[] folders) .ToLower() .Split(';') .Where(item => item != "") - .Select(item => + .Select(item => item[^1] == '\\' ? item.Remove(item.Length - 1) : item) .ToHashSet(); - foreach (var folder in folders) { + foreach (var folder in folders) + { if (!Directory.Exists(folder)) continue; - var folderLower = + var folderLower = folder[^1] == '\\' ? folder.Remove(folder.Length - 1).ToLower() : folder.ToLower(); if (!trustedPathLowerArr.Contains(folderLower)) trustedPath = folder + ";" + trustedPath; //加到前面方便检查 @@ -643,10 +657,11 @@ public static void RemoveTrustedPath(params string[] folders) { if (!folders.Any()) return; var trustedPathArr = GetVar("TRUSTEDPATHS").ToString().Split(';').ToList(); - foreach (var folder in folders) { - var folderLower = + foreach (var folder in folders) + { + var folderLower = folder[^1] == '\\' ? folder.Remove(folder.Length - 1).ToLower() : folder.ToLower(); - trustedPathArr.RemoveAll(item => + trustedPathArr.RemoveAll(item => (item[^1] == '\\' ? item.Remove(item.Length - 1).ToLower() : item.ToLower()) == folderLower); } SetVar("TRUSTEDPATHS", string.Join(";", trustedPathArr)); @@ -780,7 +795,7 @@ public static string GetAcapVersionDll(string str = "acdb") /// public static object SetVarEx(string key, string value) { - + var currentVar = GetVar(key); object valueType = currentVar.GetType().Name switch @@ -842,4 +857,44 @@ public static void DelayUpdateLayLockFade() IdleAction.Add(() => Acaop.SetSystemVariable(lfName, lf)); } #endregion + + + /// + /// 儒略日转换 + /// 儒略日计算,来源:https://www.zhihu.com/question/21698547 + /// + /// 儒略日 + /// + private static DateTime GetDateTimeFromJulian(double JulianDate) + { + var num = Math.Floor(JulianDate); + var num2 = Math.Floor((num - 1867216.25) / 36524.25); + var num3 = Math.Floor(num2 / 4.0); + var num4 = num + 1.0 + num2 - num3; + var num5 = num4 + 1524.0; + var num6 = Math.Floor((num5 - 122.1) / 365.25); + var num7 = Math.Floor(365.25 * num6); + var num8 = Math.Floor((num5 - num7) / 30.6001); + var num9 = Math.Floor(30.6001 * num8); + var day = Convert.ToInt32(num5 - num7 - num9); + var num10 = Convert.ToInt32((num8 < 14.0) ? (num8 - 2.0) : (num8 - 14.0)); + var month = checked(num10 + 1); + var num11 = Convert.ToInt32((num10 > 1) ? (num6 - 4716.0) : (num6 - 4715.0)); + var year = (num11 == 0) ? checked(num11 - 1) : num11; + var num12 = JulianDate - num; + var num13 = Math.Floor(num12 * 24.0); + var num14 = num12 - num13 / 24.0; + var num15 = Math.Floor(num14 * 1440.0); + var value = Math.Floor((num14 - num15 / 1440.0) * 86400.0); + var result = new DateTime( + year, + month, + day, + Convert.ToInt32(num13), + Convert.ToInt32(num15), + Convert.ToInt32(value) + ); + return result; + } + } \ No newline at end of file