Exemplo n.º 1
0
 public PointAnchor(int _objectid, ToggleMeasureToolAction.AnchorType _anchorType, Vector3 _position, Vector3 _normal)
 {
     objectId = _objectid;
     type     = _anchorType;
     position = _position;
     normal   = _normal;
 }
Exemplo n.º 2
0
        public static void PostRaycast(List <Tuple <GameObject, RaycastHit> > results, ToggleMeasureToolAction.AnchorType selectionType)
        {
            var resultsToRemove = new List <Tuple <GameObject, RaycastHit> >();

            foreach (var tuple in results)
            {
                var          hit          = tuple.Item2;
                MeshCollider meshCollider = hit.collider as MeshCollider;
                if (meshCollider == null || meshCollider.sharedMesh == null)
                {
                    resultsToRemove.Add(tuple);
                    continue;
                }

                Mesh mesh   = meshCollider.sharedMesh;
                var  point  = hit.point;
                var  normal = hit.normal;
                // Vertex snapping requires a readable mesh
                if (mesh.isReadable)
                {
                    int[]          triangles        = mesh.triangles;
                    Vector3[]      normals          = mesh.normals;
                    Vector3[]      vertices         = mesh.vertices;
                    List <Vector3> triangleVertices = new List <Vector3> {
                        vertices[triangles[hit.triangleIndex * 3 + 0]], vertices[triangles[hit.triangleIndex * 3 + 1]], vertices[triangles[hit.triangleIndex * 3 + 2]]
                    };

                    Vector3 N0 = normals[triangles[hit.triangleIndex * 3 + 0]];
                    Vector3 N1 = normals[triangles[hit.triangleIndex * 3 + 1]];
                    Vector3 N2 = normals[triangles[hit.triangleIndex * 3 + 2]];
                    normal = meshCollider.transform.rotation * ((N0 + N1 + N2) / 3.0f);

                    point = DetectBestPointSelection(hit.point, triangleVertices);
                }

                SelectObjectMeasureToolAction.IAnchor anchor;

                switch (selectionType)
                {
                default:
                case ToggleMeasureToolAction.AnchorType.Point:
                    anchor = new PointAnchor(tuple.Item1.GetInstanceID(), ToggleMeasureToolAction.AnchorType.Point, point, normal);
                    break;

                    //case AnchorType.Edge:
                    //anchor = new EdgeAnchor(tuple.Item1.GetInstanceID(), AnchorType.Edge, );
                    //  break;
                }

                //TODO This will keep adding AnchorSelectionContext on every selected object, need to remove them at some point
                var selectionContext = tuple.Item1.GetComponent <AnchorSelectionContext>();
                if (selectionContext == null)
                {
                    selectionContext = tuple.Item1.AddComponent <AnchorSelectionContext>();
                }

                //TODO This will keep adding SelectionContext every time there is a selection, the list needs to be cleared up at some point or moved somewhere else
                selectionContext.SelectionContextList.Add(new AnchorSelectionContext.SelectionContext {
                    selectedAnchor = anchor
                });
            }

            foreach (var tuple in resultsToRemove)
            {
                results.Remove(tuple);
            }

            results.Sort((a, b) => a.Item2.distance.CompareTo(b.Item2.distance));
        }
 public void SetAnchorPickerSelectionType(ToggleMeasureToolAction.AnchorType anchorType)
 {
     AnchorPicker.CurrentAnchorTypeSelection = anchorType;
 }
Exemplo n.º 4
0
        void OnSelectionTypeDataChanged(ToggleMeasureToolAction.AnchorType newData)
        {
            m_AnchorSelection?.SetAnchorPickerSelectionType(newData);

            //TODO: update the Cursors style with the current selectionType
        }
Exemplo n.º 5
0
 PointAnchor GetPointAnchor(Vector3 point, Vector3 normal,
                            ToggleMeasureToolAction.AnchorType anchorType = ToggleMeasureToolAction.AnchorType.Point)
 {
     return(new PointAnchor(point.GetHashCode(), ToggleMeasureToolAction.AnchorType.Point, point, Vector3.up));
 }