# 2D CAM Profesyonelleştirme Raporu — Fable 5

> **Amaç:** FikoYT'nin **"2D CAM" workbench**'ini (sarı ikon, `'2dcam'`) tam profesyonel seviyeye taşımak. Bu belge; yanlış üretilen takım yollarını, kullanıcı için zorlaşan noktaları ve eksik kalan yetenekleri, düzeltilebilecek şekilde tek dosyada toplar.
>
> **Bu belge Fable 5'in tek başvuru kaynağıdır.** Kod değişikliği içermez — mevcut durumun teşhisi + önceliklendirilmiş yol haritasıdır.

---

## 0. Bağlam ve iki temel direktif

### Hedef sistem
Geliştirilecek sistem = **`fiko-cam/` (Prismatic Machining)** = ribbon'da sarı **"2D CAM"** workbench'i (`'2dcam'`).
Ribbon grupları: **GEÇMİŞ · PROGRAM · FREZELEME** (Yüzey/Cep/Profil/Eğri/Nokta-Nokta/Dairesel) **· EKSENEL-DELİK** (Delme/Dış/Bara-Rayba/Havşa/Özel) **· ÇIKTI** (G-code/APT/Doküman).

Bağlanış: `fiko-three-js/Fiko3DComponent/.component.ts` → `workbenchSec('2dcam')` → `camToggle()` → `camAl()` → `FikoCamYonetici` (`fiko-cam/fiko-cam.yonetici.ts`).

### İki başlık direktifi (kullanıcı isteği)
- **(A) APT birincil çıktı.** Makineye özel post-processor (Fanuc G-code) yerine, **makineden bağımsız APT** ana çıktı olsun. G-code ikincil kalır.
- **(B) Her şey B-Rep.** Takım yolu geometrisi mesh / JS-approximate offset yerine **OCCT B-Rep exact** üzerinde çalışsın.

### Kritik durum tespiti: iki paralel CAM sistemi var
| | **`fiko-cam/`** (Prismatic) — **HEDEF** | `Fiko-2d-Cam/` (aktiviteler) |
|---|---|---|
| Workbench | `'2dcam'` (sarı) | `'cam'` (kırmızı) + dialog |
| Kapsam | Yüzey/Cep/Profil/Eğri/Nokta-Nokta/Dairesel + 13 eksenel op · tool axis 3+2/5-eksen · makro yöneticisi · **APT** | cep/profil/delik/gravür |
| Çıktı | **APT + G-code + Doküman** (post-processor mevcut) | Sadece `cep`'te Fanuc G-code |
| Geometri | `brepKontur` (B-Rep) VAR ama **offset `offsetPoly` (JS approximate)** | **OCCT exact offset** (`occt-cam-kontur.ts`) · adaptive clearing · birim testler |

**Köprü fırsatı:** OCCT B-Rep exact offset (yay-korumalı, `BRepOffsetAPI`) **zaten yazılmış ve çalışıyor** ama Prismatic motorunda kullanılmıyor:
- `fiko-modelleme/fiko-occt-kernel.ts` → `yuzKonturOffset`
- `Fiko-2d-Cam/brep/occt-cam-kontur.ts` → `occtKonturOffsetSync`

Direktif (B) = bu mevcut OCCT offset'i Prismatic toolpath motoruna bağlamak. Ayrıca yeni sistemin `AdaptiveClearing.ts`, `feeds-speeds.ts`, `TabBridgeParams.ts` parçaları da Prismatic'e taşınabilir. Böylece iki-sistem karmaşası da giderilir (yeni `'cam'` workbench emekliye ayrılır → tek tutarlı sistem).

---

## 1. YANLIŞ ÜRETİLEN TAKIM YOLLARI (parça bozan / takım kıran riskler)

### Kök neden: offset JS ile yaklaşık hesaplanıyor
Toolpath offset'i `offsetPoly` / `offsetPoly2` (vertex-bisector, saf JS) ile üretiliyor:
`fiko-cam-toolpath.ts:28` (`offsetPoly`), `:64` (`offsetPoly2`), kullanım `:338, :341, :362, :367, :400`.

Bu tek kök neden aşağıdaki 3 riski birden doğuruyor. **Direktif (B) ile OCCT exact offset'e geçiş bunları toptan çözer.**

