Projecting Surface Regions – Example 20.5


So far, we have looked at projecting points in order to move Buildings to our surface and projecting lines to form networks, such as for roads. Another category of geometry that can be imported and drawn in OSM are area regions, for example forests, fields, pastures (meadows), etc. While this example can’t truthfully be called “Project Surface”, in some ways that is what we are doing. What we are really doing, however, is projecting curves in order to partition, or split, our overall surface into smaller pieces, so that we can process them essentially as separate entities.

In the model above, i used this technique to draw the individual fields and pastures, as well as the forest areas. In much of OSM, the fields are not drawn as separate entities, but it is worthwhile (I think!) investing the time to draw these in OSM yourself if this is not done already, especially if your are making a model in an agricultural landscape. Later, I want to work on a procedural field generator, but that is something for later, I hope.

Initial Steps – Setting up our surface


In the previous examples, I was using always a square surface to project the geometry. In this case, however, i want to use an irregular boundary since I only want to model the town of Ecoteaux itself. I will model the adjacent towns separately, and then piece them together like a puzzle. It is often worthwhile to think about what the boundaries for your model will be, whether they be a natural feature, like a ridge line, watershed, etc., a political boundary, or just something arbitrary. In this case, since I have the commune’s political boundaries and they are quite small and manageable, I will use them.

I followed three quick steps. I bought the boundaries into Rhino using the Elk Generic OSM component and the tag “K=boundary” I then baked these lines into Rhino. I joined the polylines for my town’s boundaries using the “Join” command and made sure it was closed, and deleted the other lines. I then “offset” this curve using smooth corners (otherwise it might break up) 10 meters. Why? There are two general reasons. First, through experience, I have found out that the political boundaries often correspond to features like rivers, and sometimes roads. If you trim your surface exactly on the boundary, the modeling of features which follow the boundary will get messed up. You can later trim the surface again using the “real” boundary if you want, after you finish projecting and modeling all your features. This is optional, but I like to do it. The second reason, and more important, is that we will use our “inner” boundary curve later to project features to the surface. If the edge of a feature is exactly on the same line as the surface edge, sometimes the features don’t project properly. Hopefully this will make sense later, but for now, try and draw the two “outer boundary” which is used just for trimming the surface, and “inner” boundary which will be used for everything else.

Once you have a good outer boundary curve, you can simply type “Trim” in Rhino to trim the edges of the surface you developed and baked in Example 20.2. If you want, you can delete this outer curve now in Rhino.

Basic Steps for Surface Subdivision


So I have my trimmed surface corresponding with my political boundaries (+10 m) and now I’m ready to start drawing fields and forests. I will start with the Pastures in my model, which have been classified, per convention, under “Natural=Meadow” in Open Street Map. In the image above, all the pastures imported through Elk are initially drawn as Polylines.

The next order of business is to get rid of the pastures outside my boundary and also to split the pastures that partially overlap the boundary. I don’t want to simply project the curves yet to do this because I will get some curves that are open, and only closed curves will work for the next step. A good way to do this is to use the “Region Intersection” component. What this does is takes two sets of lines. Set A will be our pasture polylines (note these have been grafted), and Set B will be our town boundary. For this, I am using the “inner” boundary curve, not the “outer” boundary curve which I offset in order to trim the surface. The “Region Intersection” component will process this data and output only those regions that correspond to both sets. In the image above, I have 3 pastures. Pasture 1 is completely outside the boundary curve, so it disappears. Pasture 2 is completely inside, so it stays unchanged. Pasture 3 overlaps the boundary, and is redrawn as a closed polyline which corresponds only to the parts of it that are inside the boundary.


Once this is done, I project the curves to the surface. I now want to split my initial surface into sub-surfaces using these curves. For this I use the “Split Surface” component. The output will be a series of smaller surfaces corresponding to the projected pasture edges, and a larger surface for “everything else”, which always comes out as item 0 in the list. I can cull this item since I don’t need it.

General process for translating Area geometries from Elk into 3 dimension subsurfaces.

General process for translating Area geometries from Elk into 3 dimension subsurfaces.

Further Steps

I can run the same, or similar process on other area types. Some of these are “landuse=farm” or “landuse=farmland” for fields, which I can applied a gradient to similar to what I did in Example 20.1. I also did in this model the same process for “landuse=forest” (and sometimes “natural=wood”)  There are other area’s that could be done…orchards, glaciers, mountain scree…   But this depends on what you have from OSM. In my final model for this step, an easy, although not entirely convincing way of modeling forest massing is to simply “Extrude” your forest surface based on the general height of the tree massing. I went a step further and added an aerial image of a forest as a texture to this in Rhino Render, but you could just color it green.

One last thing I did was I decided to make a base for my model to show how far the terrain is over Sea Level. To do this, I took my inner boundary curve from 2D and projected it up to the surface. Then I created a Loft between the original and the projected boundary curve.

So in the image below, I have a summary of what we’ve looked at so far. Buildings. Roads. Rivers and Streams (projected in the same way as Roads), and the areas for fields, pastures, and forests, with there forests extruded. And last the base, a simple loft as described above.