Files
HDRobotics/Assets/Scripts/View/PathLineView.cs

84 lines
3.0 KiB
C#
Raw Normal View History

2025-11-06 20:14:27 +09:00
using System;
2025-10-30 09:31:05 +09:00
using System.Collections.Generic;
2025-11-06 20:14:27 +09:00
using System.Linq;
2025-10-30 09:31:05 +09:00
using UnityEngine;
/// <summary>
/// <20>κ<EFBFBD><CEBA><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>(Path)<29><> 3D <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7>ִ<EFBFBD> <20><>(View) Ŭ<><C5AC><EFBFBD><EFBFBD>
/// Unity<74><79> LineRenderer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
/// </summary>
// <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> LineRenderer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>߰<EFBFBD>
2025-10-30 09:31:05 +09:00
[RequireComponent(typeof(LineRenderer))]
public class PathLineView : MonoBehaviour
2025-10-30 09:31:05 +09:00
{
private LineRenderer lineRenderer;
void Awake()
{
lineRenderer = GetComponent<LineRenderer>();
2025-11-06 20:14:27 +09:00
// Line Renderer <20><20><><EFBFBD><EFBFBD>
lineRenderer.startWidth = 0.01f;
lineRenderer.endWidth = 0.01f;
lineRenderer.material = new Material(Shader.Find("Legacy Shaders/Particles/Alpha Blended Premultiply"));
lineRenderer.startColor = Color.cyan;
lineRenderer.endColor = Color.cyan;
2025-10-30 09:31:05 +09:00
}
2025-11-06 20:14:27 +09:00
private Vector3 ConvertRobotDataToVector3(RobotData pose)
{
float x = Convert.ToSingle(pose.x / -1000.0); // mm -> m
float y = Convert.ToSingle(pose.z / 1000.0); // Robot Z(mm) -> Unity Y(m)
float z = Convert.ToSingle(pose.y / -1000.0); // Robot Y(mm) -> Unity Z(m)
return new Vector3(x, y, z);
}
/// <summary>
/// <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>մ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>׸<EFBFBD>
/// </summary>
2025-10-30 09:31:05 +09:00
public void DrawPath(List<RobotData> poses)
{
if (poses == null || poses.Count < 2)
{
2025-11-06 20:14:27 +09:00
lineRenderer.positionCount = 0; // <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> 2<><32> <20≯<EFBFBD><CCB8≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
2025-10-30 09:31:05 +09:00
return;
}
// LINQ<4E><51> Select<63><74> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> RobotData<74><61> Vector3 <20><EFBFBD><E8BFAD> <20><>ȯ
2025-11-06 20:14:27 +09:00
Vector3[] positions = poses.Select(ConvertRobotDataToVector3).ToArray();
// LineRenderer<65><72> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><20><><EFBFBD><EFBFBD>
2025-11-06 20:14:27 +09:00
lineRenderer.positionCount = positions.Length;
lineRenderer.SetPositions(positions);
}
/// <summary>
/// Ư<><C6AF> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><EFBFBD><E5B7A1><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD>θ<EFBFBD> <20>ǽð<C7BD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20>׸<EFBFBD>
/// (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
/// </summary>
/// <param name="poses"><3E><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>Ʈ</param>
/// <param name="modifiedIndex"><3E><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><EFBFBD><E5B7A1>) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ε<EFBFBD><CEB5><EFBFBD></param>
/// <param name="tempPose"><3E><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ǽð<C7BD> <20>ӽ<EFBFBD> <20><>ǥ</param>
2025-11-06 20:14:27 +09:00
public void DrawPath(List<RobotData> poses, int modifiedIndex, RobotData tempPose)
{
// <20><>ȿ<EFBFBD><C8BF> <20>˻<EFBFBD>: <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB3AA> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>δ<EFBFBD><CEB4><EFBFBD> <20>׸<EFBFBD><D7B8><EFBFBD>
2025-11-06 20:14:27 +09:00
if (poses == null || poses.Count < 2 ||
modifiedIndex < 0 || modifiedIndex >= poses.Count)
2025-10-30 09:31:05 +09:00
{
2025-11-06 20:14:27 +09:00
DrawPath(poses);
return;
2025-10-30 09:31:05 +09:00
}
2025-11-06 20:14:27 +09:00
// 1. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Vector3 <20><EFBFBD><E8BFAD> <20><>ȯ
2025-11-06 20:14:27 +09:00
Vector3[] positions = poses.Select(ConvertRobotDataToVector3).ToArray();
// 2. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5> <20><EFBFBD><E5B7A1> <20><><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><>ǥ(tempPose)<29><> <20><><EFBFBD><EFBFBD><EEBEB2>
// -> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(List)<29><> <20>ǵ帮<C7B5><E5B8AE> <20>ʰ<EFBFBD><CAB0><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD> <20><><EFBFBD>ΰ<EFBFBD> <20>ٲ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
2025-11-06 20:14:27 +09:00
positions[modifiedIndex] = ConvertRobotDataToVector3(tempPose);
// 3. <20><><EFBFBD>ŵ<EFBFBD> <20><>ǥ <20><EFBFBD><E8BFAD> <20><> <20>׸<EFBFBD><D7B8><EFBFBD>
2025-11-06 20:14:27 +09:00
lineRenderer.positionCount = positions.Length;
lineRenderer.SetPositions(positions);
2025-10-30 09:31:05 +09:00
}
}