/// <summary> /// Gets the currently tracked surfaces. /// </summary> /// <returns>The tracked surfaces.</returns> public MultiARInterop.TrackedSurface[] GetTrackedSurfaces(bool bGetPoints) { MultiARInterop.TrackedSurface[] trackedPlanes = new MultiARInterop.TrackedSurface[0]; if (surfaceRootTransform) { int numSurfaces = surfaceRootTransform.childCount; trackedPlanes = new MultiARInterop.TrackedSurface[numSurfaces]; for (int i = 0; i < numSurfaces; i++) { Transform surfaceTransform = surfaceRootTransform.GetChild(i); trackedPlanes[i] = new MultiARInterop.TrackedSurface(); trackedPlanes[i].position = surfaceTransform.position; trackedPlanes[i].rotation = surfaceTransform.rotation; if (bGetPoints) { MeshFilter meshFilter = surfaceTransform.GetComponent <MeshFilter>(); Mesh mesh = meshFilter ? meshFilter.mesh : null; trackedPlanes[i].bounds = mesh ? mesh.bounds.size : Vector3.zero; // todo trackedPlanes[i].points = mesh ? mesh.vertices : null; trackedPlanes[i].triangles = mesh ? mesh.triangles : null; } } } return(trackedPlanes); }
/// <summary> /// Gets the currently tracked surfaces. /// </summary> /// <returns>The tracked surfaces.</returns> public MultiARInterop.TrackedSurface[] GetTrackedSurfaces(bool bGetPoints) { MultiARInterop.TrackedSurface[] trackedPlanes = new MultiARInterop.TrackedSurface[planeAnchorDict.Count]; // get current planes list List <ARPlaneAnchorGameObject> listPlaneObjs = new List <ARPlaneAnchorGameObject>(planeAnchorDict.Values); int i = 0; foreach (ARPlaneAnchorGameObject arpag in listPlaneObjs) { ARPlaneAnchor planeAnchor = arpag.planeAnchor; trackedPlanes[i] = new MultiARInterop.TrackedSurface(); // surface position & rotation Vector3 surfacePos = UnityARMatrixOps.GetPosition(planeAnchor.transform); // Vector3.zero; // Quaternion surfaceRot = UnityARMatrixOps.GetRotation(planeAnchor.transform); // Quaternion.identity; // // add the center offset Vector3 centerPos = planeAnchor.center; centerPos.z = -centerPos.z; centerPos = surfaceRot * centerPos; surfacePos += centerPos; trackedPlanes[i].position = surfacePos; trackedPlanes[i].rotation = surfaceRot; trackedPlanes[i].bounds = planeAnchor.extent; if (bGetPoints) { // List<Vector3> meshVertices = new List<Vector3>(); // // Vector3 planeHalf = planeAnchor.extent * 0.5f; // meshVertices.Add(new Vector3(-planeHalf.x, planeHalf.y, planeHalf.z)); // meshVertices.Add(new Vector3(planeHalf.x, planeHalf.y, planeHalf.z)); // meshVertices.Add(new Vector3(planeHalf.x, planeHalf.y, -planeHalf.z)); // meshVertices.Add(new Vector3(-planeHalf.x, planeHalf.y, -planeHalf.z)); // // trackedPlanes[i].points = meshVertices.ToArray(); // // // get mesh indices // List<int> meshIndices = MultiARInterop.GetMeshIndices(meshVertices.Count); // trackedPlanes[i].triangles = meshIndices.ToArray(); trackedPlanes[i].points = planeAnchor.planeGeometry.vertices; trackedPlanes[i].triangles = planeAnchor.planeGeometry.triangleIndices; } i++; } // clear temporary lists listPlaneObjs.Clear(); return(trackedPlanes); }
/// <summary> /// Gets the currently tracked surfaces. /// </summary> /// <returns>The tracked surfaces.</returns> public MultiARInterop.TrackedSurface[] GetTrackedSurfaces(bool bGetPoints) { if (arInterface != null) { return(arInterface.GetTrackedSurfaces(bGetPoints)); } // no tracked planes MultiARInterop.TrackedSurface[] trackedPlanes = new MultiARInterop.TrackedSurface[0]; return(trackedPlanes); }
/// <summary> /// Gets the currently tracked surfaces. /// </summary> /// <returns>The tracked surfaces.</returns> public MultiARInterop.TrackedSurface[] GetTrackedSurfaces(bool bGetPoints) { MultiARInterop.TrackedSurface[] trackedPlanes = new MultiARInterop.TrackedSurface[allTrackedPlanes.Count]; for (int i = 0; i < allTrackedPlanes.Count; i++) { DetectedPlane surface = allTrackedPlanes[i]; trackedPlanes[i] = new MultiARInterop.TrackedSurface(); trackedPlanes[i].position = surface.CenterPose.position; trackedPlanes[i].rotation = surface.CenterPose.rotation; trackedPlanes[i].bounds = new Vector3(surface.ExtentX, 0f, surface.ExtentZ); if (bGetPoints) { List <Vector3> alPoints = new List <Vector3>(); surface.GetBoundaryPolygon(alPoints); int vertexCount = alPoints.Count; Quaternion invRot = Quaternion.Inverse(surface.CenterPose.rotation); Vector3 centerPos = surface.CenterPose.position; for (int v = vertexCount - 1; v >= 0; v--) { alPoints[v] -= centerPos; alPoints[v] = invRot * alPoints[v]; if (Mathf.Abs(alPoints[v].y) > 0.1f) { alPoints.RemoveAt(v); } } // get mesh indices List <int> meshIndices = MultiARInterop.GetMeshIndices(vertexCount); trackedPlanes[i].points = alPoints.ToArray(); trackedPlanes[i].triangles = meshIndices.ToArray(); } } return(trackedPlanes); }