コード例 #1
0
ファイル: ArcInterpolation.cs プロジェクト: Jackhammer88/Visu
        public ArcInterpolation(Point3D origin, float radius, Point3D end, bool clockwise)
        {
            _origin    = origin;
            _end       = end;
            _clockwise = clockwise;
            _radius    = radius;
            _plane     = GetPlane(origin, end);
            _centers   = CalculateCenters(origin, end, radius, _plane);
            _offset    = RoundOffsets(CalculateOffsets(origin, _centers));
            _angles    = RoundAngles(CalculateAngles(origin, end, _centers, _plane));

            if (!_clockwise && _angles.StartingAngle >= _angles.EndAngle)
            {
                _angles.EndAngle += 360;
            }
        }
コード例 #2
0
ファイル: ArcInterpolation.cs プロジェクト: Jackhammer88/Visu
        public ArcInterpolation(Point3D origin, ArcCenters centers, Point3D end, bool clockwise)
        {
            _origin    = origin;
            _centers   = centers ?? throw new ArgumentNullException(paramName: nameof(centers));
            _end       = end;
            _clockwise = clockwise;

            _plane  = GetPlane();
            _radius = CalculateRadius(_plane);
            _offset = CalculateOffsets(origin, centers);
            _angles = CalculateAngles(origin, end, centers, _plane);

            if (!_clockwise && _angles.StartingAngle >= _angles.EndAngle)
            {
                _angles.EndAngle += 360;
            }
        }
コード例 #3
0
ファイル: ArcInterpolation.cs プロジェクト: Jackhammer88/Visu
        private ArcAngles CalculateAngles(Point3D start, Point3D end, ArcCenters centers, Plane plane)
        {
            ArcAngles result;
            double    catetA, catetB, angleStart, angleEnd;

            switch (plane)
            {
            case Plane.XY:
                catetA     = start.X - (centers.I.Value + start.X);
                catetB     = start.Y - (centers.J.Value + start.Y);
                angleStart = Math.Atan2(catetB, catetA) * (180 / Math.PI);

                catetA   = end.X - (centers.I.Value + start.X);
                catetB   = end.Y - (centers.J.Value + start.Y);
                angleEnd = Math.Atan2(catetB, catetA) * (180 / Math.PI);
                break;

            case Plane.XZ:
                catetA     = start.X - (centers.I.Value + start.X);
                catetB     = start.Z - (centers.K.Value + start.Z);
                angleStart = Math.Atan2(catetB, catetA) * (180 / Math.PI);

                catetA   = end.X - (centers.I.Value + start.X);
                catetB   = end.Z - (centers.K.Value + start.Z);
                angleEnd = Math.Atan2(catetB, catetA) * (180 / Math.PI);
                break;

            case Plane.YZ:
                catetA     = start.Y - (centers.J.Value + start.Y);
                catetB     = start.Z - (centers.K.Value + start.Z);
                angleStart = Math.Atan2(catetB, catetA) * (180 / Math.PI);

                catetA   = end.Y - (centers.J.Value + start.Y);
                catetB   = end.Z - (centers.K.Value + start.Z);
                angleEnd = Math.Atan2(catetB, catetA) * (180 / Math.PI);
                break;

            case Plane.Unknown:
            default:
                throw new InvalidOperationException(ResourcesStrings.UnknownPlane);
            }


            result = new ArcAngles(angleStart, angleEnd);
            return(result);
        }
コード例 #4
0
ファイル: ArcInterpolation.cs プロジェクト: Jackhammer88/Visu
 private ArcAngles RoundAngles(ArcAngles arcAngles)
 {
     arcAngles.StartingAngle = Math.Round(arcAngles.StartingAngle, 3);
     arcAngles.EndAngle      = Math.Round(arcAngles.EndAngle, 3);
     return(arcAngles);
 }