####### DM2 - ue8 # Raphael Wieser - Group 3 Hirschberg import rhinoscriptsyntax as rs import random as ran import flipped_classroom_lib as fc reload(fc) rs.DeleteObjects(rs.AllObjects()) ############################################################### # Your Panel functions... ############################################################### def my_panel(points, scale): rs.AddSrfPt(points) (P0,P1,P2,P3) = points rs.AddLine(P0,P2) d_cen1 = rs.VectorDivide(rs.VectorAdd(P0,P2),2) rs.AddPoint(d_cen1) rs.AddLine(P1,P3) d_cen2 = rs.VectorDivide(rs.VectorAdd(P1,P3),2) rs.AddPoint(d_cen2) center_pt = rs.VectorDivide(rs.VectorAdd(d_cen1,d_cen2),2) rs.AddPoint(center_pt) if not(rs.PointCompare(d_cen1,d_cen2)): rs.AddLine(d_cen1,d_cen2) vec1 = rs.VectorSubtract(P0, center_pt) vec2 = rs.VectorSubtract(P3, center_pt) normal = rs.VectorCrossProduct(vec1, vec2) u_normal = rs.VectorUnitize(normal) su_normal = rs.VectorScale(u_normal, scale) normal_pt = rs.VectorAdd(center_pt, su_normal) rs.AddPoint(normal_pt) rs.AddLine(center_pt, normal_pt) rs.AddSrfPt([P0, normal_pt, P1]) rs.AddSrfPt([P1, normal_pt, P2]) rs.AddSrfPt([P2, normal_pt, P3]) rs.AddSrfPt([P3, normal_pt, P0]) def my_panel_frame(points, scale, offset): (P0,P1,P2,P3) = points pline = rs.AddPolyline([P0,P1,P2,P3,P0]) d_cen1 = rs.VectorDivide(rs.VectorAdd(P0,P2),2) d_cen2 = rs.VectorDivide(rs.VectorAdd(P1,P3),2) center_pt = rs.VectorDivide(rs.VectorAdd(d_cen1,d_cen2),2) #prepare vectors for cross product to get normal vec1 = rs.VectorSubtract(P0, center_pt) vec2 = rs.VectorSubtract(P3, center_pt) normal = rs.VectorCrossProduct(vec1, vec2) u_normal = rs.VectorUnitize(normal) su_normal = rs.VectorScale(u_normal, scale) normal_pt = rs.VectorAdd(center_pt, su_normal) rs.AddPoint(normal_pt) rs.AddLine(center_pt, normal_pt) #off_l = rs.OffsetCurve(pline, center_pt, offset, u_normal) off_l = rs.ScaleObject(pline, center_pt, [scale,scale,scale], copy=True) s_points = rs.CurvePoints(off_l) #create front of frame rs.AddSrfPt([P0, s_points[0], s_points[1], P1]) rs.AddSrfPt([P1, s_points[1], s_points[2], P2]) rs.AddSrfPt([P2, s_points[2], s_points[3], P3]) rs.AddSrfPt([P3, s_points[3], s_points[0], P0]) off_l_s = rs.CopyObject(off_l, su_normal) ss_points = rs.CurvePoints(off_l_s) rs.AddSrfPt([ss_points[0], s_points[0], s_points[1], ss_points[1]]) rs.AddSrfPt([ss_points[1], s_points[1], s_points[2], ss_points[2]]) rs.AddSrfPt([ss_points[2], s_points[2], s_points[3], ss_points[3]]) rs.AddSrfPt([ss_points[3], s_points[3], s_points[0], ss_points[0]]) def my_panel_grid(points, split): (P0,P1,P2,P3) = points L_L = rs.AddLine(P0,P3) R_L = rs.AddLine(P1,P2) v_lines = [L_L, R_L] edge_pts =[] for e in v_lines: rs.RebuildCurve(e, 1, split) edge_pts.extend(rs.CurvePoints(e)) grid_pts = [] for i in range(split): hline = rs.AddLine(edge_pts[i], edge_pts[i+split]) rs.RebuildCurve(hline, 1, split) grid_pts.extend(rs.CurvePoints(hline)) for i,p in enumerate(grid_pts): rs.AddPoint(p) cmd = "-Dot {} {} _Enter ".format(i,p) rs.Command(cmd, False) ############################################################### rs.EnableRedraw(False) quad = [[0,0,-1], [1,0,-1], [1,2,-25], [0,2,-10]] #result_list = fc.PEF_single_face(quad) #result_list = fc.PEF_face(7, 10, 8.0, 5.0, 30) #result_list = fc.PEF_face_w(7, 10, 8.0, 5.0, 30, 2.0) result_list = fc.PEF_pantheon() p_list = result_list[0] # Pointlist, contains single points e_list = result_list[1] # Horizontal Edgelist, contains lists with two points ve_list = result_list[2] # Vertical Edgelist, contains lists with two points f_list = result_list[3] # Facelist, contans lists with four points (quads) zcol = result_list[4] # number of levels of faces xcol = result_list[5] # number of faces in one level #print "there are " + str(len(p_list)) + " points and " + str(len(f_list)) + " faces on " + str(zcol) + " levels, "+str(xcol)+" per level!" if 1: for i in range(zcol): for j in range(xcol): points = f_list[i*xcol+j] if i%1 == 0: my_panel_frame(points, scale=0.3, offset=1.5) my_panel(points, scale=ran.uniform(5.5, 8.5)) # ran Spitze 0,5-8,5 else: my_panel_frame(points, scale=0.75, offset=1) #my_panel_frame(points, scale=ran.uniform(0.5, 6.5), offset=0.5) rs.AddSrfPt(f_list[i*xcol+j]) if 1: for line in e_list: mline = rs.AddLine(line[0], line[1]) framing=rs.AddPipe(mline, 0, 0.4, cap=2) for line in ve_list: mline = rs.AddLine(line[0], line[1]) rs.AddPipe(mline, 0, .15, cap=2)