81 lines
2.5 KiB
C#
81 lines
2.5 KiB
C#
|
|
using System.Collections;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using UnityEngine;
|
||
|
|
using System;
|
||
|
|
using WI;
|
||
|
|
|
||
|
|
[Serializable]
|
||
|
|
public class BarChartData
|
||
|
|
{
|
||
|
|
public string _time;
|
||
|
|
public string itemcd;
|
||
|
|
public float cycleTime;
|
||
|
|
public float targetCycleTime;
|
||
|
|
public float coolingTime;
|
||
|
|
public float holdingPressureTime;
|
||
|
|
public float weighingTime;
|
||
|
|
public float etc;
|
||
|
|
}
|
||
|
|
public class WorkTimeManager : MonoBehaviour, ISingle
|
||
|
|
{
|
||
|
|
public List<BarChartData> originDatas = new List<BarChartData>();
|
||
|
|
public List<BarChartData> mainChartDatas = new List<BarChartData>();
|
||
|
|
|
||
|
|
public int targetCount;
|
||
|
|
public Action<List<BarChartData>> onSendChartData;
|
||
|
|
public void SetWorkTimeData(WorkTimeData workTimeData)
|
||
|
|
{
|
||
|
|
SetBarChartData(workTimeData);
|
||
|
|
}
|
||
|
|
private void SetBarChartData(WorkTimeData workTimeData)
|
||
|
|
{
|
||
|
|
originDatas.Clear();
|
||
|
|
mainChartDatas.Clear();
|
||
|
|
|
||
|
|
foreach (var row in workTimeData.data.rows)
|
||
|
|
{
|
||
|
|
var data = new BarChartData();
|
||
|
|
data._time = row._time;
|
||
|
|
data.itemcd = row.ITEMCD;
|
||
|
|
data.cycleTime = ConvertStringToFloat(row.C045);
|
||
|
|
data.targetCycleTime = ConvertStringToFloat(row.CYCLETIME);
|
||
|
|
data.coolingTime = ConvertStringToFloat(row.C046);
|
||
|
|
data.holdingPressureTime = ConvertStringToFloat(row.C027);
|
||
|
|
data.weighingTime = ConvertStringToFloat(row.C037);
|
||
|
|
data.etc = data.cycleTime - (data.coolingTime + data.holdingPressureTime + data.weighingTime);
|
||
|
|
|
||
|
|
originDatas.Add(data);
|
||
|
|
}
|
||
|
|
|
||
|
|
mainChartDatas.AddRange(DownSampleToFixedCount(originDatas, targetCount));
|
||
|
|
|
||
|
|
onSendChartData?.Invoke(mainChartDatas);
|
||
|
|
}
|
||
|
|
private float ConvertStringToFloat(string stringData)
|
||
|
|
{
|
||
|
|
float.TryParse(stringData, out var result);
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
private List<BarChartData> DownSampleToFixedCount(List<BarChartData> originDatas, int targetCount)
|
||
|
|
{
|
||
|
|
var sampleData = new List<BarChartData>();
|
||
|
|
|
||
|
|
double interval = (double)originDatas.Count / targetCount;
|
||
|
|
|
||
|
|
if (originDatas.Count <= targetCount || targetCount <= 0)
|
||
|
|
{
|
||
|
|
return originDatas;
|
||
|
|
}
|
||
|
|
for (int i = 0; i < targetCount; i++)
|
||
|
|
{
|
||
|
|
int index = (int)Math.Round(i * interval);
|
||
|
|
if (index >= originDatas.Count)
|
||
|
|
{
|
||
|
|
index = originDatas.Count - 1;
|
||
|
|
}
|
||
|
|
sampleData.Add(originDatas[index]);
|
||
|
|
}
|
||
|
|
return sampleData;
|
||
|
|
}
|
||
|
|
}
|