Integrate.ByRepresentations & BasicBuilding.ByPlans errors

I am trying to find a method to create buildings in Forma from my closed polyline plans. I have tried the two methods below with the same data set resulting in different problems for each.

The Dataset

The surfaces originate from a large generative design script. I then exported those to Revit for checking and sharing on here once I ran into errors.


Regions Check.rvt (6.3 MB)

Integrate.ByRepresentations method

Works, but then in Forma it is missing an area?




Forma Import_Legacy-2025-07-17-1039-Forum.dyn (107.6 KB)

BasicBuilding.ByPlans method

Has error unless I remove the hall and stairwell areas. What is causing this?


Forma Import-2025-07-17-1047-Forum.dyn (60.3 KB)

Notes

I’m was using Revit 2026 with it’s corresponding dynamo ( 3.4.1 ?) running the brand new 4.6.0 DynamoFormaBeta package. I am currently installing the Revit 2026.2 update with Dynamo 3.5.2 and will see if I get any different results.

Hi @SteveDFT

Sorry for the delay on this. I’ve been out on summer holidays. :sunny:

Integrate.ByRepresentations

Just confirming here that you are missing this area after you click Add Floors or Edit in 3D Sketch, right?

If I hover the Residential area prior to clicking Add Floors, the area is counted and included in the visualization

And If I change the function for the area in the Floor Sketcher after adding floors, it actually comes back:

BasicBuilding.ByPlans

The underlying issue here is floating point precision. We are using a library called terf to verify intersections of the input geometry. I have not gotten to the bottom of this yet, but this issue suggest clamping precision as a workaround. I’ve attached a modified graph with a python script to clamp the polycurves to 8 decimals, @solamour or @jacob.small probably has a suggestion for a node only version of the clamping. This then passes the API validations.

Forma Import-2025-07-17-1047-Forum.dyn (66.3 KB)

This is the DesignScript variant :slight_smile: Thanks to Gemini and some specific prompting!

def ClampedPolyCurves(inputCurves : PolyCurve[]..[])
{
    // Step 1: Get all points from all input curves.
    // 'inputCurves.Points' automatically preserves the nested structure.
    // If inputCurves = [polyCurve1, polyCurve2], then
    // allPoints = [[point1a, point1b, ...], [point2a, point2b, ...]]
    allPoints = inputCurves.Points;

    // Step 2: Create new Point objects with rounded X and Y coordinates.
    // DesignScript's replication engine will apply 'Point.ByCoordinates'
    // to each individual point in the nested 'allPoints' list,
    // maintaining the nested structure for 'clampedPoints'.
    clampedPoints = Point.ByCoordinates(
        Math.Round(allPoints.X, 8),
        Math.Round(allPoints.Y, 8)
    );

    // Step 3: Reconstruct PolyCurves from the nested list of clamped points.
    // Since 'clampedPoints' has the same nested structure as the original points,
    // 'PolyCurve.ByPoints' will be applied to each inner list of points,
    // resulting in a new list of PolyCurves.
    return = PolyCurve.ByPoints(clampedPoints, true);
};

Thanks Guys! I will try some of this out soon.

1 Like

Here’s is the node based version that I went with:

1 Like

FYI,

At one point I thought it might be a problem with the normals, so I had been performing the below adjustment to my surfaces, aligning the normals. Interestingly enough, this still breaks it…