2025-10-14 16:38:35 +09:00
|
|
|
|
using System.Collections.Generic;
|
2025-11-06 20:14:27 +09:00
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using UnityEngine;
|
2025-10-14 16:38:35 +09:00
|
|
|
|
|
|
|
|
|
|
public class RobotProgram
|
|
|
|
|
|
{
|
2025-10-23 18:43:38 +09:00
|
|
|
|
public string ProgramId { get; private set; }
|
|
|
|
|
|
public List<RobotMoveStep> Steps { get; private set; }
|
2025-10-14 16:38:35 +09:00
|
|
|
|
|
2025-10-23 18:43:38 +09:00
|
|
|
|
public RobotProgram(string programId, string rawTextContent)
|
2025-10-14 16:38:35 +09:00
|
|
|
|
{
|
2025-10-23 18:43:38 +09:00
|
|
|
|
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>
|
2025-10-23 18:43:38 +09:00
|
|
|
|
private void ParseJobContent(string rawText)
|
|
|
|
|
|
{
|
2025-11-06 20:14:27 +09:00
|
|
|
|
string[] lines = rawText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
|
2025-10-23 18:43:38 +09:00
|
|
|
|
|
|
|
|
|
|
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("["))
|
2025-10-23 18:43:38 +09:00
|
|
|
|
{
|
|
|
|
|
|
string coordString = ExtractCoordinates(line);
|
2025-11-06 20:14:27 +09:00
|
|
|
|
if (!string.IsNullOrEmpty(coordString))
|
|
|
|
|
|
{
|
|
|
|
|
|
Steps.Add(new RobotMoveStep(line, coordString));
|
|
|
|
|
|
}
|
2025-10-23 18:43:38 +09:00
|
|
|
|
}
|
|
|
|
|
|
}
|
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>.");
|
2025-10-23 18:43:38 +09:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
2025-10-23 18:43:38 +09:00
|
|
|
|
}
|
|
|
|
|
|
return string.Empty;
|
2025-10-14 16:38:35 +09:00
|
|
|
|
}
|
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-13 21:23:28 +09:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> ij<>ÿ<EFBFBD><C3BF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public void ResetSteps()
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = 0; i < Steps.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
Steps.RemoveAt(i);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2025-11-13 21:23:28 +09:00
|
|
|
|
|
|
|
|
|
|
public List<RobotMoveStep> GetAllSteps()
|
|
|
|
|
|
{
|
|
|
|
|
|
return this.Steps;
|
|
|
|
|
|
}
|
2025-10-14 16:38:35 +09:00
|
|
|
|
}
|