/// <summary> /// 投影 /// </summary> /// <param name="m"></param> /// <param name="h"></param> /// <param name="p"></param> /// <param name="cameraVector"></param> /// <param name="mathP"></param> /// <returns></returns> public static MathVector Project(this ITriadManipulator m, swTriadManipulatorControlPoints_e h, IMathPoint p, IMathVector cameraVector, IMathUtility mathP) { IMathUtility math = mathP; //var zero = (IMathPoint)math.CreatePoint(new[] { 0, 0, 0 }); //double pT, qT; switch (h) { case swTriadManipulatorControlPoints_e.swTriadManipulatorOrigin: return((MathVector)p.Subtract(m.Origin)); case swTriadManipulatorControlPoints_e.swTriadManipulatorXAxis: return(ClosestPointOnAxis(m, p, cameraVector, m.XAxis)); case swTriadManipulatorControlPoints_e.swTriadManipulatorYAxis: return(ClosestPointOnAxis(m, p, cameraVector, m.YAxis)); case swTriadManipulatorControlPoints_e.swTriadManipulatorZAxis: return(ClosestPointOnAxis(m, p, cameraVector, m.ZAxis)); case swTriadManipulatorControlPoints_e.swTriadManipulatorXYPlane: return((MathVector)p.Subtract(m.Origin)); case swTriadManipulatorControlPoints_e.swTriadManipulatorYZPlane: return((MathVector)p.Subtract(m.Origin)); case swTriadManipulatorControlPoints_e.swTriadManipulatorZXPlane: return((MathVector)p.Subtract(m.Origin)); default: throw new ArgumentOutOfRangeException(nameof(h), h, null); } }
public static MathVector Project(this ITriadManipulator m, swTriadManipulatorControlPoints_e h, IMathPoint p, IMathVector cameraVector, IMathUtility mathP) { IMathUtility math = mathP; var zero = (IMathPoint) math.CreatePoint(new[] {0, 0, 0}); double pT, qT; switch (h) { case swTriadManipulatorControlPoints_e.swTriadManipulatorOrigin: return (MathVector) p.Subtract(m.Origin); case swTriadManipulatorControlPoints_e.swTriadManipulatorXAxis: return ClosestPointOnAxis(m, p, cameraVector, m.XAxis); case swTriadManipulatorControlPoints_e.swTriadManipulatorYAxis: return ClosestPointOnAxis(m, p, cameraVector, m.YAxis); case swTriadManipulatorControlPoints_e.swTriadManipulatorZAxis: return ClosestPointOnAxis(m, p, cameraVector, m.ZAxis); case swTriadManipulatorControlPoints_e.swTriadManipulatorXYPlane: return (MathVector) p.Subtract(m.Origin); case swTriadManipulatorControlPoints_e.swTriadManipulatorYZPlane: return (MathVector) p.Subtract(m.Origin); case swTriadManipulatorControlPoints_e.swTriadManipulatorZXPlane: return (MathVector) p.Subtract(m.Origin); default: throw new ArgumentOutOfRangeException(nameof(h), h, null); } }
public static MathTransform CreateTranslationTransform (this ITriadManipulator m, swTriadManipulatorControlPoints_e h, IMathUtility math, double value) { MathVector translVector = null; switch (h) { case swTriadManipulatorControlPoints_e.swTriadManipulatorOrigin: break; case swTriadManipulatorControlPoints_e.swTriadManipulatorXAxis: translVector = (MathVector)math.CreateVector(new[] {value, 0, 0}); break; case swTriadManipulatorControlPoints_e.swTriadManipulatorYAxis: translVector = (MathVector)math.CreateVector(new[] {0, value, 0}); break; case swTriadManipulatorControlPoints_e.swTriadManipulatorZAxis: translVector = (MathVector)math.CreateVector(new[] {0, 0, value}); break; case swTriadManipulatorControlPoints_e.swTriadManipulatorXYPlane: break; case swTriadManipulatorControlPoints_e.swTriadManipulatorYZPlane: break; case swTriadManipulatorControlPoints_e.swTriadManipulatorZXPlane: break; default: throw new ArgumentOutOfRangeException(nameof(h), h, null); } if (translVector == null) return null; return math.ComposeTransform(m.XAxis, m.YAxis, m.ZAxis, translVector, 1.0); }
/// <summary> /// 创建变换矩阵 /// </summary> /// <param name="m"></param> /// <param name="h"></param> /// <param name="math"></param> /// <param name="value"></param> /// <returns></returns> public static MathTransform CreateTranslationTransform (this ITriadManipulator m, swTriadManipulatorControlPoints_e h, IMathUtility math, double value) { MathVector translVector = null; switch (h) { case swTriadManipulatorControlPoints_e.swTriadManipulatorOrigin: break; case swTriadManipulatorControlPoints_e.swTriadManipulatorXAxis: translVector = (MathVector)math.CreateVector(new[] { value, 0, 0 }); break; case swTriadManipulatorControlPoints_e.swTriadManipulatorYAxis: translVector = (MathVector)math.CreateVector(new[] { 0, value, 0 }); break; case swTriadManipulatorControlPoints_e.swTriadManipulatorZAxis: translVector = (MathVector)math.CreateVector(new[] { 0, 0, value }); break; case swTriadManipulatorControlPoints_e.swTriadManipulatorXYPlane: break; case swTriadManipulatorControlPoints_e.swTriadManipulatorYZPlane: break; case swTriadManipulatorControlPoints_e.swTriadManipulatorZXPlane: break; default: throw new ArgumentOutOfRangeException(nameof(h), h, null); } if (translVector == null) { return(null); } return(math.ComposeTransform(m.XAxis, m.YAxis, m.ZAxis, translVector, 1.0)); }