MCPcopy Create free account
hub / github.com/NatLabRockies/OpenStudio / convertDetailedGeometry

Method convertDetailedGeometry

src/energyplus/GeometryTranslator.cpp:2369–2467  ·  view source on GitHub ↗

transform detailed geometry from the current system to the new system

Source from the content-addressed store, hash-verified

2367
2368 // transform detailed geometry from the current system to the new system
2369 bool GeometryTranslator::convertDetailedGeometry(const CoordinateChange& detailedCoordChange) {
2370 bool result = true;
2371
2372 Transformation buildingTransformation = this->buildingTransformation();
2373
2374 for (WorkspaceObject& surface : m_workspace.getObjectsByType(IddObjectType::BuildingSurface_Detailed)) {
2375 Point3dVector vertices = getVertices(BuildingSurface_DetailedFields::NumberofVertices + 1, surface);
2376 surface.setString(BuildingSurface_DetailedFields::NumberofVertices, "Autocalculate");
2377 if (detailedCoordChange != CoordinateChange::NoChange) {
2378 OptionalWorkspaceObject zone = surface.getTarget(BuildingSurface_DetailedFields::ZoneName);
2379 if (!zone) {
2380 LOG(Error, "Could not find zone");
2381 continue;
2382 }
2383
2384 Transformation zoneTransformation = this->zoneTransformation(*zone);
2385
2386 if (detailedCoordChange == CoordinateChange::AbsoluteToRelative) {
2387 vertices = zoneTransformation.inverse() * buildingTransformation.inverse() * vertices;
2388 setVertices(BuildingSurface_DetailedFields::NumberofVertices + 1, surface, vertices);
2389 } else if (detailedCoordChange == CoordinateChange::RelativeToAbsolute) {
2390 vertices = buildingTransformation * zoneTransformation * vertices;
2391 setVertices(BuildingSurface_DetailedFields::NumberofVertices + 1, surface, vertices);
2392 }
2393 }
2394 }
2395
2396 for (WorkspaceObject& subsurface : m_workspace.getObjectsByType(IddObjectType::FenestrationSurface_Detailed)) {
2397 Point3dVector vertices = getVertices(FenestrationSurface_DetailedFields::NumberofVertices + 1, subsurface);
2398 subsurface.setString(FenestrationSurface_DetailedFields::NumberofVertices, "Autocalculate");
2399 if (detailedCoordChange != CoordinateChange::NoChange) {
2400 OptionalWorkspaceObject surface = subsurface.getTarget(FenestrationSurface_DetailedFields::BuildingSurfaceName);
2401 if (!surface) {
2402 LOG(Error, "Could not find surface");
2403 continue;
2404 }
2405 OptionalWorkspaceObject zone = surface->getTarget(BuildingSurface_DetailedFields::ZoneName);
2406 if (!zone) {
2407 LOG(Error, "Could not find zone");
2408 continue;
2409 }
2410 Transformation zoneTransformation = this->zoneTransformation(*zone);
2411 if (detailedCoordChange == CoordinateChange::AbsoluteToRelative) {
2412 vertices = zoneTransformation.inverse() * buildingTransformation.inverse() * vertices;
2413 setVertices(FenestrationSurface_DetailedFields::NumberofVertices + 1, subsurface, vertices);
2414 } else if (detailedCoordChange == CoordinateChange::RelativeToAbsolute) {
2415 vertices = buildingTransformation * zoneTransformation * vertices;
2416 setVertices(FenestrationSurface_DetailedFields::NumberofVertices + 1, subsurface, vertices);
2417 }
2418 }
2419 }
2420
2421 for (WorkspaceObject& zoneShading : m_workspace.getObjectsByType(IddObjectType::Shading_Zone_Detailed)) {
2422 Point3dVector vertices = getVertices(Shading_Zone_DetailedFields::NumberofVertices + 1, zoneShading);
2423 zoneShading.setString(Shading_Zone_DetailedFields::NumberofVertices, "Autocalculate");
2424 if (detailedCoordChange != CoordinateChange::NoChange) {
2425 OptionalWorkspaceObject zoneSurface = zoneShading.getTarget(Shading_Zone_DetailedFields::BaseSurfaceName);
2426 if (!zoneSurface) {

Callers

nothing calls this directly

Calls 8

zoneTransformationMethod · 0.95
getVerticesFunction · 0.85
setVerticesFunction · 0.85
inverseMethod · 0.80
getObjectsByTypeMethod · 0.45
setStringMethod · 0.45
getTargetMethod · 0.45

Tested by

no test coverage detected