Skip to main content
Solved

Create 3d parallel polylines


umapper1
Contributor
Forum|alt.badge.img+5

Hi!

I'm looking to create some 3d parallel offsets of existing 3D polylines. My end goal is to actually create a polygon a certain width around a polyline but it must retain the 3d elevations. I've looked into the following tools: Offsetter, OffsetCurveGenerator, Buffer and 3DBufferer. All of these are close however don't quite get me there. The buffer is perfect however is only 2D. I do not know how to then restore the elevations so that it retains its 'parallel figure'. Note that the vertices of the 3D polys have different values, they are not all the same value, ie goes up and down.

Any suggestions?

Buffer result:

Buffer result 3D view:

Best answer by jdh

Alternatively,

 

 

Buffer the line in 2D, Chopper (1 vertex) you now have 2D points, send these to the Base port of a NeighborFinder.

Take your original line and Chop it into points (3d), use a coordinateExtractor to store the Z value as an attribute. Send that to the Candidate port of the NeighborFinder

NeighborFinder should have 1 Neighbor to Find, and Merge Attributes set.

On the Matched port use a 3DForcer to set the Z value of the points. Then use a LineBuilder to turn the 3D points into a polygon

 

View original
Did this help you find an answer to your question?

11 replies

itay
Supporter
Forum|alt.badge.img+16
  • Supporter
  • September 13, 2019

Hi @umapper1,

The Bufferer in FMe 2019.+ can also be used for 3D:

Buffer Type : Specify whether to create Area (2D) or Solid buffers around input features.

Which FME version are you using?


umapper1
Contributor
Forum|alt.badge.img+5
  • Author
  • Contributor
  • September 13, 2019
itay wrote:

Hi @umapper1,

The Bufferer in FMe 2019.+ can also be used for 3D:

Buffer Type : Specify whether to create Area (2D) or Solid buffers around input features.

Which FME version are you using?

Yes I saw this too! Unfortunately it's not what I'm trying to achieve. This is what made look at alternatives like the OffsetCurveGenerator. I'm really chasing a 3d area derived from the centre line polyline. I'm currently using 2019.


itay
Supporter
Forum|alt.badge.img+16
  • Supporter
  • September 13, 2019
umapper1 wrote:

Yes I saw this too! Unfortunately it's not what I'm trying to achieve. This is what made look at alternatives like the OffsetCurveGenerator. I'm really chasing a 3d area derived from the centre line polyline. I'm currently using 2019.

Can you explain what is a 3D area derived from the centre line?


umapper1
Contributor
Forum|alt.badge.img+5
  • Author
  • Contributor
  • September 13, 2019
itay wrote:

Can you explain what is a 3D area derived from the centre line?

A closed polyline with z values on the vertices. If it's still difficult to understand I can draw both the starting data and desired result in CAD if you like?


antoine
Contributor
Forum|alt.badge.img+5
  • Contributor
  • September 13, 2019

It is a bit of a pain because it depends on your turns. Do some tests with offsetCurveGenerator and you will see that there is no 1:1 relationship between the vertices on left and right compared with the central one in some cases so you cant really force the same z value.

 

You could create a 3d surface using multiple methods and then drape your buffer on it. You could also extract the vertices of your buffer, look at the original elevation of the closest vertex from the original line, set them to this elevation and rebuild your polygon.

jdh
Contributor
Forum|alt.badge.img+28
  • Contributor
  • September 13, 2019

I was chasing the same thing last week, with limited success. What I ended up doing was buffering the line in 2D then sending it to the DrapeFeatures of the SurfaceDraper, while the original 3D line was sent to the Points/Lines port. Use a group-by so that each feature creates it's own independent surface model.


jdh
Contributor
Forum|alt.badge.img+28
  • Contributor
  • September 13, 2019
jdh wrote:

I was chasing the same thing last week, with limited success. What I ended up doing was buffering the line in 2D then sending it to the DrapeFeatures of the SurfaceDraper, while the original 3D line was sent to the Points/Lines port. Use a group-by so that each feature creates it's own independent surface model.

For those having difficulty visualizing, the object is to turn the 3D line (blue) into a 3D polygon (red) such that the z is constant perpendicular to the line.

 

 


jdh
Contributor
Forum|alt.badge.img+28
  • Contributor
  • Best Answer
  • September 13, 2019

Alternatively,

 

 

Buffer the line in 2D, Chopper (1 vertex) you now have 2D points, send these to the Base port of a NeighborFinder.

Take your original line and Chop it into points (3d), use a coordinateExtractor to store the Z value as an attribute. Send that to the Candidate port of the NeighborFinder

NeighborFinder should have 1 Neighbor to Find, and Merge Attributes set.

On the Matched port use a 3DForcer to set the Z value of the points. Then use a LineBuilder to turn the 3D points into a polygon

 


ebygomm
Influencer
Forum|alt.badge.img+31
  • Influencer
  • September 13, 2019
jdh wrote:

Alternatively,

 

 

Buffer the line in 2D, Chopper (1 vertex) you now have 2D points, send these to the Base port of a NeighborFinder.

Take your original line and Chop it into points (3d), use a coordinateExtractor to store the Z value as an attribute. Send that to the Candidate port of the NeighborFinder

NeighborFinder should have 1 Neighbor to Find, and Merge Attributes set.

On the Matched port use a 3DForcer to set the Z value of the points. Then use a LineBuilder to turn the 3D points into a polygon

 

A densifier before chopping the the line may improve the output.


umapper1
Contributor
Forum|alt.badge.img+5
  • Author
  • Contributor
  • September 13, 2019

Legends, thanks for the feedback all!

@jdh this was my thinking using the neighbourfinder. My only concern was if I had a complex data set with crossing lines etc. The neighbourfinder may then pick up the wrong points. Although if I gave each string a unique id to start with this might help with the filtering? I might try the feature draper option first, thanks for making the point of using the 'group by' option. This is what had me stuck when I saw a similar post.


jdh
Contributor
Forum|alt.badge.img+28
  • Contributor
  • September 16, 2019
umapper1 wrote:

Legends, thanks for the feedback all!

@jdh this was my thinking using the neighbourfinder. My only concern was if I had a complex data set with crossing lines etc. The neighbourfinder may then pick up the wrong points. Although if I gave each string a unique id to start with this might help with the filtering? I might try the feature draper option first, thanks for making the point of using the 'group by' option. This is what had me stuck when I saw a similar post.

Yes, in any scenario I would recommend creating a unique ID per line feature (Counter) and use it as a group-by.


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings