Is there a solution to assemble adjecent floors automatically in spite of the invisible tiny gaps between each geometry?
I’m creating a workflow that creates one seamless surface with all the bottom surfaces of the floors. The floor geometries came from a revit file via Rhino.inside (after solved invalid breps issue) .
If I understand well, solid union won’t success if geometrie are not stick with each other. I’ve tried to increase tolerances but without luck.
Another solution is to get the bottom surfaces, then I don’t know where to go
If you want to get this done quickly, I’d suggest using the new Shrinkwrap command in Rhino 8 WIP. The result is a mesh but you’ll have this 3D printed most likely?
The purpose of this project is to calculate how many volume of backfill and excavation. And I have dozens of zone to calculate.
And I’ve tried both mesh difference
as well as solid difference
for volume calculation, I noticed that mesh difference often returns error, so I think the whole process from modeling to volume calculation must stick to surface.
I see that this is the result of rebuiding curves from a series of adjacent mesh outlines coming out of Revit? I think this will result in solids that do not match edge to edge. So it is best to try and create a workflow usng the original Mesh goemetry from Revit.
Unfortunately that is a hazard as the original meshes have some problems:
General information about this mesh:
Mesh has 6 degenerate faces.
Mesh has 424 non manifold edges.
Mesh has 41 duplicate faces.
Skipping face direction check because of positive non manifold edge count.
Mesh has 44366 pairs of faces that intersect each other.
This can cause problems if you’re doing mesh boolean operations with it.
Mesh has 177 naked edges. Naked edges can cause problems if the ultimate goal is STL output.
Mesh has 1928 faces where the face normal differs substantially from the vertex normals.
These normals can cause problems if the ultimate goal is for rendering or boolean purposes.
Mesh does not have any ngons.
Mesh does not have any extremely short edges.
Mesh has 3 disjoint pieces.
Mesh has 731 unused vertices.
Using Shrinkwrap can create a can avoid these adjacent mesh problems but you would need to do that in Rhino 8 WIP and use it to rebuild a large combination of these to a much better mesh.
I’m not sure this will answer your problem, but for what I see, your solids do not intersect each other and that may be a good news. If what you need is a +/- volume, calculation, why would you need to do that on a solid union ? You can do it on each of the 14 Breps, and add the results to get the total on your entire zone.
On your drawing above, there seems to be an average level (the terrain surface I presume), do you have this surface somewhere ? I’m thinking of cutting the 14 Breps by this one and sorting the volumes above/below it.
Hello, thanks for your answer. The current script is indeed calculating each brep one by one.
However, there is a second layer of complexity, the land is polluted. My topography is actually consists of one thousand different lithology volumes, instead of one single volume. Because the client needs to know the excavated volume of each polluted soil.
I use voronoi to simplify the modeling and calculating process, another reason is I didn’t find a better way to model the real lithology
There is a third layer of complexity, the client needs to know the instant calculation while raising or lowering each zone. So calculating brep by brep will be very slow and cause lots of failed solid difference as well.
That’s the initial reason why I want to create one solid volume for each zone, so it will have one volume interact with a group of lithology volume.
Maybe this process is not well designed?
I’ll go and check Shrinkwrap first.
I think your process works, although may be extremely long for a large amount of zones/Breps.
I reproduced a terrain using Patch, and 4 blocs to be added/excavated/both.
I can retrieve the volume at the end.
Checking clashes before doing the solid operations seems to speed up the process.