aW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKCiMgQ29uZmlndXJlciBsYSBmaWd1cmUgcHJvcHJlIGV0IHBybwpmaWcsIGF4ID0gcGx0LnN1YnBsb3RzKGZpZ3NpemU9KDExLCA5KSkKCiMgLS0tIE1VUlMgLS0tCmF4LnBsb3QoWzAsIDAuOTZdLCBbMi42LCAyLjZdLCBjb2xvcj0nIzBmMTcyYScsIGxpbmV3aWR0aD01KQpheC5wbG90KFswLjk2LCAxLjg1XSwgWzIuNiwgMi42XSwgY29sb3I9JyMwZWE1ZTknLCBsaW5ld2lkdGg9NSwgbGFiZWw9J0ZlbmV0cmUnKSAKYXgucGxvdChbMS44NSwgMy40NjNdLCBbMi42LCAyLjZdLCBjb2xvcj0nIzBmMTcyYScsIGxpbmV3aWR0aD01KQpheC5wbG90KFszLjQ2MywgMy40NjNdLCBbMi42LCAwLjQ4XSwgY29sb3I9JyMwZjE3MmEnLCBsaW5ld2lkdGg9NSkKCiMgTmljaGUgRnJpZ28gQW1lcmljYWluICg5NCB4IDcxIGNtKQpheC5wbG90KFszLjQ2MywgMy40NjNdLCBbMC4wLCAtMC45NF0sIGNvbG9yPScjMGYxNzJhJywgbGluZXdpZHRoPTUpIApheC5wbG90KFszLjQ2MywgNC4xNzNdLCBbMC4wLCAwLjBdLCBjb2xvcj0nIzBmMTcyYScsIGxpbmV3aWR0aD0zKSAKYXgucGxvdChbMy40NjMsIDQuMTczXSwgWy0wLjk0LCAtMC45NF0sIGNvbG9yPScjMGYxNzJhJywgbGluZXdpZHRoPTMpIApheC5wbG90KFs0LjE3MywgNC4xNzNdLCBbMC4wLCAtMC45NF0sIGNvbG9yPScjMGYxNzJhJywgbGluZXdpZHRoPTQpIAoKYXgucGxvdChbMCwgMF0sIFsyLjYsIDEuNjddLCBjb2xvcj0nIzBmMTcyYScsIGxpbmV3aWR0aD01KQpheC5wbG90KFswLCAwXSwgWzAuNzcsIDBdLCBjb2xvcj0nIzBmMTcyYScsIGxpbmV3aWR0aD01KQoKIyAtLS0gUE9SVEVTIC0tLQpheC5wbG90KFswLCAwLjQ1XSwgWzEuNjcsIDEuNjddLCBjb2xvcj0nIzQ3NTU2OScsIGxpbmV3aWR0aD0yLjUpCmF4LnBsb3QoWzAsIDAuNDVdLCBbMC43NywgMC43N10sIGNvbG9yPScjNDc1NTY5JywgbGluZXdpZHRoPTIuNSkKYXgucGxvdChbMy40NjMsIDMuNDYzXSwgWzAuNDgsIDAuMF0sIGNvbG9yPScjY2JkNWUxJywgbGluZXN0eWxlPSctLScpIApheC5wbG90KFszLjQ2MywgMy40NjNdLCBbMC4wLCAtMC40MF0sIGNvbG9yPScjNDc1NTY5JywgbGluZXdpZHRoPTIuNSkgCgojIC0tLSBNT0JJTElFUiAtLS0KcmVjdF9sdiA9IHBsdC5SZWN0YW5nbGUoKDAuMzYsIDIuMCksIDAuNjAsIDAuNjAsIGZhY2Vjb2xvcj0nI2Y4ZmFmYycsIGVkZ2Vjb2xvcj0nIzY0NzQ4YicsIGxpbmV3aWR0aD0xLjUpCmF4LmFkZF9wYXRjaChyZWN0X2x2KQpyZWN0X2V2aWVyID0gcGx0LlJlY3RhbmdsZSgoMC45NiwgMi4wKSwgMC44OSwgMC42MCwgZmFjZWNvbG9yPScjZjFmNWY5JywgZWRnZWNvbG9yPScjNjQ3NDhiJywgbGluZXdpZHRoPTEuNSwgaGF0Y2g9Jy8vJykKYXguYWRkX3BhdGNoKHJlY3RfZXZpZXIpCnJlY3RfcGR0X2ZvbmQgPSBwbHQuUmVjdGFuZ2xlKCgxLjg1LCAyLjApLCAxLjYxMywgMC42MCwgZmFjZWNvbG9yPScjZjFmNWY5JywgZWRnZWNvbG9yPScjNjQ3NDhiJywgbGluZXdpZHRoPTEuNSkKYXguYWRkX3BhdGNoKHJlY3RfcGR0X2ZvbmQpCnJlY3RfcGR0X2Ryb2l0ID0gcGx0LlJlY3RhbmdsZSgoMi44NjMsIDAuNjApLCAwLjYwLCAxLjQwLCBmYWNlY29sb3I9JyNmMWY1ZjknLCBlZGdlY29sb3I9JyM2NDc0OGInLCBsaW5ld2lkdGg9MS41KQpheC5hZGRfcGF0Y2gocmVjdF9wZHRfZHJvaXQpCnJlY3RfY3Vpc3NvbiA9IHBsdC5SZWN0YW5nbGUoKDIuODYzLCAxLjQwKSwgMC42MCwgMC42MCwgZmFjZWNvbG9yPScjZmVlMmUyJywgZWRnZWNvbG9yPScjZWY0NDQ0JywgbGluZXdpZHRoPTEuNSkKYXguYWRkX3BhdGNoKHJlY3RfY3Vpc3NvbikKcmVjdF9mcmlnbyA9IHBsdC5SZWN0YW5nbGUoKDMuNDkzLCAtMC44OSksIDAuNjUsIDAuODUsIGZhY2Vjb2xvcj0nI2UwZjJmZScsIGVkZ2Vjb2xvcj0nIzAyODRjNycsIGxpbmV3aWR0aD0yKQpheC5hZGRfcGF0Y2gocmVjdF9mcmlnbykKCiMgLS0tIFBSSVNFUyAoUk9VR0UpIC0tLQpheC5wbG90KFswLjM3XSwgWzIuNjJdLCAncm8nLCBtYXJrZXJzaXplPTEwKQpheC50ZXh0KDAuMzcsIDIuMzAsICZxdW90O1ByaXNlc1xuMjgtNDYgY20mcXVvdDssIGZvbnRzaXplPTgsIGNvbG9yPSdyZWQnLCBoYT0nY2VudGVyJywgd2VpZ2h0PSdib2xkJykKYXgucGxvdChbMi4yNl0sIFsyLjYyXSwgJ3JvJywgbWFya2Vyc2l6ZT0xMCkKYXgudGV4dCgyLjI2LCAyLjMwLCAmcXVvdDtQcmlzZXNcbjMzLTQ5IGNtJnF1b3Q7LCBmb250c2l6ZT04LCBjb2xvcj0ncmVkJywgaGE9J2NlbnRlcicsIHdlaWdodD0nYm9sZCcpCmF4LnBsb3QoWzMuNDhdLCBbMS4yNl0sICdybycsIG1hcmtlcnNpemU9MTApCmF4LnRleHQoMi4yNSwgMS4yNiwgJnF1b3Q7UFJJU0UgRk9VUiBEQU5TIEwnQU5HTEVcbigxLDI2LTEsNDIgbSBkdSBmb25kKSZxdW90OywgZm9udHNpemU9OC41LCBjb2xvcj0nI2I5MWMxYycsIHdlaWdodD0nYm9sZCcsIGhhPSdyaWdodCcsIHZhPSdjZW50ZXInKQoKIyAtLS0gQU5OT1RBVElPTlMgQ09NUEwmRWdyYXZlO1RFUyAtLS0KYXgudGV4dCgwLjQ4LCAyLjQ1LCAmcXVvdDswLDk2IG0mcXVvdDssIGZvbnRzaXplPTEwLCBoYT0nY2VudGVyJywgY29sb3I9JyMzMzQxNTUnKQpheC50ZXh0KDEuNDAsIDIuNDUsICZxdW90O0ZFTkVUUkVcbjAsODkgbSZxdW90OywgZm9udHNpemU9MTAsIGhhPSdjZW50ZXInLCBjb2xvcj0nIzAyODRjNycsIHdlaWdodD0nYm9sZCcpCmF4LnRleHQoMi42NSwgMi40NSwgJnF1b3Q7MSw2MTMgbSZxdW90OywgZm9udHNpemU9MTAsIGhhPSdjZW50ZXInLCBjb2xvcj0nIzMzNDE1NScpCmF4LnRleHQoMy42OCwgMS41NCwgJnF1b3Q7TXVyIERyb2l0IDogMiwxMiBtJnF1b3Q7LCBmb250c2l6ZT0xMCwgdmE9J2NlbnRlcicsIHJvdGF0aW9uPS05MCwgY29sb3I9JyMwZjE3MmEnLCB3ZWlnaHQ9J2JvbGQnKQpheC50ZXh0KDAuNjYsIDIuMjUsICZxdW90O0xBVkUtXG5WQUlTU0VMTEUmcXVvdDssIGZvbnRzaXplPTguNSwgd2VpZ2h0PSdib2xkJywgaGE9J2NlbnRlcicsIHZhPSdjZW50ZXInKQpheC50ZXh0KDEuNDAsIDIuMjUsICZxdW90O0VWSUVSJnF1b3Q7LCBmb250c2l6ZT05LjUsIHdlaWdodD0nYm9sZCcsIGhhPSdjZW50ZXInLCB2YT0nY2VudGVyJywgY29sb3I9JyMwMjg0YzcnKQpheC50ZXh0KDMuMTYsIDEuNzAsICZxdW90O0NVSVNTT05cbiZhbXA7IEZPVVJcbihBbmdsZSkmcXVvdDssIGZvbnRzaXplPTksIHdlaWdodD0nYm9sZCcsIGhhPSdjZW50ZXInLCB2YT0nY2VudGVyJywgY29sb3I9JyNiOTFjMWMnKQpheC50ZXh0KDMuODIsIC0wLjQ3LCAmcXVvdDtGUklHT1xuQU1FUklDQUlOXG4oOTR4NzEpJnF1b3Q7LCBmb250c2l6ZT05LjUsIGNvbG9yPScjMDI4NGM3Jywgd2VpZ2h0PSdib2xkJywgaGE9J2NlbnRlcicsIHZhPSdjZW50ZXInKQoKYXgudGV4dCgxLjczLCAzLjMwLCAmcXVvdDtMT05HVUVVUiBUT1RBTEUgRFUgRk9ORCA6IDMsNDYzIG0mcXVvdDssIGZvbnRzaXplPTEyLCB3ZWlnaHQ9J2JvbGQnLCBoYT0nY2VudGVyJykKYXgudGV4dCgxLjczLCAtMS4zNSwgJnF1b3Q7SGF1dGV1ciBzb3VzIHBsYWZvbmQgOiAyLDM5NSBtJnF1b3Q7LCBmb250c2l6ZT0xMSwgd2VpZ2h0PSdib2xkJywgaGE9J2NlbnRlcicpCgpheC5zZXRfeGxpbSgtMC42LCA0LjYpCmF4LnNldF95bGltKC0xLjUsIDMuNikKYXguYXhpcygnb2ZmJykKcGx0LnRpdGxlKCZxdW90O1BMQU4gQ1VJU0lORSBURUNITklRVUUgRCZFYWN1dGU7RklOSVRJRiZxdW90OywgZm9udHNpemU9MTQsIHdlaWdodD0nYm9sZCcpCnBsdC5zaG93KCkK
import matplotlib.pyplot as plt
import numpy as np
# Configurer la figure propre et pro
fig, ax = plt.subplots(figsize=(11, 9))
# --- MURS ---
ax.plot([0, 0.96], [2.6, 2.6], color='#0f172a', linewidth=5)
ax.plot([0.96, 1.85], [2.6, 2.6], color='#0ea5e9', linewidth=5, label='Fenetre')
ax.plot([1.85, 3.463], [2.6, 2.6], color='#0f172a', linewidth=5)
ax.plot([3.463, 3.463], [2.6, 0.48], color='#0f172a', linewidth=5)
# Niche Frigo Americain (94 x 71 cm)
ax.plot([3.463, 3.463], [0.0, -0.94], color='#0f172a', linewidth=5)
ax.plot([3.463, 4.173], [0.0, 0.0], color='#0f172a', linewidth=3)
ax.plot([3.463, 4.173], [-0.94, -0.94], color='#0f172a', linewidth=3)
ax.plot([4.173, 4.173], [0.0, -0.94], color='#0f172a', linewidth=4)
ax.plot([0, 0], [2.6, 1.67], color='#0f172a', linewidth=5)
ax.plot([0, 0], [0.77, 0], color='#0f172a', linewidth=5)
# --- PORTES ---
ax.plot([0, 0.45], [1.67, 1.67], color='#475569', linewidth=2.5)
ax.plot([0, 0.45], [0.77, 0.77], color='#475569', linewidth=2.5)
ax.plot([3.463, 3.463], [0.48, 0.0], color='#cbd5e1', linestyle='--')
ax.plot([3.463, 3.463], [0.0, -0.40], color='#475569', linewidth=2.5)
# --- MOBILIER ---
rect_lv = plt.Rectangle((0.36, 2.0), 0.60, 0.60, facecolor='#f8fafc', edgecolor='#64748b', linewidth=1.5)
ax.add_patch(rect_lv)
rect_evier = plt.Rectangle((0.96, 2.0), 0.89, 0.60, facecolor='#f1f5f9', edgecolor='#64748b', linewidth=1.5, hatch='//')
ax.add_patch(rect_evier)
rect_pdt_fond = plt.Rectangle((1.85, 2.0), 1.613, 0.60, facecolor='#f1f5f9', edgecolor='#64748b', linewidth=1.5)
ax.add_patch(rect_pdt_fond)
rect_pdt_droit = plt.Rectangle((2.863, 0.60), 0.60, 1.40, facecolor='#f1f5f9', edgecolor='#64748b', linewidth=1.5)
ax.add_patch(rect_pdt_droit)
rect_cuisson = plt.Rectangle((2.863, 1.40), 0.60, 0.60, facecolor='#fee2e2', edgecolor='#ef4444', linewidth=1.5)
ax.add_patch(rect_cuisson)
rect_frigo = plt.Rectangle((3.493, -0.89), 0.65, 0.85, facecolor='#e0f2fe', edgecolor='#0284c7', linewidth=2)
ax.add_patch(rect_frigo)
# --- PRISES (ROUGE) ---
ax.plot([0.37], [2.62], 'ro', markersize=10)
ax.text(0.37, 2.30, "Prises\n28-46 cm", fontsize=8, color='red', ha='center', weight='bold')
ax.plot([2.26], [2.62], 'ro', markersize=10)
ax.text(2.26, 2.30, "Prises\n33-49 cm", fontsize=8, color='red', ha='center', weight='bold')
ax.plot([3.48], [1.26], 'ro', markersize=10)
ax.text(2.25, 1.26, "PRISE FOUR DANS L'ANGLE\n(1,26-1,42 m du fond)", fontsize=8.5, color='#b91c1c', weight='bold', ha='right', va='center')
# --- ANNOTATIONS COMPLÈTES ---
ax.text(0.48, 2.45, "0,96 m", fontsize=10, ha='center', color='#334155')
ax.text(1.40, 2.45, "FENETRE\n0,89 m", fontsize=10, ha='center', color='#0284c7', weight='bold')
ax.text(2.65, 2.45, "1,613 m", fontsize=10, ha='center', color='#334155')
ax.text(3.68, 1.54, "Mur Droit : 2,12 m", fontsize=10, va='center', rotation=-90, color='#0f172a', weight='bold')
ax.text(0.66, 2.25, "LAVE-\nVAISSELLE", fontsize=8.5, weight='bold', ha='center', va='center')
ax.text(1.40, 2.25, "EVIER", fontsize=9.5, weight='bold', ha='center', va='center', color='#0284c7')
ax.text(3.16, 1.70, "CUISSON\n& FOUR\n(Angle)", fontsize=9, weight='bold', ha='center', va='center', color='#b91c1c')
ax.text(3.82, -0.47, "FRIGO\nAMERICAIN\n(94x71)", fontsize=9.5, color='#0284c7', weight='bold', ha='center', va='center')
ax.text(1.73, 3.30, "LONGUEUR TOTALE DU FOND : 3,463 m", fontsize=12, weight='bold', ha='center')
ax.text(1.73, -1.35, "Hauteur sous plafond : 2,395 m", fontsize=11, weight='bold', ha='center')
ax.set_xlim(-0.6, 4.6)
ax.set_ylim(-1.5, 3.6)
ax.axis('off')
plt.title("PLAN CUISINE TECHNIQUE DÉFINITIF", fontsize=14, weight='bold')
plt.show()