iOS RoomPlan API如何丢弃特定对象?扫描返回CapturedRoom不可变
RoomPlan API 丢弃特定对象的解决方案
RoomPlan API 返回的 CapturedRoom 是不可变类型,本身没有直接提供丢弃其中特定对象的方法,但可以通过以下方式实现需求:
- 创建自定义可变模型:将
CapturedRoom中的数据(如墙体、门窗、扫描到的物体等)提取出来,存入你自己定义的可变结构体或类中,之后就可以自由删除不需要的对象。 - 扫描后过滤处理:在
captureView(didPresent:error:)回调中,对返回的processedResult进行数据提取和过滤,示例代码如下:
func captureView(didPresent processedResult: CapturedRoom, error: Error?) { guard error == nil else { // 处理错误逻辑 return } // 示例:过滤掉类型为椅子的扫描对象 let filteredObjects = processedResult.objects.filter { $0.type != .chair } // 提取房间其他核心数据 let walls = processedResult.walls let doors = processedResult.doors let windows = processedResult.windows // 存入自定义可变模型 var customRoom = CustomRoom(walls: walls, doors: doors, windows: windows, objects: filteredObjects) // 可进一步删除指定ID的对象 if let targetIndex = customRoom.objects.firstIndex(where: { $0.id == "目标对象ID" }) { customRoom.objects.remove(at: targetIndex) } } // 自定义可变房间模型示例 struct CustomRoom { var walls: [CapturedWall] var doors: [CapturedDoor] var windows: [CapturedWindow] var objects: [CapturedObject] }
- 扫描阶段无直接排除机制:目前RoomPlan没有提供在扫描过程中就过滤特定对象的配置,只能在扫描完成后通过上述方式处理结果。
内容的提问来源于stack exchange,提问作者Jaswant Singh
相关产品推荐
相关产品推荐

