Ability to denote general Room/Space types or have Manage Room Properties pick up the room/space tag info

This is more of a suggestion but something that may benefit myself and other who use IES, even others who use a software to calculate loads.

One thing that has made my life easier is creating a room or space tag that has a comment label that I use to specify the type of room (not to be confused with the room name). I would do this when using IES’ ConstructDXF function which would read the space tags and assign the entire tag as the room name.

What was beneficial about this was the ability to easily sort the rooms in IES to apply a template and not have to hunt down each room in the list of hundreds of room to apply a template.

I attached an image to show what I mean.

more on my post

Hi @rafaelhok,

This is possible. We already allow you to include any of the room/space parameters in the export process. We can pick them up during the translation to the GEM file and use them as the room name.

Before I create a workflow for that, it looks like you have already come up with a workflow in Revit to do the same. Am I right that you prefer this to be happening outside the Revit environment and as part of the translation routine?

From what I see, you want to use comments to assign the program type, and you want to add the level in front of the room name.


First let me start by saying thanks you for replying.
Second, so far this was my first day learning the plug-in so forgive me if I suggest something that has already been implemented. I may have not gotten that far in the tutorials to discover. I did notice the User Data option and I am still playing around with that.

Correct, I did create a workflow in Revit where I use the “comment” label to assign the program type. This comes in handy because the user can create space schedule with the “comment” parameter or use the properties window, select all the rooms that are certain program type and have that show up in the tag.

This has been the workflow I have been using with the ConstructDXF feature for IES.

This would be a more ideal approach

Comments label (for program type) - Room Name - Room Number - Level

Hi @rafaelhok,

After thinking about this more, and seeing a couple of other cases where users wished to change the naming convention I think this should be implemented as a core feature of the Revit plugin. Otherwise, we will end up writing so many apps just to rename the rooms.

I’ll document this internally for @ksobon and get back to you. I consider this task a medium priority since you already have a workaround solution. Let me know otherwise.

Hello, it’s been a while since I have posted. I’m continuing on this thread since I am still working with spaces rather than room in Revit. I did find some a nice graphic I wanted to share as to why myself and other would used Revit spaces for the MEP disciplines. Space parameters are great from a MEP perspective.

The last post mentioned that others were also wishing on the ability to change names.
Has there been an update on this?

I do see that Rooms and Spaces can get a program type assigned but it doesn’t export with the gem file, unless I am doing something wrong.

I do have this selected


Hi @rafaelhok,

I wasn’t sure if you’re still looking for this feature. As I mentioned above, you can use the spaces instead of rooms. There is no limitation there.

The export to GEM uses the room display name during the export and ignores the user data. Let me put an app together that gives you the flexibility to rename the rooms in your model as you wish.

Can you remind me if you also use the Rhino plugin? Or do you need a solution that directly works from inside Revit?

Hi @mostapha,

Thank you for replying back.
Unfortunately, I don’t use Rhino, at least not yet. For the type of workflow for load/analytical modeling, it directly from Revit.

It would be a solution for Revit where it would pick up more parameters for the Space like space type, comments, levels, etc.

Sample snippet of the space with space type selected and shown in the space tag

Hi @rafaelhok,

This feature request escalated quickly, and it got me thinking more about it. :smiley: Writing an app that I mentioned won’t fully solve your problem. However, I think there is a way to get you what you want using the IES VE Python SDK in combination with the app.

I imagine this should be possible. @ksobon can confirm if we can make the user_data more flexible to include this information. I agree that it makes sense to add a dropdown for spaces to give you access to the Space Type but getting all the other detailed values as user data might be redundant.

The first challenge is that in the process of exporting the model to GEM the only data that is transferred is the display name of the room/space. As I mentioned we can include these user data in the display name but if you want to include every single value we will end up with very long names.

I think the better way is to:

  1. Add the Space Type to the display name. I have the app almost ready, but I need help from @ksobon to expose the space properties in the user data.
  2. Export the spaces with new names to GEM file.
  3. Open the GEM file in IES VE, and use the IES VE Python API to map all the other values based on the Space Type in the room name.

I don’t have a license to test their scripting options, but I found two examples that should be helpful to achieve what you are looking for.

