Skip to main content

Hi,

I want to create my own LOD2 model (based on another LOD2 model). The problem with the LOD2 I have is that the surface orientations are not correct (not outwards of buildings) and there is no logic in these errors (a solution could be determining an inner point and checking that the surface normal points away, but this does not work for building with a complex footprint). So, I have the roof polygons of the original LOD2 model as well as the minimal z-co of the building and I want to rebuild the building based on these. I labelled main volumes of buildings and extensions as separate buildings. So, one building has 1 roof shape, that consists of multiple roof polygons (often not planar). Sometimes, there are also small extensions in the roof (see picture). What I had in mind:

First, I use the surfacefootprintreplacer to project the roof surfaces to a horizontal plane that is at the height of the lowest roof eave. Let's say this represents the attic floor. From the attic floor, it is easy to extrude to the lowest z-co of the building (stored as an attribute). So, these walls are not the problem.

To construct the walls of the roof, I extrude the attic floor up and all of the individual roof polygons down. Then I use the clipper to determine the inside volume. This results in the correct geometry. But, now I'm stuck: there is an excess of walls in the 'attic'. I only need the walls or parts of the walls that are in contact with the outside, to get the correct building closure. I can't simply remove all vertical surfaces because some walls indeed need to be deleted as a whole, but if some part of the "wall" is in contact with the outside, then I need to keep that part of the wall (especially a problem around the small roof extensions). How do I determine this?

I hope there is some logic that I could not think of, but you could!! Already a big thanks!

Kind regards, Ina

 

Pictures of problem: there are 3 kinds of walls in the roof volumes:

Walls that need to be partially kept (only the part that is in contact with the outside)

Walls that need to be deleted completely (this is eg the wall under the roof edge, but is not in contact with the outside)

Walls that need to be kept completely (completely in contact with the outside)

 

 

Hi @inadj, I'd like to check detailed conditions (geometry type, holes, etc.) of the source roof dataset.

Does a roof surface have hole(s) like this?


Hi @inadj, I'd like to check detailed conditions (geometry type, holes, etc.) of the source roof dataset.

Does a roof surface have hole(s) like this?

If the roof has proper hole(s), there is a way to create walls and a floor shown as below. I think this image illustrates your desired result.

 

 


If the roof has proper hole(s), there is a way to create walls and a floor shown as below. I think this image illustrates your desired result.

 

 

Additional problems with the input-files: no hole in roof surface if the building extension is in the middle of the roof.

 

 

 

 

Really, thank you a lot Takashi!

The SurfaceOnSurfaceOverlayer and the BRepSolidBoundaryCreator.Beta (FME Hub) might help you. See the attached demo: roof-to-building.fmwt (FME 2017.0.1)

Step 1: Read the roofs (3D polygons) from the Shapefile dataset, drop holes using the SurfaceOnSurfaceOverlayer + Tester.

Step 2: Create wall and floor surfaces with the BRepSolidBoundaryCreator.Beta (set the floor elevation to its parameter), drop internal walls using the SurfaceOnSurfaceOverlayer + Tester.

It may be necessary to do trial and error with the actual dataset to determine optimal tolerance parameters in the SurfaceOnSurfaceOverlayers (Normal Tolerance in Degrees and Offset Tolerance). Hope this helps.

The SurfaceOnSurfaceOverlayer and the BRepSolidBoundaryCreator.Beta (FME Hub) might help you. See the attached demo: roof-to-building.fmwt (FME 2017.0.1)

Step 1: Read the roofs (3D polygons) from the Shapefile dataset, drop holes using the SurfaceOnSurfaceOverlayer + Tester.

Step 2: Create wall and floor surfaces with the BRepSolidBoundaryCreator.Beta (set the floor elevation to its parameter), drop internal walls using the SurfaceOnSurfaceOverlayer + Tester.

It may be necessary to do trial and error with the actual dataset to determine optimal tolerance parameters in the SurfaceOnSurfaceOverlayers (Normal Tolerance in Degrees and Offset Tolerance). Hope this helps.
Thank you very much for your answer. I wasn't aware of the existence of the BRepSolidBoundaryCreator, but it makes totally sense.

 

I just still have 1 problem: my roof polygons are not planar! Do you know a good way to make them planar? I tried to use the surfacemodeller and proceed with the output triangles, but that does not give good results...

 

 


The SurfaceOnSurfaceOverlayer and the BRepSolidBoundaryCreator.Beta (FME Hub) might help you. See the attached demo: roof-to-building.fmwt (FME 2017.0.1)

Step 1: Read the roofs (3D polygons) from the Shapefile dataset, drop holes using the SurfaceOnSurfaceOverlayer + Tester.

Step 2: Create wall and floor surfaces with the BRepSolidBoundaryCreator.Beta (set the floor elevation to its parameter), drop internal walls using the SurfaceOnSurfaceOverlayer + Tester.

It may be necessary to do trial and error with the actual dataset to determine optimal tolerance parameters in the SurfaceOnSurfaceOverlayers (Normal Tolerance in Degrees and Offset Tolerance). Hope this helps.
You can use the GeometryValidator to repair the non-planar surfaces.

 

  • Check "Non-Planar Surfaces" in the Issue column
  • Attempt Repair: Yes
If an input surface was non-planar, it would be repaired and output via the Repaired port.

 

Try inserting this transformer between the FaceReplacer and the SurfaceOnSurfaceOverlayer.

 

Note that the GeometryValidator transforms a non-planar surface into a composite surface consisting of multiple planar parts to resolve the non-planarity.

 


Reply