MCPcopy Create free account
hub / github.com/ThatOpen/engine_web-ifc / GetAlignment

Method GetAlignment

src/cpp/web-ifc/geometry/IfcGeometryLoader.cpp:493–653  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

491 }
492
493 IfcAlignment IfcGeometryLoader::GetAlignment(uint32_t expressID, IfcAlignment alignment, glm::dmat4 transform, uint32_t sourceExpressID) const
494 {
495 spdlog::debug("[GetAlignment({})]", expressID);
496 auto lineType = _loader.GetLineType(expressID);
497
498 // TODO: Add support for IFCREFERENT
499
500 switch (lineType)
501 {
502 case schema::IFCALIGNMENT:
503 {
504 _loader.MoveToArgumentOffset(expressID, 5);
505 uint32_t localPlacement = 0;
506 if (_loader.GetTokenType() == parsing::IfcTokenType::REF)
507 {
508 _loader.StepBack();
509 localPlacement = _loader.GetRefArgument();
510 }
511
512 glm::dmat4 transform_t = glm::dmat4(1);
513 if (localPlacement != 0 && _loader.IsValidExpressID(localPlacement))
514 {
515 transform_t = GetLocalPlacement(localPlacement);
516 alignment.PlacementExpressId = localPlacement;
517 }
518
519 if (_cache.GetRelAggregates().count(expressID) == 1)
520 {
521 auto &relAgg = _cache.GetRelAggregates().at(expressID);
522 for (auto expressID : relAgg)
523 {
524 alignment = GetAlignment(expressID, alignment, transform * transform_t, expressID);
525 }
526 }
527
528 if (_cache.GetRelNests().count(expressID) == 1)
529 {
530 auto &relNest = _cache.GetRelNests().at(expressID);
531 for (auto expressID : relNest)
532 {
533 alignment = GetAlignment(expressID, alignment, transform * transform_t, expressID);
534 }
535 }
536
537 break;
538 }
539 case schema::IFCALIGNMENTHORIZONTAL:
540 {
541 _loader.MoveToArgumentOffset(expressID, 5);
542 uint32_t localPlacement = 0;
543 if (_loader.GetTokenType() == parsing::IfcTokenType::REF)
544 {
545 _loader.StepBack();
546 localPlacement = _loader.GetRefArgument();
547 }
548
549 glm::dmat4 transform_t = glm::dmat4(1);
550 if (localPlacement != 0 && _loader.IsValidExpressID(localPlacement))

Callers 2

GetAllAlignmentsFunction · 0.80
GetAlignmentsFunction · 0.80

Calls 8

debugFunction · 0.85
MoveToArgumentOffsetMethod · 0.80
GetTokenTypeMethod · 0.80
StepBackMethod · 0.80
GetRefArgumentMethod · 0.80
IsValidExpressIDMethod · 0.80
sizeMethod · 0.80
GetLineTypeMethod · 0.45

Tested by 1

GetAlignmentsFunction · 0.64