fix view direction

This commit is contained in:
Zhuangkh 2023-05-12 17:29:10 +08:00
parent 7826b3a3f4
commit 0adfcb721a

View File

@ -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<Parent>()
{
new Parent()
@ -146,9 +157,9 @@ namespace PDF3D.Addin
Name = "<NULL>",
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<Point3> points = new List<Point3>();
//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;
//}
}
}
}