NavisworksTransport/doc/architecture/System_Architecture_Design.md

24 KiB
Raw Blame History

NavisworksTransport 系统架构设计方案

项目概述

NavisworksTransport是一款专为Navisworks 2026平台开发的智能物流路径规划插件旨在为建筑工程领域提供专业的BIM模型内运输路径优化、碰撞检测和施工模拟解决方案。


3.2.2.1 业务架构

业务目标与价值主张

NavisworksTransport插件致力于解决建筑施工过程中的物流运输规划难题通过智能化的路径规划和碰撞检测技术提升施工效率降低运输成本确保施工安全。

核心业务能力

1. 智能路径规划服务

  • 自动路径生成: 基于A*算法的智能路径自动规划
  • 手动路径编辑: 支持用户自定义路径调整和优化
  • 多楼层连接: 跨楼层路径规划和垂直交通整合
  • 路径可行性分析: 实时路径验证和可行性评估

2. 碰撞检测与冲突管理

  • 实时碰撞检测: 动态监测运输路径中的潜在冲突
  • 静态障碍物识别: 自动识别和标记固定障碍物
  • 动态冲突预警: 多对象运输时的冲突预警机制
  • 碰撞报告生成: 详细的碰撞分析报告和解决方案建议

3. 动画仿真与可视化

  • 物流运输模拟: 真实的运输过程动画演示
  • 时间轴精确控制: 基于TimeLiner的精确时间控制
  • 多级速度调节: 灵活的播放速度控制
  • 多对象协同: 支持多个物流对象的协同动画

4. 模型智能管理

  • 楼层智能识别: 自动识别和分类模型楼层结构
  • 分层管理系统: 基于属性的模型分层组织
  • 物流类别标注: 八大物流类别的智能标注系统
  • 模型分割导出: 按需模型分割和独立导出功能

业务流程设计

graph LR
    A[选择起点] --> B[设置终点]
    B --> C[自动路径规划]
    C --> D[碰撞检测分析]
    D --> E[路径优化调整]
    E --> F[动画仿真演示]
    F --> G[结果导出报告]
    
    D --> H[发现冲突]
    H --> I[冲突解决方案]
    I --> E

物流分类体系

基于建筑物流的实际需求,定义八大核心物流类别:

  1. 门 (Doors): 进出口通道管理
  2. 电梯 (Elevators): 垂直运输通道
  3. 楼梯 (Stairs): 人工垂直通道
  4. 通道 (Channels): 水平运输走廊
  5. 障碍物 (Obstacles): 固定阻碍物体
  6. 装卸区 (Loading Zones): 材料装卸区域
  7. 停车区 (Parking): 临时停靠区域
  8. 检查点 (Checkpoints): 质检和验收点

3.2.2.2 应用架构

总体架构设计

NavisworksTransport采用分层式架构设计确保系统的可维护性、可扩展性和稳定性

┌─────────────────────────────────────────────────────────┐
│                    表现层 (Presentation)                 │
│  ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐   │
│  │  WPF MVVM   │ │  WinForms    │ │  Ribbon UI      │   │
│  │  现代化界面  │ │  传统对话框   │ │  工具栏集成      │   │
│  └─────────────┘ └──────────────┘ └─────────────────┘   │
├─────────────────────────────────────────────────────────┤
│                    业务逻辑层 (Business)                 │
│  ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐   │
│  │ 路径规划引擎 │ │  碰撞检测器   │ │ 动画管理器       │   │
│  │ A*算法集成   │ │  实时冲突检测 │ │ TimeLiner集成   │   │
│  └─────────────┘ └──────────────┘ └─────────────────┘   │
├─────────────────────────────────────────────────────────┤
│                    核心服务层 (Core)                     │
│  ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐   │
│  │ 状态管理器   │ │  事件总线     │ │ 日志服务        │   │
│  │ UI线程安全   │ │  组件通信     │ │ 异常处理        │   │
│  └─────────────┘ └──────────────┘ └─────────────────┘   │
├─────────────────────────────────────────────────────────┤
│                    数据访问层 (Data)                     │
│  ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐   │
│  │ JSON序列化   │ │  XML导出     │ │ Navisworks API  │   │
│  │ 路径数据     │ │  配置管理     │ │ COM API集成     │   │
│  └─────────────┘ └──────────────┘ └─────────────────┘   │
└─────────────────────────────────────────────────────────┘

三重插件架构模式

NavisworksTransport创新性地采用三重插件协同工作模式

