From bdb3ed23dbfb50b56eacb925c6be721984539a04 Mon Sep 17 00:00:00 2001
From: tian <11429339@qq.com>
Date: Wed, 11 Feb 2026 02:30:52 +0800
Subject: [PATCH] =?UTF-8?q?=E7=BA=A0=E6=AD=A3=E7=89=A9=E4=BD=93=E7=A7=BB?=
=?UTF-8?q?=E5=8A=A8=E6=96=B9=E6=B3=95=EF=BC=8C=E7=A1=AE=E4=BF=9D=E5=85=88?=
=?UTF-8?q?=E5=9B=9E=E5=88=B0CAD=E5=8E=9F=E5=A7=8B=E4=BD=8D=E7=BD=AE?=
=?UTF-8?q?=E5=86=8D=E8=BF=9B=E8=A1=8C=E7=9B=AE=E6=A0=87=E4=BD=8D=E7=BD=AE?=
=?UTF-8?q?=E5=92=8C=E6=9C=9D=E5=90=91=E7=9A=84=E5=8F=98=E6=8D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/Utils/ModelItemTransformHelper.cs | 37 +++++++++++++++------------
1 file changed, 20 insertions(+), 17 deletions(-)
diff --git a/src/Utils/ModelItemTransformHelper.cs b/src/Utils/ModelItemTransformHelper.cs
index c9ded12..a7c7181 100644
--- a/src/Utils/ModelItemTransformHelper.cs
+++ b/src/Utils/ModelItemTransformHelper.cs
@@ -103,7 +103,7 @@ namespace NavisworksTransport.Utils
}
///
- /// 将物体从当前位置移动到指定位置和朝向(增量模式)
+ /// 将物体移动到指定位置和朝向(先回到CAD原始位置,再移动)
/// 适用于碰撞位置还原等场景
///
/// 要移动的物体
@@ -114,32 +114,35 @@ namespace NavisworksTransport.Utils
var doc = Application.ActiveDocument;
var modelItems = new ModelItemCollection { item };
- // 获取当前状态
- var currentBounds = item.BoundingBox();
- var currentGroundPos = new Point3D(
- currentBounds.Center.X,
- currentBounds.Center.Y,
- currentBounds.Min.Z
- );
- var currentYaw = GetYawFromTransform(item.Transform);
+ // 🔥 关键:先回到CAD原始位置,确保从已知状态开始计算
+ doc.Models.ResetPermanentTransform(modelItems);
- // 计算位置和旋转增量
+ // 获取CAD原始状态
+ var originalBounds = item.BoundingBox();
+ var originalGroundPos = new Point3D(
+ originalBounds.Center.X,
+ originalBounds.Center.Y,
+ originalBounds.Min.Z
+ );
+ var originalYaw = GetYawFromTransform(item.Transform);
+
+ // 计算从CAD原始位置到目标位置的增量
var deltaPos = new Vector3D(
- targetPosition.X - currentGroundPos.X,
- targetPosition.Y - currentGroundPos.Y,
- targetPosition.Z - currentGroundPos.Z
+ targetPosition.X - originalGroundPos.X,
+ targetPosition.Y - originalGroundPos.Y,
+ targetPosition.Z - originalGroundPos.Z
);
- double deltaYaw = targetYaw - currentYaw;
+ double deltaYaw = targetYaw - originalYaw;
- // 应用增量变换(和ClashDetective中的做法一致)
+ // 应用增量变换
Transform3D transform;
if (Math.Abs(deltaYaw) > 0.001)
{
// 有旋转:需要补偿绕原点旋转带来的位置偏移
double cos = Math.Cos(deltaYaw);
double sin = Math.Sin(deltaYaw);
- double rotatedX = currentGroundPos.X * cos - currentGroundPos.Y * sin;
- double rotatedY = currentGroundPos.X * sin + currentGroundPos.Y * cos;
+ double rotatedX = originalGroundPos.X * cos - originalGroundPos.Y * sin;
+ double rotatedY = originalGroundPos.X * sin + originalGroundPos.Y * cos;
var compensatedTranslation = new Vector3D(
targetPosition.X - rotatedX,