Exemple #1
0
    // Update is called once per frame
    void Update()
    {
        float distance = -1;

        if (Element1 is Punkt && Element2 is Gerade)
        {
            Punkt   punkt     = (Punkt)Element1;
            Gerade  gerade    = (Gerade)Element2;
            Vector3 punktpos  = new Vector3((float)Math.Round(punkt.GetTransform().localPosition.x * 50, 2), (float)Math.Round(punkt.GetTransform().localPosition.z * 50, 2), (float)Math.Round(punkt.GetTransform().localPosition.y * 50, 2));    // punkt.GetTransform().position;
            Vector3 punktposg = new Vector3((float)Math.Round(gerade.GetTransform().localPosition.x * 50, 2), (float)Math.Round(gerade.GetTransform().localPosition.z * 50, 2), (float)Math.Round(gerade.GetTransform().localPosition.y * 50, 2)); // punkt.GetTransform().position;
            Vector3 richtung  = new Vector3((float)Math.Round(gerade.GetTransform().parent.InverseTransformDirection(gerade.GetTransform().forward).x, 2), (float)Math.Round(gerade.GetTransform().parent.InverseTransformDirection(gerade.GetTransform().forward).z, 2), (float)Math.Round(gerade.GetTransform().parent.InverseTransformDirection(gerade.GetTransform().forward).y, 2));
            float   b         = Vector3.Dot(richtung, punktpos);
            float   a         = (Vector3.Dot(richtung, punktposg) - b) / (-Vector3.Dot(richtung, richtung));
            distance = (punktpos - (punktposg + a * richtung)).magnitude;
        }
        if (Element1 is Punkt && Element2 is Ebene)
        {
            Punkt   punkt               = (Punkt)Element1;
            Ebene   ebene               = (Ebene)Element2;
            Vector3 punktpos            = new Vector3((float)Math.Round(punkt.GetTransform().localPosition.x * 50, 2), (float)Math.Round(punkt.GetTransform().localPosition.z * 50, 2), (float)Math.Round(punkt.GetTransform().localPosition.y * 50, 2));// punkt.GetTransform().position;
            Vector4 koordinatenformvars = new Vector4((float)Math.Round(ebene.GetTransform().parent.InverseTransformDirection(ebene.GetTransform().up).x, 2), (float)Math.Round(ebene.GetTransform().parent.InverseTransformDirection(ebene.GetTransform().up).z, 2), (float)Math.Round(ebene.GetTransform().parent.InverseTransformDirection(ebene.GetTransform().up).y, 2), (float)Math.Round(-Vector3.Dot(ebene.GetTransform().localPosition, ebene.GetTransform().parent.InverseTransformDirection(ebene.GetTransform().up)), 2) * 50);
            distance = Math.Abs(punktpos.x * koordinatenformvars.x + punktpos.y * koordinatenformvars.y + punktpos.z * koordinatenformvars.z + koordinatenformvars.w);
        }
        if (Element1 is Gerade && Element2 is Gerade)
        {
            Gerade  gerade1             = (Gerade)Element1;
            Gerade  gerade2             = (Gerade)Element2;
            Vector3 punktpos1           = new Vector3((float)Math.Round(gerade1.GetTransform().localPosition.x * 50, 2), (float)Math.Round(gerade1.GetTransform().localPosition.z * 50, 2), (float)Math.Round(gerade1.GetTransform().localPosition.y * 50, 2)); // punkt.GetTransform().position;
            Vector3 punktpos2           = new Vector3((float)Math.Round(gerade2.GetTransform().localPosition.x * 50, 2), (float)Math.Round(gerade2.GetTransform().localPosition.z * 50, 2), (float)Math.Round(gerade2.GetTransform().localPosition.y * 50, 2)); // punkt.GetTransform().position;
            Vector3 richtung1           = new Vector3((float)Math.Round(gerade1.GetTransform().parent.InverseTransformDirection(gerade1.GetTransform().forward).x, 2), (float)Math.Round(gerade1.GetTransform().parent.InverseTransformDirection(gerade1.GetTransform().forward).z, 2), (float)Math.Round(gerade1.GetTransform().parent.InverseTransformDirection(gerade1.GetTransform().forward).y, 2));
            Vector3 richtung2           = new Vector3((float)Math.Round(gerade2.GetTransform().parent.InverseTransformDirection(gerade2.GetTransform().forward).x, 2), (float)Math.Round(gerade2.GetTransform().parent.InverseTransformDirection(gerade2.GetTransform().forward).z, 2), (float)Math.Round(gerade2.GetTransform().parent.InverseTransformDirection(gerade2.GetTransform().forward).y, 2));
            Vector3 normale             = Vector3.Cross(richtung1, richtung2).normalized;
            Vector4 koordinatenformvars = new Vector4(normale.x, normale.y, normale.z, Vector3.Dot(normale, punktpos2));
            distance = Math.Abs(punktpos1.x * koordinatenformvars.x + punktpos1.y * koordinatenformvars.y + punktpos1.z * koordinatenformvars.z + koordinatenformvars.w);
        }
        if (Element1 is Gerade && Element2 is Ebene)
        {
            Gerade  gerade = (Gerade)Element1;
            Ebene   ebene  = (Ebene)Element2;
            Vector4 koordinatenformvars = new Vector4((float)Math.Round(ebene.GetTransform().parent.InverseTransformDirection(ebene.GetTransform().up).x, 2), (float)Math.Round(ebene.GetTransform().parent.InverseTransformDirection(ebene.GetTransform().up).z, 2), (float)Math.Round(ebene.GetTransform().parent.InverseTransformDirection(ebene.GetTransform().up).y, 2), (float)Math.Round(-Vector3.Dot(ebene.GetTransform().localPosition, ebene.GetTransform().parent.InverseTransformDirection(ebene.GetTransform().up)), 2));
            Vector3 punktpos            = new Vector3((float)Math.Round(gerade.GetTransform().localPosition.x * 50, 2), (float)Math.Round(gerade.GetTransform().localPosition.z * 50, 2), (float)Math.Round(gerade.GetTransform().localPosition.y * 50, 2));// punkt.GetTransform().position;
            Vector3 richtung            = new Vector3((float)Math.Round(gerade.GetTransform().parent.InverseTransformDirection(gerade.GetTransform().forward).x, 2), (float)Math.Round(gerade.GetTransform().parent.InverseTransformDirection(gerade.GetTransform().forward).z, 2), (float)Math.Round(gerade.GetTransform().parent.InverseTransformDirection(gerade.GetTransform().forward).y, 2));
            if (koordinatenformvars.x * richtung.x + koordinatenformvars.y * richtung.y + koordinatenformvars.z * richtung.z == 0)
            {
                distance = Math.Abs(punktpos.x * koordinatenformvars.x + punktpos.y * koordinatenformvars.y + punktpos.z * koordinatenformvars.z + koordinatenformvars.w);
            }
            else
            {
                distance = 0;
            }
        }
        if (distance != -1)
        {
            Distanz.text = "Distanz:\n" + Math.Round(distance, 2).ToString() + "cm\n" + Element1.Name + "\n" + Element2.Name;
            //sDebug.Log("Distance of " + Math.Round(distance, 2).ToString());
        }
    }
    private void AddSchnittpunkt(Gerade SchnittGerade, VirtualCompnonent SchnittEbene)
    {
        GameObject   punktInfo    = Instantiate(prefabSchnittpunktInfo);
        GameObject   punkt        = Instantiate(prefabSchnittpunkt);
        Schnittpunkt schnittpunkt = new Schnittpunkt {
            Gerade = SchnittGerade, Ebene = SchnittEbene, InfoParentMenu = Punkte, InfoUI = punktInfo, Model3D = punkt, color = UnityEngine.Random.ColorHSV(0f, 1f, 0.2f, 0.2f, 1f, 1f, 0.8f, 0.8f)
        };

        foreach (MeshRenderer mr in punkt.GetComponentsInChildren <MeshRenderer>())
        {
            mr.material.color = schnittpunkt.color;
        }
        SchnittGerade.Schnittpunkte.Add(schnittpunkt);
        punkt.GetComponent <Findschnittpunkt>().Gerade = SchnittGerade.GetTransform();
        punkt.GetComponent <Findschnittpunkt>().Ebene  = SchnittEbene.GetTransform();
        punkt.transform.SetParent(pivot.transform);

        punktInfo.GetComponent <UpdateInfos>().Layertransform = punkt.transform;
        punktInfo.GetComponent <UpdateInfos>().compnonent     = schnittpunkt;
        punktInfo.GetComponent <UpdateInfos>().menu           = PunkteInfos;
        punktInfo.transform.SetParent(PunkteInfos.transform);
        if (!PunkteInfos.isopen)
        {
            punktInfo.SetActive(false);
        }
        PunkteInfos.MenuItems.Add(punktInfo);
        PunkteInfos.Rearrange();
    }