public void SetObject(MeasureObject obj) { if (obj != null) { viewModel.UpdateValues(obj); } }
private void Update() { if (!getMeasurement || Input.touchCount <= 0) { return; } var ray = Camera.main.ScreenPointToRay(Input.mousePosition); var hit = new RaycastHit(); if (Physics.Raycast(ray, out hit)) { var go = hit.transform.gameObject; MeasureObject dp = go.GetComponent <MeasureObject>(); if (!dp || !dp.measure || go.tag != "cadobject") { return; } // Vector facing out from plane that was hit Vector3 normal = hit.normal; float xMag = dp.bounds.size.x; float yMag = dp.bounds.size.y; Vector3 right = go.transform.right; // Reassign x-bounds depending on side chosen if (normal == go.transform.right || normal == -go.transform.right) { xMag = dp.bounds.size.z; } // Account top/bottom placmenet when choosing sides of object if (normal == go.transform.right) { right = go.transform.forward; } else if (normal == -go.transform.right) { right = -go.transform.forward; } // Account for top/bottom placement when choosing back of object int rightMult = (normal == go.transform.forward) ? -1 : 1; // Directions to place mirrored object, depending on dropdown values Vector3[] directions = new Vector3[] { (Quaternion.AngleAxis(90, Vector3.up) * normal) * xMag, (Quaternion.AngleAxis(-90, Vector3.up) * normal) * xMag, (Quaternion.AngleAxis(90, right * rightMult) * normal) * yMag, (Quaternion.AngleAxis(-90, right * rightMult) * normal) * yMag, }; Vector3 direction = directions[directionDropdown.value]; // Place new mirrored object beside current object. // Add same parent so will move with the rest of the scene GameObject newObj = Instantiate( go, go.transform.position + direction, go.transform.rotation, parentObj.transform ); measurementText.text = ((xMag * 100) / graduations).ToString("F2") + "cm/grad horizontal\n" + ((yMag * 100) / graduations).ToString("F2") + "cm/grad vertical"; newObj.GetComponent <Renderer>().material = graduatedMaterial; mirrorObj = newObj; isMeasuring = true; getMeasurement = false; } }
public void Select(MeasureObject item) => SelectedItem = item;
public void UpdateValues(MeasureObject mo) { Items.Clear(); Points.Clear(); foreach (var item in Controls) { item.Visibility = Visibility.Collapsed; } if (mo == null) { return; } var type = mo.GetType(); var list = new List <Point>(); if (type == typeof(MeasureSegment)) { var sege = (MeasureSegment)mo; Items.Add(new PropertyItem { Key = "|1-2|", Value = sege.Distance.Round3().ToString() }); Items.Add(new PropertyItem { Key = "∠ 1", Value = sege.Angle.Round3() + "°" }); list.Add(sege.ClipStarts(sege.X1, sege.Y1)); list.Add(sege.ClipStarts(sege.X2, sege.Y2)); AddScaledPoints(list, false); } else if (type == typeof(MeasureAngle)) { var sege = (MeasureAngle)mo; list.Add(sege.ClipStarts(sege.X1, sege.Y1)); list.Add(sege.ClipStarts(sege.X2, sege.Y2)); list.Add(sege.ClipStarts(sege.X3, sege.Y3)); list.Add(sege.ClipStarts(sege.X1, sege.Y1));//闭合 AddScaledPoints(list, true); Items.Add(new PropertyItem { Key = "|1-2|", Value = sege.Distance12.Round3().ToString() }); Items.Add(new PropertyItem { Key = "|2-3|", Value = sege.Distance23.Round3().ToString() }); Items.Add(new PropertyItem { Key = "|1-3|", Value = sege.Distance13.Round3().ToString() }); Items.Add(new PropertyItem { Key = "∠ 1", Value = sege.Angle213.Round3() + "°" }); Items.Add(new PropertyItem { Key = "∠ 2", Value = sege.Angle123.Round3() + "°" }); Items.Add(new PropertyItem { Key = "∠ 3", Value = sege.Angle132.Round3() + "°" }); } else if (type == typeof(MeasureRect)) { var sege = (MeasureRect)mo; list.Add(sege.ClipStarts(sege.P11.X, sege.P11.Y)); list.Add(sege.ClipStarts(sege.P12.X, sege.P12.Y)); list.Add(sege.ClipStarts(sege.P22.X, sege.P22.Y)); list.Add(sege.ClipStarts(sege.P21.X, sege.P21.Y)); list.Add(sege.ClipStarts(sege.P11.X, sege.P11.Y));//闭合 AddScaledPoints(list, true); Items.Add(new PropertyItem { Key = "|1-2|", Value = sege.Distance12.Round3().ToString() }); Items.Add(new PropertyItem { Key = "|1-3|", Value = sege.Distance13.Round3().ToString() }); Items.Add(new PropertyItem { Key = "|2-3|", Value = sege.Distance23.Round3().ToString() }); Items.Add(new PropertyItem { Key = "|2-4|", Value = sege.Distance24.Round3().ToString() }); Items.Add(new PropertyItem { Key = "|3-4|", Value = sege.Distance34.Round3().ToString() }); Items.Add(new PropertyItem { Key = "|4-1|", Value = sege.Distance14.Round3().ToString() }); Items.Add(new PropertyItem { Key = "∠ 1", Value = sege.Angle1.Round3() + "°" }); Items.Add(new PropertyItem { Key = "∠ 2", Value = sege.Angle2.Round3() + "°" }); Items.Add(new PropertyItem { Key = "∠ 3", Value = sege.Angle3.Round3() + "°" }); Items.Add(new PropertyItem { Key = "∠ 4", Value = sege.Angle4.Round3() + "°" }); Items.Add(new PropertyItem { Key = "∠ 124", Value = sege.Angle124.Round3() + "°" }); Items.Add(new PropertyItem { Key = "∠ 231", Value = sege.Angle231.Round3() + "°" }); Items.Add(new PropertyItem { Key = "∠ 342", Value = sege.Angle342.Round3() + "°" }); Items.Add(new PropertyItem { Key = "∠ 413", Value = sege.Angle413.Round3() + "°" }); } else if (type == typeof(MeasureColor)) { var sege = (MeasureColor)mo; UpdateForMeasureColor(sege); } }