Beispiel #1
0
 public void SetObject(MeasureObject obj)
 {
     if (obj != null)
     {
         viewModel.UpdateValues(obj);
     }
 }
Beispiel #2
0
    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);
            }
        }