| 294 | } |
| 295 | |
| 296 | void ModelMerger::mergeSpace(Space& currentSpace, const Space& newSpace) { |
| 297 | if (m_newMergedHandles.find(newSpace.handle()) != m_newMergedHandles.end()) { |
| 298 | // already merged |
| 299 | return; |
| 300 | } |
| 301 | m_newMergedHandles.insert(newSpace.handle()); |
| 302 | |
| 303 | currentSpace.setName(newSpace.nameString()); |
| 304 | |
| 305 | if (newSpace.isDirectionofRelativeNorthDefaulted()) { |
| 306 | currentSpace.resetDirectionofRelativeNorth(); |
| 307 | } else { |
| 308 | currentSpace.setDirectionofRelativeNorth(newSpace.directionofRelativeNorth()); |
| 309 | } |
| 310 | |
| 311 | if (newSpace.isXOriginDefaulted()) { |
| 312 | currentSpace.resetXOrigin(); |
| 313 | } else { |
| 314 | currentSpace.setXOrigin(newSpace.xOrigin()); |
| 315 | } |
| 316 | |
| 317 | if (newSpace.isYOriginDefaulted()) { |
| 318 | currentSpace.resetYOrigin(); |
| 319 | } else { |
| 320 | currentSpace.setYOrigin(newSpace.yOrigin()); |
| 321 | } |
| 322 | |
| 323 | if (newSpace.isZOriginDefaulted()) { |
| 324 | currentSpace.resetZOrigin(); |
| 325 | } else { |
| 326 | currentSpace.setZOrigin(newSpace.zOrigin()); |
| 327 | } |
| 328 | |
| 329 | // remove current surfaces |
| 330 | for (auto& currentSurface : currentSpace.surfaces()) { |
| 331 | currentSurface.remove(); |
| 332 | } |
| 333 | |
| 334 | // remove current shadingSurfaceGroups |
| 335 | for (auto& shadingSurfaceGroup : currentSpace.shadingSurfaceGroups()) { |
| 336 | shadingSurfaceGroup.remove(); |
| 337 | } |
| 338 | |
| 339 | // add new surfaces |
| 340 | for (const auto& newSurface : newSpace.surfaces()) { |
| 341 | // DLM: this should probably be moved to a mergeSurface method |
| 342 | auto clone = newSurface.clone(m_currentModel).cast<Surface>(); |
| 343 | clone.setSpace(currentSpace); |
| 344 | |
| 345 | m_newMergedHandles.insert(newSurface.handle()); |
| 346 | m_currentToNewHandleMapping[clone.handle()] = newSurface.handle(); |
| 347 | m_newToCurrentHandleMapping[newSurface.handle()] = clone.handle(); |
| 348 | |
| 349 | boost::optional<Surface> newAdjacentSurface = newSurface.adjacentSurface(); |
| 350 | if (newAdjacentSurface) { |
| 351 | boost::optional<UUID> currentAdjacentSurfaceHandle = getCurrentModelHandle(newAdjacentSurface->handle()); |
| 352 | if (currentAdjacentSurfaceHandle) { |
| 353 | boost::optional<Surface> currentAdjacentSurface = m_currentModel.getModelObject<Surface>(*currentAdjacentSurfaceHandle); |
nothing calls this directly
no test coverage detected