Hi, how about this procedure?
- Save the original z-coordinate as an attribute (ElevationExtractor)
- Convert the 3D polygons to 2D polygons (2DForcer).
- Build donut (DonutBuilder).
- Restore z-coordinate from the attribute (3DForcer)
Hi Takashi,
Many thanks for your response.
This procedure may work for flat roofs, i.e. all vertices have the same Z.
I will have buildings with different roof types, for example, gabled roof that will have a dormer window.
Therefore, I tried to do the following logic, thinking that order of inputs matters, i.e. bottom/lowest polygon first. That created the superstructure and main roof plane at correct heights, but did not create any hole in the lowest polygon. Probably as I added the "z" coordinate to the Group_By in the DonutBuilder and z is unique?
1. Extract z-coordinates (CoordinateExtractor)
2. Sort the z-coordinates : Numeric and Ascending in order to put polygons with lower heights first (Sorter)
3. Create a Donut using the Group_By with both "igds_cell_name_sequence_number" and "z"
Probably here, because z is unique, the hole is not created...
What I am trying to do is in the Group_By - it should recognize the order of input.
Your suggestions much appreciated!
Many thanks,
Magda
In similar cases, I frequently use the SurfaceDraper to restore the original z-coordinates.
Hi Takashi,
Thank you.I would much appreciate your further help.
Please see the example DGN and workspace I have at the moment. I was not sure how I could implement your solution to it or change the workspace to create the desired result.
building-examples2.dgn
example-fme.fmw
Many thanks,
Magda
Hi Takashi,
Thank you.I would much appreciate your further help.
Please see the example DGN and workspace I have at the moment. I was not sure how I could implement your solution to it or change the workspace to create the desired result.
building-examples2.dgn
example-fme.fmw
Many thanks,
Magda
I still think the SurfaceDraper would be helpful. See this example.
create-donuts-in-3d-example.fmwt (FME 2017.1.1.1)
Hi, how about this procedure?
- Save the original z-coordinate as an attribute (ElevationExtractor)
- Convert the 3D polygons to 2D polygons (2DForcer).
- Build donut (DonutBuilder).
- Restore z-coordinate from the attribute (3DForcer)
Hi Takashi,
3DForcer assigns one same height to all vertices. It is not the case in my data where vertices have different heights.
I also tried the SurfaceDraper, but it interpolates the heights and assign new, slightly different heights and I need to assign identical heights as the input data due to strict Planarity requirements.
What would really work for me, would be to find co-planar polygons, i.e. lying on the same surface within the provided tolerance, and only use these in DonutBuilder.
Do you have any suggestions to how one could find co-planar polygons in FME?
Many thanks