| 181 | } |
| 182 | |
| 183 | void updateUserData(ThreeUserData& userData, const PlanarSurface& planarSurface, bool includeGeometryDiagnostics) { |
| 184 | std::string name = planarSurface.nameString(); |
| 185 | boost::optional<Surface> surface = planarSurface.optionalCast<Surface>(); |
| 186 | boost::optional<ShadingSurface> shadingSurface = planarSurface.optionalCast<ShadingSurface>(); |
| 187 | boost::optional<InteriorPartitionSurface> interiorPartitionSurface = planarSurface.optionalCast<InteriorPartitionSurface>(); |
| 188 | boost::optional<SubSurface> subSurface = planarSurface.optionalCast<SubSurface>(); |
| 189 | boost::optional<PlanarSurfaceGroup> planarSurfaceGroup = planarSurface.planarSurfaceGroup(); |
| 190 | boost::optional<Space> space = planarSurface.space(); |
| 191 | boost::optional<ConstructionBase> construction = planarSurface.construction(); |
| 192 | |
| 193 | userData.setHandle(toThreeUUID(toString(planarSurface.handle()))); |
| 194 | userData.setName(name); |
| 195 | userData.setCoincidentWithOutsideObject(false); |
| 196 | |
| 197 | if (includeGeometryDiagnostics) { |
| 198 | userData.setIncludeGeometryDiagnostics(true); |
| 199 | userData.setConvex(planarSurface.isConvex()); |
| 200 | } |
| 201 | |
| 202 | if (surface) { |
| 203 | std::string surfaceType = surface->surfaceType(); |
| 204 | userData.setSurfaceType(surfaceType); |
| 205 | userData.setSurfaceTypeMaterialName(getSurfaceTypeThreeMaterialName(surfaceType)); |
| 206 | userData.setSunExposure(surface->sunExposure()); |
| 207 | userData.setWindExposure(surface->windExposure()); |
| 208 | userData.setOutsideBoundaryCondition(surface->outsideBoundaryCondition()); |
| 209 | |
| 210 | boost::optional<Surface> adjacentSurface = surface->adjacentSurface(); |
| 211 | if (adjacentSurface) { |
| 212 | userData.setOutsideBoundaryConditionObjectName(adjacentSurface->nameString()); |
| 213 | userData.setOutsideBoundaryConditionObjectHandle(toThreeUUID(toString(adjacentSurface->handle()))); |
| 214 | } |
| 215 | |
| 216 | // set boundary conditions before calling getBoundaryMaterialName |
| 217 | userData.setBoundaryMaterialName(getBoundaryMaterialName(userData)); |
| 218 | |
| 219 | if (includeGeometryDiagnostics && space) { |
| 220 | auto sfs = space->findSurfacesWithIncorrectOrientation(); |
| 221 | if (std::find(sfs.cbegin(), sfs.cend(), planarSurface) != sfs.cend()) { |
| 222 | userData.setCorrectlyOriented(false); |
| 223 | } |
| 224 | userData.setSpaceConvex(space->isConvex()); |
| 225 | userData.setSpaceEnclosed(space->isEnclosedVolume()); |
| 226 | } |
| 227 | } |
| 228 | |
| 229 | if (shadingSurface) { |
| 230 | std::string shadingSurfaceType = "Building"; |
| 231 | if (shadingSurface->shadingSurfaceGroup()) { |
| 232 | shadingSurfaceType = shadingSurface->shadingSurfaceGroup()->shadingSurfaceType(); |
| 233 | } |
| 234 | std::string surfaceType = shadingSurfaceType + "Shading"; |
| 235 | userData.setSurfaceType(surfaceType); |
| 236 | userData.setSurfaceTypeMaterialName(getSurfaceTypeThreeMaterialName(surfaceType)); |
| 237 | userData.setSunExposure("SunExposed"); |
| 238 | userData.setWindExposure("WindExposed"); |
| 239 | userData.setOutsideBoundaryCondition(""); |
| 240 | userData.setOutsideBoundaryConditionObjectName(""); |
no test coverage detected