My two cents worth
mod = Sketchup.active_model
ent = mod.active_entities
sel = mod.selection
vue = mod.active_view
val = UI.inputbox(["Length of Side:","Bulge of Arc:"],[10.feet,1.feet],"Concave Roof")
return unless val
side,bulge = val;half=side/2
pts = [[0,0,0],[0,side,0],[side,side,0],[side,0,0]]
fac = ent.add_face(pts)
pts = [[side,half,0],[half,half,0],[half,half,half]]
edg = ent.add_edges(pts)
ctr = Geom::Point3d.linear_combination(0.5,pts[0],0.5,pts[2])
ctr.offset!(ctr.vector_to(pts[1]),bulge);#ent.add_cpoint(ctr)
mp1 = Geom::Point3d.linear_combination(0.5,ctr,0.5,pts[0])
mp2 = Geom::Point3d.linear_combination(0.5,ctr,0.5,pts[2])
tr1 = Geom::Transformation.rotation(ctr,[0,-1,0], 90.degrees)
tr2 = Geom::Transformation.rotation(ctr,[0,-1,0],-90.degrees)
cv1 = ctr.vector_to(pts[0]).normalize;
cv1.transform! tr1;#p cv1
cv2 = ctr.vector_to(pts[2]).normalize
cv2.transform! tr2; #p cv2
int = Geom.intersect_line_line([mp1,cv1],[mp2,cv2])
rad = int.distance(ctr);#ent.add_cpoint(int)
ang = int.vector_to(pts[0]).angle_between(int.vector_to(pts[2]))
arc = ent.add_arc(int,int.vector_to(pts[2]),[0,-1,0],rad,0,ang,8)
arc[0].find_faces
arc[0].faces[0].followme fac.edges
ent.grep(Sketchup::Face){|f| f.reverse! if f.normal.z<0}