Esempio n. 1
0
        internal override void BuildPlan(PlanBuilder3D builder, MillingWorkspacePanel workspace)
        {
            var offsetLines = afterScaleTransformation(_currentOffsetLines);

            if (!offsetLines.Any() || !offsetLines.First().Any())
            {
                return;
            }

            builder.AddRampedLine(offsetLines.First().First());
            var currentDepth = 0.0;

            while (currentDepth <= MillingDepth)
            {
                builder.GotoZ(currentDepth);

                foreach (var cluster in offsetLines)
                {
                    foreach (var point in cluster)
                    {
                        builder.AddCuttingSpeedTransition(point);
                    }
                }

                var depthIncrement = Math.Min(workspace.MaxLayerCut, MillingDepth - currentDepth);
                if (depthIncrement <= 0)
                {
                    break;
                }
                currentDepth += depthIncrement;
            }
            builder.GotoTransitionLevel();
            builder.AddRampedLine(EntryPoint);
        }
Esempio n. 2
0
        internal override void BuildPlan(PlanBuilder3D builder, MillingWorkspacePanel workspace)
        {
            var offsetLines  = afterScaleTransformation(_currentOffsetLines);
            var currentDepth = 0.0;

            while (currentDepth < MillingDepth)
            {
                var depthIncrement = Math.Min(workspace.MaxLayerCut, MillingDepth - currentDepth);
                currentDepth += depthIncrement;

                foreach (var cluster in offsetLines)
                {
                    builder.GotoTransitionLevel();
                    builder.AddRampedLine(cluster[0]);


                    builder.GotoZ(currentDepth);
                    foreach (var point in cluster)
                    {
                        builder.AddCuttingSpeedTransition(point);
                    }
                }
            }
            builder.GotoTransitionLevel();
            builder.AddRampedLine(EntryPoint);
        }
Esempio n. 3
0
        internal override void BuildPlan(PlanBuilder3D builder, MillingWorkspacePanel workspace)
        {
            /*
             * for (var i = 0; i < 100; ++i)
             * {
             *  builder.AddRampedLine(new Point3Dmm(PositionX , PositionY, builder.ZeroLevel + 5));
             *  builder.AddRampedLine(new Point3Dmm(PositionX, PositionY, builder.ZeroLevel));
             * }
             * return;
             */

            var maxZ = _toolPath.Targets.Select(t => t.End.Z).Max();
            var minZ = _toolPath.Targets.Select(t => t.End.Z).Min();

            foreach (var target in _toolPath.Targets)
            {
                var p     = target.End;
                var p3Dmm = new Point3Dmm(p.X + PositionX, -p.Y + PositionY, -p.Z + builder.ZeroLevel);
                if (target.MotionMode == MotionMode.IsLinearRapid)
                {
                    //builder.AddRampedLine(new Point3Dmm(p3Dmm.X, p3Dmm.Y, builder.ZeroLevel));
                    builder.AddRampedLine(p3Dmm);
                    //builder.AddCuttingLine(p3Dmm);
                }
                else
                {
                    builder.AddCuttingLine(p3Dmm);
                }
            }
            builder.AddRampedLine(getEntryPoint());
        }
        internal override void BuildPlan(PlanBuilder3D builder, MillingWorkspacePanel workspace)
        {
            builder.GotoZeroLevel();

            var maxDepth    = _millingDepth;
            var upDown      = true;
            var stepLength  = 1.0;
            var resolutionX = _shapeMetricSize.Width / stepLength;
            var resolutionY = _shapeMetricSize.Height / stepLength;

            for (var xi = 0.0; xi < resolutionX; xi += stepLength)
            {
                for (var yi = 0.0; yi < resolutionY; yi += stepLength)
                {
                    var xRatio = 1.0 * xi / resolutionX;
                    var yRatio = 1.0 * yi / resolutionY;

                    var depth = _shapeMap.GetHeight(xRatio, yRatio) * _millingDepth;
                    var x     = _shapeMetricSize.Width * xRatio;
                    var y     = _shapeMetricSize.Height * yRatio;
                    if (!upDown)
                    {
                        y = _shapeMetricSize.Height - y;
                    }

                    var point = new Point3Dmm(PositionX + x, PositionY + y, depth);
                    builder.AddCuttingSpeedTransition(new Point2Dmm(point.X, point.Y), point.Z);
                }
                upDown = !upDown;
            }

            builder.GotoTransitionLevel();
            builder.AddRampedLine(EntryPoint);
        }
Esempio n. 5
0
        internal override void BuildPlan(PlanBuilder3D builder, MillingWorkspacePanel workspace)
        {
            var reliefPoints = TransformedShapeDefinition;

            builder.GotoZeroLevel();

            var maxDepth = _millingDepth;
            var upDown   = true;

            for (var x = 0; x < _width; ++x)
            {
                for (var i = 0; i < _height; ++i)
                {
                    var y     = upDown ? i : _height - i - 1;
                    var point = reliefPoints[x, y];
                    if (point.Z > maxDepth)
                    {
                        point = new Point3Dmm(point.X, point.Y, maxDepth);
                    }

                    builder.AddCuttingSpeedTransition(new Point2Dmm(point.X, point.Y), point.Z);
                }
                upDown = !upDown;
            }

            builder.GotoTransitionLevel();
            builder.AddRampedLine(EntryPoint);
        }