1. MainPlugin (主插件)

  • 类型: AddInPlugin
  • 职责: 主界面管理、Ribbon集成、DockPane控制
  • 特点: 插件生命周期管理、全局状态维护

2. PathClickToolPlugin (交互插件)

  • 类型: ToolPlugin
  • 职责: 3D场景交互、鼠标点击事件、路径点设置
  • 特点: 实时用户交互响应、空间坐标计算

3. PathPointRenderPlugin (渲染插件)

  • 类型: RenderPlugin
  • 职责: 3D路径可视化、覆盖层渲染、动画效果
  • 特点: 高性能图形渲染、实时视觉反馈

核心管理器组件

PathPlanningManager (路径规划管理器)

public class PathPlanningManager
{
    // 路径规划核心功能
    public PathRoute PlanRoute(Point3D start, Point3D end);
    public ValidationResult ValidatePath(PathRoute route);
    public PathRoute OptimizePath(PathRoute route);
    
    // 事件驱动架构
    public event EventHandler<PathPlanningEventArgs> PathGenerated;
    public event EventHandler<CollisionEventArgs> CollisionDetected;
}

LogisticsAnimationManager (动画管理器)

  • 动画控制: 播放、暂停、停止、速度调节
  • 多对象协调: 多个物流对象的同步动画
  • 时间轴集成: 与Navisworks TimeLiner深度集成
  • 碰撞处理: 动画过程中的实时碰撞检测

UIStateManager (UI状态管理器)

public class UIStateManager
{
    // 线程安全的UI更新
    public async Task ExecuteUIUpdateAsync(Action updateAction);
    
    // 批量UI更新优化
    public void QueueUIUpdate(Action updateAction, UIUpdatePriority priority);
    
    // 状态同步机制
    public void SynchronizeViewModels();
}

MVVM架构实现

采用标准MVVM模式实现UI与业务逻辑分离

  • Model: PathRoute, PathPoint, LogisticsObject等数据模型
  • View: WPF用户控件、窗口、对话框
  • ViewModel: 数据绑定、命令处理、业务逻辑调用

3.2.2.3 数据架构

核心数据模型设计

路径数据模型

/// <summary>
/// 路径路由数据模型
/// </summary>
public class PathRoute
{
    public Guid Id { get; set; }                           // 唯一标识
    public string Name { get; set; }                       // 路径名称
    public List<PathPoint> Points { get; set; }            // 路径点集合
    public PathValidationResult Validation { get; set; }   // 验证结果
    public DateTime CreateTime { get; set; }               // 创建时间
    public DateTime ModifyTime { get; set; }               // 修改时间
    public Dictionary<string, object> Metadata { get; set; } // 元数据扩展
    
    // 路径统计信息
    public double TotalDistance { get; set; }              // 总距离
    public TimeSpan EstimatedDuration { get; set; }        // 预估用时
    public List<CollisionInfo> Collisions { get; set; }    // 碰撞信息
}

路径点模型

/// <summary>
/// 路径点数据模型
/// </summary>
public class PathPoint
{
    public Point3D Position { get; set; }                  // 3D坐标
    public int SequenceNumber { get; set; }                // 序列号
    public string Floor { get; set; }                      // 所属楼层
    public PathPointType Type { get; set; }                // 点类型
    public List<string> ConnectedNodes { get; set; }       // 连接节点
    
    // 扩展属性
    public double Height { get; set; }                     // 高度信息
    public double Width { get; set; }                      // 通道宽度
    public Dictionary<string, string> Attributes { get; set; } // 自定义属性
}

物流对象模型

/// <summary>
/// 物流对象数据模型
/// </summary>
public class LogisticsObject
{
    public string Id { get; set; }                         // 对象标识
    public LogisticsCategory Category { get; set; }        // 物流类别
    public BoundingBox3D Bounds { get; set; }              // 边界框
    public Transform3D Transform { get; set; }             // 变换矩阵
    public ModelItem NavisworksItem { get; set; }          // Navisworks项引用
    
    // 物流属性
    public double Capacity { get; set; }                   // 容量
    public double MaxSpeed { get; set; }                   // 最大速度
    public List<string> Restrictions { get; set; }         // 使用限制
    public Dictionary<string, string> Properties { get; set; } // 扩展属性
}

数据持久化策略

1. 主数据存储 (JSON格式)

