boost::optional<ModelObject> Splitter_Impl::lastOutletModelObject() { std::vector<ModelObject> objects = outletModelObjects(); if( objects.size() > 0 ) { return OptionalModelObject(objects.back()); } else { return OptionalModelObject(); } }
bool ConnectorSplitter_Impl::addToNode(Node & node) { auto t_model = model(); if( node.model() != t_model ) { return false; } if( loop() ) { return false; } if( ! outletModelObjects().empty() ) { LOG(Warn, briefDescription() << " must not have existing outlet connections to use addToNode method."); return false; } auto t_nodeAirLoop = node.airLoopHVAC(); if( ! t_nodeAirLoop ) { LOG(Warn, briefDescription() << " must be added to an AirLoopHVAC supply node use addToNode method."); return false; } if( ! t_nodeAirLoop->supplyComponent(node.handle()) ) { LOG(Warn, briefDescription() << " must be added to an AirLoopHVAC supply node use addToNode method."); return false; } if( ! t_nodeAirLoop->supplyComponents(iddObjectType()).empty() ) { LOG(Warn, briefDescription() << " already has a splitter."); return false; } auto supplyInletNode = t_nodeAirLoop->supplyInletNode(); auto supplyOutletNode = t_nodeAirLoop->supplyOutletNode(); // Hook Up Duct "A" auto t_inletPort = inletPort(); auto portA = nextOutletPort(); HVACComponent_Impl::addToNode(node, supplyInletNode, supplyOutletNode, t_inletPort, portA); // Hook Up Duct "B" Node supplyOutletNodeB(t_model); auto thisObject = getObject<model::HVACComponent>(); auto portB = nextOutletPort(); t_model.connect(thisObject,portB,supplyOutletNodeB,supplyOutletNodeB.inletPort()); t_model.connect(supplyOutletNodeB,supplyOutletNodeB.outletPort(),t_nodeAirLoop.get(),t_nodeAirLoop->getImpl<detail::AirLoopHVAC_Impl>()->supplyOutletPortB()); return true; }
std::vector<ThermalZone> AirLoopHVACZoneSplitter_Impl::thermalZones() { std::vector<ThermalZone> zones; std::vector<ModelObject> modelObjects; std::vector<ModelObject> _outletModelObjects = outletModelObjects(); OptionalAirLoopHVAC _airLoopHVAC = airLoopHVAC(); OptionalNode demandOutletNode; OptionalNode demandInletNode; if( _airLoopHVAC ) { demandOutletNode = _airLoopHVAC->demandOutletNode(); demandInletNode = _airLoopHVAC->demandInletNode(); } else { return zones; } modelObjects = _airLoopHVAC->demandComponents( demandInletNode.get(), demandOutletNode.get(), ThermalZone::iddObjectType() ); for( std::vector<ModelObject>::iterator it = modelObjects.begin(); it < modelObjects.end(); it++ ) { OptionalThermalZone zone; zone = it->optionalCast<ThermalZone>(); if( zone ) { zones.push_back(*zone); } } return zones; }