Example #1
0
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
Example #2
0
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
Example #3
0
 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)
Example #4
0
        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