peachplayer Geschrieben 26. August 2023 Melden Share Geschrieben 26. August 2023 Hallo Leute Weiss jemand wie man einen Fruchtfolgeplan mit unity machen kann? Habs wie folgt probiert: public void ListeFuellen() { List<DateTime> valueList = new List<DateTime>(); List<DateTime> valueList1 = new List<DateTime>(); List<int> valueList3 = new List<int>(); List<int> valueList2 = new List<int>(); string KulturenAusgabe = ""; yLabelList = new List<RectTransform>(); graphVisualObjectList = new List<IGraphVisualObject>(); IGraphVisual lineGraphVisual = new LineGraphVisual(graphContainer, dotSprite, Color.green, new Color(1, 1, 1, .5f)); IGraphVisual barChartVisual = new BarChartVisual(graphContainer, Color.white, .8f); dropdown1 = GameObject.Find("Dropdown").GetComponent<Dropdown>(); liste1 = MyXML.DeserializeFromXML<Feldarbeit>(".\\Feldarbeit.xml"); dropdown3 = GameObject.Find("Dropdown3").GetComponent<Dropdown>(); // Kultur for (int i = 0; i < liste1.Count; i++) { if (liste1[i].Datum.Year == 2023) { if (liste1[i].Feldarbeiten == "säen") valueList.Add(liste1[i].Datum); KulturenAusgabe += liste1[i].Parzellenname + " " + liste1[i].Kultur + "\n"; } } for (int i = 0; i < liste1.Count; i++) { if (liste1[i].Datum.Year == 2023) { if (liste1[i].Feldarbeiten == "dreschen") valueList1.Add(liste1[i].Datum); KulturenAusgabe += liste1[i].Parzellenname + " " + liste1[i].Kultur + "\n"; } } foreach (DateTime item in valueList1) { DateTime now = DateTime.Now; int duration = (now.DayOfYear - item.DayOfYear); valueList2.Add(duration); Debug.Log(duration); } ShowGraph(valueList2, barChartVisual, -1, (int _i) => "Parzelle" + (_i + 1), (float _f) => "Fr." + Mathf.RoundToInt(_f)); Beim Output sollten farbige Rechtecke für die entsprechenden Kulturen und Vegetationsdauer herauskommen. Leider kommt dabei nur ein einfacher Graph heraus. Gruss peachplayer Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 27. August 2023 Autor Melden Share Geschrieben 27. August 2023 Könnte man ev. den ProBuilder dazu verwenden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 29. August 2023 Autor Melden Share Geschrieben 29. August 2023 using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; using System; using System.Collections; using System.Xml; using System.Xml.Serialization; using System.IO; using UnityEditor; using System.Xml.Linq; using UnityEngine.SceneManagement; using UnityEngine.Networking; public class DrawManager : MonoBehaviour { private LineRenderer lineRenderer; public GameObject drawingPrefab; List<DateTime> valueList = new List<DateTime>(); List<DateTime> valueList1 = new List<DateTime>(); List<int> valueList3 = new List<int>(); List<int> valueList2 = new List<int>(); string KulturenAusgabe = ""; List<Feldarbeit> liste1; void Start() { liste1 = new List<Feldarbeit>(); liste1 = MyXML.DeserializeFromXML<Feldarbeit>(".\\Feldarbeit.xml"); for (int i = 0; i < liste1.Count; i++) { if (liste1[i].Datum.Year == 2022) { if (liste1[i].Feldarbeiten == "säen") valueList.Add(liste1[i].Datum); KulturenAusgabe += liste1[i].Parzellenname + " " + liste1[i].Kultur + "\n"; } } for (int i = 0; i < liste1.Count; i++) { if (liste1[i].Datum.Year == 2023) { if (liste1[i].Feldarbeiten == "dreschen") valueList1.Add(liste1[i].Datum); KulturenAusgabe += liste1[i].Parzellenname + " " + liste1[i].Kultur + "\n"; } } GameObject drawing = Instantiate(drawingPrefab); lineRenderer = drawing.GetComponent<LineRenderer>(); FreeDraw(); } void Update() { } void FreeDraw() { int z = 0; foreach (DateTime item in valueList1) { z = z + 20; DateTime now = DateTime.Now; int duration = (now.DayOfYear - item.DayOfYear); valueList2.Add(duration); Debug.Log("duration = "+duration + z); lineRenderer.startWidth = 0.1f; lineRenderer.endWidth = 0.5f; Vector3 mousePos = new Vector3(duration, z, 0.1f); lineRenderer.positionCount++; lineRenderer.SetPosition(lineRenderer.positionCount - 1, mousePos); } } } sieht jetzt so aus. Es sollten eigentlich farbige Rechtecke sein. Kann mir jemand helfen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 29. August 2023 Autor Melden Share Geschrieben 29. August 2023 jetzt kommt sowas raus: using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; using System; using System.Collections; using System.Xml; using System.Xml.Serialization; using System.IO; using UnityEditor; using System.Xml.Linq; using UnityEngine.SceneManagement; using UnityEngine.Networking; using System.Drawing; using System.Net; public class DrawManager : MonoBehaviour { public LineRenderer lineRenderer1, lineRenderer2,lineRenderer3; public GameObject drawingPrefab; List<DateTime> valueList = new List<DateTime>(); List<DateTime> valueList1 = new List<DateTime>(); List<int> valueList3 = new List<int>(); List<int> valueList2 = new List<int>(); string KulturenAusgabe = ""; List<Feldarbeit> liste1; void Start() { liste1 = new List<Feldarbeit>(); liste1 = MyXML.DeserializeFromXML<Feldarbeit>(".\\Feldarbeit.xml"); GameObject drawing = Instantiate(drawingPrefab); lineRenderer1 = drawing.GetComponent<LineRenderer>(); UnityEngine.Color newColor = UnityEngine.Color.red; ListeFuellen(); } private int ListeFuellen() { foreach (Feldarbeit item in liste1) { if (item.Feldarbeiten == "dreschen" | item.Feldarbeiten == "Siloballen" && item.Datum.Year == 2022) { if (item.Kultur == "Winterweizen") { DateTime now = DateTime.Now; int duration = (now.DayOfYear - item.Datum.DayOfYear); float alpha = 1.0f; Gradient gradient = new Gradient(); gradient.SetKeys( new GradientColorKey[] { new GradientColorKey(UnityEngine.Color.yellow, 0.0f), new GradientColorKey(UnityEngine.Color.yellow, 1.0f) }, new GradientAlphaKey[] { new GradientAlphaKey(alpha, 0.0f), new GradientAlphaKey(alpha, 1.0f) } ); lineRenderer1.colorGradient = gradient; Debug.Log(item.Kultur + duration); FreeDraw(duration); } if (item.Kultur == "Mais") { DateTime now = DateTime.Now; int duration = (now.DayOfYear - item.Datum.DayOfYear); float alpha = 1.0f; Gradient gradient = new Gradient(); gradient.SetKeys( new GradientColorKey[] { new GradientColorKey(UnityEngine.Color.green, 0.0f), new GradientColorKey(UnityEngine.Color.green, 1.0f) }, new GradientAlphaKey[] { new GradientAlphaKey(alpha, 0.0f), new GradientAlphaKey(alpha, 1.0f) } ); lineRenderer2.colorGradient = gradient; Debug.Log(item.Kultur + duration); FreeDraw(duration); } if (item.Kultur == "Wintergerste") { DateTime now = DateTime.Now; int duration = (now.DayOfYear - item.Datum.DayOfYear); float alpha = 1.0f; Gradient gradient = new Gradient(); gradient.SetKeys( new GradientColorKey[] { new GradientColorKey(UnityEngine.Color.red, 0.0f), new GradientColorKey(UnityEngine.Color.red, 1.0f) }, new GradientAlphaKey[] { new GradientAlphaKey(alpha, 0.0f), new GradientAlphaKey(alpha, 1.0f) } ); lineRenderer3.colorGradient = gradient; Debug.Log(item.Kultur + duration); FreeDraw(duration); } } } return 0; } void Update() { } void FreeDraw(int duration) { int offset = duration; int z = duration; z++; valueList2.Add(duration); Debug.Log("duration = " + duration); lineRenderer1.startWidth = 10.0f; lineRenderer1.endWidth = 10.0f; Vector3 startPos = new Vector3(0, offset, 0f); Vector3 mousePos = new Vector3(z + offset, 50f, 0f); lineRenderer1.SetPosition(0, startPos); lineRenderer1.SetPosition(1, mousePos); lineRenderer2.startWidth = 10.0f; lineRenderer2.endWidth = 10.0f; lineRenderer2.SetPosition(0, startPos); lineRenderer2.SetPosition(1, mousePos); lineRenderer3.SetPosition(0, startPos); lineRenderer3.SetPosition(1, mousePos); lineRenderer3.startWidth = 10.0f; lineRenderer3.endWidth = 10.0f; } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 29. August 2023 Autor Melden Share Geschrieben 29. August 2023 ...jetzt werden alle 3 Kulturen angezeigt jedoch "verschoben": Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 30. August 2023 Melden Share Geschrieben 30. August 2023 Du solltest einfach nur mal 1-2 Werte nehmen und damit versuchen, Balken zu bekommen. Dein Problem ist ja nicht die Daten auszulesen, sondern einfach nur Balken zu erzeugen, die vom Minimalwert zum eingelesenen Wert gehen. Dein erstes Diagramm hat ja gezeigt, dass deine Werte gut interpretiert werden. Ich kann dir nicht sagen, wie das machen kannst, weil ich mit den Tools wie Igraph noch nichts gemacht habe. Ich gibt aber ein Tutorial von CodeMonkey, der in seinen Videos zeigt, wie man unterschiedliche Graphen erzeugt. Diese Videos sind nicht besonders gut gemacht, weil er viel zu schnell da durch rammelt und nicht viel erklärt. Trotzdem kannst du da bestimmt erkennen, wie er die Balken erzeugt und worauf es ankommt. Übrigens: Dein Thementitel hat eigentlich nichts mit deinem Problem zu tun. Ein Titel wie z.B.: "Wie erstelle ich ein Balkendiagramm" wäre bestimmt besser gewesen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 30. August 2023 Autor Melden Share Geschrieben 30. August 2023 danke für den tipp! Ich benütze das Graph-tool von CodeMonkey bereits in einem meiner Projekte. Leider krieg ich noch keine BarCharts als Output. Gruss, peachplayer Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 31. August 2023 Autor Melden Share Geschrieben 31. August 2023 endlich hats geklappt! Jetzt sieht der Output so aus: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 31. August 2023 Melden Share Geschrieben 31. August 2023 Na siehste! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.