Please let me know if there is any ideas out there that i might be able to try!
Hi @nick-j,
Good problems you're trying to solve. I feel your pain. I really like the Clipping approach you have there. Extrude up from Ground plate and down from Roof, then use Clipper.
Sorry to hear your getting issues in the clipper. Are you grouping by a building ID? Maybe that will help. Also try and use a GeometryValidator to see if there are any issues with the geometry.
The SolidDissolver, has a bug in it. You can open it up (Right click > edit) and connect up the 'Untouched' port to the Aggregator.
At the end of the bay the SolidDissolver simply performs another Clip using the 3D bounding box of the input solids.
Do you have wall surfaces? Or is this your problem? only Roofs and the ground plate?
I would definitely stick with trying the Clipper approach and try and figure out why some are getting rejected/causing a crash. If you do find a crash you should report it to tech support.
When it comes time to writing out CityGML you can use this template as a guide on how to se up the write and which attributes you need to create:
https://hub.safe.com/publishers/con-terra/templates/citygml-create-building-lod-2-using-xlinks
Good luck! and do let us know how you get on
I have done similar things with extruding roofs downward and building footprints upwards, and then using a Clipper to get the union as a 3D solid. And, like you @nick-j, I've encountered problems.
In my case it is almost always some small geometrical error in the data, such as polygons that are not closed properly, polygons containing double vertices or small dangles, or in some cases roof polygons that do not fit exactly to each other but leaves a small hole (it works much better with a small overlap).
So my main suggestion is that you clean your input data as much as possible; close polygons, remove dangles and double points, etc. When you encounter a problem (FME terminates), try reducing the area you are working with, repeat until you find the building that contains the error.
And - like you - I was also sad to learn that the Extruder can only extrude with a value, not to a z-value, making it much more difficult to model the buildings. (I even posted a suggestion to include this possiblility in the Extruder. Not many votes yet, though.)
The solid dissolver is really clever inside, thanks to whoever made it! I like how it use "negative space bounding box" and then you chip away pieces and greate positive space.
This is my checklist:
I use the solid dissolver for large datasets but it is not uncommon with errors and it has limitations. The clipper does not accept more than 300 (or maybe it was 200) objects so you need to limit the groups to that using a building ID for example like virtualcitymatt said. In case of buildings with more than 300 parts you need to separate in to smaller groups.
The more coordinate Points a polygon has the more likely it it to case the dissolve to fail so avoid complicated roof areas. Break them up into smaller pieces using the chopper, but dont create to many to cross the 300 boundary and also slivers risk breaking the dissolve or cause som unwanted geometries. so dont just chopper everything into triangles (takes longer time to dissolve too). Concider using a generaliser on areas with a to of Close verticies (like smooth circles).
It is important that your extrusions are not inside- out so check that first. Orient the areas according to the extrusion direction.
I split up large datasets into smaller regions and run them in separate workspases using the workspace runner with several running at the same time. Then if one fails I break it up in smaller areas and re-run those and so on. Using several workspaces in the workspace runner enables you to run over most of the data even if one part fails.
Using your Buildings groups you can modify the solid disolver to lift up its bounding box to the height you want the building bottom to have. then you will get flat bottoms.
Even if you do all of the above some buildings will not be perfect solids afterwards, maybe due to round of errors and small errors in your data. If you need perfect for say, 3d-printing fme might only get you halfway in this respect. Use Magics (powerfull boolean but very poor importing) or Grasshopper to get "voxelization" boolean dissolves - mathematically imperfect but atleast the result is printable.
Edit: Oh and you really want to run the geometries through geometry validator and filter out errors. Double down on the failed ones with the chopper and filter out micro areas.
Thank you everyone for these great idea's!
I have been using object-id's. this is fundamental for my workspace, otherwise it could not have worked at all.
So far i have made a few adjustments to the formula's, they are pretty good now (they seemed to have issues in some special cases). I also made sure to validate my input. Rounding some coordinates and my groundplane value to 3 decimals (milimeters).
I was pretty confident that my clipper method would work. im sad to say that it still fails almost at the end.
I am going to split my input data into 4 area's to see if i can isolate the issue. before i tried 2 area's but both of them failed at the time, will try them too.
The information about the solid dissolver is very helpfull, i have got to try the things out yet since im focusing on the clipper part first.
The clipper is no longer rejecting hundreds of features (just 1 now).
I will keep everyone informed.
Again, thank you so much!
Nick Janse
I managed to solve it with some insane validation block. The clipper now runs without issue! My validation process looks insane but its actually having some logic behind it. I know you can validate multiple things at once but that wont work for this issue. there are several stages than needs to happen in this order. below is the invert of the validation, this extracts the stuff that needs manual adjuistments and can't be repaired by fme (in a simple matter).
My input validation that runs somewhere at the start looks like this:
There really were some issues with the input data. I think i now have a bullet proof validation (i hope haha).
Next up will be challanging the solid dissolver. If anyone have more tips let me know!
Thanks again!
Nick Janse
I managed to solve it with some insane validation block. The clipper now runs without issue! My validation process looks insane but its actually having some logic behind it. I know you can validate multiple things at once but that wont work for this issue. there are several stages than needs to happen in this order. below is the invert of the validation, this extracts the stuff that needs manual adjuistments and can't be repaired by fme (in a simple matter).
My input validation that runs somewhere at the start looks like this:
There really were some issues with the input data. I think i now have a bullet proof validation (i hope haha).
Next up will be challanging the solid dissolver. If anyone have more tips let me know!
Thanks again!
Nick Janse
Awesome, Great validation block!
I'b be interested to hear the reasoning behind the order of validation steps you took
On top of that! i went back to an old version of the solid dissolver, this works fine with the smaller dataset. I wonder if i will have the same issue where it wont work at lager areas (>300 objects). anyway if anyone has this just go back to the old soliddissolver. :)
I managed to solve it with some insane validation block. The clipper now runs without issue! My validation process looks insane but its actually having some logic behind it. I know you can validate multiple things at once but that wont work for this issue. there are several stages than needs to happen in this order. below is the invert of the validation, this extracts the stuff that needs manual adjuistments and can't be repaired by fme (in a simple matter).
My input validation that runs somewhere at the start looks like this:
There really were some issues with the input data. I think i now have a bullet proof validation (i hope haha).
Next up will be challanging the solid dissolver. If anyone have more tips let me know!
Thanks again!
Nick Janse
Looking good! It would be interesting to know which validations you do, and in which order.