public void Query_Topology_FindLargeWall() { ClearGeometry(); // Only if we're enabled if (!SpatialUnderstanding.Instance.AllowSpatialUnderstanding) { return; } // Query IntPtr wallPtr = SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(resultsTopology); int wallCount = SpatialUnderstandingDllTopology.QueryTopology_FindLargestWall( wallPtr); if (wallCount == 0) { AppState.Instance.SpaceQueryDescription = "Find Largest Wall (0)"; return; } // Add the line boxes float timeDelay = (float)lineBoxList.Count * AnimatedBox.DelayPerItem; lineBoxList.Add( new AnimatedBox( timeDelay, resultsTopology[0].position, Quaternion.LookRotation(resultsTopology[0].normal, Vector3.up), Color.magenta, new Vector3(resultsTopology[0].width, resultsTopology[0].length, 0.05f) * 0.5f) ); AppState.Instance.SpaceQueryDescription = "Find Largest Wall (1)"; }
public int RunQuery() { Results = new SpatialUnderstandingDllTopology.TopologyResult[_queryMaxResultCount]; SpatialUnderstandingDllTopology.TopologyResult SingleResult = new SpatialUnderstandingDllTopology.TopologyResult(); IntPtr resultsTopologyPtr = SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(Results); IntPtr singleResultPtr = SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(SingleResult); int resultCount = 0; switch (Type) { case STTopologyQueryType.LargePositionsOnWalls: resultCount = SpatialUnderstandingDllTopology.QueryTopology_FindLargePositionsOnWalls(MinHeight, MinWidth, Wall_MinHeightAboveFloor, MinFacingClearance, Results.Length, resultsTopologyPtr); break; case STTopologyQueryType.LargestPositionsOnFloor: resultCount = SpatialUnderstandingDllTopology.QueryTopology_FindLargestPositionsOnFloor(Results.Length, resultsTopologyPtr); break; case STTopologyQueryType.LargestWall: resultCount = SpatialUnderstandingDllTopology.QueryTopology_FindLargestWall(singleResultPtr); Results = new SpatialUnderstandingDllTopology.TopologyResult[] { SingleResult }; break; case STTopologyQueryType.PositionsOnFloor: resultCount = SpatialUnderstandingDllTopology.QueryTopology_FindPositionsOnFloor(Floor_MinLength, MinWidth, Results.Length, resultsTopologyPtr); break; case STTopologyQueryType.PositionsOnWalls: resultCount = SpatialUnderstandingDllTopology.QueryTopology_FindPositionsOnWalls(MinHeight, MinWidth, Wall_MinHeightAboveFloor, MinFacingClearance, Results.Length, resultsTopologyPtr); break; case STTopologyQueryType.PositionsSittable: resultCount = SpatialUnderstandingDllTopology.QueryTopology_FindPositionsSittable(MinHeight, Sittable_MaxHeight, MinFacingClearance, Results.Length, resultsTopologyPtr); break; } List <SpatialUnderstandingDllTopology.TopologyResult> resultTemp = new List <SpatialUnderstandingDllTopology.TopologyResult>(); for (int i = 0; i < resultCount; i++) { resultTemp.Add(Results[i]); } Results = resultTemp.ToArray(); _hasRun = true; return(resultCount); }
// Display and measure largest wall public void Query_Topology_MeasureLargestWall() { ClearGeometry(); // Only if we're enabled if (!SpatialUnderstanding.Instance.AllowSpatialUnderstanding) { return; } // Query IntPtr wallPtr = SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(resultsTopology); int wallCount = SpatialUnderstandingDllTopology.QueryTopology_FindLargestWall( wallPtr); if (wallCount == 0) { AppState.Instance.SpaceQueryDescription = "Measure Largest Wall (0)"; return; } // Add the line boxes float timeDelay = (float)lineBoxList.Count * AnimatedBox.DelayPerItem; float ourWidth = resultsTopology[0].width + 0.18f; float ourLength = resultsTopology [0].length + 0.05f; lineBoxList.Add( new AnimatedBox( timeDelay, resultsTopology[0].position, Quaternion.LookRotation(resultsTopology[0].normal, Vector3.up), Color.magenta, new Vector3(ourWidth, ourLength, 0.05f) * 0.5f) ); AppState.Instance.SpaceQueryDescription = "Width(" + ourWidth.ToString("#.00") + "m) x Height (" + ourLength.ToString("#.00") + "m) Area: (" + (ourWidth * ourLength).ToString("#.00m") + ")"; }