using System.Collections.Generic; using System.Linq; using System; using UnityEngine; /// /// ÇÁ·Î±×·¥ÀÇ jobÀ̸§, stepÁ¤º¸¸¦ °ü¸®Çϴ Ŭ·¡½º /// public class RobotProgram { public string ProgramId { get; private set; } // jobÀ̸§ public List Steps { get; private set; } // stepÁ¤º¸µé public RobotProgram(string programId, string rawTextContent) { this.ProgramId = programId; this.Steps = new List(); ParseJobContent(rawTextContent); } /// /// GET ÀÀ´ä(rawText)À» ÆÄ½ÌÇÏ¿© Steps ¸®½ºÆ®¸¦ ä¿ò /// private void ParseJobContent(string rawText) { string[] lines = rawText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string line in lines) { // S<¹øÈ£>·Î ½ÃÀÛÇϰí, [ÁÂÇ¥]¸¦ Æ÷ÇÔÇÏ´Â ¶óÀθ¸ ÆÄ½Ì if (line.StartsWith("S") && line.Contains("[")) { string coordString = ExtractCoordinates(line); if (!string.IsNullOrEmpty(coordString)) { Steps.Add(new RobotMoveStep(line, coordString)); } } } Debug.Log($"ÇÁ·Î±×·¥ '{ProgramId}' ·Îµå ¿Ï·á. {Steps.Count}°³ÀÇ ½ºÅÜ ÆÄ½ÌµÊ."); } /// /// ÁÂÇ¥¸¸ ÃßÃâÇÏ´Â ÇÔ¼ö /// /// /// private string ExtractCoordinates(string line) { int start = line.IndexOf('['); int end = line.IndexOf(']'); if (start != -1 && end != -1) { return line.Substring(start + 1, end - start -1); } return string.Empty; } /// /// »õ Æ÷ÀÎÆ® ·ÎÄà ij½Ã¿¡ Ãß°¡ /// public void AddStep(RobotData data, int toolNum) { int newStepNum = (Steps.Count > 0) ? Steps.Last().StepNumber + 1 : 1; string cmd = $"move P,spd=50%,accu=3,tool={toolNum}"; RobotPose newPose = new RobotPose(data); string line = $"S{newStepNum} {cmd} {newPose.ToString()}"; Steps.Add(new RobotMoveStep(line, ExtractCoordinates(line))); } /// /// ±âÁ¸ Æ÷ÀÎÆ®ÀÇ Pose ·ÎÄà ij½Ã¿¡¼­ ¼öÁ¤ /// public void UpdateStep(int index, RobotData data) { if (index < 0 || index >= Steps.Count) { Debug.LogError($"UpdateStep: À߸øµÈ À妽º {index}"); return; } Steps[index].UpdatePose(new RobotPose(data)); } /// /// Æ÷ÀÎÆ®¸¦ ·ÎÄà ij½Ã¿¡¼­ »èÁ¦Çϰí S<¹øÈ£> ÀçÁ¤·Ä /// public void DeleteStep(int index) { if (index < 0 || index >= Steps.Count) { Debug.LogError($"DeleteStep: À߸øµÈ À妽º {index}"); return; } Steps.RemoveAt(index); // ½ºÅÜ ¹øÈ£ ÀçÁ¤·Ä (S1, S2, S3...) for (int i = 0; i < Steps.Count; i++) { // MoveCommand´Â ±×´ë·Î À¯Áö Steps[i].UpdateStepNumber(i + 1); } } /// /// Æ÷ÀÎÆ®¸¦ ·ÎÄà ij½Ã¿¡¼­ ÀüºÎ »èÁ¦ /// public void ResetSteps() { for (int i = 0; i < Steps.Count; i++) { Steps.RemoveAt(i); } } /// /// ƯÁ¤ À妽ºÀÇ Pose¸¦ RobotData·Î ¹Ýȯ /// public RobotData GetStepPose(int index) { if (index < 0 || index >= Steps.Count) { Debug.LogError($"GetStepPose: À߸øµÈ À妽º {index}"); return new RobotData(); // ºó µ¥ÀÌÅÍ ¹Ýȯ } return Steps[index].Pose.ToRobotData(); } /// /// ¸ðµç Pose¸¦ List·Î ¹Ýȯ /// public List GetAllStepPoses() { return Steps.Select(step => step.Pose.ToRobotData()).ToList(); } /// /// ¸ðµç Stepµé ¹Ýȯ /// /// public List GetAllSteps() { return this.Steps; } }