def preferred(self,vector): ''' Returns True if vector is preferred, False if it is not ''' xy = self.memory['preferred_direction'] xy = (xy[0],xy[1],0) if (helpers.compare_tuple(xy,(0,0,0)) or helpers.compare_tuple(( vector[0],vector[1],0),(0,0,0))): return True return (helpers.smallest_angle((vector[0],vector[1],0),xy) <= construction.beam['direction_tolerance_angle'])
def exists(self,e1,e2): ''' Returns whether or not the beam defined by the endpoints e1 -> e2 exists ''' # Let's get the box xi, yi, zi = self.__get_indeces(e1) # Cycle through the box and compare endpoints for name in self.model[xi][yi][zi]: beam = self.model[xi][yi][zi][name] if ((helpers.compare_tuple(beam.endpoints.i,e1,0.5) and helpers.compare_tuple( beam.endpoints.j,e2,0.5)) or (helpers.compare_tuple(beam.endpoints.i,e2,0.5) and helpers.compare_tuple(beam.endpoints.j,e1,0.5))): return True return False
def addjoint(self, coord, beam): ''' Adds a joint (at the specified coordinate), to the beam itself. The beam variable defines the which crosses this one at the joint ''' # Verify that the coordinate is on the beam based on endpoints if not helpers.on_line(self.endpoints.i, self.endpoints.j, coord): return False else: coord = Coord(x=coord[0],y=coord[1],z=coord[2]) # We cycle manually so we can compare using our compare function for key, beams in self.joints.items(): # We have a key and the beam isn't already there if helpers.compare_tuple(key,coord) and beam not in beams: self.joints[key].append(beam) return True self.joints[coord] = [beam] return True