Solid union errors - INCONS_FACE -- inconsistent face-body relationships and FACE_BOUNDARY -- wire being deleted crosses face boundary

Hi, I am unionizing each beam with its intersected elements. Here is the dynamo script.


The group in pink gets the intersected elements with each beam. I think it has no problems. The python script nodes are like these.


Errors happened on these two highlighted beams:

System.ApplicationException: Unable union two Solids : INCONS_FACE -- inconsistent face-body relationships
   at Autodesk.LibG.Solid.by_union(SolidList solids)
   at Autodesk.LibG.GeometryFactory.SolidByUnion(ISolidEntity[] solids)
   at Autodesk.DesignScript.Geometry.Solid.ByUnion(IEnumerable`1 solids)

System.ApplicationException: Unable union two Solids : FACE_BOUNDARY -- wire being deleted crosses face boundary
   at Autodesk.LibG.Solid.by_union(SolidList solids)
   at Autodesk.LibG.GeometryFactory.SolidByUnion(ISolidEntity[] solids)
   at Autodesk.DesignScript.Geometry.Solid.ByUnion(IEnumerable`1 solids)

This is the related topic I post before. Solid union errors - Unable to union two solids I have solved most of the errors and now these two still remain. Does anyone know the reasons and how to fix it? Thanks!
dynamo.dyn (32.2 KB)
model.rvt - Google Drive

Unfortunately, the beams don’t align perfectly with the edge of the concrete floor. (according to Revit - don’t worry it’s not your fault)
The errors are thrown by the ASIC geometry kernel that Revit is using, and you can’t do much about it, unfortunately. You can either built-in a check in your script to align a beam if there is an error or modify the sketch of the floor (once the API is available).

And… now for the funny part. You can actually avoid this error. The ASIC kernel for solid modelling has been developed by Spacial Corporation (part of Dessault Systems - creators of Catia). And it works fine in multiple other software that is using it.
However, Revit… being Revit has f^&)^ed up the kernel by a very simple thing. Revit is converting all units to Feet. So, if you are using the metric system, you have a problem.:face_with_symbols_over_mouth:

So, finally after the long rant. The simplest solution is to change the units temporarily to feet. And the error magically goes away :partying_face:
I’d have to test if you could do this automatically by creating a transaction, changing the units, doing your boolean operations and changing the units back. In the meantime, you can do this manually.

5 Likes

Thanks for your great solution! @Maciej_Wypych1 I changed the units of length, area, and volume from mm, m2, and m3 to feet, square feet, and cubic feet, then the errors were all gone! Thank you so much! I have been stuck with it for nearly two days…

For changing the units temporarily, I used codes from this post (thanks @ Einar_Raknes for the great codes). Basically I need to run the metric2feet.dyn before I open the boolean operation file and then run the feet2metric.dyn after finishing the boolean file (totally 3 files separately). I am wondering are there some good ways to integrate them into one file?
image


image


something like that

dynamo_modified.dyn (36.3 KB)

1 Like

Thank you! @Maciej_Wypych1
But it’s wired when using IronPython2 engine it was fine, while when changing to CPython3 it had union errors again.

Hey @Howie, I thought the latest official version of Dynamo for Revit 2021 (2.6.4) doesn’t have the Cpython3 integrated yet? Or did I miss an update?

Yes @Maciej_Wypych1 CPython3 has not been integrated into Revit officially. I just replaced it manually to be able to use some popular libraries like numpy, pandas etc., although I haven’t used them yet haha