// ---------------------------------------------------------------------------------------- #region WireframePointBase public virtual void CalculatePointsF(float length, Func <Single3, PointF> func) { OriginF = new PointF(float.NaN, float.NaN); // default RayEndF = new PointF(float.NaN, float.NaN); // default NormalEndF = new PointF(float.NaN, float.NaN); // default if (!Single3.IsNaN(Origin)) { OriginF = func(Origin); if (!double.IsNaN(length)) { if (!Single3.IsNaN(Direction)) { RayEndF = func(Origin + length * Direction); } if (!Single3.IsNaN(Normal)) { NormalEndF = func(Origin + length * Normal); } } } }
// ---------------------------------------------------------------------------------------- #region Draw public PointF Project(Single3 point) { PointF result = new PointF(float.NaN, float.NaN); // Default value if (!Single3.IsNaN(point)) { float zoom = Zoom; if (!float.IsNaN(zoom) && zoom > 0d) { float biggestSize = BiggestSize; if (!float.IsNaN(biggestSize) && biggestSize > 0d) { Single3 p2 = RotMat * (point - Origin); // 9 multiplications, 6 additions if (Perspective > 0d) { float b = Perspective * p2.Y / biggestSize; zoom /= (1f + b); } result = new PointF(ToSingle(_centerX + zoom * p2.X), ToSingle(_centerY - zoom * p2.Z)); // 2 multiplications, 2 additions } } } return(result); }