Solved

How to create break lines at intersecting 3D polygons?

  • 6 December 2021
  • 3 replies
  • 8 views

Badge +1

Hey! I have a bunch of polygons (in 3D) that I want to create break lines between. My idea was to use Intersector but it does not create the break lines for some reason. I have attached my workspace. To clarify, the green lines in this image is the result I'm looking for.

 

Break lines in green 

icon

Best answer by caracadrian 6 December 2021, 19:04

View original

3 replies

Badge +20

This kind of intersection isn't really supported by FME. Yet.

Your best chance at a workaround would be to convert to solids (you can create a very thin solid from the 3d polygon), use Clipper to get the intersection.

Then to extract the bottom face use GeoemtryCoercer set to CompositeSurface followed by GeometryPartExtractor set to Geometry Type = IFMEFace followed by GeoemtryCoercer set to Polygon followed by SurfaceNormalCalculator, then filter by (or test for) normalZ < 0.

I have attached a sample workspace that can get you started.

Badge +1

This kind of intersection isn't really supported by FME. Yet.

Your best chance at a workaround would be to convert to solids (you can create a very thin solid from the 3d polygon), use Clipper to get the intersection.

Then to extract the bottom face use GeoemtryCoercer set to CompositeSurface followed by GeometryPartExtractor set to Geometry Type = IFMEFace followed by GeoemtryCoercer set to Polygon followed by SurfaceNormalCalculator, then filter by (or test for) normalZ < 0.

I have attached a sample workspace that can get you started.

Nice workaround @caracadrian​ ! 😀 It works great, the result after adding a dissolver and a centerlinereplacer looks good enough to me ! However performance is not great, it took about 60 minutes to cut 5000 polys (its the Clipper that is slow). I have a few hundred thousand polygons to cut/clip so maybe I need to look for some other tools to do this task. This is really a 3-second operation (cutting a few hundred thousand 3D triangles/polys with another 3D mesh) in most 3D modeling tools, for example 3dsmax or Blender. However my goal is to have this running on a FME-server so I would prefer not going to other tools.

 

But I will also try clipping in smaller pieces to see if there will be any performance wins in FME.

 

We need to motivate Safe to put some efforts in adding more/upgrading transformers for 3D operations.😀 At least the Spatialfilter/relator, Intersector and Clipper should support more 3D operands and be able to work with 3D volumes and slicing in general. Also I would like to see a boolean (cut 3D mesh with 2d/3d mesh) transformer or for this functionality to be added to the Intersector.

Badge +20

Nice workaround @caracadrian​ ! 😀 It works great, the result after adding a dissolver and a centerlinereplacer looks good enough to me ! However performance is not great, it took about 60 minutes to cut 5000 polys (its the Clipper that is slow). I have a few hundred thousand polygons to cut/clip so maybe I need to look for some other tools to do this task. This is really a 3-second operation (cutting a few hundred thousand 3D triangles/polys with another 3D mesh) in most 3D modeling tools, for example 3dsmax or Blender. However my goal is to have this running on a FME-server so I would prefer not going to other tools.

 

But I will also try clipping in smaller pieces to see if there will be any performance wins in FME.

 

We need to motivate Safe to put some efforts in adding more/upgrading transformers for 3D operations.😀 At least the Spatialfilter/relator, Intersector and Clipper should support more 3D operands and be able to work with 3D volumes and slicing in general. Also I would like to see a boolean (cut 3D mesh with 2d/3d mesh) transformer or for this functionality to be added to the Intersector.

Clipper isn't as slow as it used to be. In fact it's 10 times faster 😀

What version of FME are you using?

To speed things up you should think about aggregating your features before clipping and using Group By as much as possible.

If that doesn't speed things up try splitting the processing by using WorkspaceRunner.

Reply