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