From c1052b541895783578a6f146b15dd0032614c055 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Wed, 3 Feb 2021 12:56:16 +0100 Subject: [PATCH] Fix #303 - Add ZoneHVACCoolingPanelRadiantConvectiveWater to OpenStudioApplication --- ...ac_coolingpanel_radiantconvective_water.rb | 41 +++++++++ src/openstudio_lib/IconLibrary.cpp | 6 ++ src/openstudio_lib/InspectorView.cpp | 78 +++++++++++++++++- src/openstudio_lib/InspectorView.hpp | 25 ++++++ .../MainRightColumnController.cpp | 1 + .../coilcooling_water_panel_radiant.png | Bin 0 -> 8198 bytes .../coilcooling_water_panel_radiant.png | Bin 0 -> 1596 bytes ...c_coolingpanel_radiantconvective_water.png | Bin 0 -> 1156 bytes ...c_coolingpanel_radiantconvective_water.png | Bin 0 -> 4256 bytes .../library/OpenStudioPolicy.xml | 7 ++ src/openstudio_lib/openstudio.qrc | 4 + src/openstudio_lib/test/IconLibrary_GTest.cpp | 4 + 12 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 src/openstudio_app/Resources/default/add_zonehvac_coolingpanel_radiantconvective_water.rb create mode 100644 src/openstudio_lib/images/coilcooling_water_panel_radiant.png create mode 100644 src/openstudio_lib/images/mini_icons/coilcooling_water_panel_radiant.png create mode 100644 src/openstudio_lib/images/mini_icons/zonehvac_coolingpanel_radiantconvective_water.png create mode 100644 src/openstudio_lib/images/zonehvac_coolingpanel_radiantconvective_water.png diff --git a/src/openstudio_app/Resources/default/add_zonehvac_coolingpanel_radiantconvective_water.rb b/src/openstudio_app/Resources/default/add_zonehvac_coolingpanel_radiantconvective_water.rb new file mode 100644 index 000000000..04a5c43eb --- /dev/null +++ b/src/openstudio_app/Resources/default/add_zonehvac_coolingpanel_radiantconvective_water.rb @@ -0,0 +1,41 @@ +# p = File.join(ENV["HOME"], "Software/Others/OSApp-build-release/OpenStudio-3.1.1/OpenStudio-3.1.1-alpha+3d83fc2b65-Linux/usr/local/openstudio-3.1.1-alpha/Ruby/openstudio.rb") +# require p +require 'openstudio' + +include OpenStudio::Model + +# Helper to load a model in one line +# It will raise if the path (or the model) isn't valid +# +# @param path [String] The path to the osm +# @return [OpenStudio::Model::Model] the resulting model. +def osload(path) + translator = OpenStudio::OSVersion::VersionTranslator.new + ospath = OpenStudio::Path.new(path) + model = translator.loadModel(ospath) + if model.empty? + raise "Path '#{path}' is not a valid path to an OpenStudio Model" + else + model = model.get + end + return model +end + +m = osload('hvac_library.osm') + +alwaysOn = m.getScheduleConstantByName("Always On Discrete hvac_library").get + +panel = ZoneHVACCoolingPanelRadiantConvectiveWater.new(m) +panel.setAvailabilitySchedule(alwaysOn) +panel.setName("Zone HVAC Cooling Panel Radiant Convective Water") + +cc = panel.coolingCoil.to_CoilCoolingWaterPanelRadiant.get +cc.setName("Coil Cooling Water Panel Radiant") + +# Remove the alwaysOn it created by default, and the schedule type lim +sch = m.getScheduleConstantByName("Always On Discrete").get +sch_lim = sch.scheduleTypeLimits.get +sch_lim.remove() +sch.remove() + +m.save('hvac_library.osm', true) diff --git a/src/openstudio_lib/IconLibrary.cpp b/src/openstudio_lib/IconLibrary.cpp index ec7a4add4..4a2d9fc9b 100644 --- a/src/openstudio_lib/IconLibrary.cpp +++ b/src/openstudio_lib/IconLibrary.cpp @@ -137,6 +137,7 @@ IconLibrary::IconLibrary() { m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Coil_Cooling_WaterToAirHeatPump_VariableSpeedEquationFit).value()] = new QPixmap(":images/Coil_Cooling_WaterToAirHeatPump_VariableSpeedEquationFit.png"); m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Coil_Cooling_Water).value()] = new QPixmap(":images/cool_coil.png"); + m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Coil_Cooling_Water_Panel_Radiant).value()] = new QPixmap(":images/coilcooling_water_panel_radiant.png"); m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Coil_Heating_DX_SingleSpeed).value()] = new QPixmap(":images/coil_ht_dx_singlespeed.png"); m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Coil_Heating_DX_VariableSpeed).value()] = @@ -241,6 +242,8 @@ IconLibrary::IconLibrary() { new QPixmap(":images/baseboard_electric.png"); m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_ZoneHVAC_Baseboard_Convective_Water).value()] = new QPixmap(":images/baseboard_water.png"); + m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_ZoneHVAC_CoolingPanel_RadiantConvective_Water).value()] = + new QPixmap(":images/zonehvac_coolingpanel_radiantconvective_water.png"); m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_ZoneHVAC_Dehumidifier_DX).value()] = new QPixmap(":images/dehumidifier_dx.png"); m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_ZoneHVAC_EnergyRecoveryVentilator).value()] = new QPixmap(":images/energy_recov_vent.png"); @@ -572,6 +575,7 @@ IconLibrary::IconLibrary() { m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Coil_Cooling_LowTemperatureRadiant_VariableFlow).value()] = new QPixmap(":images/mini_icons/coilcoolinglowtemprad_varflow.png"); m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Coil_Cooling_Water).value()] = new QPixmap(":images/mini_icons/cool_coil.png"); + m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Coil_Cooling_Water_Panel_Radiant).value()] = new QPixmap(":images/mini_icons/coilcooling_water_panel_radiant.png"); m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Coil_Cooling_WaterToAirHeatPump_EquationFit).value()] = new QPixmap(":images/mini_icons/wahpDXCC_mini.png"); m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Coil_Cooling_WaterToAirHeatPump_VariableSpeedEquationFit).value()] = @@ -690,6 +694,8 @@ IconLibrary::IconLibrary() { new QPixmap(":images/mini_icons/baseboard_electric.png"); m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_ZoneHVAC_Baseboard_Convective_Water).value()] = new QPixmap(":images/mini_icons/baseboard_water.png"); + m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_ZoneHVAC_CoolingPanel_RadiantConvective_Water).value()] = + new QPixmap(":images/mini_icons/zonehvac_coolingpanel_radiantconvective_water.png"); m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_ZoneHVAC_Dehumidifier_DX).value()] = new QPixmap(":images/mini_icons/mini_dehumidifier_dx.png"); m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_ZoneHVAC_EnergyRecoveryVentilator).value()] = diff --git a/src/openstudio_lib/InspectorView.cpp b/src/openstudio_lib/InspectorView.cpp index 0a66cdb43..75cf9f941 100644 --- a/src/openstudio_lib/InspectorView.cpp +++ b/src/openstudio_lib/InspectorView.cpp @@ -80,9 +80,11 @@ #include #include #include +#include #include #include -#include +#include +#include #include #include #include @@ -116,6 +118,8 @@ #include #include #include +#include +#include #include #include #include @@ -461,6 +465,24 @@ void InspectorView::layoutModelObject(openstudio::model::OptionalModelObject& mo connect(static_cast(m_currentView), &ZoneHVACBaseboardRadiantConvectiveWaterInspectorView::removeFromLoopClicked, this, &InspectorView::removeFromLoopClicked); + } else if (boost::optional component = + modelObject->optionalCast()) { + if (m_currentView) { + delete m_currentView; + } + + m_currentView = new ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView(); + connect(this, &InspectorView::toggleUnitsClicked, m_currentView, &BaseInspectorView::toggleUnitsClicked); + + m_currentView->layoutModelObject(component.get(), readOnly, displayIP); + + m_vLayout->addWidget(m_currentView); + + connect(static_cast(m_currentView), + &ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView::addToLoopClicked, this, &InspectorView::addToLoopClicked); + + connect(static_cast(m_currentView), + &ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView::removeFromLoopClicked, this, &InspectorView::removeFromLoopClicked); } else if (boost::optional component = modelObject->optionalCast()) { if (m_currentView) { delete m_currentView; @@ -1598,6 +1620,60 @@ void ZoneHVACBaseboardRadiantConvectiveWaterInspectorView::layoutModelObject(mod } } +ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView::ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView(QWidget* parent) + : BaseInspectorView(parent) { + m_inspectorGadget = new InspectorGadget(); + connect(this, &ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView::toggleUnitsClicked, m_inspectorGadget, &InspectorGadget::toggleUnitsClicked); + connect(m_inspectorGadget, &InspectorGadget::workspaceObjectRemoved, this, &BaseInspectorView::workspaceObjectRemoved); + + m_coolingLoopChooserView = new LoopChooserView(); + + m_libraryTabWidget->addTab(m_inspectorGadget, ":images/properties_icon_on.png", ":images/properties_icon_off.png"); + + m_libraryTabWidget->addTab(m_coolingLoopChooserView, ":images/link_icon_on.png", ":images/link_icon_off.png"); + + m_libraryTabWidget->setCurrentIndex(0); + + connect(m_coolingLoopChooserView, &LoopChooserView::addToLoopClicked, this, + &ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView::addToLoopClicked); + + connect(m_coolingLoopChooserView, &LoopChooserView::removeFromLoopClicked, this, + &ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView::removeFromLoopClicked); +} + +void ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView::layoutModelObject(model::ModelObject& modelObject, bool readOnly, bool displayIP) { + m_modelObject = modelObject; + + bool force = false; + bool recursive = true; + bool locked = readOnly; + bool hideChildren = false; + if (displayIP) { + m_inspectorGadget->setUnitSystem(InspectorGadget::IP); + } else { + m_inspectorGadget->setUnitSystem(InspectorGadget::SI); + } + m_inspectorGadget->layoutModelObj(modelObject, force, recursive, locked, hideChildren); + + bool waterCoolingCoil = false; + + //check if the object is a zone baseboard + boost::optional baseboardConvtest = + modelObject.optionalCast(); + + if (baseboardConvtest) { + // if it is, check if has a heating coil (but optional needed) + boost::optional coilcoolingpanel = baseboardConvtest->coolingCoil(); + m_coolingLoopChooserView->layoutModelObject(coilcoolingpanel); + waterCoolingCoil = true; + } + + if (!waterCoolingCoil) { + // Hide the tab (by hiding the button) + m_libraryTabWidget->hideTab(m_coolingLoopChooserView, true); + } +} + ZoneHVACFourPipeFanCoilInspectorView::ZoneHVACFourPipeFanCoilInspectorView(QWidget* parent) : BaseInspectorView(parent) { m_inspectorGadget = new InspectorGadget(); connect(this, &ZoneHVACFourPipeFanCoilInspectorView::toggleUnitsClicked, m_inspectorGadget, &InspectorGadget::toggleUnitsClicked); diff --git a/src/openstudio_lib/InspectorView.hpp b/src/openstudio_lib/InspectorView.hpp index c521db3d5..0e28f14b8 100644 --- a/src/openstudio_lib/InspectorView.hpp +++ b/src/openstudio_lib/InspectorView.hpp @@ -658,6 +658,31 @@ class ZoneHVACBaseboardRadiantConvectiveWaterInspectorView : public BaseInspecto LoopChooserView* m_heatingLoopChooserView; }; +class ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView : public BaseInspectorView +{ + Q_OBJECT; + + public: + ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView(QWidget* parent = nullptr); + + virtual ~ZoneHVACCoolingPanelRadiantConvectiveWaterInspectorView() {} + + void layoutModelObject(model::ModelObject&, bool readOnly, bool displayIP) override; + + signals: + + void addToLoopClicked(model::Loop&, boost::optional&); + + void removeFromLoopClicked(model::Loop&, boost::optional&); + + private: + boost::optional m_modelObject; + + InspectorGadget* m_inspectorGadget; + + LoopChooserView* m_coolingLoopChooserView; +}; + class ZoneHVACUnitHeaterInspectorView : public BaseInspectorView { Q_OBJECT; diff --git a/src/openstudio_lib/MainRightColumnController.cpp b/src/openstudio_lib/MainRightColumnController.cpp index b6121e74e..0be9e83b2 100644 --- a/src/openstudio_lib/MainRightColumnController.cpp +++ b/src/openstudio_lib/MainRightColumnController.cpp @@ -908,6 +908,7 @@ void MainRightColumnController::configureForThermalZonesSubTab(int subTabID) { libraryWidget->setShowFilterLayout(true); libraryWidget->addModelObjectType(IddObjectType::OS_AirLoopHVAC_UnitarySystem, "Unitary System"); + libraryWidget->addModelObjectType(IddObjectType::OS_ZoneHVAC_CoolingPanel_RadiantConvective_Water, "Cooling Panel Radiant Convective Water"); libraryWidget->addModelObjectType(IddObjectType::OS_ZoneHVAC_Baseboard_Convective_Electric, "Baseboard Convective Electric"); libraryWidget->addModelObjectType(IddObjectType::OS_ZoneHVAC_Baseboard_Convective_Water, "Baseboard Convective Water"); libraryWidget->addModelObjectType(IddObjectType::OS_ZoneHVAC_Baseboard_RadiantConvective_Electric, "Baseboard Radiant Convective Electric"); diff --git a/src/openstudio_lib/images/coilcooling_water_panel_radiant.png b/src/openstudio_lib/images/coilcooling_water_panel_radiant.png new file mode 100644 index 0000000000000000000000000000000000000000..0733b1307491fbd10c06ed256dc3665639cd2844 GIT binary patch literal 8198 zcmV+hAo<^kP)@8palyC`v!rbY5^p*40Oy&W`qv2O$mpB}Y|9&?#J@)y10nrcxuq((i%3jY}O{QfejS`6-Mb}vnVwrX! z3_asT<_bs0QD}h(JR7?tQzE@*`+jU@U~%+P950YJ^hP2P{@l59>GwhiGLJU^dLVDw zaWo#HUn^H-S=LbIdETG{@aBu6sL?USVlj-N1|jGwj0nu;$jHdv< zLa#uKWPb!C^5)Wadq@nT;E>{Y;{bS2;)4<;14;kw>g)^Z#W-Kq=7yjRSj!+nG2G8> zZEYn_!%H|g2JYX#e?!;xap-|{5YjtEi>wh@o>Tv}_&ss$Mxzl~=}$+s;5r0qMYxw= zi#Yi^P+gYj!X*CB&IMbRy_mII0| zdNvdu+z&-rl%;ZBH#N0&9C~b2O$>%mru%XBFIus_ev|iu&$d8Rc1sQkHE03n_b0UI zfJDY=RcKa9Tg_(E1_GBjJD<=0$qCE3cM`Jve*fo`j2?tY7AFvyGaEpSieMPVhhz}h zwruZEB!h+o=YSTR6t-9 zl>2vH)Of9qV;N_!S8%V0!S$yl#xzzvno#8Q+#5D4=;pn%t+QlO9KM;wPV<}Q6{NBvZrBW$3 zo&ERHEC2HNhr}>gL}J}Sbxsl1#Ju0D>!GJ>vUE)+9bUv#8d`Ag>5?&*zCkQMzP4a~ zHZ@Al`pu8e*@d&$Wt1~7=FLBRkbdAT5S^BeZ)0>C5Z7Nm*!$$dxp`=VwY4=Yq#vC) zWMPZMQv`O!w&fe3d3~&*Rw)?>P1B@?NbHSiEv-ph)ObmvvSex|922^2yYs|iu}VO# z0Ie%(wOSZFh%wD7m9a3Th29`*@6qD280qHFMbyY?8qdu+0YIRPJljd!peCF#tx%S)zz31OAI{sOwCd~ix`a)`xA6eEQXtt8oE$VHRfV6bYRvKs!|-}O?x#vgQv(q~ z8VyOU-o7n{nqN7aHUrJUb7$ZLqA3bdK_7VmFnr*xTd--rwL^J21G?+e+ zUoApuBm1U48imrun+I|(3#Fw+Xhmdn0?MNoh#W6$fb#T*j`~RUDU`FT-b@L~mwtXA zm-nE&@bFFjrE5^esvG5nyO@A@8=@djf8_m!5(>ifHK>PTr289wGK&}Nuno>#gi`+~ zk>hJmKv{p)t)&CAv$J?PI(i7+T5yU$I4U@f1M46hkqtMi<-;2Y$6m`?9lF7)SK+k5 zH1=Q1QUKbuHyE`B6pS39B8E8Nt3`0TzmYh!MPZi^hA?6SXqRp+CYYF*=-xURA0NjD z5RTE7M>i*A1nMRHp$WX5Zq^@gH_K}Eu6hQVUOoO_cRj zd*Rd7*K3IWH@;y@Iq)UNh-`-w!1L>1Sr)Xy&{T4MH5dimIZrqoCZ5y@c=-iEKzp?( z1Q)=Ya#V1B32I{SK;ExIP1C>&OO)_-5mKy%j_b756R7n=`X(@_r?OX1ZZT^%$Zr!Q zo3m~DjXS41zZ`RPhr@|gExX^?2SutohpMWiIjIH0ph+P#Bql20Nn9XWbLNl}fDK3V zBwJCS6L8N+Mo0Xgbt?~Ut4Q1rvsJVI%VM1moGG<_s2@J>VOywq~V2B~)Cga4hW5@CpJCYB{l4V`iElb+( zdv=R1MR=I0aaEU|yT8}nzwhh*uI_i^#*Gc&XK(&%%aO0HzW!f#!>w3OeEHQ&x$QS^ z-u&^aH%GYkS9-=;@&8wSn!#=OXeF41WIJ_h!XqAOxkp@SWHjT;Ms-L?@>j&zBVylw-!{;J-BdQs@WN? z4?!%f>a+GYT<_>uO6Wk*3B=>WTI^%Y;WVB3_~ZNUj@~V!=h1Jqn)CseWPToY-H>;- zfwbW-jcYa-G%jY;(JRohLZNZW;gkjZ0c~li$(D0DuF!6?m)z>=N^N@J0Vmd32ZvV2 z8CGkMN@mTBbXKiWp?ji$cbSQ?vEs?eNqIbz(d+pIQ5Kvr16vTajgB^q4Bt^VH#c*K zNXC*9m7jqVEohG=BEp+pohxKAX;31T%#GQ{*!%9k&rui+88UXKsbckduPPJP;5-SC z0jpIbS15QoAy4TEObe6YfKX~E)dP);(7?QSs$rYX<(XchuYcIX_u4C#8ZQFJ;v0lR)QRSpCAfNLtpHipl*xuXx($mWjopG_)tlJP_A|rKQnKVM>|Q zs0vtK>5@!3T@?w1nQK?B7KtU|B*E3t*x*=1AaoGtV}YTwdA5D}p@$!u`1;D#Vz?$M zhx<~&7>|`HbtO@a$r4=>bcSg9^&2<1fR+ghSQRUgq_{ydnG~!lB~6#kKv1YI;@V>Y zKcD6E(?sB)HUz!5dNgdYK3%)%p=q8#kYW5`I%QLc{jF(f;g}W;2H<@`I#2o}6@k7~ z24id?4&dd(HDenUF-;|0y4~?1!z!UL@4U=>TJ~Q8@Cm}#8Ut8z3+|D<3$1izJJQW z`tIJ5tX#D!+vc6|vNoGdSqQEy3WL<+I8KLCeE!^5CP+*c3R&TtqE04{_wO{2P#V0)YLRh<8n++Di;+<=Z#J!nY>_Ol}${H%iJ!v zOs!Ez=oN(pjI|8Us>z+EU@(}vbn&7o5{~d;dvi>|2?Mt{M&d0Ek7q{E*x2aNXf^Td zwsl~gSa z8ER@nJb{oK&)R2Ie*W2?%D!y>!i>1Uj-(0&d=A&N+bzw93s!ds?u0GGGeXQl3sLX{ zm%(80AXW~WT%CcWC^s*s!y%<{sWXW{%s0bFTmvJvqE)L``Eqf=?z`6~e(I^G9{jT|RjK{nO9CxZCr>-hETAy!-p>U$nQsl}qy?jD!6=yXz(Q zsV~pB(#T?~h3PNn6`Tdw=(b9;A70`wq`94;(m^i)*02|9=l2 z`Q5cG&%fZq@eUq5crh2#nXfxP-uKb5ZtQ2*u3h#+zxmA{k!LhbZ%@yGUHe|`M_gN9 z*zP-V{P^iyOyDs5ET2G>C=@7VD3Eu4{q}oEymjkV|06$tC$o9)FHl$+6wr~whkuK} zu>F~5o{3^RmZyKZW$w`7!&ycm4fgZauUh}`lmC1!v;OU48T{R{WlQ|V_3Qg-aKAcu zunqf18eAB#2!^p98AZl=tF`rWe4or^&z?Q~x!{f;JNA2gzr3v{^P?AD%-}*IZ72}L zb?Vfqqhvma4Kd<4G%hSVcI@LIi?^ZT4L-qGz)LcT^ zbj7+5{-#r@*f;a}R|ae#r)~%?R80$+X&vH1x*?#q+wB$_msltW^san_>0J9b(+>Or zTv9adG%m0ioEJ#?vDT~=q0J?@zEd1hVl0VjwVJ5Y=~UuGNUEG`D>3*89ek)W;x2E9 z5x`o{coJ;J1l?CG8Wn(kWoH($pEBqNj9q}Vqh3d2Ef$I0GdgqjJ*7h7LO|f7v*vVQBvNRYln0>-{n9dUolIQB`8b9KKbBF-G&k30oVlvf^c7xE# zmdMcg;OgbU`KjXkEf$NN#s!ujVEerk!@qFVedEn3E?@ zwotfm(Fhh32o4-sR$J?XkiN!V**p)%dWG4vY11(#!^B~L^or&t7p?}E(jdZi7!aA* z1wQpOaYK;~S0xz8IAJ6n5Iz3bV@CLjk`+>Yu8gYR^_E!d{T-1?(3wH&L3+r3f zthuO}o@clh1QLzKL^Q6ds%qzoq%SM*QLROhiwiuqiOo+u@nJ((`@F_6RWKvTf~7RB zkvn%5^|ElQ3Xu3(B(nk~&#gRr_c)I!@PZ%BKK@VtcvmP8rjH#x+DulydU~9J0B-=n z5O)qe7xcHqQb}QaA!V{8Nu{?c=BxmIuMPY)YUaCBXDn{?owXXC#joi4PPKybw*QC)Q#8@SHPM|v4~ zI_Wf;Od*^EfQU=lxq7vQ&_H%z@g0JN zR#z5VPtt5E9X6C0qBPB9B(5hr$Py276Nk=a_=`K`(Z?Sf12vI~ClaD>xZ`Fq62`4h zMXJRRE111xx527>`1=p{(Sg|Qo?f-z=NC$Y9{MJJ2v%!+A)OILV~fv~!Jt-Fhhk=T)eIAfu4b$53cAztUCBeQI% zBTVQnvbyC27sNuczbFt|U9I+y4X;|g`ks}2hgB7m=f-r1Gk7>rjCwKpMZJuxu2*T! z(wTe?H%7uVXx!R0OKa{?J7^n*1_zb6S~1eEUAD}I=k(-z!L~DPE8#o8>;kB(ujl&E z7o<5R;;zKqiE0gZ2@wWH^;*YBcDDpmY2~*G#3*5>h)SAP=tXBgKU+m`W$i_DCTr~b z#2O2Y3rksfc@U1nLyyV}u8_V4s@I5OiG&t#p<4DYDiCXbzn)fCP37i35?xZ;Q8Xgg zb2P?@QE(}XIVRwW#S}&`ILl%LJ%8XeS4bUx@!&9qM*u-unqyQxVL(b>Obf4Z#qt^Q zoM5F)skzjDtE)RJY*ah>`dYhgoeQJ_8kN7biPs;q7D1x(}?xFBo@p%m3{1FUMzaG-ehRNKa4Ca-y!v$NOSyTUrJQ zlPG`Rj9v^k>B&K+s-kinpK-;aF-AT7qA84 zpfDh<5T;imd8W=S^7`>)0nqOen-BpP6YNt^DwV`@aZ_m)Guk9%I9#J0rwzNds3=Wv zLFCG%m|*o!=Gqa03;V#`i#Xsn*5b5|5&&1#6-&`pqxZL{K*m+ZwM1R53ps{Jy+9~P z6C(v)iQZFW;_40InE>pd2&#j=-rGe8n!<=N19hu|m-M)&vjPDR#J`~9RX8S5IjE;~ zy5a~jhm4u$z>6CPbulrrNUItj%(};(6r;pCvY5c5iAtoBIgDw*Ri{4_-~glX#~m~{ zFsR1ej*QGT?BCq#Z15tp8yXrWa_tDg1s}2&A3u7m8dW&*XH89IXN|REJ|?N%fTy#| z|DTqtjcK!r!d*8uwbjwWa2p+z4{;Na%KV5Xiy+RAn9Mq}A0`Vd(YffKfg!|2@dMp} zDKOlK(Ip~3_~jByjK-MEvMre)aezf&8>0nE=U`h~8BC`G@1s1;%j>qzIEp?~h5jYJ$#Yu`y zA$Gq51gP%xM!4gyPW@>xo1m5ClYOc5qIf@`#F)%x!xE!0Ow6oMdhyIp05PF(*rIAb z2pN!-65;&9%X5ESJuQ61CTRaf>)N=G|HnD8HJDIhtV?E3h_T2=AmOv;#*KF!NfM^f zqs5my)_1h?x9|&s56<0^bE+*(Y{s=s*3kNgoj6WF$?^|$XbptO{^fH2vBrNIiI`!X zyS_=>6q>IDr)9XIb=m18NWJX$7;bVgnM@a~lcUNBG3nee^eP-XazyEBjMZxOU@TAq zw!4vncu41mX^!4Ca1u~)M)sg#^15*W)~GaB{*-&{jILHKo$Vw@bs;(@zzI1&G%e1H zygFB0lDH|n{n`w0H?uIKH$nd}wfwd;EetdqE0)e$B-zqre9&|_b{Up@spErQo{x=L zlXD5s!fx>PM3lYHo>wH4+(dv;%Us!fo{(5Z^#}&kb;x2%;VN1k7;*t4tHNYWMH-r! z3QKXuWfowBX@I~U8BUeW?9;-C&wsyS{?^D9v&9qx7up=tlOu6rq=#6@uZ6J<_kP3U zkuw?hr-{fhAmdwkY5XH7J<2clZASRN)u1kq)i-9D~o<9f38<8I3P{2T9msV4`^u9x01AunJA_^xtR;lT`C&bUi6o$~>S1DJV= zX`}NxS-9O%yt~|uL8O@!wW0lq7k6NZL$gwcd!uo>HvH@k0nq0t!X!77kNxc3_*4Oa z;7iaSJQu@Hta{Op2H`8f=Y;I&ANWKY?h{4D@l-@%s%g$O&DQ$9}i!TUC?P0G1b|FsO;_Ppy}(ftRV5*%Wr(n->x(m}^koNv{5$%|L)*ujZc zv_oDvY}!%1g0>M*DEZ)^5tQI`fqZBq8XpvbT;zj%YPngTdA~8J=ksVu;P}bO00<6W z&C511_EI7ao<@c6k_b${gAhcIRA`@n0L5@EIw+F}+_sWDsL*^i~?{GXAO9fE@wS`1FS;(t8H`!^byflu@c ztBk^dlapI|gM0;$o7xLbO!#8@NSVdyw{yod0Kz~NK*0eLkbndvpaM~- zsRSfc0uo4*hL(xp!uDR$bi3pa?cH>r+kon`T!tpcC#n{{`*YI}P{V9pgG_;%Pwsk3 suPT|(HfV%1mpi}e{tW;C0002E0gMAf2WJpD)&Kwi07*qoM6N<$g5vk_`~Uy| literal 0 HcmV?d00001 diff --git a/src/openstudio_lib/images/mini_icons/coilcooling_water_panel_radiant.png b/src/openstudio_lib/images/mini_icons/coilcooling_water_panel_radiant.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8e27be263ae375c714e5b04516963d69c65882 GIT binary patch literal 1596 zcmV-C2E+M@P)g`JP*4UC zkz&EeRZ?rPQn0qDwD=&jR4q`bI4B~HIK#+e=FFTk=bSm;owP~+_E*zCu4HBHZ~a;O zOLq3g5JK=*0{8Im4R{fNwY9bVUSJq73`UeJwrlzJCnx+9E1f)Wt_#;geMF+>0t z$uvw+6nFr{f&~j;Y-|jSMk9oVhWade<>l9Utu}er6c=OW-AcLWVt=rUQ9s#*NIwvs zTUcIs!YVEGN4!-f^0wm>VxmnDNwvt$+@0nk=V-mL-u}L!zP>)NTCIRZMn?Yj6|>na zQ>s)a{WacUP8kgv9PuJf5tE`sYeZRQH9wXI(O3}q}f=DR|aIrW=ks>egfktzcCP)$LPR zkv^}})7A;2M9$3*pw89bw`L~B%{Kj0r*6kTTK)FZ+re=`(?JpVm`X>F`i6iLC!v2< zoGhHCCc6D&G$LSPH{qjWH2%Uf-7Mm%%8yXaj<)wjEKtR&@KEhj8I=fbpdFJ~Yva|EiD zc0mvc74P7XOoq^t5yD3n(M2Yit{vdUZ7vyBe#8NcH`8~m@*7M(EBJ! zt5l$w8}0SiA3o9gSstJH_1VNIW`1(-wsE+NVcD5yLxZhWJ7cw2ECW+xqXQPZ!$L4K zUwL*8*M9YCx7+FX`G?^Vv+vUfS3Au1K=0cf6~1oP+~ig#!prq7*E1WN^}C8oA^KGN zqvrj)Anp9sytK;WY5y(U3vp+z-8;3b01__TY|5;tOU)`iymIm7zR#-;l|y*To$;eP z3Se`^(WOf+c2$*^me8T+yX`fFAH(+Y>Ulx``)&k}eE#^__kNK%$L6mboNMf?N3(Hpbomt3BgP^Y=u*)n?L8iYK)*Iu&l-#>Qf zVhwa}SI1;mhco6;U*qohw4v7M_|hnc^(XL*7P+MQROu4K$)dchjj$n84|y4>u*`6x z;I)&NDzkGpliBa;VOz!;SaGm!$Kp?$59ViPKz{lf*t8{I8Q<{brwN9};`jAwkheA! uan`oCZsRgckcC8onL4LPG`}AtMiK-E(+!o(kZnjzaM7rVAq$WZ z%(!-LAz~25Mr250IrUy~9#2bvKg}@4e|VB7@Atkr z&-c9FCEp>UbQmGU(GczYW z9?ytOCPU%^5&ixB0FX=;78X!ZQDIiA)n$)kAeYNwFc>cA_4=JkrSiT(TU%Rl5DJA* zRaNz#$gW^8h{pj%QAu`pcdwY9o;E8K3Qz+B14(zE&qq#9PPX^-^g!%BSz98Kjb>(M zVrpvYl*wfJze=S7q0wl-^E}GS%MWK{WE@~w79{!b>>u02Y&NfD7-oVJyG<0btE;OI zB$gD3MDR}`9(Kaylvb;KnGz2aYu2p!CgJRGI38?GGA`{Id88poGI1NL%a$+SgyG>~ zsl{rIijxcCvIL98l8oXW3RbICu-R-6Y7cX(NZWlr(ug#fO@cUAQb*IYFgiMVob8s}aPe~n8%8a5oVWTQ4YBAjIAC&n(J^U*EWU^<4nO{| zyP);)7&P0V_w)G9NMk{4s?*Mbc6)Hr=!Jx3aCF>;p->!!sgyvzR9X<%rsWG^RS^ub z92it(KrD)1b5+gKQ=$U8110MNdGY3Ol;$I;4S6YWWvEa|Ey65GM^PGuLL!FjR0=Ulg2I$#AO%2; z2;vecvN#5E357fz0lirx|1! z??iPrr*O~DV0v;q%CoFs9KRj&1cGolU5kOayD_WVBk;5XOpuKa-TEz(77pS1oG+%f zOkl`6kMQrm1af0Mx>!;{#@9XHrkXR>_Hx9F49gmGjbo}iQsrru4R)9(rzAE$W^#JG zYJVi!eb?h|4j5lUm()7w+}{XpOHOM?>|k7)L^Yj%DfyTGDVRzFM>wM+d*)N*K+K06@*!%u&Ja?wIbwk%>O?}h8(kDOtzr|mx WcwqksyitGv0000YVe@%>pTvO83EFkp6&FD)n(PnK0GQ5b^9VTdmfVo`CIk z``IvzkwioMxG&KXWepMcWTjG(4+JfdZ-_`yInn(%Y6$3o|7elusjt6&v!1a2i%jHrW3v2WgOh2DCzok6lXNnZ zcJk84_N6a<>M!b3+ov|u&ZJJ#+F?p;_AH?t4I>h#V1 zX3hvWd#}B|wbov1?Q=w-P>@U}Bk5F1mX?-eEs@aQd42!v8UBv@I*wzXK6xVXc-$O| zxjL3tGMTi^Sy^5-<>KN!j#HV*wKa~z9CMy2&zwhD=JitY+RW!0zYl44IHbktl*-Anb5D&YTA&3&ny2gF&0TVxfpH3y>VgtK57pub)n*Q}qPeJK6;x zaR7#U*?5)9+l?KP&E};2WV=B)03|Awig=9_@S+F=xy;th(`)?TQk2yWKXj z$+aXSmG}510qL|-OfH*abOA6X^r8dQ;DOG7n1Ca5xtz-FALxJScm)E1#$R&y{cnGF zFB}TJk9=IRJU%lsqofD=2juOyZ<-1y(YyEVsrRp4y(+`Q!)Fp&jmPED+#K?|HSU^( zLP1rAu{*6%I-D?!Iu*R2&yuws$V2a;p`kjx*Q|p3U}938cPSQ=H!N zO@rmb4?f@yH2)1wZr#4!)Tr%6G(a#OqsU!HKpwdQGCeyZ*<4PeglXXqUwk2xzCM`^ zT#(7BY1vrcutje=m6rHwT>kjCZ{^PU>#~?$m%HEI!y^NmQ~y3bE`N;-%j09WOioXm zwL#_3Y5!VF%Rild7(wT7N6;B5%MoA3GxD1oKash7S;of3BpQuMUwi@SKdJhR zdwMOsrvxA`VtRJg;uevwgRf#O$hPrXv~>7#{DJ&w;HFG(AClJ@PMv^#zz_B^dHwI_ zkhmuxUw`^b>-yD6QL2KF7TD$G6+|8G>y-(F)L{h1>>un)wN{m->$l{=d!NhLN56nk zU`Xb6HSV+64ZT0{-p@#!M$&u@)M_=kZ{7d%=f9TuH-DtNxBlDaPgO=d_L@9-WmML! z0!`3q)vBq_&nbtzpdXzJUOMiHH9nP2+js%0cw)(84#6i$?^MqLaZg$ zq|MtVCN2&Ra_7K!G^7^MieKeR&Eu86NJQ_O7#g}Pu4<)D7HbT6`TTyJ4^-VQq(?Jd zG0OGt{!&o@=pPA(ZM+-~r*v&31St92#dGnh$qTg$YiZ5s&OR65>Ge^Wn3%NjIy^l5 zZw~RQ@~f+>@_p=00WLrOhy3`HPo$-}S(QKEdtRdE zuG+53Auztz>Qo}WRsnK7eRy$$ZUuyN9U9AtPXm~TVhP6qG-78iDL^K21$iI3Kpy0P zmj=Y^yICO+M2K#a7x2!_o6?m{2(W26q*|+)ymb9hS5=6m_OQuIogayW<)@#0Ca*sH zMu1e`MVZT&$cr_ku|sOLeH}cW-%-y4?{BSui1yJu2Q17lF!H4{yC#<|#mu%63Ta1l ztdZC%Kwzi9qQy#_aUzlkRFZ>kC5_c1YM7qZfY}m;md5u z?{qE=$sJ2x>fFJu0C$nZdj>JaKJ5Qt#22=!kWYCg=p2(5ngF)W=1!WcIc&UuuFg&gCYJ<&EzsSWyqHq2_lG6A z@<;$=ow>O=j^R0^aZxwZRV=Z9dQsQTrOVtwB3F)gXiOf!(Aj{bJhZ1+OHJoYUi=?R z4Mx_H#qFBO3kO!^du;8{H{!D#Cx6*LM_#m9Lx z(b3-6A<1;wmabll_S+1`$o;OhM}SCjmBzq0kVbj|aT>vlP8PO; z_WU#=h}K0lYY2fnjYk|X4%f5;#y#N4nMGE|_T*DSX&8BEX<-5Jsd&jxG?=uC`9 zZifM3$hyK#z{xN+oOZg7kQeI5%JK?QxXKb4EcrbBG zo0{ypsZE=hOq&?f*4i@5GzHq`7x$#vVSIN$f~ogyN#{NINy|WnYj1fSzQzlTxJ)(`R+aEp1(UYid4G0 zyS3(zzBZIu!`Si3lo1Mr4D(~If^qmnA28NMR?g)p&2J!73i5mU={aoC0;X%e1 z3@%SO z!nBJb#Gh)^6v)ohwDq`~C+Dha*@4jOD&u146ly;dx?CQ?6QNu+c`=umjeZ+Ydv5JVw)>*|daA`Bvy zinXZQBV(hmOR?bFb#ab8ZAfnPNY{5@X@(JuZ*5r@Q8)0?Rb6sAYo@CX6HqXw$}3|O zMKvpl2r#0d>w1K>%K2POf+c}>1xmr09vs+kb?rK)!lM+)bxNj3^=c|cSm@8gY)Qe8n|{5uDx&A5r_M!U|YNbc{p@(f)&@-j(sfC1NI>7z5OG) zQ$tjFCJQ}!9BiW#=cC6567~oInVQ+EvUIg6pB)w1B;DAGE9J~Fr9{Cd69A9SWm5k8 zHOxmXcS)bS{!v!W68$AljaveRJyL|dvf0DM4h{~+>e91GYJXR@H~D3pJI|kG5w+N` zN5vl4Q=Y#H8ANb5UqF;7)xycdDRBb6QN?R>6UyNaH zMDb@&1+*X3J14+n(;M7AllKkEHuVeN;u2d&_Ux-~MmJ1crJ{s_$OaWjTR{yfMT+nB z6A9wQ6(@FZ;);2Q7X_R0s7x?78VWlf3N)G$JY66@%;CfbhafKEgMK`{F&=yCT^$B> z;M7p~iIW;26nq{p=7jBqL}Wb9fbxP4Ouj%UBI3n-n3p=XVx;THixXr>&VceoI}P-K zUc@07uPP+MZlSfsE@F_!JP~{wq38RDosHZBp?A5h(b*zAfXbFKrU(0GBFgk_mZaDC4Xq|rhDB6RG#HBRJnhms^ObIHw_(1 zn5}7$siS6_J5Kbf$Q;w;^-<=y^P}$H000000Dv1*@41KMmA>)-0000 + + + + + + + diff --git a/src/openstudio_lib/openstudio.qrc b/src/openstudio_lib/openstudio.qrc index 96485c54e..be2bf2ec9 100644 --- a/src/openstudio_lib/openstudio.qrc +++ b/src/openstudio_lib/openstudio.qrc @@ -37,6 +37,7 @@ images/coilheatinglowtemprad_constflow.png images/coilheatinglowtemprad_varflow.png images/coilheatingwater_baseboard.png + images/coilcooling_water_panel_radiant.png images/Coil_Heating_Water_Baseboard_Radiant.png images/coilsystem_cooling_dx.png images/cool_coil_dx_vari_speed.png @@ -331,6 +332,7 @@ images/zone_icon_off.png images/zone_icon_pressed.png images/zonehvac_low_temperature_radiant_electric.png + images/zonehvac_coolingpanel_radiantconvective_water.png images/zoom-in-over.png images/zoom-in-press.png images/zoom-in.png @@ -366,6 +368,7 @@ images/mini_icons/coilheatinglowtemprad_varflow.png images/mini_icons/coilheatingwater_baseboard_mini.png images/mini_icons/Coil_Heating_Water_Baseboard_Radiant.png + images/mini_icons/coilcooling_water_panel_radiant.png images/mini_icons/mini_ht_coil_dx_vari.png images/mini_icons/construct_inter_source.png images/mini_icons/construction.png @@ -559,6 +562,7 @@ images/mini_icons/window_material_gasmixture.png images/mini_icons/window_material_glazing.png images/mini_icons/zonehvac_low_temperature_radiant_electric.png + images/mini_icons/zonehvac_coolingpanel_radiantconvective_water.png images/mini_icons/heatpump_watertowater_equationfit_cooling.png images/mini_icons/heatpump_watertowater_equationfit_heating.png diff --git a/src/openstudio_lib/test/IconLibrary_GTest.cpp b/src/openstudio_lib/test/IconLibrary_GTest.cpp index 2531281c2..ca2fcb65c 100644 --- a/src/openstudio_lib/test/IconLibrary_GTest.cpp +++ b/src/openstudio_lib/test/IconLibrary_GTest.cpp @@ -54,6 +54,7 @@ TEST_F(OpenStudioLibFixture, IconLibrary_Icon) { iddObjectTypes.push_back(IddObjectType::OS_Coil_Heating_Electric); iddObjectTypes.push_back(IddObjectType::OS_Coil_Heating_Gas); iddObjectTypes.push_back(IddObjectType::OS_Coil_Heating_Water); + iddObjectTypes.push_back(IddObjectType::OS_Coil_Cooling_Water_Panel_Radiant); //iddObjectTypes.push_back(IddObjectType::OS_Construction); //iddObjectTypes.push_back(IddObjectType::OS_Construction_AirBoundary); //iddObjectTypes.push_back(IddObjectType::OS_Construction_CfactorUndergroundWall); @@ -120,6 +121,7 @@ TEST_F(OpenStudioLibFixture, IconLibrary_Icon) { //iddObjectTypes.push_back(IddObjectType::OS_WindowMaterial_Screen); //iddObjectTypes.push_back(IddObjectType::OS_WindowMaterial_Shade); //iddObjectTypes.push_back(IddObjectType::OS_WindowMaterial_SimpleGlazingSystem); + iddObjectTypes.push_back(IddObjectType::OS_ZoneHVAC_CoolingPanel_RadiantConvective_Water); iddObjectTypes.push_back(IddObjectType::OS_ZoneHVAC_PackagedTerminalAirConditioner); iddObjectTypes.push_back(IddObjectType::OS_ZoneHVAC_PackagedTerminalHeatPump); @@ -144,6 +146,7 @@ TEST_F(OpenStudioLibFixture, IconLibrary_MiniIcon) { iddObjectTypes.push_back(IddObjectType::OS_Coil_Heating_Electric); iddObjectTypes.push_back(IddObjectType::OS_Coil_Heating_Gas); iddObjectTypes.push_back(IddObjectType::OS_Coil_Heating_Water); + iddObjectTypes.push_back(IddObjectType::OS_Coil_Cooling_Water_Panel_Radiant); iddObjectTypes.push_back(IddObjectType::OS_Construction); iddObjectTypes.push_back(IddObjectType::OS_Construction_AirBoundary); iddObjectTypes.push_back(IddObjectType::OS_Construction_CfactorUndergroundWall); @@ -211,6 +214,7 @@ TEST_F(OpenStudioLibFixture, IconLibrary_MiniIcon) { iddObjectTypes.push_back(IddObjectType::OS_WindowMaterial_Screen); iddObjectTypes.push_back(IddObjectType::OS_WindowMaterial_Shade); iddObjectTypes.push_back(IddObjectType::OS_WindowMaterial_SimpleGlazingSystem); + iddObjectTypes.push_back(IddObjectType::OS_ZoneHVAC_CoolingPanel_RadiantConvective_Water); iddObjectTypes.push_back(IddObjectType::OS_ZoneHVAC_PackagedTerminalAirConditioner); iddObjectTypes.push_back(IddObjectType::OS_ZoneHVAC_PackagedTerminalHeatPump);