Skip to main content

I have a little challenge that i am not sure how to tackle. Hoping for some hints.

 

I have a large obj model. I can import this and it describes a surface of a land area.

 

What I think I want to do is take a seperate set of polygons (3D) I have for building footprints (all flat but in 3D)

 

I then wish to use these polygons to "slice" the bottom of the buildings to generate building shapes which I want to assign an attribute (its identifier) from the polygons which do the slicing.

 

 

 

I am thinking clipper and buffer but not sure whether it preserves Z values for the surface bottom.

 

 

My data also has an arbitary 0,0 so will have to move the origin and stuff doesn't 100% line up. That's something new for me also.

Hi @paulbushnell, are you able to share a sample of your data?

Hi @paulbushnell, since the footprint polygons are 3D, I suppose that the z-coordinate represents the elevation of the bottom of the building. If my supposing was correct, you can just apply the Extruder to transform the footprint polygons into building solids, then all the attributes of the source polygons will be propagated into the resulting solids.

What I'm unclear is "slice". Could you please elaborate on what the "slice" means?

The Offsetter transformer might help you to move the origin of any geometry.


Hi @takashi,

Thanks for your help and time.

The surface is quite a detailed model with more details than the footprints (chimneys/ roof structures etc). These have been obtained from aerial survey information. The footprints are obtained from more accurate ground based surveys and are part of our master records. What I am wanting to do is extract the buildings from this surface model to use as fancy 3D representation of the buildings and position it on top of the footprints from the ground survey model so it doesn't look odd. The slicing bit is wrong - Really what I should have said is I want to ensure that the bottom z vertices sit on the existing footprint (perhaps by extruding down then slicing off the bottom). Make sense?

Thanks,

Paul


I think clipping the surface by each footprint is basically what you want to do. If so, a possible way is: transform the surface into its wire frame (MultiCurve), clip it by footprint, then re-create surface from the clipped wire frame.

0684Q00000ArLP7QAN.png

# PythonCaller Script: Transform Surface into Wire Frame
# Assume that the input feature has a surface geometry.
# If the geometry is not a surface, this script raises an error.
def surfaceToWireFrame(feature):
    surface = feature.getGeometry()
    feature.setGeometry(surface.getAsWireFrame())

Hi @takashi,

 

Thanks. I will have a look. I am away for a while now but will try it.

 

Paul


Reply