protected RoofTypeOutput build(List<Point2d> borderList, Double height, Double angle, RoofMaterials roofTextureData) {
MeshFactory meshDome = createRoofMesh(roofTextureData);
MeshFactory meshRoof = createRoofMesh(roofTextureData);
TextureData roofTexture = roofTextureData.getRoof().getTextureData();
PolygonList2d borderPolygon = new PolygonList2d(borderList);
buildFlatRoof(borderPolygon, meshRoof, roofTexture);
Circle circle = CircleInsidePolygon.iterativeNonConvex(borderPolygon, 0.01);
circle.setRadius(Math.min(height, circle.getRadius()));
int pIcross = 5;
int pIsection = 9;
buildRotaryShape(meshDome, circle, pIcross, pIsection, true);
RoofTypeOutput rto = new RoofTypeOutput();
rto.setHeight(circle.getRadius());
rto.setMesh(Arrays.asList(meshDome, meshRoof));
rto.setRoofHooksSpaces(null);
rto.setRectangle(RoofTypeUtil.findRectangle(borderList, 0));
return rto;
}