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); }
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); }
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); }
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); }
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); }
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); }); }
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(); }); }