Question-and-Answer Resource for the Building Energy Modeling Community
Get started with the Help page
Ask Your Question

How should I choose the starting vertex for horizontal surfaces?

asked 2016-08-20 07:16:30 -0500

updated 2016-10-18 14:31:03 -0500

In the GlobalGeometryRules object the field Starting Vertex Position defines the first vertex in the surface perimeter. The options are UpperLeftCorner, LowerLeftCorner, UpperRightCorner, or LowerRightCorner. This is simple enough for vertical surfaces where "Upper" and "Lower" refer to the z-axis, and "Left" and "Right" are as seen from outside the surface.

However, if the surface is horizontal then up, down, left and right are undefined.

So is there a suggested way to order the vertices of a horizontal surface? Does it matter what order they are in for horizontal surfaces?

edit retag flag offensive close merge delete


Your question seems to confuse 'order' and 'Start point'. I think the sequence is important but the start point is arbitrary. You can define left and right for the horizontal surface. Either look from the zone in the direction of the surface normal, or at the surface, looking into the zone.

TomB's avatar TomB  ( 2016-08-20 16:49:47 -0500 )edit

Order includes both start point and direction. The start point is not arbitrary, it's apparently needed for shading calculations and is how to choose it is defined in the global geometry rules. The problem is what is an "upper" corner in a horizontal surface?

Jamie Bull's avatar Jamie Bull  ( 2016-08-21 20:55:39 -0500 )edit

can u adopt your own convention? Are you getting errors when running e+? Maybe you could say X axis is up/down, Y axis is left right...

TomB's avatar TomB  ( 2016-08-22 00:08:54 -0500 )edit

Yes, I can adopt a convention, but I'd rather use an established one if one exists. No errors as yet, but then I'm not currently running any models, I'm working on automated geometry intersection and matching in Python and want to ensure any newly-created surfaces follow the global geometry rules.

Jamie Bull's avatar Jamie Bull  ( 2016-08-22 04:32:55 -0500 )edit

I am using counter clockwise in the direction of surface. and it works fine. I was getting errors , but now it works for my E+.

Moni's avatar Moni  ( 2018-11-04 22:36:54 -0500 )edit

2 Answers

Sort by ยป oldest newest most voted

answered 2016-08-21 21:40:18 -0500

I'm not sure where this is used in E+ anymore, adding simple windows maybe? The problem is under defined in the case of horizontal surfaces, here is the algorithm OpenStudio uses. We ran across the same difficulty defining azimuth for horizontal surfaces in gbXml output, it would be nice to standardize on an approach.

edit flag offensive delete link more


Thanks. This is within eppy so following the OpenStudio algorithm is a reasonable approach I think.

Jamie Bull's avatar Jamie Bull  ( 2016-08-22 01:56:01 -0500 )edit

So if I'm reading that correctly, if the surface is horizontal then upper is defined as along the y-axis?

Jamie Bull's avatar Jamie Bull  ( 2016-08-22 03:14:17 -0500 )edit

Yes "up" is y and "left" is negative x for horizontal surfaces. It's worth noting that these are in relative space coordinates which may be rotated from global coordinates (not an issue for vertical surfaces because space rotations are only in the x-y plane). I've been kicking around the idea of refactoring OpenStudio's geometry functions into a new building energy geometry library with very minimal dependencies. The library would be C++ but ported to other languages (e.g. C#, Python, Ruby). Here is a google doc with some thoughts.

macumber's avatar macumber  ( 2016-08-22 10:55:03 -0500 )edit

The hope would be that if we could get multiple software projects (OpenStudio, EnergyPlus, Eppy,, etc) working with the same geometry library we would end up with better algorithms that would be standardized. It would also have better integration with the 2D floorprint geometry editor that we will be working on in the next year. Please request access to either of these docs if you are interested.

macumber's avatar macumber  ( 2016-08-22 10:59:06 -0500 )edit

Permissions problem? "Sorry, the file you have requested does not exist." on the doc in your first comment - I'd potentially be interested in helping out on the porting to Python though. Potentially just wrapping the C++ in Cython, as with pyclipper.

Jamie Bull's avatar Jamie Bull  ( 2016-08-22 11:01:25 -0500 )edit

answered 2016-08-20 17:09:49 -0500

TomB's avatar

updated 2016-08-21 23:58:09 -0500

Order them counter-clockwise. For consistency with the default, start at the upper left corner. The upper left corner for a horizontal surface is underdefined.

image description

The Online help for GlobalGeometry Rules tells us that the shadowing algorithms require the vertices 'in a certain order and positional structure' and goes on to say Surfaces are always 'viewed from the outside of the zone'

The Engineering Reference includes the key detail: 'listed counter-clockwise'. All of this can be summarised as 'use the right hand rule'. There is some missing info for horizontal surfaces.

edit flag offensive delete link more


My question is what is "upper left" in the context of a horizontal surface? Clockwise or counterclockwise is not the issue.

Jamie Bull's avatar Jamie Bull  ( 2016-08-21 20:51:57 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Training Workshops


Question Tools

1 follower


Asked: 2016-08-20 07:16:30 -0500

Seen: 622 times

Last updated: Aug 21 '16