internal override LinearMoveAction MultiplyMatrix(Matrix3D rotationMatrix)
        {
            // coordinate dovrebbere essere note entrambi
            if (!X.HasValue || !Y.HasValue)
            {
                throw new Exception("LinearAction.MuliplyMatrix");
            }

            var rsltArc = new ArcMoveAction(AxisAbilited, MoveType)
            {
                ClockWise = ClockWise,
                Radius    = Radius,
                Z         = Z
            };

            var rotatedEndPnt = Geometry.GeometryHelper.MultiplyPoint(new Geometry.Point3D(X.Value, Y.Value, 0), rotationMatrix);

            var rotatedCenterArc = Geometry.GeometryHelper.MultiplyPoint(new Geometry.Point3D(Center.X, Center.Y, 0), rotationMatrix);

            rsltArc.X = rotatedEndPnt.X;
            rsltArc.Y = rotatedEndPnt.Y;

            rsltArc.Center = new Point2D(rotatedCenterArc.X, rotatedCenterArc.Y);

            return(rsltArc);
        }
        public void AddArcMove(AxisAbilited axisAbilited, double?x, double?y, double?z, double radius, bool clockWise, Point2D center, double?feed = null, CncCompensationState cncCompensationState = CncCompensationState.NoChange)
        {
            var moveType = clockWise ? MoveType.Cw : MoveType.Ccw;

            var moveAction = new ArcMoveAction(axisAbilited, moveType)
            {
                Radius = radius, ClockWise = clockWise, Center = center, CncCompensationState = cncCompensationState
            };

            moveAction.Z = z;

            _x = moveAction.X = x;
            _y = moveAction.Y = y;

            this.Add(moveAction);
        }
        public void AddArcMove(AxisAbilited axisAbilited, double x, double y, double?z, double radius, bool clockWise, Point2D center, Matrix3D rotationMatrix, double?feed = null, CncCompensationState cncCompensationState = CncCompensationState.NoChange)
        {
            var moveType = clockWise ? MoveType.Cw : MoveType.Ccw;

            var rotatedEndPnt = Geometry.GeometryHelper.MultiplyPoint(new Geometry.Point3D(x, y, 0), rotationMatrix);

            var rotatedCenterArc = Geometry.GeometryHelper.MultiplyPoint(new Geometry.Point3D(center.X, center.Y, 0), rotationMatrix);

            var moveAction = new ArcMoveAction(axisAbilited, moveType)
            {
                Radius = radius, ClockWise = clockWise, Center = new Point2D(rotatedCenterArc.X, rotatedCenterArc.Y), CncCompensationState = cncCompensationState
            };

            moveAction.Z = z;

            _x = moveAction.X = rotatedEndPnt.X;
            _y = moveAction.Y = rotatedEndPnt.Y;

            this.Add(moveAction);
        }