작업 조건 분석 수정

This commit is contained in:
정영민
2025-04-17 11:33:46 +09:00
parent 074b2a136e
commit 7242cd922b
7 changed files with 592 additions and 342 deletions

View File

@@ -67,9 +67,9 @@ MonoBehaviour:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: d6f1476f4a343444795c8052cfdc65d4, type: 3}
m_Font: {fileID: 12800000, guid: c2782129cb810e94598de8596f6acd6c, type: 3}
m_FontSize: 17
m_FontStyle: 1
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
m_MaxSize: 52

File diff suppressed because one or more lines are too long

View File

@@ -68,8 +68,8 @@ MonoBehaviour:
m_Calls: []
m_text: 2025-02-16T 23:02:34Z
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontAsset: {fileID: 11400000, guid: 2ec62c2b5b163f64e92dc4988250c9c8, type: 2}
m_sharedMaterial: {fileID: 1892695685711531568, guid: 2ec62c2b5b163f64e92dc4988250c9c8, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
@@ -109,15 +109,17 @@ MonoBehaviour:
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_enableWordWrapping: 1
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0

View File

@@ -13708,6 +13708,9 @@ MonoBehaviour:
Graph: {fileID: 0}
chartDetailData: {fileID: 0}
graphName: "\uC8FC\uBCC0\uC2B5\uB3C4"
targetCount: 0
startIndex: 0
offsetY: 0
isMainChart: 0
--- !u!222 &73895479
CanvasRenderer:
@@ -41300,6 +41303,50 @@ Transform:
- {fileID: 104918132}
m_Father: {fileID: 2086722957}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &220956387
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 220956388}
- component: {fileID: 220956389}
m_Layer: 5
m_Name: Content_DateTime
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &220956388
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 220956387}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 280778300}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 11.366, y: -250}
m_SizeDelta: {x: 930, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &220956389
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 220956387}
m_CullTransparentMesh: 1
--- !u!1001 &221063111
PrefabInstance:
m_ObjectHideFlags: 0
@@ -44183,7 +44230,7 @@ MonoBehaviour:
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 00000000
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
@@ -53072,6 +53119,7 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 814126938}
- {fileID: 220956388}
m_Father: {fileID: 2059883909}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
@@ -66424,7 +66472,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Min.
m_text: "\uCD5C\uC18C."
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: c2f32d96b71927e429b2adee0d64a773, type: 2}
m_sharedMaterial: {fileID: -3516750883916327525, guid: c2f32d96b71927e429b2adee0d64a773, type: 2}
@@ -70892,6 +70940,9 @@ MonoBehaviour:
Graph: {fileID: 0}
chartDetailData: {fileID: 0}
graphName: "\uC8FC\uBCC0\uC628\uB3C4(\xB0C)"
targetCount: 0
startIndex: 0
offsetY: 0
isMainChart: 0
--- !u!222 &374636466
CanvasRenderer:
@@ -93375,7 +93426,7 @@ MonoBehaviour:
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 00000000
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
@@ -113892,7 +113943,7 @@ MonoBehaviour:
textPrefix:
textSuffix:
fractionDigits: 0
fontSize: 40
fontSize: 30
fontSharpness: 1
textDepth: 0
textSeperation: -25
@@ -113919,7 +113970,7 @@ MonoBehaviour:
textPrefix:
textSuffix:
fractionDigits: 0
fontSize: 40
fontSize: 30
fontSharpness: 1
textDepth: 0
textSeperation: -25
@@ -124464,7 +124515,7 @@ MonoBehaviour:
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 00000000
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
@@ -171981,7 +172032,7 @@ MonoBehaviour:
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 00000000
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
@@ -186488,8 +186539,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 581.66766, y: -324.3596}
m_SizeDelta: {x: 974.2756, y: 453.4211}
m_AnchoredPosition: {x: 565.5, y: -300}
m_SizeDelta: {x: 930, y: 400}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &814126940
MonoBehaviour:
@@ -186531,10 +186582,10 @@ MonoBehaviour:
textPrefix:
textSuffix:
fractionDigits: 0
fontSize: 30
fontSize: 20
fontSharpness: 3
textDepth: 0
textSeperation: -29.5
textSeperation: -40
alignment: 1
subDivisions:
messure: 0
@@ -186558,10 +186609,10 @@ MonoBehaviour:
textPrefix:
textSuffix:
fractionDigits: 0
fontSize: 30
fontSize: 20
fontSharpness: 3
textDepth: 0
textSeperation: -29.5
textSeperation: -40
alignment: 1
--- !u!114 &814126941
MonoBehaviour:
@@ -186584,18 +186635,18 @@ MonoBehaviour:
vRSpaceText: 0
vRSpaceScale: 0.1
maintainLabelSize: 0
autoScrollHorizontally: 0
horizontalScrolling: -1
autoScrollHorizontally: 1
horizontalScrolling: 0
autoScrollVertically: 0
verticalScrolling: 0
verticalScrolling: -0.2
raycastTarget: 1
MousePan:
m_PersistentCalls:
m_Calls: []
horizontalPanning: 0
verticalPanning: 0
heightRatio: 453.4211
widthRatio: 974.2756
heightRatio: 400
widthRatio: 930
PointClicked:
m_PersistentCalls:
m_Calls:
@@ -261695,7 +261746,7 @@ MonoBehaviour:
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 00000000
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
@@ -268903,7 +268954,7 @@ MonoBehaviour:
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 00000000
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
@@ -284494,7 +284545,7 @@ MonoBehaviour:
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 00000000
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
@@ -350576,8 +350627,8 @@ MonoBehaviour:
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 12
m_fontSizeBase: 12
m_fontSize: 14
m_fontSizeBase: 14
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
@@ -355911,7 +355962,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Max.
m_text: "\uCD5C\uB300."
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: c2f32d96b71927e429b2adee0d64a773, type: 2}
m_sharedMaterial: {fileID: -3516750883916327525, guid: c2f32d96b71927e429b2adee0d64a773, type: 2}
@@ -356691,6 +356742,9 @@ MonoBehaviour:
Graph: {fileID: 0}
chartDetailData: {fileID: 0}
graphName: "\uC2F8\uC774\uD074\uD0C0\uC784"
targetCount: 0
startIndex: 0
offsetY: 0
isMainChart: 0
--- !u!222 &1749542296
CanvasRenderer:
@@ -358558,7 +358612,7 @@ RectTransform:
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 92}
m_SizeDelta: {x: 75.72, y: 14.32}
m_SizeDelta: {x: 88.58, y: 16.71}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1761597790
MonoBehaviour:
@@ -358621,8 +358675,8 @@ MonoBehaviour:
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 12
m_fontSizeBase: 12
m_fontSize: 14
m_fontSizeBase: 14
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
@@ -358643,7 +358697,7 @@ MonoBehaviour:
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 00000000
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
@@ -370489,7 +370543,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Ave.
m_text: "\uD3C9\uADE0."
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: c2f32d96b71927e429b2adee0d64a773, type: 2}
m_sharedMaterial: {fileID: -3516750883916327525, guid: c2f32d96b71927e429b2adee0d64a773, type: 2}
@@ -414311,6 +414365,9 @@ MonoBehaviour:
Graph: {fileID: 0}
chartDetailData: {fileID: 0}
graphName: "\uBCF4\uC555 (Peak)"
targetCount: 5
startIndex: 0
offsetY: 220
isMainChart: 1
--- !u!222 &2059883911
CanvasRenderer:

