Question

how to create a mansard roof from a top and bottom surfaces. the solid will have 6 surfaces including the top and bottom


Hi, i have shapefile datas for the top and bottom surfaces and i would like to know if i can make a mansard roof solid with 6 surfaces from 2 (the top and bottom).

Thanks.


15 replies

Userlevel 4

I think the Extruder might get you the building itself, but hopefully someone else has an idea about how to make the roof.

Badge +7

Hi @anhphanuet

Those more advanced / specific situations I like to solve using Python code. With some basic math and this api you can generate really nice results.

Hi @anhphanuet

Those more advanced / specific situations I like to solve using Python code. With some basic math and this api you can generate really nice results.

Hi @jeroenstiers , could you plesea be more specific? thank you.

 

I think the Extruder might get you the building itself, but hopefully someone else has an idea about how to make the roof.

 

Hi @david_r

 

I used the Extruder to make Wall surfaces of buildings. but i don't know how to orient the surfaces on every side of the roof
Badge +7

Hi @anhphanuet

Those more advanced / specific situations I like to solve using Python code. With some basic math and this api you can generate really nice results.

The complete horizontal faces can be created easily using the top of the building block and changing the z-value (this can be done with 'pure' FME [see: https://knowledge.safe.com/questions/32944/how-do-i-detect-2d-lines-and-how-to-change-height.html]) on the one hand or buffering it a bit to created the bigger bottom surface on the other hand.

 

 

For the 4 other surfaces, you can extract the x/y/z coordinates from the corners of your building (the 4 corners of the topsurface). Connect them for every side to an FMELine. Now you have created the top lines. Than you'll have to calculate the coordinates of the points located most on the outside (use the bottom surface with chopper for this) and connect them to the already created line (Check FMELine > addPoint(s) on https://docs.safe.com/fme/html/FME_Objects_Python_API/index.html). Lastly close the line by connecting everything to one 'polygon' so this polygon can be used to as input for the creation of the FME Face (https://docs.safe.com/fme/html/FME_Objects_Python_API/index.html).

 

 

Badge +22

Assuming you know the height of the roof (not the height of the building), you can create it without the use of python, I'm attaching a workspace that illustrates the concept, though my lunch break ended before I figured out which surfaces need to have their faces flipped.

 

mansardroof.fmw

 

Userlevel 2
Badge +17

makemansards.fmw

The mansard roof can be created using a combination of 3DForcers, DonutBuilder and FaceReplacer. I am attaching a workspace to illustrate the process.

Badge +22

makemansards.fmw

The mansard roof can be created using a combination of 3DForcers, DonutBuilder and FaceReplacer. I am attaching a workspace to illustrate the process.

I've never used the DonutBuilder in 3D, that's an interesting tidbit

Hi @anhphanuet

Those more advanced / specific situations I like to solve using Python code. With some basic math and this api you can generate really nice results.

thanks @jeroenstiers for the tip

 

makemansards.fmw

The mansard roof can be created using a combination of 3DForcers, DonutBuilder and FaceReplacer. I am attaching a workspace to illustrate the process.

thank you @Dave this really helps me

Assuming you know the height of the roof (not the height of the building), you can create it without the use of python, I'm attaching a workspace that illustrates the concept, though my lunch break ended before I figured out which surfaces need to have their faces flipped.

 

mansardroof.fmw

 

Thank you! I really really appreciate that.

 

 

Userlevel 2
Badge +17
It's an interesting subject, I would suggest another approach: If you create two 3D polygon representing the top and bottom boundaries of a mansard roof, the TINGenerator can transform them into the shape of the roof as a TIN surface (Mesh). e.g.

 

Result:

 

The attached workspace creates all parts of the building including roof, wall, and floor, and also builds a solid from the parts. mansard-roof-solid.fmw
Userlevel 2
Badge +17

makemansards.fmw

The mansard roof can be created using a combination of 3DForcers, DonutBuilder and FaceReplacer. I am attaching a workspace to illustrate the process.

It's an interesting subject, I would suggest another approach: If you create two 3D polygon representing the top and bottom boundaries of a mansard roof, the TINGenerator can transform them into the shape of the roof as a TIN surface (Mesh). e.g.

 

Result:

 

The attached workspace creates all parts of the building including roof, wall, and floor, and also builds a solid from the parts. mansard-roof-solid.fmw
It's an interesting subject, I would suggest another approach: If you create two 3D polygon representing the top and bottom boundaries of a mansard roof, the TINGenerator can transform them into the shape of the roof as a TIN surface (Mesh). e.g.

 

Result:

 

The attached workspace creates all parts of the building including roof, wall, and floor, and also builds a solid from the parts. mansard-roof-solid.fmw
thank you, it's perfect!

 

 

Userlevel 2
Badge +17

I think the Extruder might get you the building itself, but hopefully someone else has an idea about how to make the roof.

I found a way to create a mansard roof as a CSG (Constructive Solid Geometry) using four Extruders in conjunction with CSGBuilders, like this.

 

 

 

There is more than one way :-)

Reply