重命名“Vehicle”字段为“MovingObject”,更新相关逻辑以统一运动物体的命名
This commit is contained in:
parent
b99d4e82b6
commit
ba51389df3
@ -290,21 +290,21 @@ namespace NavisworksTransport.Core
|
||||
else
|
||||
{
|
||||
// 从 ModelItemReferences 表查询运动物体
|
||||
var vehicleReferences = await _database.GetModelItemReferencesAsync(
|
||||
var movingObjectReferences = await _database.GetModelItemReferencesAsync(
|
||||
item.Id,
|
||||
"BatchQueueItem",
|
||||
"Vehicle"
|
||||
"MovingObject"
|
||||
);
|
||||
|
||||
if (vehicleReferences.Count > 0)
|
||||
if (movingObjectReferences.Count > 0)
|
||||
{
|
||||
var vehicleRef = vehicleReferences[0];
|
||||
var movingObjectRef = movingObjectReferences[0];
|
||||
try
|
||||
{
|
||||
var pathIdObj = new Autodesk.Navisworks.Api.DocumentParts.ModelItemPathId
|
||||
{
|
||||
ModelIndex = vehicleRef.Item1,
|
||||
PathId = vehicleRef.Item2
|
||||
ModelIndex = movingObjectRef.Item1,
|
||||
PathId = movingObjectRef.Item2
|
||||
};
|
||||
animatedObject = Application.ActiveDocument.Models.ResolvePathId(pathIdObj);
|
||||
|
||||
@ -317,7 +317,7 @@ namespace NavisworksTransport.Core
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Error($"[批处理] 从 PathId 恢复运动物体失败: ModelIndex={vehicleRef.Item1}, PathId={vehicleRef.Item2}, 错误: {ex.Message}");
|
||||
LogManager.Error($"[批处理] 从 PathId 恢复运动物体失败: ModelIndex={movingObjectRef.Item1}, PathId={movingObjectRef.Item2}, 错误: {ex.Message}");
|
||||
throw new InvalidOperationException("恢复运动物体失败", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,6 +29,7 @@ namespace NavisworksTransport.Core.Models
|
||||
public double VirtualVehicleLength { get; set; }
|
||||
public double VirtualVehicleWidth { get; set; }
|
||||
public double VirtualVehicleHeight { get; set; }
|
||||
public string MovingObjectName { get; set; } // 运动物体名称,虚拟车辆时为 null
|
||||
|
||||
// 碰撞检测配置
|
||||
public bool DetectAllObjects { get; set; } = true;
|
||||
@ -42,7 +43,7 @@ namespace NavisworksTransport.Core.Models
|
||||
|
||||
// 注意:运动物体和碰撞检测目标都存储在 ModelItemReferences 表中
|
||||
// 使用 BatchQueueItem.Id 作为 ReferenceId 进行查询
|
||||
// Role = "Vehicle" 表示运动物体
|
||||
// Role = "MovingObject" 表示运动物体
|
||||
// Role = "CollisionTarget" 表示碰撞检测目标
|
||||
}
|
||||
|
||||
|
||||
@ -1407,7 +1407,7 @@ namespace NavisworksTransport
|
||||
|
||||
// 注意:运动物体和碰撞检测目标都存储在 ModelItemReferences 表中
|
||||
// 这些数据在调用 CreateBatchQueueItemAsync 之前插入
|
||||
// Role = "Vehicle" 表示运动物体
|
||||
// Role = "MovingObject" 表示运动物体
|
||||
// Role = "CollisionTarget" 表示碰撞检测目标
|
||||
|
||||
return queueItemId;
|
||||
@ -1415,6 +1415,52 @@ namespace NavisworksTransport
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从 SQLiteDataReader 读取 BatchQueueItem 对象
|
||||
/// </summary>
|
||||
private BatchQueueItem ReadBatchQueueItemFromReader(SQLiteDataReader reader)
|
||||
{
|
||||
var itemId = Convert.ToInt32(reader["Id"]);
|
||||
var isVirtualVehicle = Convert.ToBoolean(reader["IsVirtualVehicle"]);
|
||||
|
||||
var item = new BatchQueueItem
|
||||
{
|
||||
Id = itemId,
|
||||
PathRouteId = reader["PathRouteId"].ToString(),
|
||||
PathRouteName = reader["PathRouteName"].ToString(),
|
||||
Status = (BatchQueueStatus)Enum.Parse(typeof(BatchQueueStatus), reader["Status"].ToString()),
|
||||
CreatedTime = DateTime.Parse(reader["CreatedTime"].ToString()),
|
||||
StartTime = reader["StartTime"].ToString() != "" ? (DateTime?)DateTime.Parse(reader["StartTime"].ToString()) : null,
|
||||
EndTime = reader["EndTime"].ToString() != "" ? (DateTime?)DateTime.Parse(reader["EndTime"].ToString()) : null,
|
||||
ErrorMessage = reader["ErrorMessage"].ToString(),
|
||||
FrameRate = Convert.ToInt32(reader["FrameRate"]),
|
||||
DurationSeconds = Convert.ToDouble(reader["DurationSeconds"]),
|
||||
DetectionToleranceMeters = Convert.ToDouble(reader["DetectionToleranceMeters"]),
|
||||
IsVirtualVehicle = isVirtualVehicle,
|
||||
VirtualVehicleLength = Convert.ToDouble(reader["VirtualVehicleLength"]),
|
||||
VirtualVehicleWidth = Convert.ToDouble(reader["VirtualVehicleWidth"]),
|
||||
VirtualVehicleHeight = Convert.ToDouble(reader["VirtualVehicleHeight"]),
|
||||
DetectAllObjects = Convert.ToBoolean(reader["DetectAllObjects"]),
|
||||
ClashDetectiveTestName = reader["ClashDetectiveTestName"].ToString(),
|
||||
CollisionCount = !Convert.IsDBNull(reader["CollisionCount"]) ? (int?)Convert.ToInt32(reader["CollisionCount"]) : null,
|
||||
ObjectRotationCorrection = Convert.ToDouble(reader["ObjectRotationCorrection"])
|
||||
};
|
||||
|
||||
// 填充 MovingObjectName 属性
|
||||
if (!isVirtualVehicle)
|
||||
{
|
||||
// 从 ModelItemReferences 表查询运动物体名称
|
||||
var movingObjectReferences = GetModelItemReferencesSync(itemId, "BatchQueueItem", "MovingObject");
|
||||
if (movingObjectReferences.Count > 0)
|
||||
{
|
||||
item.MovingObjectName = movingObjectReferences[0].Item3; // Item3 是 DisplayName
|
||||
}
|
||||
}
|
||||
// 虚拟车辆时,MovingObjectName 保持 null
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取批处理队列项列表
|
||||
/// </summary>
|
||||
@ -1466,28 +1512,7 @@ namespace NavisworksTransport
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
items.Add(new BatchQueueItem
|
||||
{
|
||||
Id = Convert.ToInt32(reader["Id"]),
|
||||
PathRouteId = reader["PathRouteId"].ToString(),
|
||||
PathRouteName = reader["PathRouteName"].ToString(),
|
||||
Status = (BatchQueueStatus)Enum.Parse(typeof(BatchQueueStatus), reader["Status"].ToString()),
|
||||
CreatedTime = DateTime.Parse(reader["CreatedTime"].ToString()),
|
||||
StartTime = reader["StartTime"].ToString() != "" ? (DateTime?)DateTime.Parse(reader["StartTime"].ToString()) : null,
|
||||
EndTime = reader["EndTime"].ToString() != "" ? (DateTime?)DateTime.Parse(reader["EndTime"].ToString()) : null,
|
||||
ErrorMessage = reader["ErrorMessage"].ToString(),
|
||||
FrameRate = Convert.ToInt32(reader["FrameRate"]),
|
||||
DurationSeconds = Convert.ToDouble(reader["DurationSeconds"]),
|
||||
DetectionToleranceMeters = Convert.ToDouble(reader["DetectionToleranceMeters"]),
|
||||
IsVirtualVehicle = Convert.ToBoolean(reader["IsVirtualVehicle"]),
|
||||
VirtualVehicleLength = Convert.ToDouble(reader["VirtualVehicleLength"]),
|
||||
VirtualVehicleWidth = Convert.ToDouble(reader["VirtualVehicleWidth"]),
|
||||
VirtualVehicleHeight = Convert.ToDouble(reader["VirtualVehicleHeight"]),
|
||||
DetectAllObjects = Convert.ToBoolean(reader["DetectAllObjects"]),
|
||||
ClashDetectiveTestName = reader["ClashDetectiveTestName"].ToString(),
|
||||
CollisionCount = !Convert.IsDBNull(reader["CollisionCount"]) ? (int?)Convert.ToInt32(reader["CollisionCount"]) : null,
|
||||
ObjectRotationCorrection = Convert.ToDouble(reader["ObjectRotationCorrection"])
|
||||
});
|
||||
items.Add(ReadBatchQueueItemFromReader(reader));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1519,30 +1544,7 @@ namespace NavisworksTransport
|
||||
{
|
||||
if (reader.Read())
|
||||
{
|
||||
var item = new BatchQueueItem
|
||||
{
|
||||
Id = Convert.ToInt32(reader["Id"]),
|
||||
PathRouteId = reader["PathRouteId"].ToString(),
|
||||
PathRouteName = reader["PathRouteName"].ToString(),
|
||||
Status = (BatchQueueStatus)Enum.Parse(typeof(BatchQueueStatus), reader["Status"].ToString()),
|
||||
CreatedTime = DateTime.Parse(reader["CreatedTime"].ToString()),
|
||||
StartTime = reader["StartTime"].ToString() != "" ? (DateTime?)DateTime.Parse(reader["StartTime"].ToString()) : null,
|
||||
EndTime = reader["EndTime"].ToString() != "" ? (DateTime?)DateTime.Parse(reader["EndTime"].ToString()) : null,
|
||||
ErrorMessage = reader["ErrorMessage"].ToString(),
|
||||
FrameRate = Convert.ToInt32(reader["FrameRate"]),
|
||||
DurationSeconds = Convert.ToDouble(reader["DurationSeconds"]),
|
||||
DetectionToleranceMeters = Convert.ToDouble(reader["DetectionToleranceMeters"]),
|
||||
IsVirtualVehicle = Convert.ToBoolean(reader["IsVirtualVehicle"]),
|
||||
VirtualVehicleLength = Convert.ToDouble(reader["VirtualVehicleLength"]),
|
||||
VirtualVehicleWidth = Convert.ToDouble(reader["VirtualVehicleWidth"]),
|
||||
VirtualVehicleHeight = Convert.ToDouble(reader["VirtualVehicleHeight"]),
|
||||
DetectAllObjects = Convert.ToBoolean(reader["DetectAllObjects"]),
|
||||
ClashDetectiveTestName = reader["ClashDetectiveTestName"].ToString(),
|
||||
CollisionCount = !Convert.IsDBNull(reader["CollisionCount"]) ? (int?)Convert.ToInt32(reader["CollisionCount"]) : null,
|
||||
ObjectRotationCorrection = Convert.ToDouble(reader["ObjectRotationCorrection"])
|
||||
};
|
||||
|
||||
return item;
|
||||
return ReadBatchQueueItemFromReader(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1663,6 +1665,45 @@ namespace NavisworksTransport
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取指定 ReferenceId 和 Role 的所有 ModelItem 引用(同步版本,用于在 Task.Run 内部调用)
|
||||
/// </summary>
|
||||
private List<(int ModelIndex, string PathId, string DisplayName, string ObjectName)> GetModelItemReferencesSync(int referenceId, string referenceType, string role = null)
|
||||
{
|
||||
var items = new List<(int, string, string, string)>();
|
||||
using (var cmd = new SQLiteCommand(_connection))
|
||||
{
|
||||
var sql = @"
|
||||
SELECT ModelIndex, PathId, DisplayName, ObjectName
|
||||
FROM ModelItemReferences
|
||||
WHERE ReferenceId = @ReferenceId AND ReferenceType = @ReferenceType";
|
||||
|
||||
if (!string.IsNullOrEmpty(role))
|
||||
{
|
||||
sql += " AND Role = @Role";
|
||||
cmd.Parameters.AddWithValue("@Role", role);
|
||||
}
|
||||
|
||||
cmd.CommandText = sql;
|
||||
cmd.Parameters.AddWithValue("@ReferenceId", referenceId);
|
||||
cmd.Parameters.AddWithValue("@ReferenceType", referenceType);
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
items.Add((
|
||||
Convert.ToInt32(reader["ModelIndex"]),
|
||||
reader["PathId"].ToString(),
|
||||
reader["DisplayName"].ToString(),
|
||||
reader["ObjectName"].ToString()
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除指定 ReferenceId 的所有 ModelItem 引用
|
||||
/// </summary>
|
||||
|
||||
@ -3604,7 +3604,7 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
pathIdInfo.PathId,
|
||||
SelectedAnimatedObject.DisplayName,
|
||||
SelectedAnimatedObject.DisplayName,
|
||||
"Vehicle"
|
||||
"MovingObject"
|
||||
);
|
||||
LogManager.Info($"[批处理] 已存储运动物体: {SelectedAnimatedObject.DisplayName}");
|
||||
}
|
||||
|
||||
@ -125,7 +125,7 @@ NavisworksTransport 批处理队列管理页签视图 - 采用与其他页签一
|
||||
Height="300">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="路径名称" Binding="{Binding PathRouteName}" Width="*" MinWidth="80"/>
|
||||
<DataGridTextColumn Header="物流对象" Binding="{Binding VehicleObjectName, Converter={StaticResource NullToDashConverter}}" Width="120"/>
|
||||
<DataGridTextColumn Header="物流对象" Binding="{Binding MovingObjectName, Converter={StaticResource NullToDashConverter}}" Width="120"/>
|
||||
<DataGridTextColumn Header="调整角度" Binding="{Binding ObjectRotationCorrection, StringFormat={}{0:F1}°}" Width="80"/>
|
||||
<DataGridTextColumn Header="手工指定" Binding="{Binding DetectAllObjects, Converter={StaticResource BooleanToYesNoConverter}}" Width="80"/>
|
||||
<DataGridTextColumn Header="状态" Binding="{Binding Status, Converter={StaticResource BatchQueueStatusConverter}}" Width="80"/>
|
||||
|
||||
@ -51,8 +51,8 @@ namespace NavisworksTransport.UI.WPF.Views
|
||||
VirtualVehicleLength = double.Parse(txtVehicleLength.Text),
|
||||
VirtualVehicleWidth = double.Parse(txtVehicleWidth.Text),
|
||||
VirtualVehicleHeight = double.Parse(txtVehicleHeight.Text),
|
||||
VehicleObjectId = _selectedObject?.ToString(),
|
||||
VehicleObjectName = _selectedObject?.DisplayName,
|
||||
MovingObjectId = _selectedObject?.ToString(),
|
||||
MovingObjectName = _selectedObject?.DisplayName,
|
||||
DetectionItems = _detectionItems.Select(i => i.ToString()).ToList(),
|
||||
DetectAllObjects = rbDetectAll.IsChecked == true,
|
||||
UseOverrideConfig = cbOverrideConfig.IsChecked == true
|
||||
@ -287,8 +287,8 @@ namespace NavisworksTransport.UI.WPF.Views
|
||||
public double VirtualVehicleLength { get; set; }
|
||||
public double VirtualVehicleWidth { get; set; }
|
||||
public double VirtualVehicleHeight { get; set; }
|
||||
public string VehicleObjectId { get; set; }
|
||||
public string VehicleObjectName { get; set; }
|
||||
public string MovingObjectId { get; set; }
|
||||
public string MovingObjectName { get; set; }
|
||||
public List<string> DetectionItems { get; set; }
|
||||
public bool DetectAllObjects { get; set; }
|
||||
public bool UseOverrideConfig { get; set; }
|
||||
|
||||
Loading…
Reference in New Issue
Block a user