--- name: zoo-text-to-cad description: طبقة CAD بارامترية احترافية (Zoo.dev / KittyCAD). تحوّل نصاً أو صورة رسم هندسي إلى موديل CAD قابل للتعديل — B-Rep حقيقي (STEP) يُفتح ويُعدّل في SolidWorks/Fusion/FreeCAD (ليس mesh) + كود KCL بارامتري. تسدّ الفجوة التي فشل فيها ChatGPT في فيديو Ali Nasser (ماكرو SolidWorks هشّ). Use when: صورة/رسم/وصف قطعة ميكانيكية → STEP/STL قابل للتعديل، أو أي "حوّل هذا الرسم إلى موديل CAD". license: MIT ---
🏭 Zoo Text/Image-to-CAD — طبقة CAD بارامترية احترافية
> الغرض: نص أو صورة رسم هندسي ← موديل CAD قابل للتعديل (B-Rep حقيقي + KCL بارامتري). > لماذا: فيديو Ali Nasser (2026-09-12) استخدم ChatGPT عارياً → STEP خام يعمل، لكن ماكرو SolidWorks فشل. Zoo يولّد B-Rep بارامتري صحيح مضمون → يسدّ الفجوة الوحيدة الحقيقية.
الفرق الجوهري عن mesh (Tripo/Meshy)
| | Zoo (B-Rep / STEP) | mesh (Tripo/Hunyuan) | |---|---|---| | النوع | أسطح B-Rep حقيقية | مثلثات سطحية | | التعديل في CAD | ✅ يُفتح ويُعدّل في SolidWorks/Fusion/FreeCAD | ❌ سطح مغلق فقط | | للتصنيع | ✅ STEP معتمد | ❌ للتصور فقط | | بارامتري | ✅ + KCL code | ❌ |المصادقة
✅ZOO_API_KEY مُفّل في env.sh (سطر 437، حساب wayrk76@gmail.com، Bearer=200 مُثبَت حيّاً 2026-09-16). البدائل: KITTYCAD_TOKEN.🔴 المعمار الحديث (2026) — الطبقتان تعملان معاً
Zoo تقاعد المسار القديمPOST /*/text-to-cad/{fmt} (كل المسارات 404 رغم auth صحيح) → الحديث = Zookeeper: KCL + Modeling WebSocket (wss://api.zoo.dev/ws/modeling/commands = 101 يعمل، لكن بروتوكول WebRTC session).الحل المُطبَّق (الاثنان معاً، مُختبَر E2E): tier_zoo = السلسلة الذهبية (opus-4-8) تولّد كود KCL بارامتري أصيل (_gen_kcl_code) يُحفظ .kcl (يُفتح/يُعدَّل في Zoo Design Studio) + يحاول تصدير WS → عند تعذّر WebRTC يُكمل cad_router تلقائياً بـ cadquery لتصدير STEP دقيق (B-Rep). المخرج الواحد = STEP + KCL + cadquery.py معاً (engine=cadquery+zoo-kcl).
الأوامر
python3 skills/zoo-text-to-cad/zoo_cad.py selftest
python3 skills/zoo-text-to-cad/zoo_cad.py text "a flanged bushing OD 60mm, ID 30mm, length 92mm, 4 bolt holes M6" --fmt step --out /data/.openclaw/media/outbound/part.step
python3 skills/zoo-text-to-cad/zoo_cad.py image drawing.png "<الوصف الدقيق المستخرَج بصرياً: أبعاد/أقواس/سماكات>" --fmt step
python3 skills/zoo-text-to-cad/zoo_cad.py status <id>
python3 skills/zoo-text-to-cad/zoo_cad.py formats
صيغ الإخراج: step, stl, obj, gltf, glb, ply, fbx.🔴 المسار الصحيح للصورة (Image → CAD)
Zoo API نصّي (text-first). لأدق نتيجة من رسم هندسي، الوكيل ينفّذ بالتسلسل: 1. يقرأ الرسم بصرياً (أداةimage / engineering-ocr-blueprints + Mathpix) → يستخرج كل بُعد/قوس/سماكة/تفصيل بدقّة (أدق من قراءة ChatGPT التي أخرجت الأقواس كـ arc-length).
2. يبني prompt غنياً بالأبعاد الحقيقية بالمليمتر.
3. يمرّره لـ text → STEP بارامتري.
4. يتحقق: يفتح STEP (ezdxf/ifcopenshell/FreeCAD headless) ويطابق الأبعاد الحرجة قبل الاعتماد.التكامل مع الترسانة الهندسية
engineering-ocr-blueprints→ يقرأ الرسم (المرحلة 1).3d-arsenal(cadquery) → fallback بارامتري محلي إن فشل Zoo (never-stop).design-to-bim/quantity-takeoff-engine→ بعد الحصول على الموديل: حصر كميات + BIM.civil-design-router→ توجيه أي طلب "حوّل رسم لموديل".
🔴 CAD Router — سلسلة never-stop (الأساس)
لا تستخدم zoo_cad.py مفرداً — استخدمcad_router.py (سلسلة كاملة لا تتوقّف):
python3 skills/zoo-text-to-cad/cad_router.py status
python3 skills/zoo-text-to-cad/cad_router.py gen "<الأبعاد بالملم>" --fmt step [--out FILE] [--brep-only]
السلسلة (الأقوى أولاً — أي طبقة تفشل → التالية تكمل):
1. zoo — B-Rep بارامتري + KCL (الأفضل، ZOO_API_KEY)
2. cadquery — محلي برمجي: B-Rep/STEP دقيق (❌ لا مفتاح = الضامن الذي لا يتوقّف أبداً) — يولّد كود cadquery عبر السلسلة الذهبية ثم ينفّذه → STEP
3. openscad — solid محلي → STL (إن وُجد)
4-6. replicate/fal/piapi — mesh سحابي (Tripo/Hunyuan/Trellis) للتصوّر (من صورة)--brep-only → zoo+cadquery+openscad فقط (قابل للتعديل/التصنيع، لا mesh).
مُختبَر حيّاً E2E 2026-09-16: Zoo غائب (NO_KEY) → السلسلة لم تتوقّف → cadquery أنتج STEP حقيقي (34KB · 19 كيان B-Rep MANIFOLD_SOLID_BREP · Open CASCADE 7.8 · كود بارامتري قابل للتعديل). «لا نتوقّف أبداً» مُحقّق بالدليل.
never-stop (المبدأ)
أي فشل Zoo (رصيد/شبكة/رفض/حدود) → cad_router يسقط تلقائياً لـ cadquery المحلي (الضامن، بلا مفتاح) → ثم mesh السحابي. لا توقّف مهما كلّف، ونصل للهدف. لا مستحيل.أكاديمياً
- تحويل رسوم الأبحاث/براءات → موديلات 3D قابلة للتعديل للنشر والتدريس.
- توليد أمثلة CAD بارامترية لمقرّرات التصميم الميكانيكي.
الحدود الصادقة
- text-first (لا رفع صورة مباشر لـ endpoint) → الدقة من مرحلة الرؤية عندنا.
- القطع المعقّدة جداً قد تحتاج تحقّق/تعديل يدوياً (كل CAD-AI كذلك — راجع حكم الفيديو).
🧊 NVIDIA OpenUSD BRep bridge (أُضيف 2026-10-18، مُختبَر E2E حيّاً)
usd-core 26.8 مثبّت (numpy-safe، M-115). تحويل مخرَج CAD → USD للـ3D/BIM pipelines:
python3 cad_router.py gen "<الأبعاد>" --fmt step --usd→ STEP + USD معاً.python3 cad_router.py usd <file.step|stl> [--out x.usd]→ تحويل مستقل.- never-stop: usd-core غائب → يُتخطّى بأناقة. STEP→STL (cadquery) → mesh→USD.
- مُثبَت E2E: cube 20mm → STEP 15504B → USD 1272B (12 tris). يُثري design-to-bim + CAD Router (Zoo KCL + cadquery).