xBimTeam / XbimGeometry

XbimGeometry contains the CLR interop libraries and the c++ engine used to compute the 3D geometry of models.
https://xbimteam.github.io/
Other
260 stars 132 forks source link

Some parts are missing when using versions 5.1.xxx #261

Closed KevinFournier closed 4 years ago

KevinFournier commented 4 years ago

Hello,

I have encountered an issue when trying to reconstruct the geometry from an ifc; some parts of the model are missing.

Context: I am making a .Net application to send the data of an ifc file through the network and read it in another application (Unity3D) to display the model and information about it. I do not know the process of creation of the ifc files I work with and the files could come from any Bim related software.

What I have done: I tried to visualize the ifc file with XbimXplorer:

The parts missing when I use the data send over the network and the one on the built version of XbimXplorer are the same. Here are some images to illustrate the previous explanation and the assemblies use to build XbimXplorer on my computer:

I have found a workaround to my problem by using the version 5.0 of the Xbim NuGet packages (essential and geometry) instead of the version 5.1

I currently use those packages:

When I update to version 5.1.xxx, the missing parts are missing again.

The error may still be on my side because I am new to Xbim (and bim) and might have done something wrong when reading the geometry data. I am sorry for the disarrangement if that's the case.

Regards,

Kévin Fournier

andyward commented 4 years ago

Are there any warnings generated? Xplorer will show a small icon in the bottom toolbar if there are any. Clicking this will show the logs

SteveLockley commented 4 years ago

Kevin do you have a sample file that we could reproduce this with please?

KevinFournier commented 4 years ago

Andy,

Yes, there is errors in the "old" version of xBimExplorer but they do not seem to impact the geometry. In the build version, however, there is only warning but the geometry is affected. Here is few images:

Build version, with warning, missing geometry: xBimXplorer_Build_Logs

Exe version, with errors xBimXplorer_exe_Logs


Steve,

I can provide you the file I used in the previous example.

Bossage_P08.zip


I tried with another file (that I can’t show nor share, unfortunately). In this one, there is also missing geometry when I reconstruct the geometry in Unity but it doesn’t seem to have missing geometry in both xBimXplorer I used. This file is much bigger, however, and some parts could be missing without notice (There is obvious missing of geometry part in my read and reconstruct app).

I am waiting for more file to be given to me for further testing. I should have more information by the mid of next week.

Kévin F.

EDIT : There is no warning nor error log with the second file I used in both xBimXPlorer versions. Unless I got other files to invalid this, I think the problem come either from the file quality or/and my misuse of Xbim in my app.

SteveLockley commented 4 years ago

Thanks Kevin I will have a look, it looks like a problem joining the curve segments up, I thought I had recently made this more reliable, but maybe something got broke, I will explorer and get back to you

SteveLockley commented 4 years ago

Kevin I have found and fixed the problem with this model. Its a good exposure of a quite difficult edge case. Thanks for taking the time to publish it. Basically there are three issues that caused this omission of geometry, they are all in IfcCompositeCurve #1315. 1) The model you have is not respecting the tolerances specific in the representation context, specifically the Composite Curve eighth segment is 2.3395e-4 from the end of the previous segment (seventh), the model precision is 1e-5. This may seem small but it happens to make a great difference in the next condition 2) The composite curve is self intersecting, the first segment wholly overlaps with 7th segment, whilst legal for a composite curve it is not legal for the swept solid it represents. This plus the tolerance issue meant that xbim found the nearest point to be the end of the first segment and as this resulted in a non-manifold wire it gave up on the rest. 3) Finally, the xbim wire builder used OCC wire maker which by default when adding segments to a wire hooks the start or end of segment to any nearest point of the rest of the composite curve, Hence the wire was not contiguous or manifold. I have now changed the code so that it gives priority to the start or end of the composite curve, not just the nearest. image

KevinFournier commented 4 years ago

Thank you Steve !