{
  "projectInfo": {
    "name": "物流路径规划项目",
    "version": "1.0",
    "createTime": "2024-01-01T00:00:00Z"
  },
  "pathRoutes": [
    {
      "id": "route-001",
      "name": "主通道路径",
      "points": [
        {
          "position": {"x": 100.0, "y": 200.0, "z": 0.0},
          "sequenceNumber": 1,
          "floor": "F1",
          "type": "StartPoint"
        }
      ],
      "metadata": {
        "totalDistance": 150.5,
        "estimatedDuration": "00:05:30"
      }
    }
  ]
}

2. 配置数据存储 (XML格式)

<Configuration>
  <UserPreferences>
    <DefaultSpeed>2.0</DefaultSpeed>
    <CollisionTolerance>0.5</CollisionTolerance>
    <AnimationFPS>30</AnimationFPS>
  </UserPreferences>
  <SystemSettings>
    <LogLevel>Info</LogLevel>
    <AutoSave>true</AutoSave>
    <BackupInterval>300</BackupInterval>
  </SystemSettings>
</Configuration>

3. 缓存数据管理

  • 内存缓存: 碰撞检测结果、网格地图数据
  • 会话缓存: 用户操作历史、临时路径数据
  • 持久缓存: 楼层识别结果、模型分析数据

数据交换标准

导入支持格式

  • JSON: 路径数据、项目配置
  • CSV: 批量路径点、统计数据
  • XML: 配置文件、报告模板

导出支持格式

  • NWD: Navisworks文档格式
  • JSON: 标准数据交换格式
  • Excel: 统计报告和分析数据
  • PDF: 项目报告和文档
  • CSV: 数据分析和进一步处理

数据安全与完整性

数据校验机制

public class DataValidator
{
    public ValidationResult ValidatePathRoute(PathRoute route)
    {
        // 路径完整性检查
        // 坐标有效性验证
        // 序列号连续性验证
        // 楼层一致性检查
    }
    
    public bool VerifyDataIntegrity(string filePath)
    {
        // 文件完整性校验
        // 数据格式验证
        // 版本兼容性检查
    }
}

数据备份策略

  • 自动备份: 定时保存项目数据
  • 增量备份: 只保存变更的数据
  • 版本控制: 保留历史版本便于回滚
  • 云端同步: 支持云存储备份

3.2.2.4 技术架构

技术栈选型与理由

开发平台选择

  • 目标平台: Navisworks 2026 (x64)
    • 理由: 最新API支持性能优化功能完整
  • 运行时: .NET Framework 4.8
    • 理由: Navisworks 2026官方支持的运行时版本
  • 开发环境: Visual Studio 2022 Community
    • 理由: 完整的.NET开发工具链优秀的调试支持

核心技术选型

  • 编程语言: C# 8.0
    • 理由: 与Navisworks API完美集成丰富的语言特性
  • UI框架组合:
    • WPF + MVVM: 现代化用户界面,数据绑定优势
    • WinForms: 传统对话框,快速开发
    • ElementHost: 混合UI集成方案

第三方库集成

<!-- packages.config -->
<packages>
  <package id="RoyT.AStar" version="2.1.0" targetFramework="net48" />
  <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net48" />
  <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
</packages>

关键技术实现

1. 线程安全架构设计

问题: Navisworks API调用必须在主线程多线程UI更新容易导致崩溃

解决方案: UIStateManager统一线程调度

public class UIStateManager
{
    private readonly ConcurrentQueue<UIUpdateAction> _updateQueue;
    private readonly DispatcherTimer _updateTimer;
    
    public async Task ExecuteUIUpdateAsync(Action updateAction)
    {
        if (Application.Current.Dispatcher.CheckAccess())
        {
            // 已在UI线程直接执行
            ExecuteWithExceptionHandling(updateAction);
        }
        else
        {
            // 切换到UI线程执行
            await Application.Current.Dispatcher.InvokeAsync(() =>
            {
                ExecuteWithExceptionHandling(updateAction);
            }, DispatcherPriority.Normal);
        }
    }
    
    private void ExecuteWithExceptionHandling(Action updateAction)
    {
        try
        {
            updateAction?.Invoke();
        }
        catch (Exception ex)
        {
            GlobalExceptionHandler.HandleException(ex, "UI更新异常");
        }
    }
}

2. 异步编程模式

事件驱动异步处理:

