Split a building polygon and extrude each split by the underlying map layer.

5371
8
12-11-2014 01:03 AM
KennethLindhardt
Occasional Contributor

Hi, is it possible to divide the underlying map layer so that a great building polygon , could be split up as well, and extrude each part to the underling layer height?

A big mall is usually a flat roof, but in many different heights.

This doesn’t have to be precise, but just to indicate that a lot of things are going on

Capture.PNG

0 Kudos
8 Replies
MatthiasBuehler
Occasional Contributor III

Hi,

you'd have to manually set the splits. and for each defined split position, you'd need to have an attr initialized, so lots of attrs and very tedious.

I'd not recommend going this way ..

m.

Matthias Buehler

Head of 3D Technologies

twitter: @MattB3D

-----------------------------------

Garsdale Design Limited

matthias.buehler@garsdaledesign.co.uk

www.garsdaledesign.co.uk

0 Kudos
by Anonymous User
Not applicable

How many buildings do you need to do this for?

0 Kudos
DavidWasserman
Occasional Contributor III

HI Kenneth,

If this is a Raster from Lidar, the work around I would suggest would require some raster processing. What I would suggest is either doing some reclassification or statistical processing to create new polygons. So the work flow would be to reclassify each so that each change in height creates a new set of raster cells with the same value. When you have these raster cells of the same value, you can convert them to polygons and keep their height attributes. I would then extrude the new polygons downward until the occlude with the shapes below (assuming you fill polygon holes, you can collide with terrain to I guess). Then I would treat each shape/model as something that needs to be textured in a similar way to the rest of the building. This will increase the start shape count, but it could...maybe represent this. This is just a throw away idea.

Another way to do this is to treat the base shape as a raster in CGA...This will be brutal to process but I am literally suggesting creating a raster splitter where you split horizontally and vertically in equal measure (same size as your cells perhaps? ), and then sample the heights directly from the raster and each shape should extrude  in a blockly way to the value you want. It will not handle angles as well as the solution I mentioned above might, but it might be faster.

These are definitely hacks (that I have never tried), and I think Matthias is right doing pure CGA splitting could be tedious, but maybe there are options when used with ArcGIS.

David

David Wasserman, AICP
0 Kudos
DavidWasserman
Occasional Contributor III

Hi Kenneth,

This one interests me I was thinking about how you would convert the classified raster cells to polygons. I think you would need to pick the number of groups carefully, and determine how you want to classify them (you create groups or the computer helps with one of the classification algorithms such as natural breaks). Once you have these cells you can convert them to polygons, I think you can use Union to "Fill Gaps" when you uncheck a certain parameter (never tried might need a buffer hack or editing). You want every polygon to have no holes because then when higher up shapes collide with lower shapes during the extrusion the occlusion functions should make snug connections (punch through a little bit though). You will have a few start shapes from this, and they would either need custom texturing rules or some other functionality to make it seem like they are part of a single building. These are all wild shots...I have abused rasters before but not like this suggestion.

David

David Wasserman, AICP
0 Kudos
KennethLindhardt
Occasional Contributor

I’m glad I’m keeping your mind busy David 😉 In the city I’m testing it on, it would be around 3 to 4 buildings in total and maybe only 1 is important.

My thought was just to create blocks inside the building polygon for around 10 x 10 m and then extrude each to the value of the raster, then delete as much overlapping polygons as possible.

The easiest way would be to split the polygon directly in ArcMap, whenever there is a new building height, and maybe do this automatically as you mentioned David. Why I thought of this the way I did, was because, after I ran my model in ArcMap, where I’m creating left, right height and so on, I’m stocked if I haven’t thought every building thrue, that could have a flat roof with a lot of variations. So my plan was to try and create the process within the rule like : This building looks a little strange, change the attr to use a map layer, and then I just needed a raster for that exact building.

For a process like that, is it possible to split a polygone inside CE and have the splits become new shapes, that that individually would take the value from the raster. Then I would only need 2 attributes.

As I hear it, that is not a possibility?

0 Kudos
MatthiasBuehler
Occasional Contributor III

Hi,

CityEngine was not designed for such hacks.. not at all.

Note that CityEngine is a procedural modeling application, made for rule based creation of hundreds of building. Thus, it is not necessary best used for every task. If you try to model a specific geometry like e.g. a marble statue or the eiffel tower oder such a thing, you will spend much more time than if you would model it manually.

Secondly, CityEngine can only sample an image ONCE, at the 'start shape' (centroid or if concave at centroid of biggest polygon). During model generation, CGA has the limitation that it can not further sample anything else.

Ok ?

Matt

Matthias Buehler

Head of 3D Technologies

twitter: @MattB3D

-----------------------------------

Garsdale Design Limited

matthias.buehler@garsdaledesign.co.uk

www.garsdaledesign.co.uk

DavidWasserman
Occasional Contributor III

Understood.

David

David Wasserman, AICP
0 Kudos
DavidWasserman
Occasional Contributor III

Yeah I think I might have been stretching what is possible. I think Matthias might be right and it might be best to use another tool. I still think there might be potential for classifying the raster and making new polygons (less intense on CityEngine more work put on ArcGIS). Again though, never tried these. I was thinking about the problem more this morning and thought about 3D Analyst as an option...

Kenneth would just making a TIN from the raster, exporting it to multi-patch and importing it into your scene do the job too?

See 3D Analyst Functions below (I have never used the interpolate polygon to multipatch):

Raster to Tin
Interpolate Polygon to Multipatch

You could then apply basic rules to the multipatch like coloring them and such. However it is possible to texture them too using the Comp functions that take angle into account.

  • vertical, horizontal, aslant, nutant: The y-normals are analyzed in relation to the xz-plane of the current shape's local coordinate system. The the angle between normals and xz-plane is used to classify the components as follows:
    The exact ranges are (in degrees):
    • horizontal: ]78.75, 90]
    • aslant: ]11.25, 78.75]
    • vertical: ]-11.25, 11.25]
    • nutant: ]-78.55, -11.25]
    • horizontal: [-90, -78.75]

This is in fact how Chris Wilkins Building Shell Rule works that is in the Complete Streets Example. Again I am suggesting things I have never tried. Sorry about that.

It is an interesting problem.

David

David Wasserman, AICP
0 Kudos