Files
HDRobotics/Assets/Scripts/Model/RobotProgram.cs

123 lines
3.4 KiB
C#
Raw Normal View History

using System.Collections.Generic;
2025-11-06 20:14:27 +09:00
using System.Linq;
using System;
using UnityEngine;
public class RobotProgram
{
public string ProgramId { get; private set; }
public List<RobotMoveStep> Steps { get; private set; }
public RobotProgram(string programId, string rawTextContent)
{
this.ProgramId = programId;
this.Steps = new List<RobotMoveStep>();
ParseJobContent(rawTextContent);
}
2025-11-06 20:14:27 +09:00
/// <summary>
/// GET <20><><EFBFBD><EFBFBD>(rawText)<29><> <20>Ľ<EFBFBD><C4BD>Ͽ<EFBFBD> Steps <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> ä<><C3A4>
/// </summary>
private void ParseJobContent(string rawText)
{
2025-11-06 20:14:27 +09:00
string[] lines = rawText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string line in lines)
{
2025-11-06 20:14:27 +09:00
// S<<3C><>ȣ><3E><> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, [<5B><>ǥ]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>θ<EFBFBD> <20>Ľ<EFBFBD>
if (line.StartsWith("S") && line.Contains("["))
{
string coordString = ExtractCoordinates(line);
2025-11-06 20:14:27 +09:00
if (!string.IsNullOrEmpty(coordString))
{
Steps.Add(new RobotMoveStep(line, coordString));
}
}
}
2025-11-06 20:14:27 +09:00
Debug.Log($"<22><><EFBFBD>α׷<CEB1> '{ProgramId}' <20>ε<EFBFBD> <20>Ϸ<EFBFBD>. {Steps.Count}<7D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ľ̵<C4BD>.");
}
private string ExtractCoordinates(string line)
{
int start = line.IndexOf('[');
int end = line.IndexOf(']');
if (start != -1 && end != -1)
{
2025-11-06 20:14:27 +09:00
return line.Substring(start + 1, end - start -1);
}
return string.Empty;
}
2025-10-30 09:31:05 +09:00
2025-11-06 20:14:27 +09:00
/// <summary>
/// <20><> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> ij<>ÿ<EFBFBD> <20>߰<EFBFBD>
/// </summary>
public void AddStep(RobotData data, int toolNum)
2025-10-30 09:31:05 +09:00
{
2025-11-06 20:14:27 +09:00
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);
2025-10-30 09:31:05 +09:00
2025-11-06 20:14:27 +09:00
string line = $"S{newStepNum} {cmd} {newPose.ToString()}";
Steps.Add(new RobotMoveStep(line, ExtractCoordinates(line)));
2025-10-30 09:31:05 +09:00
}
2025-11-06 20:14:27 +09:00
/// <summary>
/// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> Pose <20><><EFBFBD><EFBFBD> ij<>ÿ<EFBFBD><C3BF><EFBFBD> <20><><EFBFBD><EFBFBD>
/// </summary>
2025-10-30 09:31:05 +09:00
public void UpdateStep(int index, RobotData data)
{
2025-11-06 20:14:27 +09:00
if (index < 0 || index >= Steps.Count)
{
Debug.LogError($"UpdateStep: <20>߸<EFBFBD><DFB8><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> {index}");
return;
}
2025-10-30 09:31:05 +09:00
2025-11-06 20:14:27 +09:00
Steps[index].UpdatePose(new RobotPose(data));
2025-10-30 09:31:05 +09:00
}
2025-11-06 20:14:27 +09:00
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> ij<>ÿ<EFBFBD><C3BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> S<<3C><>ȣ> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
2025-10-30 09:31:05 +09:00
public void DeleteStep(int index)
{
2025-11-06 20:14:27 +09:00
if (index < 0 || index >= Steps.Count)
{
Debug.LogError($"DeleteStep: <20>߸<EFBFBD><DFB8><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> {index}");
return;
}
2025-10-30 09:31:05 +09:00
2025-11-06 20:14:27 +09:00
Steps.RemoveAt(index);
// <20><><EFBFBD><EFBFBD> <20><>ȣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (S1, S2, S3...)
for (int i = 0; i < Steps.Count; i++)
{
// MoveCommand<6E><64> <20>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD>
Steps[i].UpdateStepNumber(i + 1);
}
2025-10-30 09:31:05 +09:00
}
2025-11-06 20:14:27 +09:00
/// <summary>
/// Ư<><C6AF> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> Pose<73><65> RobotData<74><61> <20><>ȯ
/// </summary>
2025-10-30 09:31:05 +09:00
public RobotData GetStepPose(int index)
{
2025-11-06 20:14:27 +09:00
if (index < 0 || index >= Steps.Count)
{
Debug.LogError($"GetStepPose: <20>߸<EFBFBD><DFB8><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> {index}");
return new RobotData(); // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
}
return Steps[index].Pose.ToRobotData();
2025-10-30 09:31:05 +09:00
}
2025-11-06 20:14:27 +09:00
/// <summary>
/// <20><><EFBFBD><EFBFBD> Pose<73><65> List<RobotData><3E><> <20><>ȯ
/// </summary>
public List<RobotData> GetAllStepPoses()
2025-10-30 09:31:05 +09:00
{
2025-11-06 20:14:27 +09:00
return Steps.Select(step => step.Pose.ToRobotData()).ToList();
2025-10-30 09:31:05 +09:00
}
}