Hello,
This will be similar to my previous question but it is more structured now and I have more examples.
I am working on the DGN to cityGML conversion and have issues
converting building roof polygons that contain roof superstructures, i.e where
there are one or more higher or lower elements going out from the main roof
planes – and where some roof polygons are donuts in the input Microstation DGN
and need to be donuts in the output cityGML (blue polygons that are donuts in
input DGN must to be Donut polygons in the output cityGML).
My input is 3D building models in Microstation DGN format
that contains correct roof modelling, i.e. correct donut polygons for
superstructures.
However, while converting the DGN into cityGML in FME I found
two issues: (1) DGN reading does not support 3D Donuts, i.e. 3D Grouped Holes
and (2) DonutBuilder transformer – does not fully support 3D data, i.e. no
option to build Donut polygons from polygons “that are on same surface”.
(1) Issue in FME reading DGN – it does not read and does not preserve
such 3D donuts correctly, regardless if “Expand Unnamed(Group Hole_ Cells: No
or Yes” . It explodes the input Donut polygons by filling holes in the input Donut polygons so it is no longer a Donut polygon and creates a hole polygon
that lies on the surface of its input Donut polygon. Therefore the Donuts need
to be rebuilt in FME.
(2) The issue with FME DonutBuilder is that does not fully
support 3D data, i.e. it does not build a donut polygon for 3D data using the
“polygons that lie on same surface”. It has the “Connect Z Mode parameter“ with
First Winds, Last Wins etc. – non of the options works correctly for 3D data. The
blue polygons in the above image that match in 2D (are the same) – I need to
build a Donut only from the blue polygons that lie on the same surface as other
blue or yellow polygons.
Due to no such option in the DonutBuilder, the outputs are
random, i.e. correct or incorrect as there is no way to tell DonutBuilder to use
polygons that lie on the same surface and it will take either top or bottom polygons
(blue polygons) to built a Donut. For example:
Please see the example FME workspace and data.
How can I find polygons that lie on the same surface as
any other polygons (within a set tolerance) in FME? OR
How can I find polygons that do not lie on the same
surface as any other polygons (within a set tolerance)
Is there any other solution for the problem given?
Your help much appreciated!
Magda