I found an example under C:\Program Files\IES\VE 2023\apps\Scripts\api_examples\veroomdata.

This sample sets room data

import iesve    # the VE api
project = iesve.VEProject.get_current_project()
real_building = project.models[0]

# get all the bodies in the building
bodies = real_building.get_bodies(False)
for body in bodies:
    # skip any bodies that aren't thermal rooms
    if body.type != iesve.VEBody_type.room:

    # the Real building stores generic data
    # so ask for generic room data
    room_data = body.get_room_data(iesve.attribute_type.real_attributes)
    # Prepare the data to set
    # If setting templates to True, do not set the corresponding values
    # General
    general_data = { 'circ_perc': 0,
                     'circ_perc_from_template': False,
                     'included_in_building_floor_area': True,
                     'included_in_building_floor_area_from_template': False,
                     'lettable_perc': 100,
                     'lettable_perc_from_template': False,
                     'name': 'PYROOM'}
    # Room conditions
    room_conditions_data = { 'cooling_profile': 'ON',
                             'cooling_profile_from_template': False,
                             'cooling_setpoint': 0.0,
                             'cooling_setpoint_type': iesve.setpoint_type.variable,
                             'cooling_setpoint_from_template': False,
                             'cooling_setpoint_profile': '0',
                             'dhw': 10.0,
                             'dhw_from_template': False,
                             'dhw_linked_to_occupancy': False,
                             'dhw_linked_to_occupancy_from_template': False,
                             'dhw_profile': 'ON',
                             'dhw_profile_from_template': False,
                             'furniture_mass_factor': 1.0,
                             'furniture_mass_factor_from_template': False,
                             'heating_profile': 'ON',
                             'heating_profile_from_template': False,
                             'heating_setpoint': 0.0,
                             'heating_setpoint_type': iesve.setpoint_type.variable,
                             'heating_setpoint_from_template': False,
                             'heating_setpoint_profile': '0',
                             'plant_profile': 'ON',
                             'plant_profile_from_template': False,
                             'plant_profile_type': 0,
                             'sat_perc_lower': 0.0,
                             'sat_perc_lower_from_template': False,
                             'sat_perc_upper': 100.0,
                             'sat_perc_upper_from_template': False,
                             'solar_reflected_fraction': 0.05,
                             'solar_reflected_fraction_from_template': False}
    # System Data
    system_data = { 'HVAC_system': 'SYST0000',
                    'HVAC_system_from_template': False,
                    'HVAC_methodology': iesve.hvac_methodology.apache_system,
                    'HVAC_methodology_from_template': False,
                    'aux_vent_system': 'SYST0000',
                    'aux_vent_system_from_template': False,
                    'aux_vent_system_same': True,
                    'conditioned': iesve.conditioned_flag.yes,
                    'cooling_capacity_unit': -1,
                    'cooling_capacity_unlimited': False,
                    'cooling_capacity_unlimited_from_template': False,
                    'cooling_capacity_value': 0.0,
                    'cooling_plant_radiant_fraction': 0.0,
                    'cooling_plant_radiant_fraction_from_template': False,
                    'cooling_unit_size': 0.0,
                    'dhw_system': 'SYST0000',
                    'dhw_system_from_template': False,
                    'dhw_system_same': True,
                    'extract_fan_is_remote': False,
                    'extract_flow_rate': 0.8,
                    'extract_flow_rate_unit': 2,
                    'has_mech_exhaust': False,
                    'heating_capacity_unit': -1,
                    'heating_capacity_unlimited': False,
                    'heating_capacity_unlimited_from_template': False,
                    'heating_capacity_value': 0.0,
                    'heating_plant_radiant_fraction': 0.2,
                    'heating_plant_radiant_fraction_from_template': False,
                    'heating_unit_size': 0.0,
                    'system_air_free_cooling': 0.0,
                    'system_air_free_cooling_from_template': False,
                    'system_air_minimum_flowrate': 0.8,
                    'system_air_minimum_flowrate_from_template': False,
                    'system_air_variation_profile': 'OFF',
                    'system_air_variation_profile_from_template': False,
                    'cooling_design_supply_air_temperature': 12.78,
                    'cooling_design_supply_air_temperature_from_template': False,
                    'heating_design_supply_air_temperature': 32.22,
                    'heating_design_supply_air_temperature_from_template': False}
    room_data.set(general_data, room_conditions_data, system_data)

