纠正安全间隙多次转换的bug;更新运动和指定对象标识为PathId以确保唯一性
This commit is contained in:
parent
4d28ec5547
commit
971c993bb7
@ -1036,14 +1036,14 @@ namespace NavisworksTransport.Core.Animation
|
||||
|
||||
// 使用包围盒距离检测方法
|
||||
double distance = BoundingBoxGeometryUtils.CalculateDistance(virtualBoundingBox, colliderBox);
|
||||
var safetyMarginInModelUnits = UnitsConverter.ConvertFromMeters(_safetyMargin);
|
||||
bool intersects = distance <= safetyMarginInModelUnits;
|
||||
// _safetyMargin 已经是模型单位(在CreateAnimation中已转换),直接使用
|
||||
bool intersects = distance <= _safetyMargin;
|
||||
|
||||
if (intersects)
|
||||
{
|
||||
// LogManager.Debug($"帧 {i} 检测到碰撞: {_animatedObject.DisplayName} <-> {collider.DisplayName}, 距离: {distance:F4},阈值: {safetyMarginInModelUnits:F4}");
|
||||
// LogManager.Debug($"移动物体位置: {framePosition.X:F2},{framePosition.Y:F2},{framePosition.Z:F2}");
|
||||
// LogManager.Debug($"被撞物体位置:{GetObjectPosition(collider).X:F2},{GetObjectPosition(collider).Y:F2},{GetObjectPosition(collider).Z:F2}");
|
||||
LogManager.Debug($"帧 {i} 检测到碰撞: {_animatedObject.DisplayName} <-> {collider.DisplayName}, 距离: {distance:F4},阈值: {_safetyMargin:F4}");
|
||||
LogManager.Debug($"移动物体位置: {framePosition.X:F2},{framePosition.Y:F2},{framePosition.Z:F2}");
|
||||
LogManager.Debug($"被撞物体位置:{GetObjectPosition(collider).X:F2},{GetObjectPosition(collider).Y:F2},{GetObjectPosition(collider).Z:F2}");
|
||||
|
||||
var collisionResult = new CollisionResult
|
||||
{
|
||||
@ -1234,7 +1234,7 @@ namespace NavisworksTransport.Core.Animation
|
||||
}
|
||||
|
||||
// 每一帧都打印当前朝向
|
||||
LogManager.Debug($"帧[{frameIndex}] 圆弧段[{currentEdgeIndex}]: 进度={edgeProgress:F4}, 当前朝向={currentYaw * 180.0 / Math.PI:F2}度");
|
||||
// LogManager.Debug($"帧[{frameIndex}] 圆弧段[{currentEdgeIndex}]: 进度={edgeProgress:F4}, 当前朝向={currentYaw * 180.0 / Math.PI:F2}度");
|
||||
|
||||
return currentYaw;
|
||||
}
|
||||
@ -2972,8 +2972,23 @@ namespace NavisworksTransport.Core.Animation
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
||||
// 包含对象名称
|
||||
sb.Append(animatedObject?.DisplayName ?? "null");
|
||||
// 包含对象的唯一标识(使用PathId而不是DisplayName)
|
||||
if (animatedObject != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var pathId = Autodesk.Navisworks.Api.Application.ActiveDocument.Models.CreatePathId(animatedObject);
|
||||
sb.Append($"{pathId.ModelIndex}:{pathId.PathId}");
|
||||
}
|
||||
catch
|
||||
{
|
||||
sb.Append(animatedObject.DisplayName ?? "null");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append("null");
|
||||
}
|
||||
sb.Append("|");
|
||||
|
||||
// 包含路径ID(区分不同的路径)
|
||||
@ -2997,6 +3012,7 @@ namespace NavisworksTransport.Core.Animation
|
||||
sb.Append("|");
|
||||
|
||||
// 包含手工检测对象列表(确保手工指定模式的目标变化时重新检测)
|
||||
// 使用PathId作为唯一标识,而不是DisplayName
|
||||
if (_manualCollisionOverrideEnabled && _manualCollisionTargets != null && _manualCollisionTargets.Count > 0)
|
||||
{
|
||||
sb.Append("ManualTargets:");
|
||||
@ -3004,7 +3020,8 @@ namespace NavisworksTransport.Core.Animation
|
||||
{
|
||||
try
|
||||
{
|
||||
sb.Append(target.DisplayName);
|
||||
var targetPathId = Autodesk.Navisworks.Api.Application.ActiveDocument.Models.CreatePathId(target);
|
||||
sb.Append($"{targetPathId.ModelIndex}:{targetPathId.PathId}");
|
||||
sb.Append(",");
|
||||
}
|
||||
catch (Exception)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user