--- name: quantity-takeoff-engine description: Internal quantity takeoff / BOQ engine (alternative to Togal.AI / Kreo). Extracts construction quantities from drawings using Gemini Vision (plan reading), Python geometry (shapely) for area/length/volume from scaled polylines or DXF, and computes BOQ with concrete/rebar/formwork/blockwork/excavation quantities plus rates and totals. Use when a user provides a drawing/plan/DXF/dimensions and asks for quantities, takeoff, BOQ, bill of quantities, material estimate, concrete/rebar/formwork volumes, or cost estimate. ---
📐 quantity-takeoff-engine — محرّك حصر الكميات و BOQ
> بديل داخلي لـ Togal.AI / Kreo: Gemini Vision لقراءة المخطط + shapely للهندسة + Python quantity engine. > القاعدة: الدقة أولاً. كل كمية تربط بمصدرها (drawing/dimension/assumption).
---
🎯 القدرات
1. Vision plan reading — Gemini Vision لاستخراج الأبعاد والعناصر من صورة المخطط (يحتاج GEMINI_API_KEY).
2. Geometry engine (shapely) — حساب المساحة/الطول/الحجم من polygons/polylines مقيّسة (scaled).
3. DXF takeoff — قراءة DXF (ezdxf) واستخراج أطوال الخطوط ومساحات الـ closed polylines حسب الـ layer.
4. BOQ computation — تحويل العناصر الإنشائية إلى كميات: خرسانة (m3)، حديد (ton)، شدّة/قوالب (m2)، بلوك (m2)، حفر (m3).
5. Rates & totals — ضرب الكميات في rates لإخراج تكلفة تقديرية.
6. 🔗 ربط بالأكواد (2026-07-17) — قيم التصميم المؤثّرة على الكميات (غطاء الحديد cover · معاملات الأحمال · نسب التسليح الدنيا · أطوال الربط/التماسك) تُسحَب من مرجع الأكواد: python3 skills/engineering-codes/codes.py <query> أو codes.py lib <بحث عميق في IS/FEMA/Kuwait>. مثال: قبل حصر الحديد احسب cover من IS 456 → codes.py lib "concrete cover durability".
---
🛠️ السكربت
scripts/takeoff.py
الأوامر
bash
1) Geometry takeoff from explicit elements JSON (areas/lengths/volumes)
python3 scripts/takeoff.py boq --elements elements.json --rates rates.json2) DXF takeoff (lengths per layer + closed-polyline areas)
python3 scripts/takeoff.py dxf --file plan.dxf --scale 1.03) Vision read (Gemini) -> structured quantities from a plan image
python3 scripts/takeoff.py vision --image plan.png --prompt "ground floor slab"4) Quick structural element BOQ (slab/column/beam/wall dims -> qty)
python3 scripts/takeoff.py element --type slab --length 20 --width 15 --thk 0.25python3 scripts/takeoff.py --help
صيغة elements.json
json
{
"elements": [
{"name": "GF Slab", "type": "slab", "length": 20, "width": 15, "thk": 0.25},
{"name": "Columns", "type": "column", "b": 0.4, "h": 0.4, "height": 3.5, "count": 24},
{"name": "Block wall", "type": "wall", "length": 60, "height": 3.0, "thk": 0.20}
]
}
---
📐 معادلات الحصر (داخل code blocks — لا LaTeX)
Slab concrete = L W thickness (m3)
Slab formwork = L W (soffit) + 2(L+W)thickness (m2, edges)
Column concrete = b h height count (m3)
Column formwork = 2(b+h) height count (m2)
Beam concrete = b h length (m3)
Wall block area = L height - openings (m2)
Excavation = (L+working_space) (W+ws) depth (m3)
Rebar (est.) = concrete_volume * steel_ratio (kg, ratio kg/m3)Typical steel ratios (kg/m3 of concrete):
Slab 80-120 | Beam 120-180 | Column 150-250 | Foundation 80-150
🔗 التكامل
- المخطط →
engineering-ocr-blueprints(DXF/IFC/image) ثم إلى هذا المحرك. - الكميات →
civil-methodology-engine(resources) وp6-ai-planner(durations). - APS Model Derivative (عند توفّر AUTODESK_CLIENT_ID) لاستخراج كميات من Revit/IFC عبر metadata.
⚠️ قواعد
- لا كمية بدون مصدر (drawing ref أو dimension أو assumption معلن).
- Vision = مساعد أولي؛ راجع دائماً ضد المخطط الأصلي قبل التسعير.
- أضف waste factor (5-10%) عند التسعير النهائي.