fogón

← Whole house3D assetfogon/lavarropas

Lavarropas

by fogonCC039430 blocks
LavarropasDrag to turn it
// «Lavarropas» · gpt-6-sol (medium)
// A front-loading washing machine: a white cube with a big round door with a chrome ring and a dark glass window showing colorful clothes inside, a control panel on top with a dial and small buttons, and a detergent drawer.

const white = "#f7f7f2";
const whiteTop = "#ffffff";
const whiteShade = "#e5e9e8";
const trim = "#cbd3d5";
const chrome = "#dce5e6";
const chromeLight = "#f5fbfa";
const chromeDark = "#899ba0";
const glass = "#263d49";

// Little rubber feet.
for (const x of [10, 36]) {
  for (const y of [15, 34]) {
    box(x, y, 0, x + 3, y + 3, 2, "#727c7b");
    box(x, y, 2, x + 3, y + 3, 3, "#b8c1bf");
  }
}

// Solid, softly rounded cabinet.
for (let x = 7; x <= 41; x++) {
  for (let y = 10; y <= 39; y++) {
    for (let z = 3; z <= 38; z++) {
      const corner = (x <= 8 || x >= 40) && (y <= 11 || y >= 38);
      const topCorner = (x <= 8 || x >= 40) && z >= 37;
      if (corner || topCorner) continue;
      let c = white;
      if (z >= 37) c = whiteTop;
      else if (x >= 40 || z <= 5) c = whiteShade;
      else if (y === 10) c = rand() < 0.065 ? "#eff1ed" : white;
      set(x, y, z, c);
    }
  }
}

// Cabinet edges and the divide below the control panel.
box(9, 9, 30, 39, 9, 30, "#c9d2d2");
box(9, 9, 31, 39, 9, 37, "#f9faf6");
box(9, 10, 38, 39, 37, 38, "#ffffff");
box(40, 12, 7, 40, 36, 35, "#dbe1df");

// Dark drum opening, recessed behind the door.
const cx = 24, cz = 17;
for (let x = 10; x <= 38; x++) {
  for (let z = 3; z <= 31; z++) {
    const d = Math.hypot(x - cx, z - cz);
    if (d <= 11.7) {
      set(x, 9, z, d > 10.3 ? "#33434b" : "#192b35");
      set(x, 8, z, d > 10.2 ? "#52636a" : glass);
    }
  }
}

// Clothes rotate in the window, as if the drum is tumbling.
part("clothes", [24, 8, 17]);
ellipsoid(20, 7, 21, 4, 1, 3, "#8dcfbd");
ellipsoid(19, 6, 22, 2, 1, 1, "#b9e7d5");
ellipsoid(28, 7, 21, 4, 1, 3, "#f3ad93");
ellipsoid(29, 6, 22, 2, 1, 1, "#ffd2b7");
ellipsoid(20, 7, 13, 4, 1, 3, "#e5b45b");
ellipsoid(19, 6, 14, 2, 1, 1, "#ffda88");
ellipsoid(28, 7, 13, 4, 1, 3, "#86badb");
ellipsoid(29, 6, 14, 2, 1, 1, "#add9ed");
ellipsoid(24, 6, 17, 3, 1, 2, "#f5eee1");
animate("clothes", { type: "spin", axis: "y", speed: 4 });
part("body", [24, 24, 19]);

// Thick circular door: dark inner gasket, chrome rim, bright raised edges.
for (let x = 9; x <= 39; x++) {
  for (let z = 2; z <= 32; z++) {
    const d = Math.hypot(x - cx, z - cz);
    if (d >= 10.5 && d <= 14.4) {
      let c;
      if (d > 13.5) c = "#a7b5b7";
      else if (d > 12.5) c = chromeLight;
      else if (d > 11.2) c = z > cz ? chrome : "#b9c6c8";
      else c = chromeDark;
      set(x, 7, z, c);
      if (d >= 12.1 && d <= 13.8) {
        set(x, 6, z, z > cz ? "#edf4f2" : "#b9c7c9");
      }
      if (d >= 13.5 && d <= 14.4) set(x, 8, z, "#c8d3d3");
    }
  }
}

// Sparse reflections over the glass leave the clothes easy to see.
for (let x = 17; x <= 23; x++) {
  for (let z = 22; z <= 26; z++) {
    if (Math.hypot(x - cx, z - cz) < 10 && (x + z) % 4 === 0)
      set(x, 5, z, "#b9d5dc");
  }
}
line(17, 5, 23, 19, 5, 25, 0, "#e7f5f4");
line(31, 5, 11, 32, 5, 13, 0, "#89aeb9");

// Chunky hinge and a grab handle on the right.
box(10, 5, 15, 12, 7, 20, "#acb9ba");
box(11, 4, 16, 12, 5, 19, chromeLight);
box(36, 4, 14, 38, 6, 20, "#9aa9ac");
box(36, 3, 15, 39, 4, 19, chromeLight);
box(39, 4, 16, 39, 5, 18, chromeDark);

// Detergent drawer on the upper left.
box(10, 8, 33, 22, 8, 36, "#c3cece");
box(11, 7, 34, 21, 7, 36, "#e8efed");
box(12, 6, 35, 20, 6, 36, "#ffffff");
box(14, 5, 34, 19, 6, 34, "#a1afb1");

// Control dial, facing forward.
for (let x = 25; x <= 34; x++) {
  for (let z = 32; z <= 39; z++) {
    const d = Math.hypot(x - 29.5, z - 35.5);
    if (d <= 4.3) set(x, 8, z, "#b7c4c5");
    if (d <= 3.5) set(x, 7, z, chromeLight);
    if (d <= 2.6) set(x, 6, z, "#dce6e4");
    if (d <= 1.8) set(x, 5, z, "#f9fbf7");
  }
}
box(29, 4, 37, 30, 5, 38, "#788f94");

// Tiny pastel program marks, buttons, and a friendly status light.
for (const [x, z, c] of [
  [25, 38, "#95cdbb"], [34, 38, "#e9b97b"],
  [35, 35, "#9bc9df"], [25, 33, "#e8ad9d"]
]) set(x, 7, z, c);

for (const [x, c] of [[36, "#95cdbb"], [39, "#eeb9a5"]]) {
  box(x, 7, 34, x + 1, 8, 35, "#a9b8ba");
  set(x, 6, 35, c);
  set(x + 1, 6, 35, "#f7fbf7");
}
box(36, 8, 37, 39, 8, 38, "#b8c5c5");
box(37, 7, 37, 38, 7, 38, "#a4d5b8");