Drawing Linear Networks – Example 20.4

Elk_path_project_10 KopieGetting a linear network into 3 Dimensions can be very easy, depending on what your expectations are, but like every problem, starts to present problems the further you get into it. In this brief example, I will show some of the methods I am currently using on my models, although I’m looking for ways to improve this to make a more interesting and robust system for the future.

The basic logic I have already described. If you have not read it or tried it out yet, you should look at this Example 5.2 where I talk about projecting geometry, especially the first part. There are three steps.


Step One– Identify Lines for projecting. Open Street Map, as I discussed a few posts ago, keeps road geometry into a hierarchy of classifications. Some classes should be modeled differently than others, while some classes can safely have the same process as others. All classes, though, contain sets of points that are grouped together and can be laced together with a “Polyline” or another type of curve (more on that later).

Step Two-Project Curve. A very straightforward step. Use the “Project Curve” component, plug in your road lines, your surface, and up it goes to the surface.

Step Three – Create a Curve Sweep. Most roads have a consistent width. You can create simple, adjustable line segment whose length is the width of the road, and then “Orient” that segment at its midpoint to the road curve. Refer to example 5.2 for more on this process.


Roads projected with different widths and colors based on class.

Since you will be sweeping lots of different types of paths and will be repeating the process with maybe only a different width over and over, it might be useful to create a “Cluster” (somewhat like a custom component) to keep your drawing a bit cleaner. This also allows you to edit the component once and have the variations work in all instances of the component. Below is an image of my “Path Maker” cluster (this can also be used for streams), as well as the contents inside.


Further Refinements


Left – Sweep Drawn with “Polyline” ; Center – Sweep drawn with “Interpolate Crv”; Right – Road geometry “baked” with buildings.

You can play around with different types of curves to see what is the best for drawing your roads. The image above shows two possible variations. If you use “Interpolate” your roads will turn out smoother, but roads with sharp turns will have large arcs as well. The “Interpolate” curves work well on long, winding, country roads, but not as well in gridded cities, for example. It probably is the best solution, though for things like rivers. There is also the “KinkCrv” component, which works well sometimes, but it can create buggy results when two control points are drawn too close together.

Another thing you might try is adding some thickness to your roads. This is especially important when you have an underlying surface and want the roads to be “above” the surface.

I have also not completely solved the problem of the orientation plane for the sweeps. It works in 95% of all cases, but in more extreme topography the path starts warping like a roller coaster. I am working on some better solutions for roads, so stay tuned.