// 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()); } }
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); */ }
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(); }