Look at what you have in geo - it’s likely instance Geometry, which means you have to inform Revit what type of geometry you want to get, the base family type or the instance type.
i believe it is because in this case the class (InstanceGeometry) isn’t inheriting the method, but the subsequent classes (ie: Solid) are, so it’s there but not yet usable.
From there you should have a list of geometries, I’m guessing solids and various curves based on your categories. The object returned might not be a list (check with OUT = variableName.__class__) , but it should be iterable, so you can use a list comprehension to filter down to just the solids (variableName = i for I in variableName if i.GetType() == Solid`).
Get the extents of a new 3D view and convert to a new bounding box.
Move the maximum point by a reasonable distance on the + X and + Y axis, then pull it onto the plane you want to get the footprint at.
Move the minimum point by a reasonable distance on the -X and -Y axis, then pull it onto the plane you want to get the footprint at.
Draw a rectangle aligned to the XY axis using the relocated min and max points.
Convert the rectangles to room separation lines. * Translate the min point by 1/2 of a reasonable distance on the + X and + Y axis, and create a room at this point.
Name the room ‘outdoors’ and give it a number as desired.
Get the boundary curve loops of the new room, and find the one with less area. That is your footprint.
Yep. The beauty of this is also that you can set up a schedule to subtract the area of the room names ‘exterior’ or whatnot from the area of the outer rectangle and it will be parametric as the design changes. Just need to let users know to not delete it and which schedule has the info on it.