- **🔴 [KRİTİK] Konkav köşede self-intersection** — offset merkeze/konkava yaklaşınca poligon kendini keser, takım geri dönüp fazladan malzeme keser. `fiko-cam-toolpath.ts:400-408`'de `kendiniKesiyorMu` + alan-işareti + bbox guard'ları var **ama** JS offset'in doğası gereği yaklaşık; garanti değil.
- **🔴 [KRİTİK] Keskin köşe patlaması** — bisector offset, dar açılarda dışa fırlar. `cosA = Math.max(0.3, n1·n2)` (`:36`) klempi yaklaşık koruma; gerçek kenar-bazlı (OCCT) değil.
- **🔴 [KRİTİK] Ada (island) offset semantik hatası** — `offsetPoly(a, -(r+finis))` başarısız/ters dönerse fallback `offsetPoly(a, +(r+finis))` **yanlış yönde** büyütüyor (`:341`). İçbükey/L ada'da takım adaya girip çarpabilir.

**Düzeltme (B):** contour / pocket / island / finiş offset'lerini `yuzKonturOffset` / `occtKonturOffsetSync` (yay-korumalı) ile üret; yay segmentleri korunur (G02/G03 doğru çıkar), self-intersection topoloji seviyesinde engellenir.

### Diğer toolpath doğruluk riskleri
- **🔴 [KRİTİK] Takım yarıçapı 0/negatif → `Math.max(0.05, ...)` fallback** (`fiko-cam-toolpath.ts:148`). Takım tanımsızsa 0.05mm offset ile güvensiz yol üretir. **Düzeltme:** operasyon doğrulaması — geçerli takım yoksa hesaplama reddedilsin + kullanıcı uyarısı.
- **🟡 [YÜKSEK] Trochoidal sahte / bağlanmamış** — `fiko-cam.types.ts`'te `trochoidalAktif / trochoidalAdim / trochoidalGenislik` tanımlı ama **toolpath motorunda hiç çağrılmıyor** (dummy UI). (Yeni sistemin `Fiko-2d-Cam/strategies/AdaptiveClearing.ts`'i de trochoidal'i "sabit yük dairesel arc" olarak yapıyor — gerçek HSM constant-engagement değil.) **Düzeltme:** ya gerçek constant-engagement adaptive implement et, ya UI'dan kaldır (yanıltıcı pazarlama).
- **🟠 [ORTA] Açık cep (open pocket) raster** — soft/hard kenar topolojisi raster'da tam işlenmiyor (`fiko-cam-toolpath.ts:378-387`). Soft kenarda takım dış-döngüye giremeyip iç malzeme kalabilir. **Düzeltme:** kenar tipine göre external ledge hareketi.
- **🟠 [ORTA] Köşe yarıçapı hardcoded** — `optimized=0.15r`, `circular=0.3r`, `forcedCircular=0.4r` (`fiko-cam-toolpath.ts:120-126`); kullanıcının `koseR` değeri override etmiyor.
- **🟠 [ORTA] Mesh boundary fallback sapması** — B-Rep yoksa `yuzKonturXY` (`fiko-cam.yonetici.ts:697`) mesh sınırından ±0.1mm tessellation sapmalı kontur üretir. **Düzeltme (B):** B-Rep zorunlu; fallback'e düşerse net "yaklaşık kontur" uyarısı.
- **🟠 [ORTA] APT/G-code yay I/J çift-dönüşüm** — OCCT exact arc → nokta dizisi → G02/G03 dönüşümü tolerans biriktirir; I/J 3 ondalık yuvarlanıyor. **Düzeltme:** arc'ı segmentlemeden APT `CIRCLE/` + G02/G03'e doğrudan taşı, en az 4-5 ondalık.

---

## 2. KULLANICI İÇİN ZOR / KAFA KARIŞTIRICI (UX)

