def add_door_right(room_, side_): line = QLineF(room_.topRight(), room_.bottomRight()) line_lenght = int(line.length()) step = line_lenght / 100. line_points = [] for t in np.arange(0.25, 0.75, step): line_point = line.pointAt(t) line_points.append(QPointF(line_point.x(), line_point.y())) random_center_door = random.choice(line_points) left_door = QPointF(random_center_door.x(), random_center_door.y() - 0.5) right_door = QPointF(random_center_door.x(), random_center_door.y() + 0.5) if side_ == 'bottom': polygon = QPolygonF([ right_door, room_.topRight(), room_.topLeft(), room_.bottomLeft(), room_.bottomRight(), left_door ]) elif side_ == 'top': polygon = QPolygonF([ right_door, room_.bottomRight(), room_.bottomLeft(), room_.topLeft(), room_.topRight(), left_door ]) return polygon
def add_door_center(room_): line = QLineF(room_.topLeft(), room_.topRight()) line_lenght = int( line.length() ) # -1 sin pasillo, 0 antes de la primera habitacion, 1 antes de la segunda step = line_lenght / 100. line_points = [] for t in np.arange(0.25, 0.75, step): line_point = line.pointAt(t) line_points.append(QPointF(line_point.x(), line_point.y())) random_center_door = random.choice(line_points) left_door = QPointF(random_center_door.x() - 0.5, random_center_door.y()) right_door = QPointF(random_center_door.x() + 0.5, random_center_door.y()) polygon = QPolygonF([ right_door, room_.topRight(), room_.bottomRight(), room_.bottomLeft(), room_.topLeft(), left_door ]) return polygon
def update_line(self): overlapping_arcs = [ arc for arc in self.rel_item.arc_items if arc.obj_item == self.obj_item ] count = len(overlapping_arcs) path = QPainterPath(self.rel_item.pos()) if count == 1: path.lineTo(self.obj_item.pos()) else: rank = overlapping_arcs.index(self) line = QLineF(self.rel_item.pos(), self.obj_item.pos()) line.setP1(line.center()) line = line.normalVector() line.setLength(self._width * count) line.setP1(2 * line.p1() - line.p2()) t = rank / (count - 1) ctrl_point = line.pointAt(t) path.quadTo(ctrl_point, self.obj_item.pos()) self.setPath(path)
initial_corridor_interior.bottomLeft(), initial_corridor_interior.topLeft() ] } # -------- Recorro el pasillo inicial buscando puntos a lo largo de su perimetro ----------- for side, points in corridor_sides.items(): line = QLineF(points[0], points[1]) line_lenght = int(line.length()) step = line_lenght / 100. for t in np.arange( 0.20, 0.80, step ): # intento evitar las esquinas empezando en 0.2 y acabando en 0.8 line_point = line.pointAt(t) corridor_points[side].append(QPointF(line_point.x(), line_point.y())) max_rooms_per_side = math.ceil(num_rooms / 2) # Dividir la lista de puntos en secciones dependiendo del numero de habitaciones para escoger puntos de esa seccion --- Darle una vuelta # for side, list_points in corridor_points.items(): # corridor_points[side] = [list_points[i::max_rooms_per_side] for i in np.arange(max_rooms_per_side)] # print(f'tamaño despues de dividir = {len(corridor_points[side])}') # # exit(-1) # -------------- Crear habitaciones aleatorias --------------- result_polygon = initial_polygon