/// <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); } }
private static MathVector ClosestPointOnAxis(ITriadManipulator m, IMathPoint p, IMathVector cameraVector, MathVector axis) { double pT; double qT; if (ClosestPointBetweenLines(m.Origin, axis, p, cameraVector, out pT, out qT)) { return((MathVector)axis.Scale(pT)); } else { return(null); } }
private static MathVector ClosestPointOnAxis(ITriadManipulator m, IMathPoint p, IMathVector cameraVector, MathVector axis) { double pT; double qT; if (ClosestPointBetweenLines(m.Origin, axis, p, cameraVector, out pT, out qT)) { return (MathVector) axis.Scale(pT); } else { return null; } }
/// <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)); }
public ITriadManipulatorObject(ITriadManipulator ITriadManipulatorinstance) { ITriadManipulatorInstance = ITriadManipulatorinstance; }
public TriadManipulatorTs(IModelDoc2 doc) { _Manipulator = doc.ModelViewManager.CreateManipulator((int)swManipulatorType_e.swTriadManipulator, this); _Impl = (ITriadManipulator)_Manipulator.GetSpecificManipulator(); _Impl.Cursor = (int)swManipulatorCursor_e.swManipulatorMoveCursor; }
public TriadManipulatorTs(IModelDoc2 doc) { _Manipulator = doc.ModelViewManager.CreateManipulator((int) swManipulatorType_e.swTriadManipulator, this); _Impl = (ITriadManipulator) _Manipulator.GetSpecificManipulator(); _Impl.Cursor = (int)swManipulatorCursor_e.swManipulatorMoveCursor; }