- **🔴 [KRİTİK] İki CAM workbench kullanıcıyı bölüyor** — `'2dcam'` (Prismatic, sarı) + `'cam'` (yeni dialog, kırmızı). Aynı işi iki farklı arayüz yapıyor. **Düzeltme:** tek workbench; yeni sistemin değerli parçaları Prismatic'e taşınıp `'cam'` gizlensin.
- **🔴 [KRİTİK] Part Operation (parça operasyonu) kurulum dialogu YOK** — stok (`stokOtomatik` sadece bbox), makine ekseni (`partEksenAyarla`), iş sıfır noktası/work offset, güvenlik Z — hepsi **kod-only**, UI yok (`fiko-cam.yonetici.ts:468, 541`). Kullanıcı stok kutusunu özelleştiremiyor, sıfır noktası tanımlayamıyor. **Düzeltme:** merkezi "Parça Operasyonu" dialogu (stok / makine / G54 sıfır / güvenlik Z / tolerans).
- **🔴 [KRİTİK] Gouge/çarpışma uyarıları UI'da görünmüyor** — `gougeKontrol()` (`fiko-cam.yonetici.ts:438`) statik analiz yapıyor (rapid malzeme altı, feed taban altı, derin dik plunge) ama sonuç dialog/status bar'da gösterilmiyor → **sessiz risk**. **Düzeltme:** hesaplama sonrası uyarı rozeti/paneli; kritik uyarıda NC çıktısını engelle.
- **🟡 [YÜKSEK] Takım kütüphanesi kalıcı değil** — 11 hardcoded takım, RAM'de, her oturum sıfırlanır. localStorage/DB persist + import/export yok. **Düzeltme:** kalıcı takım kütüphanesi (Mastercam/Fusion tarzı katalog).
- **🟡 [YÜKSEK] Simülasyon kontrolü zayıf** — play/pause/hız/ilerleme çubuğu yok; kullanıcı "durdu mu?" bilmiyor. **Düzeltme:** replay kontrol paneli (oynat/duraklat/hız/scrub).
- **🟠 [ORTA] 3D seçim modlarında geri bildirim/ipucu eksik** — kenar/nokta/ada/kontur seçerken "şimdi ne yapacağım?" belirsizliği; seçili öğe vurgusu ve HUD ipucu güçlendirilmeli.

---

## 3. EKSİK KALAN (profesyonel boşluklar)

### Direktif odaklı (öncelikli)
- **🔴 [KRİTİK-A] APT'yi birincil + tam yap** — APT üretimi mevcut (`fiko-cam-postprocessor.ts:106-128`; `PARTNO / MACHIN / CUTTER / LOADTL / SPINDL / GOTO/x,y,z,i,j,k` 5-eksen). Eksikler:
  - Sabit çevrimler → APT `CYCLE/DRILL, DEEP, TAP, BORE, ...` ifadeleri (şu an sadece G-code tarafında G81-G87).
  - Her op için `FEDRAT/` + `SPINDL/` + `RAPID`.
  - `COOLNT/ON` / `COOLNT/OFF` (soğutma).
  - `LOADTL/` + `SELCTL/` takım değişimi zinciri.
  - `MULTAX/ON` + tool-axis vektörleri (5-eksen tutarlılığı).
  - `CUTCOM/LEFT|RIGHT|OFF` (cutter compensation APT tarafı).
  - **Hedef:** APT'yi CATIA-nötr tam ara-format yap; G-code post'u bundan türet (ikincil).
- **🔴 [KRİTİK-B] Tüm geometri B-Rep** — kontur çıkarımı her zaman `brepKontur` (`fiko-cam.yonetici.ts:674`), offset OCCT, ada `yuzAdalar` iç wire'lar, gouge B-Rep tabanlı. Mesh yalnızca son çare + uyarı.

### Strateji / yetenek boşlukları
- **🟡 [YÜKSEK] Rest machining (kalan malzeme)** yok — stok-durumu takibi + önceki op sonrası kalan bölgeyi işleme gerekli.
- **🟡 [YÜKSEK] Gerçek adaptive / trochoidal (HSM constant-engagement)** — `Fiko-2d-Cam/strategies/AdaptiveClearing.ts` iyi başlangıç; Prismatic motoruna **doğru** engagement kontrolüyle entegre et.
- **🟡 [YÜKSEK] Malzeme tabanlı feeds & speeds** — `Fiko-2d-Cam/strategies/feeds-speeds.ts` (10 malzeme: alüminyum/çelik/paslanmaz/döküm/pirinç/bakır/titanyum/plastik/ahşap) Prismatic'e taşınmalı + takım malzemesi (HSS/karbür/kaplamalı) + coolant faktörü. (Prismatic'te şu an `fiko-cam.yonetici.ts:222` civarı sadece takım-tipi bazlı, malzeme seçimi yok.)
- **🟡 [YÜKSEK] Tab/köprü (Tabs/Bridges)** — `Fiko-2d-Cam/models/TabBridgeParams.ts` tam yazılmış ama **hiçbir aktivite çağırmıyor (ölü kod)**. Prismatic contour/pocket son katına bağla.
- **🟠 [ORTA] Cutter compensation APT tarafı** — G41/G42 post'ta var, APT `CUTCOM/` yok.
- **🟠 [ORTA] Kurulum sayfası / atölye dokümanı** — "Doküman" butonu; takım listesi, tahmini süre, stok, sıfır noktası, op sırası özeti.