View File

@@ -12,19 +12,22 @@ using static ChartAndGraph.GraphChartBase;
public class UI_GraphChart : UIBase, IPointerClickHandler
{
public GraphChart Graph;
//public UI_DateTime prf_dateTime;
//public RectTransform Content_DateTime;
private UI_DateTime prf_dateTime;
private RectTransform Content_DateTime;
public UI_GraphChartData chartDetailData;
private TextMeshProUGUI GraphName;
public string graphName;
public int targetCount;
public int startIndex;
public float offsetY;
public bool isMainChart;
public Action<string> onClickChart;
private List<float> graphChartData = new List<float>();
private List<string> graphDateTimeData = new List<string>();
private Dictionary<int, Vector3> labelPos = new();
private TextMeshProUGUI MinValue;
private TextMeshProUGUI MaxValue;
@@ -37,7 +40,7 @@ public class UI_GraphChart : UIBase, IPointerClickHandler
public override void AfterAwake()
{
Graph = GetComponentInChildren<GraphChart>();
//prf_dateTime = Resources.Load<UI_DateTime>("Prefabs/UI/PRF_UI_DateTime");
prf_dateTime = Resources.Load<UI_DateTime>("Prefabs/UI/PRF_UI_DateTime");
chartDetailData = GetComponentInChildren<UI_GraphChartData>(true);
}
public void Update()
@@ -67,38 +70,13 @@ public class UI_GraphChart : UIBase, IPointerClickHandler
{
chartDetailData.SetData(graphName, graphChartData[args.Index], graphDateTimeData[args.Index], args.Position);
}
//public void SetChartLabels(List<string> labels)
//{
// for (int i = 0; i < labels.Count; i++)
// {
// var date = Instantiate(prf_dateTime, Content_DateTime);
// date.SetDateTime(labels[i]);
// }
//}
public void SetChartData(string graphName, GraphChartData graphData)
{
this.graphName = graphName;
min = graphData.chartData.Min();
max = graphData.chartData.Max();
ave = graphData.chartData.Average();
AveValue.SetText(DecimalPointCalculate(ave));
graphChartData.Clear();
graphDateTimeData.Clear();
if (isMainChart)
{
MinValue.SetText(DecimalPointCalculate(min));
MaxValue.SetText(DecimalPointCalculate(max));
}
else
{
GraphName.SetText(this.graphName);
}
Graph.DataSource.VerticalViewSize = max * 2f;
Graph.DataSource.ClearCategory("WorkConditionsData");
Graph.DataSource.StartBatch();
@@ -110,6 +88,95 @@ public class UI_GraphChart : UIBase, IPointerClickHandler
graphDateTimeData.Add(graphData.timeData[i]);
}
Graph.DataSource.EndBatch();
SetDataValue(graphData);
if (isMainChart)
{
Graph.OnRedraw.AddListener(SetChartLabels);
}
}
private void SetDataValue(GraphChartData graphData)
{
min = graphData.chartData.Min();
max = graphData.chartData.Max();
ave = graphData.chartData.Average();
AveValue.SetText(DecimalPointCalculate(ave));
if (isMainChart)
{
MinValue.SetText(DecimalPointCalculate(min));
MaxValue.SetText(DecimalPointCalculate(max));
}
else
{
GraphName.SetText(this.graphName);
}
}
private void SetChartLabels()
{
ClearLabels();
this.labelPos.Clear();
for (int i = 0; i < graphChartData.Count; i++)
{
Graph.PointToWorldSpace(out var worldSpace, i, graphChartData[i], "WorkConditionsData");
this.labelPos.Add(i, worldSpace);
}
var labelPos = DownSampleToFixedCount(this.labelPos, targetCount, startIndex);
foreach(var index in labelPos.Keys)
{
var date = Instantiate(prf_dateTime, Content_DateTime);
date.transform.position = new Vector3(labelPos[index].x, offsetY, 0);
date.SetDateTime(graphDateTimeData[index]);
}
}
private void ClearLabels()
{
if (Content_DateTime.childCount <= 0)
return;
for (int i = 0; i < Content_DateTime.childCount; i++)
{
Destroy(Content_DateTime.transform.GetChild(i).gameObject);
}
}
private Dictionary<int, Vector3> DownSampleToFixedCount(Dictionary<int, Vector3> labelPos, int targetCount, int startIndex)
{
Dictionary<int, Vector3> sampledData = new Dictionary<int, Vector3>();
if (labelPos.Count <= targetCount || targetCount <= 0)
return new Dictionary<int, Vector3>(labelPos);
if (startIndex < 0)
startIndex = 0;
List<int> keys = labelPos.Keys.OrderBy(k => k).ToList();
int totalCount = keys.Count;
if (startIndex >= totalCount)
startIndex = totalCount - 1;
int availableCount = totalCount - startIndex;
double interval = (double)(availableCount - 1) / (targetCount - 1);
for (int i = 0; i < targetCount; i++)
{
int indexInKeys = (int)Math.Round(startIndex + i * interval);
if (i == targetCount - 1)
indexInKeys = totalCount - 1;
if (indexInKeys >= totalCount)
indexInKeys = totalCount - 1;
int key = keys[indexInKeys];
if (!sampledData.ContainsKey(key))
sampledData.Add(key, labelPos[key]);
}
return sampledData;
}
private string DecimalPointCalculate(float value)
{
@@ -117,5 +184,4 @@ public class UI_GraphChart : UIBase, IPointerClickHandler
return floatValue.ToString();
}
}

View File

@@ -127,25 +127,4 @@ public class WorkConditionsManager : MonoBehaviour, ISingle
}
return new GraphChartData(sampleGraph);
}
private List<string> DownSampleToFixedCount(List<string> dateTime, int targetCount)
{
List<string> sampledData = new List<string>();
double interval = (double)dateTime.Count / targetCount;
if (dateTime.Count <= targetCount || targetCount <= 0)
{
return new List<string>(dateTime);
}
for (int i = 0; i < targetCount; i++)
{
int index = (int)Math.Round(i * interval);
if (index >= dateTime.Count)
{
index = dateTime.Count - 1;
}
sampledData.Add(dateTime[index]);
}
return sampledData;
}
}