コード例 #1
0
ファイル: Splitter.cpp プロジェクト: ChengXinDL/OpenStudio
boost::optional<ModelObject> Splitter_Impl::lastOutletModelObject()
{
  std::vector<ModelObject> objects = outletModelObjects();
  if( objects.size() > 0 )
  {
    return OptionalModelObject(objects.back());
  }
  else
  {
    return OptionalModelObject();
  }
}
コード例 #2
0
  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;
  }
コード例 #3
0
  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;
  }