整合手工模式与全局模式的处理,解决批处理多余建缓存的bug;调整日志查看器窗口尺寸

This commit is contained in:
tian 2026-02-03 21:19:02 +08:00
parent a305ba31e1
commit 4d28ec5547
5 changed files with 83 additions and 29 deletions

View File

@ -2,16 +2,29 @@
## 功能点
### [2026/2/3]
1. [ ] (优化)预计算高亮正确,结果高亮错误,高亮了很多不相干的同名物体
2. [ ] BUG预计算一个目标物体161帧碰撞机制有问题
3. [ ] BUG吊装路径终点前的一段拐弯通行空间方向不对
4. [ ] BUG批处理时杀死程序重新打开有执行中的任务但删除选中没激活再运行批处理收到停止信号结束
5. [ ] BUG碰撞检测历史列表不自动加载不自动刷新
6. [ ] (优化)将通行空间透明度变成系统参数,可以修改
7. [ ] 优化ClashDetective检测中每执行100次打印一下日志
8. [ ] (研究)如何利用剖面,过滤被隐藏的内容
9. [ ] (研究)根据路径高度范围,过滤几何体
10. [x] BUG批处理指定检测物体预计算时没有忽略空间缓存建立
### [2026/1/28]
1. [ ] 优化将ViewPonit的RenderStyle改成Shaded以免影响高亮考虑在显示碰撞时改成Wireframe
2、[ ] 优化修改架构适应模型坐标系的变化Yup-Xright-Zfront
3、[x] (优化)修改吊装路径适应桁车空中路线(纵向+平移,有吊绳)
4、[x] (优化)对系统配置文件的修改即时起效
5、[ ] (优化)切换文档时重新加载数据库
6、[x] (优化)默认打开指定碰撞物体
7、[ ] (优化)动画运行视角优化设计,不能只用俯视图
8、[x] BUG旧版配置文件要主动提示升级配置文件不能崩溃
2. [ ] 优化修改架构适应模型坐标系的变化Yup-Xright-Zfront
3. [x] (优化)修改吊装路径适应桁车空中路线(纵向+平移,有吊绳)
4. [x] (优化)对系统配置文件的修改即时起效
5. [ ] (优化)切换文档时重新加载数据库
6. [x] (优化)默认打开指定碰撞物体
7. [ ] (优化)动画运行视角优化设计,不能只用俯视图
8. [x] BUG旧版配置文件要主动提示升级配置文件不能崩溃
### [2026/1/26]
@ -58,7 +71,7 @@
### [2025/12/09]
1. [x] BUG路径列表和动画当前路径的变化存在循环引用的情况
2. [x] BUG动画过程中有一些被碰撞的墙柱子和其他对象没有被检测到
2. [x] BUG动画过程中有一些被碰撞的墙. 柱子和其他对象没有被检测到
### [2025/12/08]
@ -69,7 +82,7 @@
5. [x] BUG只有手动路径时导出路径按钮没激活
6. [x] BUG重复打开模型有时程序崩溃需要先关闭物流插件窗口
7. [x] (优化)提高碰撞检测在处理大型模型时的性能
8. [ ] 功能如果进行耗时处理超过30秒弹出确认窗口告诉用户预估时间耗时原因和优化建议(如隐藏不需要的节点)
8. [ ] 功能如果进行耗时处理超过30秒弹出确认窗口告诉用户预估时间. 耗时原因和优化建议(如隐藏不需要的节点)
### [2025/12/05]
@ -130,15 +143,15 @@
1. [x] (功能)修改碰撞检测报告,增加碰撞构件的数量和清单
2. [x] (功能) 修改动画和碰撞参数,检测精度(步长)=路径长度/(帧率*时长),速度=路径长度/时长
3. [x] (优化) 完善网格的高度数据修改在A*算法中的高度处理错误
4. [x] (功能) 完善物流属性列表的能力,实现同步选择视图、单个模型可见性、属性数值回填设置区
4. [x] (功能) 完善物流属性列表的能力,实现同步选择视图. 单个模型可见性. 属性数值回填设置区
### [2025/09/14]
1. [x] 功能增加空间通道连线方式1宽度路径,半透明,膨胀直径高度为车高加安全距离
1. [x] 功能增加空间通道连线方式1. 宽度路径,半透明,膨胀直径高度为车高加安全距离
### [2025/09/12]
1. [x] (功能)给动画增加步进功能,同时提供反向功能(反向播放反向步进)
1. [x] (功能)给动画增加步进功能,同时提供反向功能(反向播放. 反向步进)
2. [x] (功能) 自动生成的路径,贴合通道表面
3. [x] (功能) 文档更新后,插件重新初始化
@ -182,7 +195,7 @@
3. [x] 优化增加直接采用包围盒的2.5D自动寻路算法,代替空间索引+高度扫描算法。
4. [x] BUG自动规划有时成功过滤3个通道找到26个障碍物有时失败过滤2个通道,只找到2个障碍物连续自动规划有时会崩溃。
5. [ ] BUG还有厚度为0的障碍物不一定是bug
6. [x] (优化) 用SearchAPI来搜索CategoryAttributeManager中的FilterByLogisticsType()FilterTraversableItems()等方法
6. [x] (优化) 用SearchAPI来搜索CategoryAttributeManager中的FilterByLogisticsType(). FilterTraversableItems()等方法
### [2025/08/31]
@ -197,16 +210,16 @@
### [2025/08/29]
1. [x]BUG路径导出只有一条路径时导出按钮不能点击导出的内容有时不完整只导出一个包含起点、一个路径点、终点的不存在的路径。
1. [x]BUG路径导出只有一条路径时导出按钮不能点击导出的内容有时不完整只导出一个包含起点. 一个路径点. 终点的不存在的路径。
2. [x]优化垂直扫描处理器性能问题COM API几何提取效率极低23个候选项需要5715ms复杂几何体比简单几何体效率低4倍需要优化批量处理和并行机制。
3. [x]优化修复并行任务未观察异常导致程序崩溃AggregateException错误表明Task异常处理不当需要加强并行处理的异常处理和Task生命周期管理。
### [2025/08/28]
1. [x](优化)将“自动规划路径”中的车辆长度宽度的默认值改为1米安全间隙改为0.25米。高级设置中,网格的大小
1. [x](优化)将“自动规划路径”中的车辆长度. 宽度的默认值改为1米安全间隙改为0.25米。高级设置中,网格的大小
默认值改为0.5米。
2. [x](功能)将这些参数,作为插件配置文件的参数,在系统管理的插件管理中,统一管理
3. [x]优化修改分层预览的业务逻辑从一级节点开始遍历每个节点查找指定的分层属性如果找到记录下来作为一个分层不再遍历其下级节点如果没找到继续遍历其子节点直到找到为止遍历深度受到用户指定的遍历深度限制。特殊处理1对于智能检测使用一组候选的分层属性对每个节点进行查找按属性的评分优先级确定选择何种属性。2对于自定义查找,用指定的分层属性,在每个节点的"分层信息“属性类别中查找。
3. [x]优化修改分层预览的业务逻辑从一级节点开始遍历每个节点查找指定的分层属性如果找到记录下来作为一个分层不再遍历其下级节点如果没找到继续遍历其子节点直到找到为止遍历深度受到用户指定的遍历深度限制。特殊处理1. 对于智能检测使用一组候选的分层属性对每个节点进行查找按属性的评分优先级确定选择何种属性。2. 对于自定义查找,用指定的分层属性,在每个节点的"分层信息“属性类别中查找。
4. [x](优化)对自动路径规划进行重构,按地面层+高度剖面投影层的方式构建可通行网格然后用A*算法获取最短路径。
### [2025/08/27]

View File

@ -422,13 +422,11 @@ namespace NavisworksTransport.Core
}
}
// 初始化碰撞检测缓存
LogManager.Info("[批处理] 初始化碰撞检测缓存...");
ClashDetectiveIntegration.InitializeCollisionDetectionCache(animatedObject);
// 从 ModelItemReferences 表查询手工指定的检测物体(在主线程外完成查询)
// 从 ModelItemReferences 表查询手工指定的检测物体(在主线程外完成查询)
List<ModelItem> manualDetectionTargets = null;
if (!item.DetectAllObjects)
bool isManualMode = !item.DetectAllObjects;
if (isManualMode)
{
var targetReferences = await _database.GetModelItemReferencesAsync(
item.Id,
@ -468,6 +466,9 @@ namespace NavisworksTransport.Core
LogManager.Info($"[批处理] 加载手工指定检测物体,成功: {manualDetectionTargets.Count}/{targetReferences.Count}");
}
}
// 统一准备碰撞检测(根据模式自动决定是否构建全局缓存)
ClashDetectiveIntegration.PrepareCollisionDetection(animatedObject, isManualMode, manualDetectionTargets);
// 在主线程执行Navisworks API调用
var result = await UIStateManager.Instance.ExecuteUIUpdateAsync(() =>

View File

@ -1343,6 +1343,48 @@ namespace NavisworksTransport
LogManager.Info("[碰撞检测] 碰撞检测缓存初始化完成");
}
/// <summary>
/// 统一准备碰撞检测(整合常规处理和批处理的公共逻辑)
/// </summary>
/// <param name="animatedObject">运动物体</param>
/// <param name="isManualMode">是否为手工指定检测对象模式</param>
/// <param name="manualTargets">手工指定的检测目标(仅在手工模式下使用)</param>
/// <returns>是否成功准备</returns>
public static bool PrepareCollisionDetection(ModelItem animatedObject, bool isManualMode, List<ModelItem> manualTargets = null)
{
try
{
if (animatedObject == null)
{
LogManager.Warning("[碰撞检测] 准备失败:运动物体为空");
return false;
}
if (isManualMode)
{
// 手工模式:只设置移动物体,不构建全局缓存
LogManager.Info("[碰撞检测] 手工模式 - 跳过全局缓存初始化");
lock (_cacheLock)
{
_animatedObject = animatedObject;
}
return true;
}
else
{
// 全局模式:需要构建空间索引缓存
LogManager.Info("[碰撞检测] 全局模式 - 初始化碰撞检测缓存");
InitializeCollisionDetectionCache(animatedObject);
return true;
}
}
catch (Exception ex)
{
LogManager.Error($"[碰撞检测] 准备碰撞检测失败: {ex.Message}");
return false;
}
}
/// <summary>
/// 获取通道对象缓存(供外部使用)
/// </summary>

View File

@ -2710,12 +2710,10 @@ namespace NavisworksTransport.UI.WPF.ViewModels
animatedObject = SelectedAnimatedObject;
}
// 初始化碰撞检测缓存(在 animatedObject 声明之后)
if (!manualModeEnabled)
{
ClashDetectiveIntegration.InitializeCollisionDetectionCache(animatedObject);
}
// 统一准备碰撞检测(根据模式自动决定是否构建全局缓存)
ClashDetectiveIntegration.PrepareCollisionDetection(animatedObject, manualModeEnabled, manualTargets);
// 设置碰撞检测目标
if (manualModeEnabled)
{
_pathAnimationManager.SetManualCollisionTargets(manualTargets, true);

View File

@ -16,11 +16,11 @@ NavisworksTransport 日志查看器对话框 - 采用与主界面一致的Navisw
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Title="日志查看器"
Height="600"
Height="1200"
Width="900"
ResizeMode="CanResize"
WindowStartupLocation="CenterOwner"
MinHeight="400"
MinHeight="800"
MinWidth="600">
<Window.Resources>