using OpenNest.Math; namespace OpenNest.CNC { public class SubProgramCall : ICode { private double rotation; private Program program; public SubProgramCall() { } public SubProgramCall(Program program, double rotation) { this.program = program; this.Rotation = rotation; } /// /// The program ID. /// public int Id { get; set; } /// /// Gets or sets the program. /// public Program Program { get { return program; } set { program = value; UpdateProgramRotation(); } } /// /// Gets or sets the rotation of the program in degrees. /// public double Rotation { get { return rotation; } set { rotation = value; UpdateProgramRotation(); } } /// /// Rotates the program by the difference of the current /// rotation set in the sub program call and the program. /// private void UpdateProgramRotation() { if (program != null) { var diffAngle = Angle.ToRadians(rotation) - program.Rotation; if (!diffAngle.IsEqualTo(0.0)) program.Rotate(diffAngle); } } /// /// Gets the code type. /// /// public CodeType Type { get { return CodeType.SubProgramCall; } } /// /// Gets a shallow copy. /// /// public ICode Clone() { return new SubProgramCall(program, Rotation); } public override string ToString() { return string.Format("G65 P{0} R{1}", Id, Rotation); } } }