| 244 | } |
| 245 | |
| 246 | void ZoneHVACComponent_Impl::removeFromThermalZone() { |
| 247 | boost::optional<ThermalZone> thermalZone = this->thermalZone(); |
| 248 | boost::optional<AirLoopHVAC> airLoopHVAC = this->airLoopHVAC(); |
| 249 | Model m = this->model(); |
| 250 | auto mo = getObject<ZoneHVACComponent>(); |
| 251 | |
| 252 | bool inletSideMixer = false; |
| 253 | if (airLoopHVAC) { |
| 254 | if (airLoopHVAC->demandComponent(mo.handle())) { |
| 255 | inletSideMixer = true; |
| 256 | } |
| 257 | } |
| 258 | |
| 259 | if (inletSideMixer) { |
| 260 | removeFromInletSideMixer(); |
| 261 | } else if (thermalZone) { |
| 262 | |
| 263 | if (auto t_inletNode = inletNode()) { |
| 264 | t_inletNode->disconnect(); |
| 265 | t_inletNode->remove(); |
| 266 | } |
| 267 | |
| 268 | if (auto t_outletNode = outletNode()) { |
| 269 | t_outletNode->disconnect(); |
| 270 | t_outletNode->remove(); |
| 271 | } |
| 272 | } |
| 273 | |
| 274 | auto thisObject = this->getObject<ModelObject>(); |
| 275 | for (auto& thermalZone : m.getConcreteModelObjects<ThermalZone>()) { |
| 276 | std::vector<ModelObject> equipment = thermalZone.equipment(); |
| 277 | |
| 278 | if (std::find(equipment.begin(), equipment.end(), thisObject) != equipment.end()) { |
| 279 | thermalZone.removeEquipment(thisObject); |
| 280 | break; |
| 281 | } |
| 282 | } |
| 283 | } |
| 284 | |
| 285 | boost::optional<Node> ZoneHVACComponent_Impl::inletNode() const { |
| 286 | boost::optional<ModelObject> mo = connectedObject(inletPort()); |