public class PathPlanningManager
{
    public async Task<PathRoute> PlanRouteAsync(Point3D start, Point3D end)
    {
        return await Task.Run(() =>
        {
            // CPU密集型的A*算法计算
            var pathfinder = new PathFinder(gridMap);
            var result = pathfinder.FindPath(start, end);
            
            // 在UI线程更新进度
            await uiStateManager.ExecuteUIUpdateAsync(() =>
            {
                OnPathGenerated(new PathPlanningEventArgs(result));
            });
            
            return result;
        });
    }
}

3. 内存管理与性能优化

对象池模式:

public class PathPointPool
{
    private readonly ConcurrentQueue<PathPoint> _pool;
    
    public PathPoint Rent()
    {
        if (_pool.TryDequeue(out var point))
        {
            return point;
        }
        return new PathPoint();
    }
    
    public void Return(PathPoint point)
    {
        point.Reset(); // 重置状态
        _pool.Enqueue(point);
    }
}

空间索引优化:

public class TriangleSpatialHash
{
    private readonly Dictionary<int, List<Triangle>> _spatialGrid;
    private readonly double _cellSize;
    
    public List<Triangle> GetNearbyTriangles(Point3D point, double radius)
    {
        var result = new List<Triangle>();
        var minCell = GetCellIndex(point.X - radius, point.Y - radius);
        var maxCell = GetCellIndex(point.X + radius, point.Y + radius);
        
        for (int x = minCell.X; x <= maxCell.X; x++)
        {
            for (int y = minCell.Y; y <= maxCell.Y; y++)
            {
                var key = GetHashKey(x, y);
                if (_spatialGrid.TryGetValue(key, out var triangles))
                {
                    result.AddRange(triangles);
                }
            }
        }
        
        return result;
    }
}

4. API集成策略

双API协同模式:

public class NavisworksIntegration
{
    // Native API - 核心功能
    private readonly Application _nativeApp;
    
    // COM API - 属性持久化
    private readonly ComApi.Application _comApp;
    
    public void SetPersistentAttribute(ModelItem item, string key, string value)
    {
        try
        {
            // 使用COM API设置持久化属性
            var comItem = _comApp.ActiveDocument.Models.RootItem.FindItem(item.InstanceGuid);
            comItem.PropertyCategories.FindPropertyByDisplayName("User", key).Value = value;
        }
        catch (Exception ex)
        {
            // 降级到Native API内存属性
            item.PropertyCategories.FindCategoryByDisplayName("User")
                .Properties.FindPropertyByDisplayName(key).Value = new VariantData(value);
        }
    }
}

部署架构设计

文件组织结构

%ProgramFiles%\Autodesk\Navisworks Manage 2026\Plugins\
└── NavisworksTransportPlugin\
    ├── NavisworksTransportPlugin.dll          # 主程序集
    ├── RoyT.AStar.dll                         # A*算法库
    ├── Newtonsoft.Json.dll                    # JSON处理库
    ├── Resources\                             # 资源文件
    │   ├── Icons\                            # 图标资源
    │   ├── Templates\                        # 模板文件
    │   └── Localization\                     # 本地化资源
    ├── Config\                               # 配置文件
    │   ├── DefaultSettings.xml               # 默认设置
    │   └── LoggingConfig.xml                 # 日志配置
    └── Documentation\                        # 文档
        ├── UserGuide.pdf                     # 用户指南
        └── API_Reference.pdf                 # API参考

安装部署流程

  1. 环境检测: 验证Navisworks 2026安装
  2. 权限检查: 确认插件目录写入权限
  3. 文件部署: 复制程序集和资源文件
  4. 注册插件: 更新Navisworks插件注册表
  5. 配置初始化: 创建默认配置文件
  6. 完整性验证: 验证安装完整性

安全性架构设计

1. 数据安全

public class DataSecurity
{
    // 数据加密存储
    public void SaveEncryptedData(string filePath, object data)
    {
        var json = JsonConvert.SerializeObject(data);
        var encrypted = EncryptionHelper.Encrypt(json, GetMachineKey());
        File.WriteAllText(filePath, encrypted);
    }
    
    // 完整性校验
    public bool VerifyDataIntegrity(string filePath)
    {
        var hash = ComputeFileHash(filePath);
        var storedHash = GetStoredHash(filePath + ".hash");
        return hash == storedHash;
    }
}

2. 运行时安全

  • 输入验证: 所有用户输入严格验证
  • 边界检查: 数组访问和集合操作边界检查
  • 异常处理: 完整的异常捕获和恢复机制
  • 资源管理: 及时释放非托管资源