---

## 4. PARAMETRİK CAM + KOMPAKT UI (yeni ana talep — CATIA associativity)

> **Kullanıcı isteği:** "CAM'ler parametrik olabilsin, parametrik CAM yapılabilsin. Takım yolları değişiklikleri fark etsin, hesaplama isteyebilsin — CATIA gibi tam profesyonel. Çok gelişmiş, aynı tarzda devam eden kompakt bir UI."

Bu, **son merge edilen parametrik Knowledge sistemiyle** (`feature/parametrik-knowledge`) birebir örtüşür ve onu yeniden kullanmalı — paralel yazma YOK. Merkezi çekirdek: `fiko-modelleme/knowledge/` (FikoIfadeMotoru — Pratt parser/f(x), FikoParametreDeposu — tek otorite, FikoBagimlilikGrafi — bağımlılık grafiği, FikoKnowledgeYonetici — oto/manuel rebuild).

### 4.1 Associativity / değişiklik algılama (CATIA "update" göstergesi)
Bugün CAM sadece kısmi associatif: `toolAxisParametrikGuncelle` + `makroDuzlemGuncelle` her `hesapla()`'da yüz normalini/düzlemini yeniden çözüyor (`fiko-cam.yonetici.ts`). **Eksik olan: model/parametre değişince takım yolunun "bayatladığını" algılamak ve seçmeli yeniden hesaplama.**
- **🔴 [KRİTİK] Stabil topoloji referansı** — CAM op geometrisi ham `faceId`/`edgeId`'ye bağlı; model rebuild edilince ID kayar → op yanlış yüze bağlanır. Merge ile gelen **`fiko-modelleme/fiko-toporef.ts` (stabil topoloji ID)** kullanılmalı: op geometri seçimleri stabil topo-ref tutsun, rebuild sonrası yüz/kenar yeniden çözülsün (associativity model düzenlemesine dayansın).
- **🔴 [KRİTİK] Bayat (out-of-date) bayrağı** — model `rebuildOCCT` / parametre değişimi bir sinyal yayınlasın; CAM abone olsun; referans verdiği yüz/kenar/parametre değişen op'lar **bayat** işaretlensin (CATIA'daki kırmızı "update" dişlisi). Ürün ağacı op node'unda güncel (✓ yeşil) / bayat (⟳ kırmızı) rozeti.
- **🔴 [KRİTİK] Seçmeli yeniden hesaplama** — `FikoBagimlilikGrafi` yeniden kullanılarak yalnızca etkilenen op'lar recompute; tüm program değil. "Güncelle" (hepsi) + op-bazlı "Güncelle" aksiyonu.
- **🟡 [YÜKSEK] Oto/Manuel update modu** — CATIA gibi: Otomatik (değişince anında recompute) ↔ Manuel (bayat işaretle, kullanıcı "Güncelle" deyince hesapla). `FikoKnowledgeYonetici`'nin oto/manuel modu köprülensin.

