private static void AddElement(PreviewPathBuilder path3D, ArcMoveAction moveAction) { var center = new Point3D(moveAction.Center.X, moveAction.Center.Y, 0); path3D.AddArc(EnumPlotStyle.Arc, center, moveAction.Radius, moveAction.ClockWise, moveAction.X, moveAction.Y, moveAction.Z, moveAction.ParametriTaglio); }
/// <summary> /// Crea codice per arco. /// Interpolazione Circolare /// G2 G3 X/U Z/W I K F /// Interpolazione Circolare con raggio specificato /// G2 G3 X/U Z/W R F /// /// Di default prendo prima forma. Se in caso fosse necessario con raggio impostato creare flag /// dentro ArcMoveAction /// </summary> /// <param name="programAction"></param> /// <param name="code"></param> protected override void CreateCodeFromAction(ArcMoveAction programAction, ref StringBuilder code) { if (G112Activated) { var str = string.Empty; // centro arco devo prenderlo prima di scrivere coordinate xyz in quanto vado a modificare currentxyz var iCode = string.Empty; var jCode = string.Empty; // Devo mettere coordinate incrementali del centro del cerchio rispetto al punto precedente if (CurrentX.HasValue && CurrentY.HasValue) { var deltaX = programAction.Center.X - CurrentX.Value; var deltaY = programAction.Center.Y - CurrentY.Value; iCode = ("I" + FormatCoordinate(deltaX)); jCode = ("J" + FormatCoordinate(deltaY)); } SetMoveType(programAction.MoveType, ref str); if (programAction.X.HasValue) { WriteMoveToX(programAction.X.Value, ref str); } if (programAction.Y.HasValue) { WriteMoveToY(programAction.Y.Value, ref str); } if (programAction.Z.HasValue) { WriteMoveToZ(programAction.Z.Value, ref str); } str += iCode; str += jCode; // il raggio lo ometto //str += "R" + FormatCoordinate(programAction.Radius); SetFeed(programAction.GetFeedValue(), ref str); if (string.IsNullOrWhiteSpace(str)) { return; } code.AppendLine(str); } else { base.CreateCodeFromAction(programAction, ref code); } }