可扩展性设计

插件化架构

public interface IPathPlanningAlgorithm
{
    string Name { get; }
    PathRoute PlanPath(Point3D start, Point3D end, GridMap map);
}

public class AlgorithmManager
{
    private readonly Dictionary<string, IPathPlanningAlgorithm> _algorithms;
    
    public void RegisterAlgorithm(IPathPlanningAlgorithm algorithm)
    {
        _algorithms[algorithm.Name] = algorithm;
    }
    
    public PathRoute PlanPath(string algorithmName, Point3D start, Point3D end)
    {
        if (_algorithms.TryGetValue(algorithmName, out var algorithm))
        {
            return algorithm.PlanPath(start, end, _currentMap);
        }
        throw new ArgumentException($"未找到算法: {algorithmName}");
    }
}

配置驱动架构

public class ConfigurationManager
{
    public T GetConfiguration<T>(string sectionName) where T : class, new()
    {
        var section = _config.GetSection(sectionName);
        return section.Get<T>() ?? new T();
    }
    
    public void UpdateConfiguration<T>(string sectionName, T config)
    {
        _config.SetSection(sectionName, config);
        SaveConfiguration();
        NotifyConfigurationChanged(sectionName);
    }
}

监控与运维架构

1. 日志系统设计

public class LogManager
{
    private static readonly ILogger _logger = LoggerFactory.CreateLogger();
    
    public static void Info(string message, [CallerMemberName] string caller = "")
    {
        _logger.LogInformation($"[{caller}] {message}");
    }
    
    public static void Error(string message, Exception ex = null, [CallerMemberName] string caller = "")
    {
        _logger.LogError(ex, $"[{caller}] {message}");
    }
    
    // 性能监控
    public static IDisposable BeginScope(string operationName)
    {
        return _logger.BeginScope($"Operation: {operationName}");
    }
}

2. 性能监控

public class PerformanceMonitor
{
    private readonly Dictionary<string, PerformanceCounter> _counters;
    
    public void RecordOperation(string operation, TimeSpan duration)
    {
        var counter = GetOrCreateCounter(operation);
        counter.Record(duration.TotalMilliseconds);
    }
    
    public PerformanceReport GenerateReport()
    {
        return new PerformanceReport
        {
            Timestamp = DateTime.Now,
            MemoryUsage = GC.GetTotalMemory(false),
            OperationStats = _counters.ToDictionary(
                kvp => kvp.Key,
                kvp => kvp.Value.GetStatistics()
            )
        };
    }
}

3. 错误报告系统

public class ErrorReporting
{
    public void ReportError(Exception ex, Dictionary<string, object> context)
    {
        var report = new ErrorReport
        {
            Exception = ex,
            Context = context,
            Environment = GetEnvironmentInfo(),
            Timestamp = DateTime.Now
        };
        
        // 本地保存
        SaveErrorReport(report);
        
        // 可选:发送到服务器
        if (UserConsents && IsOnline)
        {
            SendErrorReport(report);
        }
    }
}

架构优势与创新点

技术创新

  1. 三重插件协同: 创新的插件架构模式,各司其职,协同工作
  2. 线程安全UI管理: 统一的UI状态管理器解决多线程UI更新难题
  3. 双API集成: Native API与COM API协同功能完整性与兼容性并重
  4. 空间索引优化: 高效的空间数据结构,提升大模型处理性能

架构优势

  1. 高可维护性: 分层架构,职责清晰,便于团队协作开发
  2. 强扩展性: 插件化设计,支持功能模块热插拔
  3. 高性能: 内存管理优化,空间索引,异步处理
  4. 高稳定性: 完整的异常处理,线程安全设计,资源管理

商业价值

  1. 降本增效: 智能化路径规划,减少人工设计时间
  2. 风险控制: 碰撞预警机制,避免施工冲突
  3. 决策支持: 可视化动画演示,辅助方案决策
  4. 标准化: 统一的物流分类体系,规范管理流程

结论

NavisworksTransport系统架构方案充分考虑了建筑工程物流管理的实际需求结合Navisworks平台的技术特点设计了完整的四层架构体系。该方案不仅满足当前业务需求更具备良好的扩展性和维护性为未来的功能增强和技术演进提供了坚实的基础。

通过创新的三重插件协同模式、线程安全的UI管理机制、以及高效的数据处理架构NavisworksTransport将为建筑工程领域的数字化转型提供强有力的技术支撑。