Так, ну смотрите, вот код (на Revit Python Shell), думаю, не проблема будет перевести при необходимости, который Вам нужен
room = selection[0] #нужно выбрать помещение
calculator = SpatialElementGeometryCalculator(doc)
results = calculator.CalculateSpatialElementGeometry(room)
solid = results.GetGeometry()
plane = Plane.CreateByNormalAndOrigin(XYZ.BasisZ, room.get_BoundingBox(None).Min-XYZ.BasisZ)
extrAnalyzer = ExtrusionAnalyzer.Create(solid, plane, -1*XYZ.BasisZ)
face = extrAnalyzer.GetExtrusionBase()
print face.GetEdgesAsCurveLoops()# тут работаем как раз с CurveLoop-ом
НО. Оно не заработает, пока слегка не поправить модель. Я пробовал по-разному получать Solid, через get_Geometry, из свойства ClosedShell, даже пытался создавать FreeForm в семействе на основе этой геометрии и заново получать геометрию, нет, ExtrusionAnalyzer.Create вываливается с ошибкой. Пёс с ним, выбираем непосредственно из геометрии (не важно, get_Geometry или ClosedShell) solid, из него берем поверхность с нормалью -1*XYZ.BasisZ, окей, дальше берем границы - CurveLoop и тут внезапно оказывается, что он незамкнут, IsOpen() выдает true.
Как поправить файл:
Как понять, что нужно править именно в этом месте - не знаю, смотреть стены, ограничивающие помещения, но тут есть более очевидные кандидаты, на одной из стен висит предупреждение, у другой стоит запрет на соединение
Но №2: а какая задача? зачем
Далее планирую выдавливание геометрии из CurveLoop
У Вас вроде и так уже есть готовый Solid