horizontalUp and horizontalDown give a different Surface Area which i did not expect.
I guess i can use some clarification.
PS
Is there a good way to colorize the faces you need,
In example only colorize the faces which are horizontalUp?
Looked through the forums a bit but couldn’t find a clear answer really
You’re converting length on the lower area instead of area. Keeping the conversion out of it is advisable for now though - what do you get if you sum the values in native units?
I think I see a few shadows from wall openings, and some non-orthogonal surfaces which will throw surface area comparison off. If you post a sample RVT with a problematic element for sorting the community will be able to help out more readily.
1 Like
Hi, a surface (contained in a plane) is defined by a normal (a perpendicular vector oriented from the material outward) with X, Y, and Z components.
edit: as usual too late
If it is perfectly horizontal, it is “High” (the Z component of the vector will be 1).
If it is perfectly horizontal, it is “Low” (the Z component of the vector will be -1).
cordially
christian.stan
2 Likes
@jacob.small
It is a slab for a corridor.
This is the cross section.
And these are the units without any conversion
Highlighted segments are vertical, not horizontal in nature, and as such you’re reducing the area of ‘horizontal up’ surfaces by the ‘run’ of each slope * it’s length.
Let me see if I can put a sample together which illustrates surface orientation by normal (perhaps @christian.stan can beat me to it?).
1 Like
Or i should rephrase my question (but i guess that should be another topic).
What is the best approach for getting the area of a footprint without the use of
Parameters and Formulas (in the Family)?
Though still wanna understand the Surface part and if there is a way to colorize those.
So if i understand correctly it just takes the sum of ALL the faces which are on a similar plane?.
Footprint is the geometry projected onto the XY plane. So Element.Faces > Boundingbox.ByGeometry > Extract base of bb (min point to max point as a vector, multiply by 2, use that as the dimension for a square at the min point of the bounding box, patch that to a surface) > (from the original geometry) Surface.PerimeterCurves > PolyCurve.ByGroupedCurves > Surface.ProjectInputOnto (where the surface is the patched rectangle at the base of the bounding box and the geometry to project is the polycurves from the faces) > PolyCurve.ByGroupedCurves > Surface.ByPatch > Surface.Area > Math.Sum.
This graph will illustrate how surface grouping works, without using the custom node (I recall it’s innerworkings roughly match what I built here). You can try your geometry, or adjust the resolution on the sphere (which should catch every reasonable vector orientation at some point). You can also adjust the ‘if’ statement to catch orientations like “north east”, or reduce the amount of stuff classified as “up” or “down” if you really wanted to.
Took a bit to illustrate the footprint extraction too, and included it in this .dyn.
Surface Orienation and footprint.dyn (63.0 KB)
2 Likes