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