Esempio n. 6
0
        internal void BuildPlan(PlanBuilder3D builder, MillingWorkspacePanel workspace)
        {
            var initialPoint = builder.CurrentPoint;

            var entryPoint = Item2.EntryPoint;

            builder.GotoTransitionLevel();
            builder.AddRampedLine(entryPoint);

            Item2.BuildPlan(builder, workspace);
            builder.GotoTransitionLevel();

            foreach (var outgoingJoin in workspace.FindOutgoingJoins(Item2))
            {
                outgoingJoin.BuildPlan(builder, workspace);
            }

            builder.GotoTransitionLevel();
            builder.AddRampedLine(initialPoint);
        }
Esempio n. 7
0
        private void executePlan()
        {
            if (!Cnc.IsHomeCalibrated)
            {
                ShowError("Calibration is required!");
                return;
            }

            disableChanges();

            var state           = Cnc.PlannedState;
            var currentPosition = PlanBuilder3D.GetPosition(state);

            var startPoint = Workspace.EntryPoint;
            var start      = new Point3Dmm(startPoint.PositionX, startPoint.PositionY, _zLevel);
            var aboveStart = new Point3Dmm(start.X, start.Y, currentPosition.Z);

            var builder = new PlanBuilder3D(currentPosition.Z, _zLevel, Workspace.CuttingSpeed, Configuration.MaxPlaneSpeed, Configuration.MaxPlaneAcceleration);

            builder.SetPosition(currentPosition);

            builder.AddRampedLine(aboveStart);

            try
            {
                if (_zLevel <= aboveStart.Z)
                {
                    throw new PlanningException("Level Z is above the current position.");
                }

                Workspace.BuildPlan(builder);
            }
            catch (PlanningException ex)
            {
                planCompleted();
                ShowError(ex.Message);
                return;
            }

            var plan = builder.Build();

            if (!Cnc.Check(plan))
            {
                planCompleted();
                ShowError("Plan overflows the workspace!");
                return;
            }

            CheckEngineDialog.WaitForConfirmation(() =>
            {
                executePlan(builder);
            });
        }
Esempio n. 8
0
        private void GoToZerosXY_Click(object sender, RoutedEventArgs e)
        {
            disableChanges();

            var position = getCurrentPosition();
            var speed    = ControllerCNC.Primitives.Speed.FromMilimetersPerSecond(getCuttingSpeed());
            var builder  = new PlanBuilder3D(position.Z, position.Z, speed, Configuration.MaxPlaneSpeed, Configuration.MaxPlaneAcceleration);

            builder.SetPosition(position);
            builder.AddRampedLine(new Point2Dmm(_positionOffsetX, Workspace.RangeY - _positionOffsetY));

            executePlan(builder);
        }
        private void executePlan()
        {
            if (!Cnc.IsHomeCalibrated)
            {
                ShowError("Calibration is required!");
                return;
            }

            disableMotionCommands();
            Workspace.DisableChanges();

            var state           = Cnc.PlannedState;
            var currentPosition = PlanBuilder3D.GetPosition(state);

            var startPoint = Workspace.EntryPoint;
            var start      = new Point3Dmm(startPoint.PositionX, startPoint.PositionY, _zLevel);
            var aboveStart = new Point3Dmm(start.X, start.Y, currentPosition.Z);

            var builder = new PlanBuilder3D(currentPosition.Z, _zLevel, Workspace.CuttingSpeed, Configuration.MaxPlaneSpeed, Configuration.MaxPlaneAcceleration);

            builder.SetPosition(currentPosition);

            builder.AddRampedLine(aboveStart);

            try
            {
                if (_zLevel <= aboveStart.Z)
                {
                    throw new PlanningException("Level Z is above the current position.");
                }

                Workspace.BuildPlan(builder);
            }
            catch (PlanningException ex)
            {
                planCompleted();
                ShowError(ex.Message);
                return;
            }

            var plan = builder.Build();

            if (!Cnc.Check(plan))
            {
                planCompleted();
                ShowError("Plan overflows the workspace!");
                return;
            }

            CheckEngineDialog.WaitForConfirmation(() =>
            {
                /**/
                builder.SetStreamingCuttingSpeed(getCuttingSpeed());
                builder.StreamingIsComplete += planCompleted;/*/
                                                              * Cnc.SEND(plan);
                                                              * Cnc.OnInstructionQueueIsComplete += planCompleted;/**/
                _streamingBuilder            = builder;
                _planStart = DateTime.Now;
                builder.StreamInstructions(Cnc);
                this.Focus();
            });
        }