예제 #1
0
    def rule_Connect_90lap(self,selected_beams,projected_point_list,face_ids,beam_length,ext_start,name):

        #create joints on selected beams 
        joint_distance_to_selectedBeams = []
        for i in range (len(selected_beams)):
            print("Adding Joint to Beam: ", i)
            #Prepare information
            selected_beam =  selected_beams[i]
            projected_point = projected_point_list[i]
            face_id = face_ids[i]
            print(face_id)
            joint_distance = selected_beam.Get_distancefromBeamYZFrame(projected_point)
            joint_distance_to_selectedBeams.append(joint_distance)
            #Create Joint
            new_joint = Joint_90lap(joint_distance,face_id,100,50,100)
            #Add new Joint to Beam and update beam mesh
            selected_beam.joints.append(new_joint)
            new_joint.update_joint_mesh(selected_beam)
            selected_beam.update_mesh()

            
        #Add match beam 
        #####get beam frame 
        #construct a frame similar to face frame with max point as origin 
        
        face_frame = selected_beams[0].face_frame(face_ids[0])
        max_point_frame = Frame(face_frame.point,face_frame.xaxis,face_frame.yaxis)
        connection_beam_origin = max_point_frame.represent_point_in_global_coordinates([(joint_distance_to_selectedBeams[0]-50),0, ext_start])
        connection_beam_frame = Frame(connection_beam_origin, face_frame.normal * -1.0, face_frame.yaxis)

        match_beam = self.rule_create_beam(connection_beam_frame,beam_length,100,100,name)

        #calculate distance from projected points to match_beam[0]plane
        for i in range(len(projected_point_list)):
            print("Adding Joint " , i)
            pt = projected_point_list[i]
            match_beam_joint_distance = match_beam.Get_distancefromBeamYZFrame(pt)
            joint = Joint_90lap(match_beam_joint_distance,3,100,50,100) #match_beam joint face is always 3 
            match_beam.joints.append(joint)
            joint.update_joint_mesh(match_beam)

        #performs multiple booleans in 1 call   
        match_beam.update_mesh()
    xaxis = normalize_vector(result[1][0])
    yaxis = normalize_vector(result[1][1])
    zaxis = normalize_vector(result[1][2])
    frame = Frame(origin, xaxis, yaxis)

    if yaxis[2] > 0:
        offset = scale_vector(zaxis, -0.050)
    else:
        offset = scale_vector(zaxis, +0.050)

    points_xy = [
        frame.represent_point_in_local_coordinates(point) for point in points
    ]
    box_xy = bounding_box_xy(points_xy)
    box = [
        frame.represent_point_in_global_coordinates(corner_xy)[:]
        for corner_xy in box_xy
    ]
    box1 = offset_polygon(box, -0.025)
    box2 = [add_vectors(point, offset) for point in box1]

    POLYGONS.append({'points': box1 + box1[:1], 'color': (0, 0, 0)})

    POLYGONS.append({'points': box2 + box2[:1], 'color': (0, 0, 0)})

    POLYGONS.append({
        'points': [box1[0], box1[3], box2[3], box2[0], box1[0]],
        'color': (0, 0, 0)
    })

    POLYGONS.append({