print("Room data set!")

And another example that uses the assign_thermal_template_to_rooms method which I feel is the one that you are looking for. It is under C:\Program Files\IES\VE 2023\apps\Scripts\api_examples\vethermaltemplate\assign_templates.py

This sample resets the selected rooms in the real model back to the "Default"
thermal template.

If no rooms are selected, it resets ALL rooms!

CAUTION: this script will modify your model !


import iesve   # the VE api

# the list of models is accessed through the project API
project = iesve.VEProject.get_current_project()

# get the real building
real_building = project.models[0]

# build the list of room IDs to assign template to
room_id_list = []

# first we get only the selected rooms - if no rooms were selected
# (empty list returned), then we get all rooms
selected_rooms = real_building.get_bodies(True)
if len(selected_rooms) == 0:
    print("No rooms were selected - resetting all rooms back to default template")
    selected_rooms = real_building.get_bodies(False)

# now build a list of room IDs
for body in selected_rooms:
    if body.type == iesve.VEBody_type.room:

print("Assigning default template to {} room(s)".format(len(room_id_list)))

# find the default thermal template
# we start with getting the full list of thermal templates
templates = project.thermal_templates(False)

# the templates are returned as a dictionary
# for this sample we don't need the key (the template handle)
# so iterate over the dictionary values only
# and we look for a template with the name "default" - this should
# always exist in every project!
templates_iter = templates.values()
for template in templates_iter:
    if template.name == "default":
        real_building.assign_thermal_template_to_rooms(template, room_id_list)
        # no need to process further templates, so break out of the for loop

# end of sample

How does this sound to you? Do you have access to VE’s Python SDK?

We have discussed this topic privately, and the conclusion is that we should be using the IES VE Python API to achieve mapping of the space types to VE’s thermal templates. The proof of concept worked and I’m waiting for the IES team to add a few missing features to their API before being able to [almost] fully automate the process.

Here are the improvements that have been made already:

  1. The Revit plugin now allows you to export space properties as user data.
  2. The GEM export also generates an ID mapping JSON file that maps the IDs from the Pollination model to the exported GEM model.
  3. I have tested the VE Python API, and I can confirm that we can use the Revit space types to assign the VE thermal templates inside IES VE.

Progress update

Here is a preview of importing an HBJSON file to VE using the beta version of the Python API. It creates the Thermal Templates and assigns them to the rooms as part of the import.

Right now, this is just a proof of concept and we need to work on the details for each thermal template but it looks promising!

Interesting. So it’s bringing in the thermal template data from revit to the VE as a new thermal template. How/when is that defined in Revit? I’m wondering if it is something arch would already have setup or would be something we have to set in revit.

Hi @crduggin,

Good question! Currently, you’ll need to assign them to the rooms using the Pollination Revit plugin user interface. This works well with the current setup. You probably have never noticed it but they can be added in step 9 or by selecting the rooms and using the Manage Room Properties button.

Pollination comes with a library of program types that are created based on the OpenStudio Standards. You can also build your own program types. This tutorial is using Rhino for demonstration purposes but you can do the same in Revit.

I suspect we should also write a translator that takes your existing VE templates and translates them to Pollination program types. That way you can add them to your custom library and they will show up in the list of program types in Pollination Revit and can be assigned to the rooms.

When we get closer to the release, we should also add support for converting Revit’s space types to Pollination program types so they can be directly extracted from the Spaces in the Revit model. That is the better fit for @rafaelhok’s approach in which he redraws the spaces in the model.

So, that may not save us much because it will be either defining in pollination vs the VE and we will likely just want the VE ones because they align with whatever version of 90.1 we need to model against.

1 Like

Interesting! What would be your ideal workflow to save time?

As a side note, the ones from Pollination/openstudio-standards also align with the 90.1.

1 Like

Wow! I’m speechless. It’s been a while since I have visited the discourse @mostapha. I hope that proof of concept is turns out!

Yes, and the VE also has the different versions of 90.1 (2013-2019). I have yet to look into the templates that are in the pollination plug-in.