### 4.2 Parametrik operasyon parametreleri (f(x) ile CAM)
- **🔴 [KRİTİK] CAM parametreleri merkezi depoya** — op derinliği, eksenel/yanal hatve (stepdown/stepover), finiş payı, güvenlik Z, takım çap/ağız, feeds/speeds gibi alanlar `FikoParametreDeposu`'na kaydedilebilsin ve **formül (f(x)) alabilsin**: örn. `yanalHatve = takimCap * 0.4`, `derinlik = \`Kutu\Yük\` - 5`, `guvenlikZ = stokUst + 10`. Değeri intrinsic (op oluşunca yayınlanan) + serbest parametre ikilisiyle (mevcut kalıp) yönet.
- **🔴 [KRİTİK] Tasarım↔imalat bağı** — CAM parametreleri tasarım parametrelerine (Pad/Pocket boyutları) formülle bağlanabilsin; tasarım parametresi değişince (ör. cep derinliği 20→30) bağlı op derinliği + toolpath otomatik güncellensin (dependency graph üzerinden).
- **🟡 [YÜKSEK] Tasarım tablosu / konfigürasyon** — merge'deki tasarım tablosu (snapshot/uygula) CAM'e de uygulanabilsin: farklı parça varyantları için farklı toolpath konfigürasyonları.
- **🟡 [YÜKSEK] Kontrol kuralları (checks)** — merge'deki checks (yeşil/kırmızı rozet): "takım çapı > cep min köşe R", "derinlik < takım kesim boyu", "stepover < takım çapı" gibi imalat kuralları; ihlalde uyarı.

### 4.3 Kompakt UI (aynı tarz, çok gelişmiş — CATIA-grade)
Mevcut kompakt/glassmorphic tarzı KORU (tool-axis dialog referansı: ~10px font, dar/dikey, az boşluk, cyan accent, SVG şema + çift-tık düzenleme). Eklenecekler **aynı dilde**:
- **f(x) chip'leri** — CAM dialog param alanları + ürün ağacı op parametrelerinde, mevcut `agac-item` f(x) chip deseni + `fiko-fx-editor.component` (ayrı dialog `knowledge.fxAc(id)`) yeniden kullanılsın. Formüllü alanda ƒ rozeti + hesaplanan değer.
- **Parametreler workbench'inde CAM grubu** — `FikoParametreWorkbenchComponent` (merge'deki 6-sütun tablo: Ad|Tip|Formül|=Sonuç|Açıklama|⚙) CAM op parametrelerini de gösteren "CAM / Operasyonlar" klasörü.
- **Ürün ağacı associativity rozetleri** — op node'unda güncel/bayat durum + tıkla-güncelle; ribbon GEÇMİŞ/PROGRAM yanına "Güncelle" + oto/manuel toggle.
- **3D şemalarda parametre yansıması** — mevcut `fiko-strateji-3d` / `fiko-makro-3d` gömülü motorları parametre değişiminde canlı güncellensin (zaten reaktif; f(x) değeri de yansısın).
- **Bayat toolpath görseli** — bayat op'un takım yolu simülasyonda soluk/kesikli gösterilsin ("güncel değil" ipucu).

**Reuse listesi (paralel yazma!):** `knowledge/FikoParametreDeposu` · `FikoIfadeMotoru` · `FikoBagimlilikGrafi` · `FikoKnowledgeYonetici` (oto/manuel) · `fiko-fx-editor.component` · `FikoParametreWorkbenchComponent` · `agac-item` f(x) chip · `fiko-toporef.ts` (stabil topo) · CAM'in mevcut `toolAxisParametrikGuncelle`/`makroDuzlemGuncelle` associatif kancaları.

---

## 5. Önceliklendirilmiş yol haritası (Fable 5)

1. **Faz 0 — Konsolidasyon.** İki sistemi tek workbench'te birleştir. Yeni sistemin OCCT offset + adaptive + feeds-speeds + tab parçalarını Prismatic'e köprüle; `'cam'` workbench'i gizle.
2. **Faz 1 — B-Rep offset (Direktif B).** `offsetPoly`/`offsetPoly2` → OCCT exact (`yuzKonturOffset` / `occtKonturOffsetSync`). En büyük "yanlış toolpath" kaynağını kapatır. *Her strateji için izole + canlı test — yanlış toolpath parça bozar.*
3. **Faz 2 — APT-birincil (Direktif A).** APT'yi tamamla (çevrimler / feeds / coolant / takım değişimi / 5-eksen / cutcom), birincil çıktı yap; G-code'u APT'den türet.
4. **Faz 3 — Setup + güvenlik UI.** Part Operation kurulum dialogu + gouge uyarı gösterimi + takım kütüphanesi kalıcılığı.
5. **Faz 4 — Strateji derinliği.** Gerçek adaptive/trochoidal, rest machining, tab entegrasyonu, malzeme kütüphanesi, simülasyon kontrolleri.
6. **Faz 5 — Parametrik CAM + associativity (Bölüm 4).** Stabil topo-ref bağlama → bayat algılama → seçmeli recompute (dependency graph) → f(x) CAM parametreleri (knowledge deposu) → kompakt associativity UI (rozet/güncelle/f(x) chip/oto-manuel). *Merge edilen `feature/parametrik-knowledge` çekirdeğini yeniden kullan; paralel yazma yok.* Faz 1-2'den bağımsız ilerleyebilir ama stabil topo-ref (`fiko-toporef.ts`) önce oturmalı.

