internal static void ExtractPlanes(PlaneExtractionSettings settings) { using (var undoBlock = new UndoBlock("Extract Planes")) { var prefabRoot = settings.gameObject; undoBlock.RecordObject(prefabRoot); var voxelGenerationParams = settings.VoxelGenerationParams; var planeExtractionParams = settings.PlaneFindingParams; var voxelSize = voxelGenerationParams.voxelSize; if ((int)(planeExtractionParams.minPointsPerSqMeter * (voxelSize * voxelSize)) <= 0) { Debug.LogWarning("Minimum points per voxel is not greater than 0. " + "Increase either the voxel size or the minimum points per square meter."); return; } if (!PlaneGenerationModule.TryDestroyPreviousPlanes(prefabRoot, "Extracting Planes", undoBlock)) { return; } GenerateVoxelGrids(prefabRoot, voxelGenerationParams, planeExtractionParams); FindPlanesInGrids(prefabRoot, undoBlock); } }
static void FindPlanesInGrids(GameObject prefabRoot, UndoBlock undoBlock) { k_ExtractedPlanes.Clear(); s_UpVoxelGrid.ExtractPlanes(k_ExtractedPlanes); s_DownVoxelGrid.ExtractPlanes(k_ExtractedPlanes); s_ForwardVoxelGrid.ExtractPlanes(k_ExtractedPlanes); s_BackVoxelGrid.ExtractPlanes(k_ExtractedPlanes); s_RightVoxelGrid.ExtractPlanes(k_ExtractedPlanes); s_LeftVoxelGrid.ExtractPlanes(k_ExtractedPlanes); var planesRoot = PlaneGenerationModule.CreateGeneratedPlanesRoot(prefabRoot.transform, undoBlock); var simPlanePrefab = MarsObjectCreationResources.instance.GeneratedSimulatedPlanePrefab; foreach (var plane in k_ExtractedPlanes) { var synthPlane = UnityObject.Instantiate(simPlanePrefab, planesRoot); synthPlane.transform.SetWorldPose(plane.pose); synthPlane.SetMRPlaneData(plane.vertices, plane.center, plane.extents); } planesRoot.gameObject.SetLayerRecursively(SimulationConstants.SimulatedEnvironmentLayerIndex); }