302 lines
9.2 KiB
Markdown
302 lines
9.2 KiB
Markdown
# 2.2.2 属性设置功能设计说明
|
||
|
||
## 2.2.2.1. 模块描述
|
||
|
||
属性设置模块是物流"类别"设置功能的核心模块,负责支持通过选择树和三维视图选择的方式,选择物流路径相关的元素(如门、电梯、楼梯、通道等),设置为特定的物流分类,并支持类型、可通行性、速度限制、宽度限制、优先级等属性的设置。同时支持在工具箱中进行识别和筛选,支持物流分类属性的添加、编辑和清除。
|
||
|
||
该模块与CategoryAttributeManager、LogisticsControlPanel和ConfigManager紧密集成,实现完整的物流属性管理功能。
|
||
|
||
## 2.2.2.2. 功能
|
||
|
||
### 核心功能
|
||
1. **元素选择**:通过选择树或三维视图选择物流元素
|
||
2. **分类设置**:设置元素的物流分类(门、电梯、楼梯、通道等)
|
||
3. **属性配置**:配置类型、可通行性、速度限制、宽度限制、优先级等属性
|
||
4. **工具箱集成**:在工具箱中进行识别和筛选
|
||
5. **属性编辑**:支持物流分类属性的添加、编辑和清除
|
||
|
||
### 子功能
|
||
| 功能编号 | 功能名称 | 功能描述 |
|
||
|---------|---------|---------|
|
||
| 2.2.2.F1 | 选择树选择 | 通过选择树面板选择元素 |
|
||
| 2.2.2.F2 | 三维视图选择 | 在三维视图中点选元素 |
|
||
| 2.2.2.F3 | 分类设置 | 设置元素的物流分类类型 |
|
||
| 2.2.2.F4 | 可通行性设置 | 设置元素是否可通行 |
|
||
| 2.2.2.F5 | 优先级设置 | 设置元素的优先级(1-10) |
|
||
| 2.2.2.F6 | 速度限制设置 | 设置元素的速度限制 |
|
||
| 2.2.2.F7 | 宽度限制设置 | 设置元素的宽度限制 |
|
||
| 2.2.2.F8 | 高度限制设置 | 设置元素的高度限制 |
|
||
| 2.2.2.F9 | 属性清除 | 清除元素的物流属性 |
|
||
| 2.2.2.F10 | 工具箱筛选 | 在工具箱中按分类筛选元素 |
|
||
|
||
## 2.2.2.3. 性能
|
||
|
||
### 性能指标
|
||
| 指标名称 | 目标值 | 说明 |
|
||
|---------|-------|------|
|
||
| 属性设置响应 | < 200ms | 设置单个元素属性的响应时间 |
|
||
| 批量设置时间 | < 2秒 | 批量设置100个元素属性的时间 |
|
||
| 筛选查询时间 | < 500ms | 按分类筛选元素的查询时间 |
|
||
| 内存占用 | < 100MB | 属性管理的额外内存占用 |
|
||
|
||
### 性能优化策略
|
||
1. 批量COM API调用减少开销
|
||
2. 属性缓存机制
|
||
3. 异步处理大批量操作
|
||
|
||
## 2.2.2.4. 输入输出项
|
||
|
||
### 1. 字段输入输出
|
||
|
||
#### 输入字段
|
||
| 字段名 | 类型 | 必填 | 说明 |
|
||
|-------|------|-----|------|
|
||
| Items | ModelItemCollection | 是 | 选中的模型元素 |
|
||
| ElementType | LogisticsElementType | 是 | 物流元素类型 |
|
||
| IsTraversable | bool | 否 | 是否可通行,默认true |
|
||
| Priority | int | 否 | 优先级(1-10),默认5 |
|
||
| HeightLimit | double | 否 | 高度限制(米),默认3.0 |
|
||
| SpeedLimit | double | 否 | 速度限制(米/秒),默认0.8 |
|
||
| WidthLimit | double | 否 | 宽度限制(米),默认3.0 |
|
||
|
||
#### 输出字段
|
||
| 字段名 | 类型 | 说明 |
|
||
|-------|------|------|
|
||
| AppliedCount | int | 成功应用属性的元素数量 |
|
||
| FailedItems | List<ModelItem> | 应用失败的元素列表 |
|
||
| CurrentAttributes | Dictionary<string, string> | 当前元素的所有属性 |
|
||
|
||
### 2. 界面交互输入输出
|
||
|
||
#### 界面输入
|
||
- 元素选择操作
|
||
- 分类类型下拉选择
|
||
- 属性值输入
|
||
- 批量操作确认
|
||
|
||
#### 界面输出
|
||
- 选中元素高亮显示
|
||
- 属性设置结果提示
|
||
- 当前属性值显示
|
||
- 统计信息面板
|
||
|
||
## 2.2.2.5. 算法
|
||
|
||
### 属性设置算法
|
||
```
|
||
算法:设置物流元素属性
|
||
输入:模型元素集合,属性参数
|
||
输出:设置结果
|
||
|
||
1. 准备属性字典
|
||
- 类型:ElementType.ToString()
|
||
- 可通行:IsTraversable ? "是" : "否"
|
||
- 优先级:Priority.ToString()
|
||
- 高度限制:HeightLimit + " m"
|
||
- 速度限制:SpeedLimit + " m/s"
|
||
- 宽度限制:WidthLimit + " m"
|
||
|
||
2. 准备内部名称字典
|
||
|
||
3. 调用COM API批量设置属性
|
||
|
||
4. 如果是空轨类型,预计算基准路径
|
||
|
||
5. 返回应用统计
|
||
```
|
||
|
||
### 分类筛选算法
|
||
```
|
||
算法:按物流分类筛选元素
|
||
输入:分类类型
|
||
输出:匹配的元素列表
|
||
|
||
1. 创建搜索条件
|
||
2. 设置搜索条件:
|
||
- PropertyName = "类型"
|
||
- Condition = Equal
|
||
- Value = 分类类型.ToString()
|
||
3. 执行搜索
|
||
4. 返回匹配的元素集合
|
||
```
|
||
|
||
## 2.2.2.6. 流程逻辑
|
||
|
||
```
|
||
开始
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ 选择模型元素 │
|
||
└────────┬────────┘
|
||
│
|
||
┌────┴────┐
|
||
▼ ▼
|
||
┌────────┐ ┌────────┐
|
||
│选择树 │ │三维视图│
|
||
└───┬────┘ └───┬────┘
|
||
│ │
|
||
└─────┬─────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ 显示选中预览 │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ 设置分类类型 │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ 配置属性参数 │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ 应用属性设置 │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ 显示设置结果 │
|
||
└────────┬────────┘
|
||
│
|
||
▼
|
||
结束
|
||
```
|
||
|
||
## 2.2.2.7. 接口
|
||
|
||
### 公共接口
|
||
```csharp
|
||
/// <summary>
|
||
/// 类别属性管理器
|
||
/// </summary>
|
||
public class CategoryAttributeManager
|
||
{
|
||
/// <summary>
|
||
/// 添加物流属性(使用配置默认值)
|
||
/// </summary>
|
||
public static int AddLogisticsAttributes(
|
||
ModelItemCollection items,
|
||
LogisticsElementType elementType);
|
||
|
||
/// <summary>
|
||
/// 添加物流属性(指定所有参数)
|
||
/// </summary>
|
||
public static int AddLogisticsAttributes(
|
||
ModelItemCollection items,
|
||
LogisticsElementType elementType,
|
||
bool isTraversable,
|
||
int priority,
|
||
double heightLimit,
|
||
double speedLimit,
|
||
double widthLimit);
|
||
|
||
/// <summary>
|
||
/// 清除物流属性
|
||
/// </summary>
|
||
public static int ClearLogisticsAttributes(ModelItemCollection items);
|
||
|
||
/// <summary>
|
||
/// 按类型获取物流元素
|
||
/// </summary>
|
||
public static List<ModelItem> GetLogisticsItemsByType(string typeName);
|
||
|
||
/// <summary>
|
||
/// 获取所有可通行物流元素
|
||
/// </summary>
|
||
public static List<ModelItem> GetAllTraversableLogisticsItems();
|
||
}
|
||
```
|
||
|
||
### 物流元素类型枚举
|
||
```csharp
|
||
public enum LogisticsElementType
|
||
{
|
||
空洞 = 0, // 不可通行
|
||
障碍物 = 1, // 不可通行
|
||
楼板 = 2, // 基础可通行,权重1.0
|
||
门 = 3, // 可通行,权重1.2
|
||
电梯 = 4, // 可通行,权重2.0
|
||
楼梯 = 5, // 可通行,权重3.0
|
||
通道 = 6, // 可通行,优先路径,权重0.5
|
||
走廊 = 7, // 可通行,权重0.6
|
||
装卸区 = 8, // 可通行,权重0.8
|
||
停车位 = 9, // 可通行,权重0.9
|
||
空轨 = 10, // 可通行,权重0.7
|
||
无关项 = 11 // 不参与网格生成
|
||
}
|
||
```
|
||
|
||
## 2.2.2.8. 注释设计
|
||
|
||
### 代码注释规范
|
||
```csharp
|
||
/// <summary>
|
||
/// 物流属性定义
|
||
/// </summary>
|
||
public static class LogisticsProperties
|
||
{
|
||
/// <summary>
|
||
/// 物流元素类型
|
||
/// </summary>
|
||
public const string TYPE = "类型";
|
||
|
||
/// <summary>
|
||
/// 是否可通行
|
||
/// </summary>
|
||
public const string TRAVERSABLE = "可通行";
|
||
|
||
/// <summary>
|
||
/// 优先级(1-10)
|
||
/// </summary>
|
||
public const string PRIORITY = "优先级";
|
||
|
||
/// <summary>
|
||
/// 高度限制(米)
|
||
/// </summary>
|
||
public const string HEIGHT_LIMIT = "高度限制";
|
||
|
||
/// <summary>
|
||
/// 速度限制(米/秒)
|
||
/// </summary>
|
||
public const string SPEED_LIMIT = "速度限制";
|
||
|
||
/// <summary>
|
||
/// 宽度限制(米)
|
||
/// </summary>
|
||
public const string WIDTH_LIMIT = "宽度限制";
|
||
}
|
||
```
|
||
|
||
## 2.2.2.9. 数据结构
|
||
|
||
### LogisticsElementType 枚举
|
||
| 值 | 名称 | 说明 | 权重 |
|
||
|---|------|------|-----|
|
||
| 0 | 空洞 | 没有任何几何覆盖,不可通行 | - |
|
||
| 1 | 障碍物 | 墙体、柱子、设备等,不可通行 | - |
|
||
| 2 | 楼板 | 基础可通行区域 | 1.0 |
|
||
| 3 | 门 | 可通行 | 1.2 |
|
||
| 4 | 电梯 | 可通行 | 2.0 |
|
||
| 5 | 楼梯 | 可通行 | 3.0 |
|
||
| 6 | 通道 | 可通行,优先路径 | 0.5 |
|
||
| 7 | 走廊 | 可通行 | 0.6 |
|
||
| 8 | 装卸区 | 可通行 | 0.8 |
|
||
| 9 | 停车位 | 可通行 | 0.9 |
|
||
| 10 | 空轨 | 空中运输路径 | 0.7 |
|
||
| 11 | 无关项 | 不参与网格生成 | - |
|
||
|
||
### LogisticsAttribute 结构
|
||
| 字段名 | 类型 | 说明 |
|
||
|-------|------|------|
|
||
| ElementType | LogisticsElementType | 元素类型 |
|
||
| IsTraversable | bool | 是否可通行 |
|
||
| Priority | int | 优先级 |
|
||
| HeightLimitMeters | double | 高度限制(米) |
|
||
| SpeedLimitMetersPerSecond | double | 速度限制(米/秒) |
|
||
| WidthLimitMeters | double | 宽度限制(米) |
|