> **Uygulama disiplini (kritik):** Toolpath değişiklikleri **parça bozar** (G02/G03 dersi). Her strateji değişikliği izole yapılmalı, `fikoyt.com` üzerinde canlı test edilmeli (playwright + `window` dev hook'ları), regresyon için mevcut çalışan mesh/JS yolu fallback olarak korunmalı (B-Rep başarısızsa uyarıyla düş).

---

## Ek — Dosya haritası

**Prismatic sistem (hedef):**
- Motor: `fiko-cam/fiko-cam-toolpath.ts` — offset (`:28, :64`), pocket/facing/contour/axial, guard'lar (`:400-408`), takım yarıçapı (`:148`), köşe (`:120-126`)
- Çıktı: `fiko-cam/fiko-cam-postprocessor.ts` — APT (`:106-128`), G-code çevrimleri (G81-G87), G68.2 tilted plane
- Yönetici/geometri: `fiko-cam/fiko-cam.yonetici.ts` — kontur B-Rep (`:674`), mesh fallback (`:697`), gouge (`:438`), stok/eksen (`:468, :541`), feeds (`:222`)
- Tipler: `fiko-cam/fiko-cam.types.ts` — strateji/trochoidal/tool axis alanları
- Dialoglar: `fiko-cam/fiko-cam-dialog.ts`, `fiko-cam-takim-dialog.ts`, `fiko-cam-tool-axis-dialog.ts`, 3D şema: `fiko-strateji-3d.component.ts`, `fiko-makro-3d.component.ts`
- Görsel: `fiko-cam/fiko-cam-gorsel.ts` · Ürün ağacı: `fiko-cam/fiko-cam-aktivite.ts`
- Ribbon/wiring: `Fiko3DComponent/.component.ts` (`camAl`, `workbenchSec('2dcam')`, `cam*` metodları)

**B-Rep offset kaynağı (Prismatic'e taşınacak):**
- `fiko-modelleme/fiko-occt-kernel.ts` → `yuzKonturOffset` (`BRepOffsetAPI`, yay-korumalı)
- `Fiko-2d-Cam/brep/occt-cam-kontur.ts` → `occtKonturOffsetSync`; `Fiko-2d-Cam/brep/face-cam-extract.ts` → `yuzAdalar`

**Parametrik CAM için yeniden kullanılacak (merge edilmiş, paralel yazma yok):**
- Çekirdek: `fiko-modelleme/knowledge/` → `FikoParametreDeposu`, `FikoIfadeMotoru`, `FikoBagimlilikGrafi`, `FikoFeatureAlanHaritasi`, `FikoKnowledgeYonetici` (oto/manuel + rebuildKopru)
- UI: `fiko-modelleme/fiko-parametre-workbench/fiko-parametre-workbench.component.ts` + `fiko-fx-editor.component.ts` · `Fiko3DComponent/agac-item/` f(x) chip
- Stabil topoloji: `fiko-modelleme/fiko-toporef.ts` · CAM associatif kancalar: `fiko-cam.yonetici.ts` (`toolAxisParametrikGuncelle`, `makroDuzlemGuncelle`)

**Yeni sistemden taşınacak parçalar:**
- `Fiko-2d-Cam/strategies/AdaptiveClearing.ts` (adaptive/trochoidal) · `strategies/feeds-speeds.ts` (malzeme tablosu) · `models/TabBridgeParams.ts` (tab/köprü) · `models/PeckDrillingParams.ts`, `AdvancedPocketParams.ts` · testler: `strategies/cam-toolpath-utils.test.ts`, `brep/brep-kontur.test.ts`

---

*Hazırlayan: Opus 4.8 (inceleme + teşhis). Uygulayacak: Fable 5. Tarih: 2026-07-04.*
