Jump to content
Unity Insider Forum

wie macht man einen Fruchtfolgeplan?


peachplayer

Recommended Posts

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.

grafik.thumb.png.3c4c54d2fef749b6deca00775bb758c6.png

 

Gruss peachplayer

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

            }


        }
    }

grafik.thumb.png.fa220b5e230f23305f26fd5499be0c40.png

sieht jetzt so aus. Es sollten eigentlich farbige Rechtecke sein. Kann mir jemand helfen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;
    }
    }
    

grafik.thumb.png.8f383b9d34d6446e070e2a95fb1e4175.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...