A quick geometrical question on retrieving geometry from a basic wall being used as a panel in a curtain wall:
Question: I am struggling to retrieve the geometry data from a curtain wall that contains a Basic wall in one of the curtain wall panels.
My example curtain wall has two panels. With one of the panels, a basic wall type is associated. I need to get the geometry data (i.e., the faces) for the entire curtain wall. When I reach the second panel in my code, the SymbolGeometry
contains zero objects, so my code cannot retrieve any geometry for it. As a result, it is not able to handle the basic wall to retrieve its geometry face data.
Answer: Here is a code snippet that handles this situation correctly.
The main point is this: we need to find the panel-wall which corresponds to the curtain wall and then retrieve its geometry in a second step:
// First, find solid geometry from panel ids. // Note that the panel which contains a basic // wall has NO geometry! Wall wall = doc.GetElement( curtainWallId ) as Wall; var grid = wall.CurtainGrid; foreach( ElementId id in grid.GetPanelIds() ) { Element e = doc.GetElement( id ); solids.AddRange( GetElementSolids( e ) ); } // Secondly, find corresponding panel wall // for the curtain wall and retrieve the actual // geometry from that. FilteredElementCollector cwPanels = new FilteredElementCollector( doc ) .OfCategory( BuiltInCategory.OST_CurtainWallPanels ) .OfClass( typeof( Wall ) ); foreach( Wall cwp in cwPanels ) { // Find panel wall belonging to this curtain wall // and retrieve its geometry if( cwp.StackedWallOwnerId == curtainWallId ) { solids.AddRange( GetElementSolids( cwp ) ); } }
I added this code in the method GetCurtainWallPanelGeometry
to The Building Coder samples release 2018.0.134.6
module CmdCurtainWallGeom.cs L35-L66.