MCPcopy Create free account
hub / github.com/IfcOpenShell/IfcOpenShell / addRelatedObject

Function addRelatedObject

src/ifcparse/IfcHierarchyHelper.h:413–486  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

411
412 template <class T>
413 void addRelatedObject(typename Schema::IfcObjectDefinition* relating_object,
414 typename Schema::IfcObjectDefinition* related_object,
415 typename Schema::IfcOwnerHistory* owner_hist = 0)
416 {
417 if constexpr (std::is_same_v<T, typename Schema::IfcRelDefinesByType>) {
418 typename Schema::IfcRelDefinesByType::list::ptr li = instances_by_type<typename Schema::IfcRelDefinesByType>();
419 bool found = false;
420 for (typename Schema::IfcRelDefinesByType::list::it i = li->begin(); i != li->end(); ++i) {
421 typename Schema::IfcRelDefinesByType* rel = *i;
422 if (rel->RelatingType() == relating_object) {
423 typename Schema::IfcObject::list::ptr objects = rel->RelatedObjects();
424 objects->push(addEntity(related_object)->template as<typename Schema::IfcObject>());
425 rel->setRelatedObjects(objects);
426 found = true;
427 break;
428 }
429 }
430 if (!found) {
431 if (!owner_hist) {
432 owner_hist = getSingle<typename Schema::IfcOwnerHistory>();
433 }
434 if (!owner_hist) {
435 owner_hist = addOwnerHistory();
436 }
437 typename Schema::IfcObject::list::ptr related_objects(new aggregate_of<typename Schema::IfcObject>());
438 related_objects->push(related_object->template as<typename Schema::IfcObject>());
439 typename Schema::IfcRelDefinesByType* t = new typename Schema::IfcRelDefinesByType(IfcParse::IfcGlobalId(), owner_hist, boost::none, boost::none, related_objects, relating_object->template as<typename Schema::IfcTypeObject>());
440
441 addEntity(t);
442 }
443 } else {
444 typename T::list::ptr li = instances_by_type<T>();
445 bool found = false;
446 for (typename T::list::it i = li->begin(); i != li->end(); ++i) {
447 T* rel = *i;
448 try {
449 if (get_parent_of_relation(rel) == relating_object) {
450 aggregate_of_instance::ptr products = get_children_of_relation(rel);
451 products->push(addEntity(related_object));
452 set_children_of_relation(rel, products);
453 found = true;
454 break;
455 }
456 } catch (std::exception& e) {
457 Logger::Error(e);
458 } catch (...) {
459 Logger::Error("Unknown error in addRelatedObject()");
460 }
461 }
462 if (!found) {
463 if (!owner_hist) {
464 owner_hist = getSingle<typename Schema::IfcOwnerHistory>();
465 }
466 if (!owner_hist) {
467 owner_hist = addOwnerHistory();
468 }
469
470 aggregate_of_instance::ptr related_objects(new aggregate_of_instance);

Callers

nothing calls this directly

Calls 10

get_parent_of_relationFunction · 0.85
get_children_of_relationFunction · 0.85
set_children_of_relationFunction · 0.85
set_attribute_valueMethod · 0.80
ErrorFunction · 0.70
createFunction · 0.70
beginMethod · 0.45
endMethod · 0.45
pushMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected