fogón

← CiudadObjeto 3Dfogon/puesto-de-diarios

Puesto de diarios

de fogonCC013187 bloques
Puesto de diariosArrastrá para girarlo
// «Puesto de diarios» · gpt-6-sol (medium)
// A sidewalk newspaper stand: a green metal booth with a small roof, its front (-y) fully open showing stacked newspapers and colorful magazines hanging on racks in rows, with folding side panels opened like wings that also display magazines. A little stool inside.

const green = "#174d3d";
const greenLight = "#28745a";
const greenDark = "#103b32";
const gold = "#e4b94d";
const paper = "#f4ecd9";

// Concrete threshold and the booth's solid floor.
box(11, 15, 0, 36, 37, 0, "#c7c6b9");
box(12, 17, 1, 35, 36, 2, greenDark);
box(14, 18, 2, 33, 34, 2, "#b9c7b2");
for (let x = 15; x <= 33; x += 5)
  for (let y = 19; y <= 34; y += 5)
    if (rand() < 0.65) set(x, y, 2, "#cbd1bd");
box(13, 16, 1, 34, 16, 2, gold);

// Back and side walls. The entire front remains open.
box(12, 34, 3, 35, 36, 33, green);
box(14, 33, 5, 33, 33, 32, "#a8c8a5");
box(12, 18, 3, 13, 35, 33, green);
box(34, 18, 3, 35, 35, 33, green);
box(13, 19, 5, 13, 33, 31, greenLight);
box(34, 19, 5, 34, 33, 31, greenLight);

// Flecks of paint on the broad inside wall.
for (let i = 0; i < 120; i++) {
  const x = 15 + Math.floor(rand() * 18);
  const z = 6 + Math.floor(rand() * 26);
  if (get(x, 33, z) === "#a8c8a5")
    set(x, 33, z, rand() < 0.5 ? "#b3cbaa" : "#9bbd9b");
}

// Crisp iron frame and little decorative corners.
for (const x of [12, 34]) {
  box(x, 16, 2, x + 1, 18, 33, greenDark);
  box(x, 16, 10, x + 1, 16, 11, gold);
  box(x, 16, 29, x + 1, 16, 30, gold);
  box(x, 17, 3, x, 17, 32, greenLight);
}
box(13, 17, 32, 34, 18, 34, greenDark);
box(14, 16, 33, 33, 16, 33, gold);

// A chunky projecting roof.
box(10, 14, 34, 38, 38, 35, greenDark);
box(11, 15, 35, 37, 37, 36, green);
box(12, 17, 37, 36, 36, 37, greenLight);
for (let i = 0; i < 110; i++) {
  const x = 12 + Math.floor(rand() * 25);
  const y = 17 + Math.floor(rand() * 20);
  if (get(x, y, 37) === greenLight)
    set(x, y, 37, rand() < 0.5 ? "#307b60" : "#24694f");
}
box(10, 14, 34, 38, 14, 35, greenLight);
box(10, 14, 34, 38, 14, 34, gold);

// Raised DIARIOS sign across the front edge.
box(10, 14, 36, 38, 17, 43, greenDark);
box(11, 13, 37, 37, 13, 41, green);
box(10, 13, 36, 38, 13, 36, gold);
box(10, 13, 43, 38, 13, 43, gold);
for (const x of [10, 38]) {
  box(x, 13, 37, x, 13, 42, "#d77355");
  set(x, 12, 39, gold);
}
const glyphs = {
  D: ["110", "101", "101", "101", "110"],
  I: ["111", "010", "010", "010", "111"],
  A: ["010", "101", "111", "101", "101"],
  R: ["110", "101", "110", "101", "101"],
  O: ["010", "101", "101", "101", "010"],
  S: ["011", "100", "010", "001", "110"]
};
[..."DIARIOS"].forEach((letter, i) => {
  glyphs[letter].forEach((row, r) => {
    for (let c = 0; c < 3; c++)
      if (row[c] === "1") set(11 + i * 4 + c, 12, 41 - r, paper);
  });
});

// Magazine covers: colored masthead, bold picture, tiny headline.
const covers = [
  ["#ed745c", "#ffe7a5", "#467cba"],
  ["#4f88c5", "#fff0ce", "#edb84e"],
  ["#edc84e", "#fdf2d5", "#cf5d65"],
  ["#c16ca5", "#fff0ce", "#50b5a1"],
  ["#65ae82", "#fce4ab", "#e47459"],
  ["#e98883", "#fff0ce", "#405d9b"]
];
function magazine(x, y, z, n, width = 3) {
  const [base, title, picture] = covers[n % covers.length];
  box(x, y, z, x + width - 1, y, z + 6, base);
  box(x, y - 1, z + 5, x + width - 1, y - 1, z + 6, title);
  box(x + 1, y - 1, z + 2, x + width - 1, y - 1, z + 4, picture);
  box(x, y - 1, z, x + width - 1, y - 1, z, "#f9e9cf");
  set(x, y - 1, z + 1, greenDark);
  set(x + width - 1, y - 1, z + 1, greenDark);
  set(x + Math.floor(width / 2), y - 1, z + 7, gold);
}

// Two rows on the back wall, above the newspaper shelves.
for (const z of [14, 23]) {
  box(15, 31, z - 2, 33, 32, z - 2, greenDark);
  box(15, 31, z - 1, 33, 31, z - 1, gold);
  [16, 20, 24, 28].forEach((x, i) =>
    magazine(x, 32, z, i + (z === 23 ? 2 : 0))
  );
}
box(15, 31, 31, 33, 31, 31, gold);

// Hinged folding panels, opened diagonally like wings.
for (const side of ["left", "right"]) {
  const left = side === "left";
  for (let x = left ? 3 : 36; x <= (left ? 11 : 44); x++) {
    const y = left ? x + 5 : 52 - x;
    box(x, y, 3, x, y + 1, 32, green);
    box(x, y - 1, 3, x, y - 1, 4, greenDark);
    box(x, y - 1, 31, x, y - 1, 32, greenLight);
    for (const z of [5, 15, 24, 32]) set(x, y - 1, z, gold);
  }
  const edge = left ? 3 : 44;
  const ey = left ? 8 : 8;
  box(edge, ey + 1, 3, edge, ey + 1, 32, greenDark);

  // Each cover follows the diagonal, facing the viewer.
  const columns = left ? [4, 8] : [37, 41];
  for (let row = 0; row < 3; row++) {
    for (let col = 0; col < 2; col++) {
      const x = columns[col];
      for (let dx = 0; dx < 3; dx++) {
        const bx = x + dx;
        const by = left ? bx + 5 : 52 - bx;
        const [base, title, picture] = covers[(row * 2 + col + (left ? 1 : 3)) % covers.length];
        box(bx, by - 1, 7 + row * 9, bx, by - 1, 13 + row * 9, base);
        box(bx, by - 2, 12 + row * 9, bx, by - 2, 13 + row * 9, title);
        if (dx === 1)
          box(bx, by - 2, 9 + row * 9, bx, by - 2, 11 + row * 9, picture);
        set(bx, by - 2, 7 + row * 9, paper);
      }
    }
  }
}

// Low front shelves and substantial, individually layered newspaper piles.
for (const [x0, x1] of [[15, 22], [27, 33]]) {
  box(x0, 19, 3, x1, 24, 4, greenDark);
  box(x0, 18, 4, x1, 18, 4, gold);
  for (let z = 5; z <= 10; z++) {
    const inset = z > 8 ? 1 : 0;
    box(x0 + inset, 19, z, x1 - inset, 22, z,
      z % 2 ? "#efe9d8" : "#d9ded7");
    box(x0 + inset, 18, z, x1 - inset, 18, z,
      z % 2 ? "#e9e5d9" : "#a8b6b3");
    if (z % 2) {
      box(x0 + inset + 1, 17, z, x0 + inset + 3, 17, z, "#425e65");
      set(x1 - inset - 1, 17, z, "#cf6b55");
    }
  }
}
box(16, 22, 11, 21, 23, 11, "#f5eedc");
box(17, 21, 12, 20, 21, 12, "#456a81");

// Little stool tucked inside, still visible through the open front.
for (const x of [23, 28])
  for (const y of [25, 29])
    box(x, y, 3, x, y, 10, "#76513b");
box(23, 25, 10, 28, 29, 11, "#b96b49");
box(24, 25, 12, 27, 28, 12, "#db9163");
box(23, 26, 7, 28, 26, 7, "#896044");
box(24, 25, 8, 24, 29, 8, "#896044");

// A small fileteado-like flourish on the front beam.
for (const x of [18, 30]) {
  set(x, 15, 33, "#e48664");
  set(x - 1, 15, 32, gold);
  set(x + 1, 15, 32, gold);
}