Example #1
0
    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);
    }
Example #3
0
        // 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") + ")";
        }