Пример #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());
        }
    }
Пример #2
0
    public void AddLine()
    {
        GameObject geraden     = Instantiate(prefabGeraden);
        GameObject geradenUI   = Instantiate(prefabGeradenUI);
        GameObject geradenInfo = Instantiate(prefabGeradenInfo);
        string     nameGerade  = "Gerade G" + EditableComponents.FindAll((EditableComponent obj) => obj is Gerade).Count;
        Gerade     newGerade   = new Gerade {
            ConfigUI = geradenUI, ConfigParentMenu = Geraden, InfoUI = geradenInfo, InfoParentMenu = GeradenInfos, Model3D = geraden, color = UnityEngine.Random.ColorHSV(0f, 1f, 0.7f, 0.7f, 1f, 1f, 0.8f, 0.8f)
        };

        AddObject(newGerade, geraden, geradenUI, geradenInfo, Geraden, GeradenInfos, newGerade.color, newGerade.Name);
        newGerade.Schnittpunkte = new List <Schnittpunkt>();
        //geradenInfo.GetComponent<UpdateInfos>().Name.SetText(nameGerade);
        foreach (EditableComponent e in EditableComponents)
        {
            if (e is Ebene)
            {
                Ebene ebene = (Ebene)e;
                AddSchnittpunkt(newGerade, ebene);
                AddDistanz(newGerade, ebene);
            }
            else if (e is Punkt)
            {
                AddDistanz(e, newGerade);
            }
        }

        /*foreach (Ebene ebene in EditableComponents)
         * {
         *  AddSchnittpunkt(newGerade, ebene);
         *  AddDistanz(newGerade, ebene);
         * }
         * foreach (Punkt p in EditableComponents)
         * {
         *  AddDistanz(p, newGerade);
         * }*/

        foreach (TrackedEbene trackedPlane in TrackedPlanes)
        {
            if (trackedPlane.Transform.gameObject.activeSelf)
            {
                AddSchnittpunkt(newGerade, trackedPlane);
            }
            //if (trackedPlane.GetComponent<AddMarkerplane>().istracked)
            //{
            //    AddSchnittpunkt(geraden.transform, trackedPlane);
            //}
        }
        EditableComponents.Add(newGerade);

        /*
         * Geraden.Items3D.Add(geraden);
         * geraden.transform.SetParent(pivot.transform);
         * geradenUI.transform.SetParent(Geraden.transform);
         * geradenInfo.transform.SetParent(GeradenInfos.gameObject.transform);
         * geradenUI.GetComponent<SetGerade>().linetransform = geraden.transform;
         *
         * geradenInfo.GetComponent<UpdateInfos>().Layertransform = geraden.transform;
         * if (!GeradenInfos.isopen)
         * {
         *  geradenInfo.SetActive(false);
         * }
         * GeradenInfos.MenuItems.Add(geradenInfo);
         * Geraden.MenuItems.Add(geradenUI);
         * Geraden.Rearrange();
         * GeradenInfos.Rearrange();
         * geraden.transform.localPosition = new Vector3(0, 0, 0);
         */
    }
Пример #3
0
    public void AddPlane()
    {
        GameObject ebene     = Instantiate(prefabEbenen);
        GameObject ebeneUI   = Instantiate(prefabEbenenUI);
        GameObject ebeneInfo = Instantiate(prefabEbenenInfo);
        Ebene      newEbene  = new Ebene {
            ConfigUI = ebeneUI, ConfigParentMenu = Ebenen, Name = "Ebene E" + EditableComponents.FindAll((EditableComponent obj) => obj is Ebene).Count, InfoUI = ebeneInfo, InfoParentMenu = EbenenInfos, Model3D = ebene, color = UnityEngine.Random.ColorHSV(0f, 1f, 1f, 1f, 1f, 1f, 0.8f, 0.8f)
        };

        AddObject(newEbene, ebene, ebeneUI, ebeneInfo, Ebenen, EbenenInfos, newEbene.color, newEbene.Name);
        newEbene.Schnittkanten = new List <Schnittkante>();
        newEbene.Schnittpunkte = new List <Schnittpunkt>();
        ebene.GetComponent <Splitplane>().ebeneninfos = newEbene;
        foreach (EditableComponent e in EditableComponents)
        {
            if (e is Gerade)
            {
                AddSchnittpunkt((Gerade)e, newEbene);
                AddDistanz(e, newEbene);
            }
            else if (e is Punkt)
            {
                AddDistanz(e, newEbene);
            }
            else if (e is Ebene)
            {
                AddSchnittkante(e, newEbene);
            }
        }

        /*
         * foreach (Gerade gerade in EditableComponents)
         * {
         *  AddSchnittpunkt(gerade, newEbene);
         *  AddDistanz(gerade, newEbene);
         * }
         * foreach (Punkt p in EditableComponents)
         * {
         *  AddDistanz(p, newEbene);
         * }*/
        //ebeneUI.transform.SetParent(Ebenen.transform);
        //ebeneInfo.transform.SetParent(EbenenInfos.gameObject.transform);
        //ebene.transform.SetParent(pivot.transform);
        //ebene.transform.localPosition = new Vector3(0, 0, 0);
        //string nameEbene = "Ebene E" + EditableComponents.FindAll((EditableComponent obj) => obj is Ebene).Count;//Ebenen.Items3D.Count;
        //ebeneInfo.GetComponent<UpdateInfos>().Name.SetText(nameEbene);
        //foreach (GameObject ebenef1 in Ebenen.Items3D)
        //{
        //    string nameEbene2 = "Ebene " + Ebenen.Items3D.IndexOf(ebenef1);
        //    AddSchnittkante(ebenef1.transform, ebene.transform, nameEbene2, nameEbene);
        //}

        /*foreach (Ebene ebenef1 in EditableComponents)
         * {
         *  AddSchnittkante(ebenef1, newEbene);
         * }*/
        foreach (TrackedEbene trackedPlane in TrackedPlanes)
        {
            if (trackedPlane.Transform.gameObject.activeSelf)
            {
                AddSchnittkante(newEbene, trackedPlane);
            }
            //if (trackedPlane.GetComponent<AddMarkerplane>().istracked)
            //{
            //    AddSchnittkante(trackedPlane, ebene.transform, trackedPlane.name, nameEbene);
            //}
        }
        EditableComponents.Add(newEbene);
        //Ebenen.Items3D.Add(ebene);
        //ebeneInfo.GetComponent<UpdateInfos>().Layertransform = ebene.transform;
        //if (!EbenenInfos.isopen)
        //{
        //    ebeneInfo.SetActive(false);
        //}
        //ebeneUI.GetComponent<SetPlane>().planetransform = ebene.transform;
        //EbenenInfos.MenuItems.Add(ebeneInfo);
        ////Ebenen.MenuItems.Add(ebeneUI);
        //Ebenen.Rearrange();
        //EbenenInfos.Rearrange();
        UpdateAllLayers();
    }