Instant Roof Plugin For Sketchup Free Download Fixed May 2026

def self.add_gutter(model, points) points.each_cons(2) do |p1, p2| model.active_entities.add_line(p1, p2) end end

def self.generate_roof model = Sketchup.active_model sel = model.selection instant roof plugin for sketchup free download fixed

# Check if face is selected
if sel.empty? || !sel.first.is_a?(Sketchup::Face)
  UI.messagebox("Please select a single face (floor plan) first!")
  return false
end
face = sel.first
# Get roof parameters
prompts = ["Roof Height (mm)", "Overhang (mm)", "Eave Thickness (mm)"]
defaults = [1500, 300, 200]
input = UI.inputbox(prompts, defaults, "Instant Roof Settings")
return false unless input
height = input[0].to_mm
overhang = input[1].to_mm
eave_thick = input[2].to_mm
model.start_operation("Generate Roof", true)
begin
  # Get face boundary
  outer_loop = face.outer_loop
  vertices = outer_loop.vertices
  points = vertices.map v
# Create overhang
  overhang_points = expand_polygon(points, overhang)
# Get highest point for roof peak
  center = Geom::Point3d.new(0, 0, 0)
  overhang_points.each  
  center = center / overhang_points.length
# Create roof faces
  roof_faces = []
  overhang_points.each_with_index do |p1, i|
    p2 = overhang_points[(i+1) % overhang_points.length]
# Calculate ridge point for this segment
    mid = Geom::Point3d.new((p1.x + p2.x)/2, (p1.y + p2.y)/2, 0)
    ridge = Geom::Point3d.new(mid.x, mid.y, height)
# Create triangular roof face
    points3d = [p1, ridge, p2]
    roof_face = model.active_entities.add_face(points3d)
    roof_faces << roof_face if roof_face
  end
# Add eave thickness (extrude edges)
  add_eaves(model, overhang_points, eave_thick)
# Add gutter line
  add_gutter(model, overhang_points)
UI.messagebox("✅ Roof generated successfully!\nHeight: #heightmm\nOverhang: #overhangmm")
rescue => e
  UI.messagebox("Error: #e.message")
ensure
  model.commit_operation
end
true

end

end