Exemple #1
0
        private static void AlternatingCuttingCurve(ProcessObject processObject, Curve curve, double d)
        {
            var par = processObject.ProcessingParams;
            // s - текущее смещение от кривой контура детали curve
            // d - заданная величина смещения
            var s = par.Depth > 0
                ? (par.DepthAll > d ? par.DepthAll : d)
                : d;

            s -= par.Depth;
            if (s < d)
            {
                s = d;
            }
            var direction   = processObject.Direction;
            var isFirstPass = true;

            do
            {
                if (!IsCalculation)
                {
                    return;
                }
                if (!isFirstPass)
                {
                    s -= par.Depth;
                    if (s < d)
                    {
                        s = d;
                    }
                    direction = -direction;
                }

                var      s1            = Settings.WithCompensation ? s : s + processObject.Tool.Diameter.Value / 2;
                Curve    toolpathCurve = AutocadUtils.GetOffsetCopy(curve, processObject.Curve.OutsideSign * s1);
                ObjectId toolObjectId  = AutocadUtils.CreateToolCurve(s, toolpathCurve.StartPoint.Z, processObject.Tool.Thickness);

                Feed(toolpathCurve, direction, processObject.Curve.OutsideSign, par, isFirstPass);

                List <ProcessingAction> actions = new List <ProcessingAction>();
                if (processObject.Curve.Type == CurveType.Polyline || processObject.Curve.Type == CurveType.Circle)
                {
                    actions = Machine.Cutting(AutocadUtils.Explode(toolpathCurve, direction == -1), par.GreatSpeed);
                }
                else
                {
                    actions.Add(Machine.Cutting(toolpathCurve, par.GreatSpeed));
                }

                actions.ForEach(p => p.ToolObjectId = toolObjectId);

                Retract(toolpathCurve, direction, processObject.Curve.OutsideSign, par);

                isFirstPass = false;
            }while (s > d);
        }