roofHip operation


  • roofHip(angle)
  • roofHip(angle, overhang)
  • roofHip(angle, overhang, even)
  • roofHip(valueType, value)
  • roofHip(valueType, value, overhang)
  • roofHip(valueType, value, overhang, even)


  1. anglefloat
    Angle of the roof-planes generation (byAngle).
  2. overhangfloat
    Overhang distance for overhangs perpendicular to ridges, measured perpendicular to the shape edges (on the roof).
  3. evenbool
    Whether to make the roof hip even or not. If true, non-planar faces originate.
  4. valueTypeselector
    { byAngle | byHeight }—Type of roof generation.
  5. valuefloat
    Angle or height of the roof-planes as specified by valueType.


The roofHip operation builds a hip roof perpendicular to each face of the current shape's geometry. At every edge, a plane is generated with a given angle or height wrt. the polygon plane. All planes are cut with each other to form the roof faces.

If overhang is set, the roof faces overlap the original shape by this distance. Overhang distances are measured perpendicular to the shape edges (on the roof planes).

If even is set to true, the hip edges are forced to be horizontal. In this case, non-planar roof faces originate.


The connectivity of the roof mesh is optimized for trim plane generation to cut bricks inserted into the roof planes (see examples below).


The scope orientation is set in the following way:

  • x-axis direction is kept as much as possible (old x-axis is projected to the plane of the first face).
  • y-axis along the face normal of the first face.
  • z-axis normal to the two above.

The scope's sizes are adjusted to tightly fit the extruded geometry.

Component tags

The operation automatically applies semantic component tags to the resulting face components:



Blue: original face.

Green: roof faces.

Auto-tag roofHip

For more information on working with component tags, refer to:



Simple Hip Roof

A basic hip roof is generated on top of an extruded L-lot.

A hip roof with roof slope 30 degrees is built on top of an extruded L-lot. The overhang distance is set to 2. Note the setting of the pivot and scope.

Lot  --> 
   extrude(10) Mass
Mass --> 
   comp(f) { top : Top 
           | all : X }
Top  --> 
   roofHip(30, 2) Roof
Hip roof with 30 degrees on L lot

After a component split, each roof face contains trim planes to cut bricks on insertion. Here, per default there are no horizontal trim planes at the ridges. To enable them, set(trim.horizontal, true) is used in front of the component split (details).

Roof --> 
   set(trim.horizontal, true)
   comp(f) { all : X }
Hip roof after comp split


There is exactly one roof face per Top shape edge. Unfortunately in the images it seems like the overlap is in a separate face. However, the simple reason for this is that the edges of the faces in behind bleed through.

Even Hip Roof

This example demonstrates the difference between a standard and an even hip roof built on a trapezoid-lot.

A hip roof with roof slope 45 degrees is built on top of an extruded trapezoid-lot. The overhang is set to 1. Note that the ridge is uneven.

Lot  --> 
   extrude(10) Mass
Mass --> 
   comp(f) { top : Top 
           | all : X }
Top  --> 
   roofHip(45, 1, false) Roof
Hip roof from trapezoid lot

When using the above rule for the Top shape, the ridge vertices are set to the average height, making the ridge even. The roofs are non-planar now.

Top  --> 
   roofHip(45, 1, true) Roof
Non planar hip roof


For many shapes, ridges get implicitly even and hence the even option doesn't change anything.