# NavisworksApiHelper 使用指南

## 文件位置

`src/Utils/NavisworksApiHelper.cs`

## 用途

提供 Navisworks API 通用工具方法，包括缓存刷新、线程安全操作、模型项查找等。

## 核心方法

### 缓存刷新

```csharp
// 安全的缓存刷新（轻量级）
NavisworksApiHelper.SafeCacheRefresh("MyComponent");

// 线程安全的缓存刷新（自动确保在UI线程执行）
NavisworksApiHelper.SafeCacheRefreshUIThread("MyComponent");
```

### 线程检查与执行

```csharp
// 检查当前是否在主UI线程
bool isUIThread = NavisworksApiHelper.IsOnUIThread();

// 在UI线程执行操作（无返回值）
NavisworksApiHelper.ExecuteOnUIThread(() =>
{
    // 这段代码确保在UI线程执行
    document.CurrentSelection.Clear();
});

// 在UI线程执行操作（有返回值）
var result = NavisworksApiHelper.ExecuteOnUIThread(() =>
{
    return document.CurrentSelection.SelectedItems.Count;
});
```

### 模型项操作

```csharp
// 获取ModelItem的显示名称（安全）
string name = NavisworksApiHelper.GetModelItemName(modelItem);

// 使用PathId查找ModelItem
ModelItem item = NavisworksApiHelper.FindModelItemByPathId(modelIndex, pathId);
```

## 使用示例

### 示例1：API操作后刷新缓存

```csharp
// 执行某些API操作
document.Models.SetHidden(items, true);

// 刷新缓存以确保状态同步
NavisworksApiHelper.SafeCacheRefresh("VisibilityManager");
```

### 示例2：确保在UI线程操作

```csharp
// 在后台线程中需要操作UI
Task.Run(() =>
{
    // 后台计算...
    var result = DoCalculation();
    
    // 回到UI线程更新界面
    NavisworksApiHelper.ExecuteOnUIThread(() =>
    {
        StatusText = $"计算完成: {result}";
        ProgressBar.Value = 100;
    });
});
```

### 示例3：查找模型项

```csharp
// 从路径ID恢复模型项引用
var item = NavisworksApiHelper.FindModelItemByPathId(0, "1/2/3/4");
if (item != null)
{
    LogManager.Info($"找到模型项: {item.DisplayName}");
}
```

### 示例4：获取模型项名称（安全）

```csharp
// 安全的获取名称，处理空值和异常
string name = NavisworksApiHelper.GetModelItemName(modelItem);
// 如果 modelItem 为 null，返回 "未知对象"
// 如果获取失败，返回 "获取失败"
```

## 注意事项

1. **缓存刷新机制**：使用空集合的 `SetHidden` 操作触发缓存更新，开销极小
2. **线程安全**：`SafeCacheRefreshUIThread` 会自动检查当前线程，必要时切换到UI线程
3. **异常处理**：所有方法内部都处理了异常，不会抛出错误
4. **日志前缀**：传入的日志前缀用于标识调用来源，便于调试
