From 0adfcb721a6627d4e1ca567659065a1ab315873a Mon Sep 17 00:00:00 2001 From: Zhuangkh Date: Fri, 12 May 2023 17:29:10 +0800 Subject: [PATCH] fix view direction --- PDF3D.Addin/IDTFBuilder.cs | 39 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/PDF3D.Addin/IDTFBuilder.cs b/PDF3D.Addin/IDTFBuilder.cs index 914cd9b..5ee49e0 100644 --- a/PDF3D.Addin/IDTFBuilder.cs +++ b/PDF3D.Addin/IDTFBuilder.cs @@ -139,6 +139,17 @@ namespace PDF3D.Addin IDTF.Net.View view = new IDTF.Net.View() { Name = item.Name, Resource = ViewResource }; view.ViewData.ViewAttributeScreenUnit = ViewAttributeScreenUnit.PERCENT; XYZ direction = item.ViewDirection.CrossProduct(item.UpDirection); + var viewTransform = Transform.Identity; + viewTransform.BasisX = item.ViewDirection; + viewTransform.BasisY = item.UpDirection; + viewTransform.BasisZ = direction; + var basic = Transform.Identity; + basic.BasisX = new XYZ(0, 0, 1); + basic.BasisY = new XYZ(0, 1, 0); + basic.BasisZ = new XYZ(-1, 0, 0); + var ori = viewTransform.Multiply(basic); + + view.Parents = new List() { new Parent() @@ -146,9 +157,9 @@ namespace PDF3D.Addin Name = "", Transform = new Transform4x4() { - c0r0 = item.ViewDirection.X, c0r1 = item.ViewDirection.Y, c0r2 = item.ViewDirection.Z, c0r3 = 0, - c1r0 = item.UpDirection.X, c1r1 = item.UpDirection.Y, c1r2 = item.UpDirection.Z, c1r3 = 0, - c2r0 = direction.X, c2r1 = direction.Y, c2r2 =direction.Z, c2r3 = 0, + c0r0 = ori.BasisX.X, c0r1 = ori.BasisX.Y, c0r2 = ori.BasisX.Z, c0r3 = 0, + c1r0 = ori.BasisY.X, c1r1 = ori.BasisY.Y, c1r2 = ori.BasisY.Z, c1r3 = 0, + c2r0 = ori.BasisZ.X, c2r1 = ori.BasisZ.Y, c2r2 = ori.BasisZ.Z, c2r3 = 0, c3r0 = item.Origin.X * 304.8, c3r1 = item.Origin.Y * 304.8, c3r2 = item.Origin.Z * 304.8, c3r3 = 1, } } @@ -331,28 +342,6 @@ namespace PDF3D.Addin item.Mesh.ModelPositionList = points; } - //List points = new List(); - //foreach (var point in item.Mesh.ModelPositionList) - //{ - // var str = point.ToString(); - // if (!points.Any(x => x.ToString() == str)) - // { - // points.Add(point); - // } - //} - //if (points.Count != item.Mesh.ModelPositionList.Count) - //{ - // var ptStr = points.Select(x => x.ToString()).ToList(); - // for (int i = 0; i < item.Mesh.MeshFacePositionList.Count; i++) - // { - // Int3 face = item.Mesh.MeshFacePositionList[i]; - // int a = ptStr.IndexOf(item.Mesh.ModelPositionList[face.IntArray[0]].ToString()); - // int b = ptStr.IndexOf(item.Mesh.ModelPositionList[face.IntArray[1]].ToString()); - // int c = ptStr.IndexOf(item.Mesh.ModelPositionList[face.IntArray[2]].ToString()); - // item.Mesh.MeshFacePositionList[i] = new Int3(a, b, c); - // } - // item.Mesh.ModelPositionList = points; - //} } } }