void ThermalZonesController::addComponentToZone(model::ThermalZone & zone, Handle & h) { boost::optional<model::ZoneHVACComponent> libraryComp; model::Model library = OSAppBase::instance()->currentDocument()->componentLibrary(); libraryComp = library.getModelObject<model::ZoneHVACComponent>(h); if( libraryComp ) { std::vector<model::ModelObject> existingComps; existingComps = zone.equipment(); std::vector<model::ZoneHVACComponent> exisitngHVACComps; for( auto it = existingComps.begin(); it < existingComps.end(); ++it ) { if( boost::optional<model::ZoneHVACComponent> hvacComp = it->optionalCast<model::ZoneHVACComponent>() ) { exisitngHVACComps.push_back(hvacComp.get()); } } if( exisitngHVACComps.size() > 0 ) { QMessageBox message(subTabView()); message.setText("Sorry, only one piece of zone equipment is allowed at this time."); message.exec(); return; } } bool wasSuccessful = false; if( libraryComp ) { model::ZoneHVACComponent compClone = libraryComp->clone(model()).cast<model::ZoneHVACComponent>(); bool added = compClone.addToThermalZone(zone); if( added ) { wasSuccessful = true; } else { compClone.remove(); } } if( ! wasSuccessful ) { QMessageBox message(subTabView()); message.setText("The selected component is not allowed at this location."); message.exec(); } }