整合手工模式与全局模式的处理,解决批处理多余建缓存的bug;调整日志查看器窗口尺寸
This commit is contained in:
parent
a305ba31e1
commit
4d28ec5547
@ -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]
|
||||
|
||||
@ -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(() =>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user