# FikoYT Web 3D CAM → fikatia-local Native (C++23/Vulkan/ImGui + OpenCAMLib) BİREBİR TAŞIMA BLUEPRINT'İ

> **Amaç:** Web 3D CAM/simülasyon/ürün-ağacı sisteminin UI/UX düzeni ve iş akışını native fikatia-local'e birebir taşımak.
> **Kural:** Web'in KODU kullanılmaz — yalnız **düzen + iş akışı** referans alınır. Hesap motoru **OpenCAMLib** + **tam BREP-topoloji** (mesh değil). Profesyonel takım yolları çıkacak.
> **Referans mimari (web'de en güncel, CATIA-tarzı):** `fiko-cam/` klasörü (Temmuz 2026, sıfırdan CATIA Prismatic Machining tarzı). Eski `Fiko-2d-Cam/` ve `FikoThreeCam/` yalnız alan/lead-in detayı için ikincil kaynak.
> **Native'in şu anki durumu:** `uygulama/fikocad/cam_paneli.cpp` (344 satır, tek pencere + 5 sekme tab-bar) — kullanıcı BEĞENMEDİ. Web 3D'deki gibi **her operasyon kendi penceresi + ayrı simülasyon penceresi + sol ürün ağacı** olacak.

---

## 0. GENEL MİMARİ EŞLEME (özet)

| Web Katmanı | Web Dosyası | Native Karşılığı (yazılacak) |
|---|---|---|
| CAM veri modeli (CATIA tip seti) | `fiko-cam/fiko-cam.types.ts` | `motor/cam/include/fiko/cam/cam_islem.hpp` GENİŞLETİLECEK → `CamGeometri`, `CamStrateji`, `CamHizlar`, `CamMakro`, `TakimYonu`, `PartOperasyon` struct'ları |
| CAM yönetici (CRUD, hesap, ağaç, undo, knowledge) | `fiko-cam/fiko-cam.yonetici.ts` (951 satır) | `motor/cam/.../cam_sistemi.cpp` GENİŞLETİLECEK |
| Operasyon penceresi (5 sekme) | `fiko-cam/fiko-cam-dialog.ts` (786 satır) | `uygulama/fikocad/cam_operasyon_penceresi.cpp` (YENİ, her op için ayrı ImGui penceresi) |
| Takım ekseni penceresi | `fiko-cam/fiko-cam-tool-axis-dialog.ts` | `uygulama/fikocad/cam_takim_ekseni_penceresi.cpp` (YENİ) |
| Parça operasyonu penceresi | `fiko-cam/fiko-cam-part-op-dialog.ts` | `uygulama/fikocad/cam_parca_op_penceresi.cpp` (YENİ) |
| Takım tanımı penceresi (grafiksel) | `fiko-cam/fiko-cam-takim-dialog.ts` | `uygulama/fikocad/cam_takim_penceresi.cpp` (YENİ) |
| Toolpath motoru (2.5D+offset) | `fiko-cam/fiko-cam-toolpath.ts` (699 satır) | `motor/cam/.../cam_hesap.cpp` + OpenCAMLib köprüsü GENİŞLETİLECEK |
| Post-processor (G-code/APT) | `fiko-cam/fiko-cam-postprocessor.ts` | `motor/cam/.../gkod.cpp` GENİŞLETİLECEK (canned cycle + G68.2) |
| Simülasyon penceresi | `fiko-similasyon-v1/*` (8400 satır TS + 476 satır HTML) | `uygulama/fikocad/cam_simulasyon_penceresi.cpp` (YENİ, AYRI pencere) |
| BREP kontur çıkarma | `Fiko-2d-Cam/brep/{brep-kontur,occt-cam-kontur,face-cam-extract}.ts` | `motor/cam/.../brep_kontur.cpp` (YENİ, OCCT tabanlı — zaten OCCT var) |
| Ürün ağacı node'ları | `FikoThreeCam/{FikoKaynakca,Fikoperasyon,...}.ts` + `fiko-cam/fiko-cam-aktivite.ts` | `motor/sahne` Dugum hiyerarşisi + `uygulama/fikocad/urun_agaci_paneli.cpp` (YENİ) |
| Dialog core (`.df().ac(...)`) | `DialogFiko.ac({bilesen, parametreler, ayarlar})` | ImGui: her pencere `bool acik` bayrağı + `ustteTutSinif/ustteTutDugmesi` (mevcut `pencere_util.hpp`) |

**Kritik ilke (MEMORY: fikatia-mimari-ilke):** Eklenen HER CAM sistemi doğduğu an makro (Lua) + plugin (DLL) + olay erişilebilir olmalı. Cekirdek registry'ye ekle → üçü bedavaya gelir. Yeni olay struct'ı enum SONUNA.

---

## 1. HER CAM KOMUTUNUN KENDİNE AİT PENCERESİ (operasyon dialogları)

### 1.1 Doğrulama: web'de her operasyon ayrı pencerede mi?
**EVET.** Web'de her aktivite/operasyon node'unun `dialogAc()` metodu var; çift-tık veya sağ-menü "Düzenle" → merkezi dialog servisiyle **ayrı** bir pencere açar. Node ↔ pencere 1:1.

`fiko-cam/fiko-cam-aktivite.ts:44`:
```ts
dialogAc(): void {
  if (!this.op || !this.yonetici) return;
  this.df()?.ac({
    bilesen: FikoCamDialog,
    parametreler: { element: this.op, yonetici: this.yonetici },
    ayarlar: { baslik: this.op.ad, simgeResim: './simgeler/3d.webp' },
  });
}
ciftTiklandi(): void { this.dialogAc(); }
```
`df()` = `this.sahne?.anaGosterim?.DialogFiko` (merkezi dialog servisi). Her farklı pencere tipi ayrı `ac()` çağrısı:
- Operasyon → `FikoCamDialog`
- Takım ekseni → `FikoCamToolAxisDialog` (`fiko-cam.yonetici.ts:192 toolAxisDialogAc`)
- Parça op → `FikoCamPartOpDialog` (`fiko-cam.yonetici.ts:202 partOpDialogAc`)
- Takım tanımı → `FikoCamTakimDialog` (`fiko-cam-aktivite.ts:124`)

**Native eşleme:** ImGui'de her açık operasyon için `ImGui::Begin("⚙ <op.ad>###op_<kimlik>", &acik, NoDocking)`. Aynı anda birden fazla operasyon penceresi açık olabilir (her birinin `###op_<kimlik>` benzersiz ID'si). `ustteTutSinif(ustte)` + `ustteTutDugmesi("op_"+kimlik, ustte)` ile pin. Pencere `acik=false` olunca yok edilir. **Mevcut tek-pencere-tab-bar düzeni (cam_paneli.cpp) KALDIRILACAK** — yerine: sol ürün ağacında operasyona çift-tık → o operasyonun kendi penceresi açılır.

### 1.2 Operasyon penceresinin 5 sekmesi (CATIA düzeni)
**Referans:** `fiko-cam/fiko-cam-dialog.ts:18-240` (template), `409-412` (sekme tanımı).
```ts
sekmeler = [
  { id: 'geo', ad: 'Geometri', ikon: '📐' }, { id: 'str', ad: 'Strateji', ikon: '⚙️' },
  { id: 'tk', ad: 'Takım', ikon: '🔧' }, { id: 'hiz', ad: 'Hız/İlerleme', ikon: '⚡' }, { id: 'mk', ad: 'Makro', ikon: '↪' },
];
```
Alt eylem çubuğu (`fiko-cam-dialog.ts:234-239`): **⚙️ Hesapla · ▶ Replay · ✔ Tamam · 🗑 Sil**.

Native: `ImGui::BeginTabBar` ile 5 sekme. `axial` (delme türü) mü freze mi ayrımına göre alanlar değişir (`AXIAL_TIPLER.includes(op.tip)`).

#### SEKME A — GEOMETRİ (`fiko-cam-dialog.ts:28-62`)
Üst: tıklanabilir araç şeridi (3D seçim başlatıcıları):
- **Delik türü (axial):** `🎯 Delik Merkezi` → `noktaSec()`
- **Freze türü:**
  - `⬚ Profil/Kontur` → `konturSec()` (yüz seç → sınır kontur)
  - `╱ Kenar` → `kenarSec()` (kenar zinciri seç → kontur)
  - `▢ Stok` → `stokKontur()` (stok sınırını kullan)
  - `🏝 Ada` (yalnız pocketing) → `adaSec()` + `🗑` ada temizle
  - `⊥ <takım ekseni etiketi>` → `taGelismis()` (5-eksen lisanslıysa; Tool Axis penceresi)
- İnteraktif 2D/3D şema `<fiko-strateji-3d>` (aşağıda 2.3)

Alanlar (axial):
- `Üst Z` (`op.geometri.ustZ`) + 🎯 3D düzlem seç (referanslı)
- `Derinlik` (`op.geometri.derinlik`) + 🎯 taban yüzü seç → derinlik = ÜstZ − yüzZ
- `Hedef Çap` (`op.geometri.cap`) — yalnız threadMilling/threadNoTap/tslotting

Alanlar (freze):
- `Üst Z (yüzey)` + 🎯 ; `Alt Z (taban)` + 🎯
- `Taban`: dropdown Kör(Kapalı) / Açık(Breakthrough) → `op.geometri.tabanAcik`
- `Geçiş Payı` (`breakthrough`) — yalnız açık taban
- `Açık Kenarlar` (`acikKenarlar`, örn "0,2") — yalnız pocketing (Open Pocket)

**ICamGeometri tam alan seti** (`fiko-cam.types.ts:49-74`) — native `struct CamGeometri`:
```
konturlar: vec<vec<vec2>>      // 2D kapalı/açık kontur(lar)
adalar: vec<vec<vec2>>         // cep içi ada (işlenmez, dolaşılır)
noktalar: vec<{x,y,z,aktif,baslangic}>  // axial delik noktaları
cap                            // axial hedef çap
ustKosul/altKosul: hard|soft   // contour üst/alt koşul
ustZ, altZ                     // işleme üst/alt kotu
ustZRef, altZRef, derinlikRef  // 3D yüz referansı (faceId) — ASSOCIATIF
yuzIdx: vec<int>               // seçili part yüz indeksleri
derinlik                       // axial delik derinliği
ofsetUst, ofsetKontur, ofsetTaban, ofsetCheck  // CATIA Offsets
baslangic, bitis: vec2         // start/end point
acikKenarlar: vec<int>         // Open Pocket: soft kenar indeksleri
tabanAcik: bool                // soft bottom (delip geç)
breakthrough                   // soft bottom geçiş payı (mm)
```

#### SEKME B — STRATEJİ (`fiko-cam-dialog.ts:64-119`)
Mod "çipleri" (dropdown yerine sol-tık ileri / sağ-tık geri cycle — pencereyi uzatmaz), `modListesi()` (`746-763`):
- **Freze modları:** Yol (Helisel/Zigzag/Tek Yön = `toolPathStyle`), Frez (Eş·Climb/Zıt·Conv = `yon`), Köşe (Dairesel/Keskin/Optimize/Zorunlu = `koseTip`), Radyal (Çap%/Maks/Yollar = `radialMod`), Eksenel (Maks Der/Seviye = `axialMod`), Finiş (Yok/Tabanda = `finisMod`), (+Daire modu — circularMill)
- **Axial modları:** Döngü (Standart/Gagalı/Talaş Kır/Beklemeli = `dongu`), Dwell (Kapalı/Devir/Süre = `dwellMod`), Sıra (Seçim/En Yakın = `noktaSirala`)

Freze sayısal alanları:
- Köşe Yarıçap (`koseR`) — circular/forcedCircular
- Tolerans (`makineToleransi`)
- **contouring/curveFollow:** Takım Tarafı (İçeride/Dışarıda/Üzerinde = `taraf`), Cutter Comp G41/42 (`kompanzasyonAktif`+`kompanzasyon`), Köprü/Tab (`tabAktif`,`tabAdet`,`tabGenislik`,`tabYukseklik`), Üst/Alt Koşul (`ustKosul`/`altKosul` hard/soft), Breakthrough
- **circularMill:** Radyal Pas (`daireYolSayisi`), Pas Mesafe (`daireYolMesafe`)
- **Radyal·Eksenel grubu:** Yanal·Çap% (`yanalHatveYuzde`) VEYA Yanal Hatve (`yanalHatve`); Seviye Sayısı (`seviyeSayisi`) VEYA Kesim Derinliği (`eksenelHatve`)
- **Finiş grubu:** Yan Pay (`finisPayi`), Taban Payı (`tabanPayi` — tabanda), (pocketing) Tam Finiş (`finisTam`), Scallop Önle (`avoidScallops`), Finiş İlerleme (`hizlar.finisIlerleme`)
- **facing:** Raster Açısı (`rasterAci`)

Axial sayısal alanları: Peck Derinlik, Geri Çekme, Dwell Değer, Breakthrough (delip çık), Peck Azaltma (`decrement`)+Min. Peck (`decrementLimit`).

**ICamStrateji tam alan seti:** `fiko-cam.types.ts:88-141` (Trochoidal alanları `trochoidalAktif/Adim/Genislik` dahil). Native `struct CamStrateji` — mevcut native `CamIslem`'de sadece `zHatve/yanalHatveOran/yuzeyPayi/ofsetYon` var; **çok genişletilecek.**

#### SEKME C — TAKIM (`fiko-cam-dialog.ts:122-135`)
- `Takım` dropdown → ürün ağacındaki takım kaynağına linkli (`op.takimId`, seçenekler `T<no> · <ad> (Ø<cap>)`)
- Seçili takım özeti: Tip / Çap / Ağız / Takım No (salt-okunur)
- `✏ Takımı Düzenle (Grafiksel)` → takım tanımı penceresi (`takimDuzenle()`)
- `＋ Yeni Takım Ekle (Ürün Ağacı)` → `yeniTakim()`

#### SEKME D — HIZ/İLERLEME (`fiko-cam-dialog.ts:137-146`)
- `⚡ Otomatik Hesapla (Vc/fz)` → `hizOtomatik()` (malzeme + takımdan)
- Kesme Hızı (Vc, m/dk) `kesimHiz`; Diş Başına (fz, mm) `disBasinaIlerleme`
- Hesaplanan grubu: Devir (rpm) `devir`; İlerleme (mm/dk) `ilerleme`; Dalma İlerleme `dalmaIlerleme`

**ICamHizlar:** `fiko-cam.types.ts:144-153` — `devir, kesimHiz, ilerleme, dalmaIlerleme, yaklasmaIlerleme, geriCekmeIlerleme, disBasinaIlerleme, finisIlerleme`.

#### SEKME E — MAKRO (giriş/çıkış/bağlantı) → **bkz. bölüm 9** (ayrıntılı)

### 1.3 Native uygulama notu (operasyon penceresi)
- `struct CamOperasyon` (web `ICamOperasyon`, `fiko-cam.types.ts:233-249`): `id, ad, tip, yorum, takimId, geometri, strateji, hizlar, makrolar[], takimYonu?, hesaplandi, bayat, bastirilmis`.
- **`tip` = CATIA operasyon türü** (native mevcut 5 enum'dan çok daha geniş, `fiko-cam.types.ts:38-46`):
  - Freze: `facing, pocketing, contouring, curveFollow, pointToPoint, circularMill`
  - Axial: `spotDrill, drilling, deepHole, breakChips, tapping, reverseTap, threadNoTap, boring, boringChamfer, boringStop, reaming, counterBore, counterSink, chamfer2, backBore, tslotting, threadMilling`
- Her `tip` için varsayılan strateji/hız/makro `operasyonEkle()` içinde (`fiko-cam.yonetici.ts:117-137`).
- Alanlar değişince `op.hesaplandi=false` (`degis()`), 🎯 elle sayı girildiğinde `*Ref` referansı KOPARILIR (`fiko-cam-dialog.ts:454-458`) — associatif çözümün eski kotu geri yazmasını önler.
- Pencere kapanışında `camSecimBitir()` (aktif 3D seçim modunu bitir).
- Alt çubuk **▶ Replay** → simülasyon penceresini açar (`replay()`, `fiko-cam-dialog.ts:781`).

---

## 2. OPERASYON PENCERESİ İÇİNDE 3D SEÇİM SİSTEMİ (CATIA seçimli akış)

### 2.1 Akış: "sahneden seç" butonu → 3D pick → yüz/kenar/kontur bağlama
Her seçim butonu yönetici üzerinden bir seçim modu başlatır. Yönetici canvas'a `pointerdown`+`pointermove` handler ekler; hover ile önizleme, tık ile bağlama. **Toggle:** aynı buton tekrar = seçim modunu bitir.

Seçim başlatıcılar (`fiko-cam.yonetici.ts:688-691, 659-670`):
```ts
camNoktaSecBaslat(op, gc)   // delik merkezi (nokta)
camKonturSecBaslat(op, gc)  // yüz → sınır kontur
camKenarSecBaslat(op, gc)   // kenar zinciri → kontur
camAdaSecBaslat(op, gc)     // cep içi ada
camDuzlemSecBaslat(op, ayarla, gc, etiket)  // yüz → Z DÜZLEMİ + faceId (associatif; ustZ/altZ/güvenlik/yaklaşma/düzleme-kadar)
camNoktaRefSecBaslat(op, ayarla, gc, etiket) // yüz/parça → LOCAL (x,y) sınır noktası (Limit 1/2)
camTakimYonuYuzeySecBaslat(op, gc)  // yüz normali → takım ekseni
```
Ortak `secBaslat()` (`fiko-cam.yonetici.ts:692-702`): eski modu kapatır, canvas listener ekler, seçim HUD'ını bildirir (`secimDurumBildir` → mod + öğe sayısı + etiket). `camSecimBitir()` (`710-719`) listener'ları söker, hover vurguyu siler, geri-çağrıyı tetikler.

### 2.2 Pick handler (raycast → BREP faceId → 2D kontur)
`secTik()` (`fiko-cam.yonetici.ts:745-811`):
1. Raycaster NDC'den → `rc.intersectObject(gm)` ilk isabet.
2. **faceId çözümü:** `const grup = gm.geometry.attributes['grup']` (BufferAttribute); `fid = grup.getZ(hit.faceIndex*3)` → BREP yüz kimliği (her üçgen vertex'i hangi yüze ait).
3. Mod'a göre:
   - `nokta`: dünya noktası → `op.geometri.noktalar.push()`, ustZ = point.z
   - `duzlem`: LOCAL z → `duzlemAyarla(z, faceId)` (associatif)
   - `noktaref`: LOCAL (x,y) → `noktaRefAyarla`
   - `toolaxis`: **B-Rep analitik yüz normali** `gm.occt_faceGroups[fid].normal` (yoksa mesh üçgen normali) → `takimYonuYuzey`
   - `kontur`/`ada`: `yuzKonturAl(gm, fid)` → 2D sınır kontur
4. Her bağlamada `hesapla(op)` + `secimGorselle(op)` + `secimDurumBildir()`.

Kenar modu (`745-760`): raycast yerine **ekran-uzaklığı** (`enYakinKenarGrup`, 22px eşik) → kenar grubu toggle → `kenarlardanKontur()` uç-uca zincirler.

Hover (`hoverTik`, `720-744`): kontur modunda imleç altındaki yüzün sınırını mavi önizle; kenar modunda en yakın kenar grubunu vurgula.

### 2.3 Operasyon penceresi içindeki interaktif 2D/3D şema
`<fiko-strateji-3d>` (`fiko-strateji-3d.component.ts`): operasyona göre üretilen ŞEMATİK cep/blok (gerçek parça değil), gömülü tam 3D motor. Rol tıklamaları (`StratejiRol`): kontur/ada/nokta/toolaxis/limit1/limit2/limitUst/limitAlt → ilgili seçim modunu başlatır. Offset etiketleri (üst/kontür/taban/check) çift-tık → değer düzenle (`offsetDuzenle`). `stratejiRol()` (`fiko-cam-dialog.ts:705-715`).

### 2.4 Native uygulama notu (3D seçim)
- **Native'de zaten seçim sistemi var** (MEMORY: olay-tabanli seçim). Web'in `attributes['grup']` = native mesh'te **yüz ordinali attribute'u**; native mevcut modelde `op.yuz` (u32 faceId) ve `op.delikYuzleri` var → doğru yönde.
- Native buton: `if (ImGui::Button("◉ Sahneden Seç (Kontur)")) cam.konturSecBaslat(op);` → sahne seçim modunu "cam-kontur" olarak ayarla; bir sonraki 3D tık `Cekirdek` seçim olayına düşer, CAM sistemi dinler → faceId çözer → **OCCT ile BREP kontur çıkarır** (bkz. bölüm 8), `op.geometri.konturlar`'a yazar, `op.kirli=true`, yeniden hesaplar.
- **Hover önizleme:** native raycast + faceId → OCCT yüz konturu → geçici çizgi (fog YOK).
- Seçim HUD: ImGui overlay "Kontur seç · N kontur seçili" (web `secimDurum` gibi).
- Her seçim modu Cekirdek registry'ye komut olarak eklenirse Lua/DLL'den de erişilir (makro: `fiko.cam.konturSec(opId)`).

---

## 3. TAKIM SİSTEMİ (kütüphane + tipler + parametreler + grafiksel pencere)

### 3.1 Takım tipleri (`fiko-cam.types.ts:8-11`) — native `enum TakimTip` GENİŞLETİLECEK
```
faceMill, endMill, ballMill, bullMill, conicalMill, tslotMill, threadMill,   (freze)
centerDrill, spotDrill, drill, countersink, counterbore, reamer,            (axial)
boringBar, tap, multiDrill, chamferMill
```
Türkçe adlar `TAKIM_AD` (`fiko-cam.types.ts:295-300`). Native mevcut `enum TakimTip` (takim.hpp) 9 değer → 17'ye çıkacak (multiDrill, chamferMill, tslotMill, threadMill, boringBar, centerDrill, counterbore ekle).

### 3.2 Takım parametreleri (`ITakim`, `fiko-cam.types.ts:13-35`) — native `struct Takim` GENİŞLETİLECEK
Temel: `id, ad, tip, cap (D), kose (Rc), ucAci, boy (lc), toplamBoy (L), agizSayisi, hatve (P tap/thread), numara (T-no)`.
Kademeli/özel (CATIA NC Tools): `cap2 (Dc), cap3 (Dc2), girisCap (d), kademeBoy1 (l1), kademeBoy2 (l2), ucAci2 (a2), ucAci3 (a3), kose2 (Rc2 t-slot üst), sapCap (Db)`.

Native mevcut `Takim` (takim.hpp): `numara, ad, tip, cap, koseYaricap, ucAci, boy, agizSayisi` → **kademeli alanlar (cap2/cap3/girisCap/kademeBoy1/2/ucAci2/3/kose2/sapCap/toplamBoy/hatve) eklenecek.**

### 3.3 Takım kütüphanesi (`fiko-cam.yonetici.ts:65-114`)
- localStorage kalıcı (`fikoCamTakimlar`), oturumlar arası korunur → **native'de JSON dosyası** (proje yanında `takimlar.json`).
- Varsayılan set (`varsayilanTakimlar`, `75-92`): Tarama Ø50, Parmak Ø10/Ø6, Küresel Ø6, Spot Ø8, Matkap Ø5/Ø8.5, Kılavuz M10, Rayba Ø10, Bara Ø20, Havşa 90°. Native `varsayilanTakimlar()` (takim.cpp) zaten var — genişlet.
- `takimEkle/takimSil/takimDegisti` → ürün ağacına takım node'u ekle/sil (`takimAgacEkle/Sil`), kullanan operasyonları yeniden hesapla.
- **Takım kullanılıyorsa silinemez** (`takimSil`, `108-114`: kullanan op sayısını kontrol).

### 3.4 Takım seçimi (operasyona atama)
- Operasyon penceresi Takım sekmesinden dropdown (bkz. 1.2-C).
- **Tool Change (sağ menü):** operasyon node'u sağ-menüsünde takım listesi (`fiko-cam-aktivite.ts:37-42, 73-74`) → tıkla → `op.takimId` değişir, `hizHesapla`+`hesapla`.
- `uygunTakim(tip)` (`fiko-cam.yonetici.ts:275-285`): operasyon türüne göre otomatik uygun takım (facing→faceMill, drilling→drill, tapping→tap ...).

### 3.5 Grafiksel takım tanımı penceresi (`fiko-cam-takim-dialog.ts`)
Sol: **canlı 3D profil (revolve)** `<fiko-takim-3d>` — tipe göre uç/dip şekli (ball/bull/flat/konik/matkap/tap...), parametre değişince güncel. Sağ: parametre formu (`fiko-cam-takim-dialog.ts:28-56`):
- Ad, Tip (dropdown 17 tip)
- Ölçüler: Çap(D), Kesici Boy(Lc), Toplam Boy(L), Sap Çapı(Ds), (kademeli) 2./3. Kademe Çap, Giriş/Alt Çap(d), Köşe R(Rc)/Alt Kesim R, Üst Kesim R(Rc2 t-slot), 1./2. Kademe Boy(l1/l2), Uç Açısı/1. Açı(a1), 2. Açı(a2), 3. Açı(taper), Hatve(P)
- Kesim: Ağız Sayısı(Nf), Takım No(T)
- Alt: ✔ Tamam / 🗑 Sil

Koşullu alan görünürlüğü tip'e göre (`kademeliVar/girisVar/koseVar/tslotVar/kademeBoyVar/ucVar/aci2Var/hatveVar` getter'ları).

**Native eşleme:** Ayrı ImGui pencere `cam_takim_penceresi.cpp`. Sol tarafa mini Vulkan viewport (revolve profil) VEYA ImGui DrawList ile 2D yan profil çizimi (basit başla). Sağ tarafa koşullu `DragScalar` alanları. Takım kütüphanesi tablosu native'de zaten var (`cam_paneli.cpp:204 takimKutuphanesi` — CollapsingHeader tablo) → ürün ağacına + ayrı pencereye taşınacak.

---

## 4. TAKIM YÖNÜ (TOOL AXIS) SEÇME SİSTEMİ

### 4.1 Model (`ITakimYonu`, `fiko-cam.types.ts:221-230`)
```
TakimYonKaynak = 'z' | 'yuzey' | 'plane' | 'custom'
ITakimYonu { yon:{x,y,z} (normalize world tool axis), kaynak?, yuzId? (faceId), origin?:{x,y,z} }
```
`yon` = takımın baktığı doğrultu (malzemeye −yon yönünde iner). Varsayılan {0,0,1}=Z. Operasyonda `op.takimYonu?` — yoksa part Z varsayılır.

### 4.2 Seçim yolları (`fiko-cam.yonetici.ts:171-218`)
- **Yüz normali (associatif):** `takimYonuYuzey(op, normal, nokta, faceId)` → `kaynak='yuzey', yuzId=faceId, origin=nokta`. **B-Rep analitik yüz normali** kullanılır (`occt_faceGroups[fid].normal`), yoksa mesh normali. Parça değişince `toolAxisParametrikGuncelle` (`448-453`) yüz normalini yeniden çözer → eksen takip eder.
- **Sabit düzlem:** `takimYonuDuzlem(op, 'xy'|'xz'|'yz')` → +Z/+Y/+X (`kaynak='plane'`).
- **Manuel IJK:** `takimYonuAyarla(op, {yon, kaynak:'custom'})` — IJK girildiğinde bağlantı kopar.
- **Ters çevir:** yon negatiflenir → custom.

### 4.3 Takım Ekseni penceresi (`fiko-cam-tool-axis-dialog.ts`) — CATIA "Tool Axis Definition"
- Üst: mod rozeti "🔗 Yüzeye Bağlı (parametrik)" / "Sabit"
- İnteraktif 3D triad `<fiko-toolaxis-3d>`: X/Y/Z okuna tıkla → o eksen; takım sembolüne tıkla → 3D'de yüzeyden seç. (`fiko-toolaxis-3d.component.ts`: origin küre + 3 renkli ok (X kırmızı/Y yeşil/Z mavi) + IJK yönünde takım sembolü; sol-tık seçer.)
- IJK alanları (I kırmızı/J yeşil/K mavi, `step 0.01`) → `setIJK` (bağlantı kopar)
- `⇅ Yönü Ters Çevir`
- Bağlıysa: "🔗 Yüzey #<yuzId> normaline bağlı — parça değişince güncellenir"

Operasyon penceresi Geometri sekmesindeki `⊥ <etiket>` butonu (`taGelismis()`) bu pencereyi açar (5-eksen lisanslıysa). Etiket: `takimYonuEtiket` (`fiko-cam.yonetici.ts:213-218`) → "Z", "Y", "X", "Yüzey (x,y,z)".

### 4.4 "İşleme Ekseni" (ekran görüntüsü) ile ilişki
Ekran görüntüsündeki ürün ağacı "İşleme Ekseni" düğümü = **Fikoperasyon altındaki FikoEksen (children[0])** (bkz. bölüm 7) — bu bir GÖRSEL eksen sistemi (operasyonun referans düzlemi). Simülasyonda `islemeEkseni` = kaçma değerleri ve açı gösterge hesabının referans çerçevesi (bkz. bölüm 6). Native'de: operasyonun `takimYonu.origin`+`yon`'undan türetilen eksen; ayrıca `PartOperasyon.eksenOrigin/eksenX/Y/Z` (Machining Axis System, G-code bu eksene göre üretilir, `fiko-cam.types.ts:257-260`).

### 4.5 Native uygulama notu
- `struct TakimYonu { Vec3d yon; enum Kaynak {Z,Yuzey,Duzlem,Custom}; u32 yuzId; Vec3d origin; };` → `CamOperasyon`'a ekle.
- Ayrı pencere `cam_takim_ekseni_penceresi.cpp`: ImGui triad çizimi (DrawList ok + tıklama hit-test), IJK `DragScalar`, "Yüzeyden Seç" butonu → sahne toolaxis seçim modu → OCCT yüz normali.
- Parametrik güncelleme: parça recompute olayında (Cekirdek olayı dinle) `kaynak==Yuzey` op'ların `yon`'unu OCCT `yuzNormalAl(yuzId)` ile yenile.
- Post: `yon ≠ Z` ise G68.2 tilted plane (bkz. bölüm 10).

---

## 5. SAĞ TIK BAĞLAM MENÜSÜ (operasyon/geometri hızlı ayarlar)

### 5.1 Operasyon node sağ menüsü (`fiko-cam-aktivite.ts:56-78`)
```
Düzenle (edit)         → dialogAc()
Hesapla (cogs)         → hesapla(op)
Simüle Et (play)       → _simAc(this)   [sadece bu op'un toolpath'i]
Makro Göster (3D)      → makroGorselGoster(op)
Kopyala / Dönüştür     → _copyAc(op)    [translate/rotate/symmetry pattern]
Bastır / Aç (ban)      → op.bastirilmis toggle (suppress)
── Ayraç ──
Takım Değiştir (Tool Change):  → takım listesi (her takım için ayrı satır)
── Ayraç ──
Sil (trash, kırmızı)   → operasyonSil(op)
```
`sagButonlar` (kompakt ikon çubuğu, 3 hızlı: Düzenle/Hesapla/Simüle) da var (`fiko-cam-aktivite.ts:56-60`).

### 5.2 Geometri/offset hızlı ayarları (operasyon penceresi içinde)
- **Offset çift-tık:** Strateji-3D şemasındaki offset etiketleri (üst/kontür/taban/check) çift-tık → inline sayı editörü (`offsetDuzenleAc` → `offsetKaydet`, `fiko-cam-dialog.ts:704-718`). Alanlar: `ofsetUst/ofsetKontur/ofsetTaban/ofsetCheck` (mm).
- **Yüzey payı:** Strateji sekmesi `finisPayi` (yan) + `tabanPayi` (taban) — bırakılacak malzeme.
- **Z düzlemleri 🎯:** her Z alanının yanında 3D yüz seç butonu (associatif).
- **Mod çipleri sağ-tık:** strateji modlarında sağ-tık = geri cycle (`modCycle(m,-1)`).

### 5.3 Genel 3D hızlı menü (nesne üzerinde sağ tık)
`fiko-3d-hizli-menu.component.*`: nesnenin `hizli3DMenu[]` dizisinden dairesel ikon butonları (baslik, simge, renkSinif, tiklandi). `ac(val, $event)` ile modal aç. **Native'de zaten var** (MEMORY: fikatia-hizli-3d-menu — sağ tık nesne bağlam menüsü + long-press Hızlı 3D). CAM operasyon node'una `hizli3DMenu`/sağ-menü öğeleri eklenecek.

### 5.4 Native uygulama notu
- Ürün ağacı satırında `ImGui::BeginPopupContextItem()` (mevcut `cam_paneli.cpp:273` zaten kullanıyor: Hesapla/Pasifleştir/Sil). GENİŞLETİLECEK: Düzenle, Simüle, Makro Göster, Kopyala/Dönüştür, Bastır, Tool Change alt-menü (takım listesi), Sil.
- Offset düzenleme: operasyon penceresi Geometri/Strateji'de her offset için küçük `DragScalar` + 3D şema hit-test (ImGui DrawList).
- Kopyala/Dönüştür (`kopyalaDonustur`, `fiko-cam.yonetici.ts:289-311`): translate(dx,dy,adet)/rotate(aci,merkez,adet)/symmetry(ayna ekseni) — konturları/adaları/noktaları dönüştürerek op çoğaltır.

---

## 6. SİMÜLASYON SİSTEMİ (AYRI PENCERE) — TAM ÖZELLİK LİSTESİ

**Referans:** `fiko-similasyon-v1/fiko-similasyon-v1.component.{ts(8400 satır),html(476 satır),scss}` + `SahneFikoAptSimilasyon.ts`.
**Ekran görüntüsündeki "Similasyon" penceresi = bu bileşen.** Ayrı, taşınabilir, FikoDialogCore penceresi.

### 6.1 Oynatma kontrolleri (`|< < || > >|`) (`html:6-22`)
```
⏮ backward   → poz = pozMin; pozisyonDegisti()      (başa sar)
◀ geri play  → tiklandiGeriOynat()                  (geri oynat: setInterval, poz--, pozMin'de dur)
⏸ pause      → tiklandiDuraklat()                   (interval durdur, ses/efekt sustur)
▶ ileri play → tiklandiIleriOynat()                 (setInterval 60ms, poz += simHizi)
⏭ forward    → poz = pozMax; pozisyonDegisti()      (sona git)
```
`simHizi` slider (1-1000) oynatma hızı. `poz` değişince `similasyonCizgisi.geometry.setDrawRange()` (çizgi animasyonu).

### 6.2 Zaman çizelgesi scrubber + renk kodları (`html:24-48`)
- Ana range slider `[pozMin..pozMax] step 1` ↔ `poz`.
- **Renkli timeline-bar:** `operasyonIsaretleri[]` → renkli segmentler (left%/width% ∝ baslangic/bitis), her segment `hareketTuru` etiketi. `operasyonSinirlari[]` → dikey beyaz operasyon sınır çizgileri.
- **Renk kodları** (hareket türü): İşleme = yeşil (chartreuse), Yaklaşma = sarı, Uzaklaşma = mavi, Boşta = kırmızı. `hareketTuruAl()` renk karşılaştırmasıyla türü çözer.
- Segment tıkla → `tiklandiOperasyon(isaret)` (o operasyona atla).
- `operasyonIsaretleriHesapla()` `noktalar[]` gezerek segment/operasyon sınırlarını renk kodlu üretir.

### 6.3 Başlangıç/Şimdiki/Bitiş sayaçları (`html:52-98`)
- `pozMin` (Başlangıç), `poz` (Şimdiki), `pozMax` (Bitiş) — düzenlenebilir sayı alanları + "sıfırla" + "pozisyon seç" butonları. (Ekran: Başlangıç 0, Şimdiki 68559, Bitiş 223969 → nokta indeksleri.)

### 6.4 Canlı G-kod/konum göstergesi (`html:100-182`)
- **Operasyon etiketi:** `{{aktifOperasyonIsmi}} | {{aktifHareketTuru}} | {{takim.cap}} R{{takim.radius}}` (ekran: "Advanced Finishing.2 | İşleme | 30 R15")
- **Üst Açı/Alt Açı:** `gostergeAci.ustAci/altAci` (1.3-3 format). Hesap `gostergeAcilariAl()`: takım yönü IJK'sının XY-projeksiyon açısı (üst) + Z ile yaptığı açı (alt).
- **Kaçma Değerleri X/Y/Z:** `gostergeKacmaDegerleri.x/y/z` (toFixed 4). Hesap `gostergeKacmaDegerleriniAl()`: aktif takımı işleme ekseni çerçevesine dönüştürüp Box3 bbox min/max'ından takım kaçma (kesici zarf) değerleri. (Ekran: X:-15.0000 Y:-15.0000 Z:-0.0015)
- **İşleme Ekseni adı:** `islemeEkseni?.name` (ekran: "Fikoperasyon.1 İşleme Ekseni")
- **XYZ konum:** `gostergeNokta.x/y/z` (toFixed 6) — anlık takım konumu.

### 6.5 İlerleme/Devir göstergesi (`html:172-189`)
- İlerleme: `aktifNokta.hiz * (reelIlerleme/100)` mm_dk + hareket türü. (Ekran: 10000mm_dk)
- Devir: `aktifNokta.devir` rpm. (Ekran: 4500rpm)
- `reelIlerleme` slider (1-200%) → gerçek ilerleme yüzde override. (Ekran: %100)

### 6.6 Geçen/Toplam süre + yüzde ilerleme (`html:184-189`)
- Geçen: `aktifNokta.guncelSure / (reelIlerleme/100)` `insancaSaniye` pipe.
- Toplam: `aktifNokta.toplamSure / (reelIlerleme/100)` `insancaSaniye`.
- Süre hesabı: her nokta için `mesafe / (hiz/60)` → kümülatif `guncelSure` + `toplamSure`.
- Reel Yüzdelik İlerleme: `%{{reelIlerleme}}`.

### 6.7 Malzeme kaldırma (stock removal) görselleştirmesi — **VAR, GPU hızlandırmalı**
`kutukSimModu: 'dexel'|'voxel'|'csg'|'visual'|'marchingcubes'|'sdf'|'zbuffer'` — 7 motor:
- `TripleDexelEngine` (CPU triple-dexel 2.5D), `DexelGPUEngine` (WebGPU dexel)
- `VoxelCSGEngine` (voxel+octree), `VoxelGPUCompute`, `MarchingCubesGPU` (zero-readback mesh)
- `SDFEngine` (signed distance field), `ZBufferEngine` (6-yön depth map)
- Kütük seç (`tiklandiKutukSec` — ürün ağacı/3D'den), Kütük sim başlat (`tiklandiKutukSimToggle` → `kutukDexelBaslat`), Kaldırılan hacim `kutukKaldirilanHacim.toFixed(1)` cm³.

### 6.8 Takım görselleştirme (`FikoTakimFrezeleme.ts`)
- Tip-farkında mesh: ParmakFreze/BallNose/Toroidal/VKesici/Matkap/Punta/Rayba/Kilavuz/Havsa. `cap, radius (kose), boy, kesmeBoy`, tutucu (FikoTakimTutucu).
- CAM yönetici `simTakimMesh(tk)` (`fiko-cam.yonetici.ts:491-499`): ball→küre+silindir, bull→torus+silindir, flat→silindir.

### 6.9 Çarpışma/gouge kontrolü (`html:392-412`)
- **Canlı çarpışma:** `tiklandiCarpismaToggle` (`carpismaKontrolAktif`).
- **Tam tarama:** `tumCarpismalariTara()` — WebGPU silindir-üçgen kesişim (gerçek mesafe), yoksa CPU. `carpismaNoktalar[]` (x,y,z,pozIdx,zaman), `carpismaSayisi`, ilerleme %.
- **Çarpışma flash:** kırmızı box-shadow (`carpismaFlash`).
- **Statik gouge (CAM yönetici):** `gougeKontrol()` (`fiko-cam.yonetici.ts:574-596`): rapid malzeme altında (çarpma), feed/plunge taban altında (gouge), derin dik dalış (rampa/helis öner). Toolpath hesabıyla üretilir.

### 6.10 "Araçlar" dropdown (`html:194-301`, popover) + "Kapat"
Bölümler:
- **GÖRÜNÜM:** simülasyon çizgisi, çizgi önde/arkada, renk, noktalar, tutucu tanımla.
- **KAMERA:** mod (0 serbest/1 kilit-takip/2 drone-sinematik) + Takip yumuşaklık / Drone hız/mesafe/açı sliderları; Yön oku; HUD (boyut slider).
- **DIRECTOR:** ayrı sinematik pencere (`directorModeAc`).
- **EFEKTLER:** Ses (master+kesim+harmonik+gürültü+servo+pitch mix), Talaş (partikül), Titreşim, Lazer/Hayalet (efektModu), Sonar.
- **ANALİZ:** Çarpışma (canlı/tara), Cycle time raporu (`cycleTimeAnaliziHesapla`).
- **Çizgi Üzerinde İlerleme** toggle (`cizgiUzerindeIlerle`): noktalar arası smooth lerp (atlamalı değil).
- **Kapat** (`kapa()`): oynatmayı durdur, taramayı iptal, temizle, subscription/listener söker, FikoDialogCore penceresini kapat.

### 6.11 Ek efektler
3D HUD (RPM/feedrate arc gauge + crosshair + text sprite billboard), sonar halkaları, talaş partikül havuzu (200), sinüzoidal kamera titreşimi, Web Audio kesim sesi sentezi.

### 6.12 Native uygulama notu (simülasyon)
- **AYRI ImGui pencere** `cam_simulasyon_penceresi.cpp` (`ImGui::Begin("Similasyon###cam_sim", &acik, NoDocking)` + pin).
- Nokta modeli `struct SimNokta { Vec3d p; f64 hiz, devir; HareketTuru tur; Takim* takim; Vec3d takimYonu; f64 guncelSure, toplamSure; u32 opId; }` (web `FikoVektorTakimYol3D`).
- **Native performansla stock removal:** Vulkan compute ile dexel/voxel (web'in TripleDexel/VoxelGPU eşleniği). OpenCAMLib zaten var (waterline/drop-cutter) — ama malzeme kaldırma görselleştirmesi AYRI (dexel field). Başlangıçta CPU triple-dexel, sonra Vulkan compute.
- Timeline: ImGui DrawList ile renkli segment barı + scrubber (ImGui::SliderInt). Renkler web ile aynı (İşleme yeşil / Yaklaşma sarı / Uzaklaşma mavi / Boşta kırmızı).
- Transport: ImGui butonları (◀◀ ◀ ⏸ ▶ ▶▶), `simHizi`, `reelIlerleme` sliderları.
- Göstergeler: Üst/Alt açı, Kaçma X/Y/Z, İşleme Ekseni adı, XYZ, İlerleme/Devir, Geçen/Toplam süre — `ImGui::Text`.
- Araçlar: `ImGui::BeginPopup` veya alt bölümler (CollapsingHeader: Görünüm/Kamera/Efektler/Analiz).
- Çarpışma: Vulkan compute silindir-üçgen (native perf). Gouge: OpenCAMLib CL noktalarından statik analiz (rapid/feed Z kontrolü — web `gougeKontrol` mantığı).
- **Operasyon penceresi ▶ Replay → bu pencereyi açar** (web `replay()` → `_simAc`).

---

## 7. ÜRÜN AĞACI YAPISI (ekran görüntüsüyle doğrulanmış)

**Kök:** `FikoUrunAgaci` (`FikoUrunAgaci.ts`). Kurulum sırası (`SahneStepViewer.ts:83-85`):
```
FikoUrunAgaci
├── Ana Eksen              (FikoEksen)  [children[0]]
├── Fiko Çizimler          (FikoCizimler)
│   └── FikoGrupÇizim.N     (FikoGrupCizim)
│       └── Üst_Kalıp
│           ├── Üst_Kalıp Konumları  (FikoKonumlar — kamera konumları)
│           └── Üst_Kalıp Kütük      (FikoKutuk — stok/kütük)
├── FikoYT Operasyonlar    (FikoOperasyonlar = "Fikoperasyonlar")
│   └── Fikoperasyon.N      (FikoOperasyon)
│       ├── İşleme Ekseni    (FikoEksen)        [children[0]]
│       ├── <op> Çizimleri   (FikoCizimler)     [children[1]]
│       └── Nc Programlar    (Fikogramlar)      [children[2]]
│           └── <ad>.FikoTakimYolu  (Fikogram → FikoTakimYoluv1)
└── Kaynakça               (FikoKaynakca)
    ├── Konumlar            (FikoKonumlar)
    ├── Kalıcı Ölçümler     (FikoKaliciOlcumler)  [= ekran "Kabcı/Kalıcı Ölçümler"]
    ├── Kamera Kontrolleri  (FikoGrup, userData['FikoParametreler'])
    │   ├── Pan Hızı        (Çubuk 0.1–10.0, def 0.2)   → aktifKontrol.panSpeed
    │   ├── Döndürme Hızı   (Çubuk 0.1–20.0, def 1.0)   → aktifKontrol.rotateSpeed
    │   └── Zoom Hızı       (Çubuk 0.1–15.0, def 1.0)   → aktifKontrol.zoomSpeed
    ├── Işıklar             (FikoIsiklar)
    │   ├── Ana Ortam Işığı (FikoIsikOrtam — AmbientLight, intensity 1.5)
    │   └── Yönsel Işık     (FikoIsikYonsel — DirectionalLight, intensity 1.2, kameraTakip)
    └── Fiko-Etiketler      (FikoEtiketler — 8+ annotasyon tipi)
```
**aktifTakim:** ürün ağacı düğümü DEĞİL — sahneye ismiyle eklenir (`getObjectByName("aktifTakim")`), simülasyon döngüsünde güncel takım mesh'iyle doldurulur (görselleştirme-only).

**Node tipleri ve kuralları:**
- Her node `FikoGrup` (⊂ `FikoObje3D` ⊂ `THREE.Object3D`) türevi. `userData['FikoArayuz']`: `agactaGorunur, listeGoster, simge, baslik, renk`.
- `FikoOperasyon` constructor SABİT 3 çocuk ekler (İşleme Ekseni + Çizimleri + Nc Programlar).
- `FikoKaynakca` constructor: Konumlar + Kalıcı Ölçümler + Kamera Kontrolleri + (Işıklar + Etiketler kurulumda eklenir).
- Kamera slider'ları `userData['FikoParametreler'] = [{isim, turu:'Çubuk', ayar:{min,maks,adim}, degeri, degisti(v)=>{...}}]` — tree item bunları slider olarak render eder (`agac-item.component`).
- CAM operasyonu (yeni `fiko-cam`): `FikoCamAktivite` node (`fiko-cam-aktivite.ts`) — Manufacturing Program altında; altında `FikoTakimYoluv1` toolpath node'u (`toolpathNodeKur`, `fiko-cam.yonetici.ts:511-521`). Takım kaynağı: `FikoCamTakimNode`.

**Native uygulama notu (ürün ağacı):**
- `uygulama/fikocad/urun_agaci_paneli.cpp` (YENİ) — sol ImGui pencere, `ImGui::TreeNodeEx` hiyerarşisi. Node = sahne `Dugum`'ları (native'de zaten var — MEMORY: hiyerarşik import + iç içe ürün ağacı). CAM node tipleri eklenecek: Fikoperasyon, İşleme Ekseni, Nc Programlar, TakımYolu, CAM Aktivite, Takım kaynağı, Kaynakça, Kamera Kontrolleri (slider parametreler), Işıklar, Etiketler.
- Çift-tık → ilgili pencere (operasyon/takım/parça-op). Sağ-tık → bağlam menüsü (bölüm 5).
- Kamera/ışık kontrolleri: node satırında inline `SliderFloat` (Pan/Döndürme/Zoom hız → kamera kontrolü; ambient/directional intensity → ışık).
- **Native'de MEMORY notu:** boş-mesh gövde → geçersiz yerelSinir → NaN kamera fit → viewport kaybolur; fit döngüleri geçersiz bbox atlamalı (CAM stok/kütük eklenirken dikkat).

---

## 8. BREP / OCCT TOPOLOJİ (mesh değil — tam B-Rep)

**Kritik kural:** İşleme mesh üçgenlerine göre DEĞİL, BREP topolojisine göre. Web iki kademeli çözüm sunar; native'de OCCT zaten var → **doğrudan OCCT exact** kullan.

### 8.1 Web'in iki kademesi (`Fiko-2d-Cam/brep/`)
1. **OCCT exact** (`occt-cam-kontur.ts`): İçe aktarılan STEP shape'ten (parça `userData['__stepBytes']`) seçilen yüzün GERÇEK konturu — sıralı LINE/ARC segmentleri, merkez/yarıçap korunur (kare→düz, daire→gerçek yay). `occtYuzKonturu`, `occtKonturOffsetSegSync` (G02/G03 için arc korumalı offset), `occtYuzAdalar` (delik/ada iç konturları).
2. **Mesh fallback** (`brep-kontur.ts` `sinirLoopCikar`): faceId üçgen bölgesinden welded (0.1µm) + sıralı boundary loop; sınır kenarı = tam bir üçgende görünen kenar; en büyük alanlı loop = dış kontur, kalanı delik.

Köprü (`face-cam-extract.ts`): `occtFaceVertices` (OCCT exact + pick-guard), `faceBrepVertices` (mesh), `occtFaceIslands`. faceId çözümü: `geometry.attributes['grup'].getZ(vertexIndex)`.

CAM yöneticide kullanım: `yuzKonturAl(gm, fid)` (`fiko-cam.yonetici.ts:812-831`) — önce `brepKontur(fid)` (segment: line/arc; arc'lar ~7.5° örneklenir), yoksa mesh sınırına düşer. Toolpath offset: `offsetPolyX` (`fiko-cam-toolpath.ts:51-58`) önce OCCT B-Rep exact (`poligonOffset2D`), doğrulamadan geçerse (`offsetGecerliMi`: winding/yön/bbox/self-intersection), yoksa JS fallback.

### 8.2 Native uygulama notu (BREP)
- **fikatia-local'de OCCT zaten var** (MEMORY: M4 OCCT, hiyerarşik STEP import). CAM seçimi doğrudan OCCT shape'ten yüz konturu/normali/offset çıkaracak — mesh fallback'e gerek YOK (native STEP shape'i tutuyor).
- `motor/cam/.../brep_kontur.cpp` (YENİ): `yuzKontur(shape, faceId) → vec<Segment{tip:Line|Arc, noktalar, arc:{cx,cy,r,cw}}>`, `yuzNormal(shape, faceId) → Vec3d`, `yuzKonturOffset(shape, faceId, delta, sharp) → segmentler` (BRepOffsetAPI), `yuzAdalar(shape, faceId)`, `silindirikYuzler(shape) → delik adayları` (otomatik delik tanıma, web `delikAdaylari`).
- **Delik otomatik tanıma:** `delikleriOtomatikBul` (`fiko-cam.yonetici.ts:139-162`) — B-Rep silindirik yüzlerden delik merkezleri, çapa göre gruplu drilling op'ları. Native: OCCT `GeomAbs_Cylinder` yüzleri tara.
- **faceId ↔ OCCT TopExp eşlemesi** kritik (web'de bile "garanti değil" uyarısı var). Native'de import sırasında yüz ordinali ↔ TopoDS_Face haritası tut (mesh tessellation'da yüz attribute'u zaten yazılıyor).
- OpenCAMLib girişi: BREP konturu → poligon (arc'lar tessela) → OCL `Path`/`Loop`. 3D ops (Kaba/Finiş) için gövde mesh'i OCL `STLSurf`'e; ama **kontur/derinlik BREP'ten** (exact Z, exact sınır).

---

## 9. GİRİŞ / ÇIKIŞ / ARA HAREKET (LINKING) MAKROLARI — CATIA "Macro Management"

**Native gerçeği:** OpenCAMLib **linking yapmaz** (yalnız cutter-location noktaları üretir). Giriş/çıkış/ara hareket + makro yönetimi **tamamen bizim CAM katmanımızda** yazılacak. Web'de iki model var:

### 9.1 Güncel model — CATIA Macro Management (`fiko-cam.types.ts:155-219`)
CATIA'daki gibi **birden fazla ayrı makro** (`op.makrolar: ICamMakro[]`). Makro tipleri (`MakroTip`):
```
approach      Yaklaşma (malzemeye giriş)          [CATIA Approach]
retract       Geri Çekme (malzemeden çıkış)        [CATIA Retract]
linkApproach  Bağlantı yaklaşma (pas/bölge arası)  [CATIA Linking]
linkRetract   Bağlantı geri çekme
returnLevel   Seviye içi dönüş (Return in a Level)
returnBetween Seviyeler arası dönüş (Return Between Levels)
clearance     Güvenlik düzlemi (Clearance)
```
**ICamMakro alanları** (`fiko-cam.types.ts:196-210`):
```
tip, aktif, mod ('hazir'|'custom'),
hareketTip: GirisTip ('dikine'|'rampa'|'helis'|'yay'|'on'),  // approach/retract preset
adimlar: IMakroAdim[],   // custom (Build by user) hareket dizisi
aci (rampa/helis °), yaricap (helis/yay mm), mesafe (teğetsel/eksenel mm),
guvenlikZ (clearance Z), yaklasmaZ (feed-plane), jumpYuksek (bölge/delik arası sıçrama),
guvenlikZRef, yaklasmaZRef  // 3D yüz referansı (associatif)
```
**IMakroAdim (Build by user primitifleri)** (`fiko-cam.types.ts:174-193`):
```
MakroAdimTip: 'eksenel' (dik iniş/çıkış mesafe) | 'teget' (yola teğet yatay) |
              'rampa' (aci+mesafe) | 'helis' (yaricap+aci+eksenel mesafe) |
              'duzleme' (mutlak Z'ye kadar — hedefZ + hedefZRef associatif)
```

### 9.2 Makro sekmesi UI (`fiko-cam-dialog.ts:148-232`)
- **Kategori çipleri:** her makro bir çip (aktif/pasif noktası) → seç (`aktifMakroSec`).
- Seçili makro:
  - **clearance:** Güvenlik Z + 🎯, Yaklaşma Z + 🎯
  - **approach/retract/linkApproach/linkRetract:** Mod dropdown:
    - *Hazır:* Dikine / Rampa / Helis / Teğet Yay / Ön-Delik
    - *Şablon (hazır dizi):* Rampa→Eksenel / Helis→Eksenel / Eksenel→Teğet / Rampa→Teğet→Eksenel
    - *Özel — Build by user:* ikon tabanlı hareket öğesi araç çubuğu (Eksenel/Teğet/Rampa/Helis/Düzleme) → sıralı adım listesi (her adımın mesafe/açı/yarıçap/hedefZ alanları + ↑↓ taşı, ✕ sil)
    - Hazır modda: Açı (rampa/helis), Yarıçap (helis/yay), Uzaklık (mesafe)
    - **İnteraktif 3D önizleme** `<fiko-makro-3d>`: yol noktaları + ölçü etiketleri; sürükle-döndür, düğüm çift-tık → adım düzenle, düğüm sürükle → canlı ölçü değiştir. Renk: retract kırmızı, approach cyan.
  - **returnLevel/returnBetween:** Sıçrama Z (`jumpYuksek`)
- Alt: yeni makro ekle (tip dropdown + ＋ Makro Ekle).

**Varsayılan makro seti** (`fiko-cam.yonetici.ts:220-229`): clearance + approach (pocketing→helis, contour/profil→teğet yay, diğer→rampa; axial→ön-delik) + retract (dikine).

### 9.3 Eski model — sayısal lead-in/out detayı (`Fiko-2d-Cam/aktiviteler/profil/FikoAktiviteProfil.ts`)
Bu daha eski sistem her makro tipi için **sayısal parametreler + geometri algoritması** içerir (native yazımı için hazır referans):

**GİRİŞ (lead-in):** `girisYontemi: Dikey|Rampa|Helisel|Yay|Teget`
- **Dikey (plunge):** dik Z dalma, `ilerlemeDalma`.
- **Rampa:** `girisRampaAcisi` (°), tanjant yönü. `xyUzunluk = zFark/tan(aci)`; başlangıç = nokta − teğet·xyUzunluk; rapid→başlangıç, sonra açılı feed.
- **Helisel:** `girisHeliselCap` (çap→r), `girisHeliselAdim` (pitch mm/tur), `girisYonuCW`. `turSayisi = ceil(zFark/pitch)`, 15° açısal adım, `zAdim = zFark/(tur·360)`; merkez = giriş noktası; rapid→(merkez+r), spiral in, merkeze çık.
- **Yay (roll-in):** `girisYayRadius`, `girisYayAci` (sweep). Merkez = nokta + normal·r·yön; G02/G03 (i=merkez.x−p.x, j=merkez.y−p.y); rapid→yay başı, dik dalma, yay interpolasyonu.
- **Teğet (line):** `girisTegetUzunluk`; başlangıç = nokta − teğet·uzunluk; rapid→başlangıç, dik dalma, teğet feed profile.

**ÇIKIŞ (lead-out):** `cikisYontemi: Dikey|Rampa|Yay` — girişin simetriği.
- **Dikey:** dik Z geri çekme (rapid → güvenli Z).
- **Rampa:** `cikisRampaAcisi`; bitiş = nokta + teğet·xyUzunluk; açılı retract (`ilerlemeCekme`).
- **Yay:** `cikisYayRadius`, `cikisYayAci`, `cikisYonuCW`; G02/G03 roll-out + son dik retract.

**ARA HAREKET / LINKING:**
- **Stay-down vs Full retract kararı** (`stayDownKarari`, en kritik):
  ```
  mesafe = XY(sonNokta, hedefNokta)
  EĞER stayDownEtkin AND mesafe <= stayDownMesafe:
      STAY-DOWN: (1) Z'yi kaldirmaMesafesi kadar kaldır (feed),
                 (2) lift yüksekliğinde feed traverse, (3) çalışma Z'sine tekrar dal
  DEĞİLSE:
      FULL RETRACT: (1) güvenli Z'ye rapid, (2) güvenli Z'de rapid traverse, (3) çalışma Z'sine dal
  ```
  Alanlar: `stayDownEtkin, stayDownMesafe (mm), kaldirmaMesafesi (lift mm)`.
- **Seviyeler arası (between levels):** `araCikisHesapla(mevcutZ)` → `araGecisZ` kadar lift (feed) — çok-pasolu roughing'de Z seviyeleri arası.
- **Bağlantı tipi:** `gecisTipi: Direkt|Yumusak|Profil` (cep: `Direkt|Yumusak|ZKaldir`). Not: Yumuşak/Profil web'de tanımlı ama tam implemente değil → **native'de biz yazacağız.**

**Cep giriş (`FikoAktiviteCep.ts`):** `girisYontemi: Dikey|Rampa|Helisel|Yay|OnDelme` (OnDelme = ön-delinmiş noktadan giriş — parametre var, üretim eksik → native'de yaz). Yükseklikler: `clearanceHeight (güvenli), retractHeight (pasolar arası), feedHeight (rapid→feed geçiş), zHatve (stepdown)`.

### 9.4 Native uygulama notu (linking — SIFIRDAN yazılacak)
`struct CamMakro` + `enum MakroTip` (7 tip) + `struct MakroAdim` (5 primitif) → `CamOperasyon.makrolar`. Operasyon penceresi Makro sekmesi: kategori çipleri + mod dropdown + Build-by-user adım listesi + mini 3D/2D önizleme (ImGui DrawList).

**Her makro tipi için gereken geometri/algoritma (OpenCAMLib CL noktalarına EKLENECEK katman):**
| Makro | Geometri | Algoritma notu |
|---|---|---|
| Dikine (plunge) | dik Z segment | başlangıç noktasında ustZ→hedefZ, dalma feed |
| Rampa | açılı XY+Z | `xyLen = dz/tan(aci)`; kontur teğeti/rampa yönü boyunca; cep içinde zik-zak rampa |
| Helis | helisel spiral | r=cap·oran, pitch; `turlar=ceil(dz/pitch)`; N=18·tur nokta; cep dalışı için ideal |
| Teğet Yay (roll-in/out) | G02/G03 yay | merkez = giriş noktası + normal·r; sweep açısı; i/j offset; kontura teğet |
| Teğet Çizgi | düz teğet | başlangıç = giriş − teğet·uzunluk; kontur yönünde |
| Ön-Delik | önceden delinmiş | delik noktasından dik giriş (rampa/helis gerekmez) |
| Clearance | güvenli düzlem | tüm rapid'ler bu Z'de; associatif yüz+offset olabilir |
| Linking (stay-down) | koşullu | mesafe ≤ eşik → aynı-Z feed hop (lift+traverse+plunge); değilse rapid-over-clearance |
| Return between levels | seviye lift | `araGecisZ`/`retractHeight` kadar kaldır, sonraki seviyeye geç |

**Uygulama akışı:** OpenCAMLib bir operasyonun her Z seviyesi/konturu için CL noktaları verir → CAM katmanı: (1) giriş makrosu (ilk engagement öncesi), (2) kesme CL noktaları, (3) çıkış makrosu, (4) pas/kontur arası linking makrosu (stay-down/retract kararı) ekleyerek tam hareket zincirini (`vec<Hamle>`) kurar. Arc makroları post'ta G02/G03; helis çok-segmentli G01.

---

## 10. GENEL UI STİLİ + DİALOG DAVRANIŞI

### 10.1 Neon-cyan tema (web) → native ImGui
- Web renkleri (`fiko-cam-dialog.ts:241-401`): koyu cam arka plan (`linear-gradient(rgba(10,24,40,.78)...)` + `backdrop-filter:blur`), neon-cyan kenar `rgba(56,189,248,.22)`, cyan vurgu `#00d0ff/#38bdf8`, turuncu başlık gradyanı `#ffd9a0→#ff8c1a`, yeşil değer `#9be8b0`, kompakt font (9-11px system-ui, tabular-nums).
- **Native zaten uyumlu** (`cam_paneli.cpp:26`): `constexpr ImVec4 CYAN{0.10,0.85,1.0,1.0}`, `HATA_RENK`, `SOLUK`. ImGui style: koyu tema, cyan accent (`ImGuiCol_CheckMark`, `ImGuiCol_Header`), kompakt padding. Başlıklarda `SeparatorText`, `TextColored(CYAN, ...)`.
- Animasyon: web'de bol (chip hover, tab geçiş, pulse). ImGui'de: hover renk geçişi (ImGui built-in), aktif seçim pulse (renk lerp `sin(time)`), buton hover parlaklık.

### 10.2 Dialog davranışı (FikoDialogCore → ImGui pencere)
- Web `DialogFiko.ac({bilesen, id, parametreler, ayarlar:{baslik, simgeResim, modalMi, sinirlandi, boyut}})` — non-modal, floating, draggable, resizable, id ile çift-açılma engeli, `onDialogClose`.
- **Native eşleme:**
  - Her pencere tipi ayrı `.cpp` (`camXPenceresiCiz(...)`), `bool acik` bayrağı (çift-açılmayı `###id` benzersizliği + bayrak yönetir).
  - `ImGui::SetNextWindowSize({w,h}, ImGuiCond_FirstUseEver)` (web `boyut`).
  - `ImGuiWindowFlags_NoDocking` (ayrık, taşınabilir).
  - **Pin ("üstte tut"):** mevcut `pencere_util.hpp` `ustteTutSinif(ustte)` (Begin öncesi) + `ustteTutDugmesi(id, ustte)` (Begin sonrası, X'in soluna daire pin). Web `simgeResim`/başlık → pencere başlığı `⚙ <ad>###<id>`.
  - Kapanış temizliği: seçim modu bitir, geçici görseller sil (web `ngOnDestroy → camSecimBitir`).
- **Operasyon penceresi kompakt genişlik:** web 252px default (`fiko-cam-dialog.ts:417-420`). Native: ~280-320px.

### 10.3 Undo/Redo + kalıcılık (web → native Cekirdek)
- Web CAM kendi undo yığını (`fiko-cam.yonetici.ts:336-359`, 60 snapshot, serialize/deserialize). Parametrik CAM knowledge f(x) köprüsü (`camKnowledgeSenkron`, `375-403`) — op alanları formül alabilir.
- **Native:** Cekirdek `Islem` (undo/redo) — `CamIslemEkleIslem`/`CamIslemSilIslem` zaten var (`cam_islemleri.hpp`). Parametre değişiklikleri de `Islem` olmalı (op düzenle undo). Kalıcılık: proje JSON'a `partOp + takimlar` (web `serialize`).
- **Associativity (CATIA):** model recompute olayında (`modelDegisti`, `438-443`) hesaplanmış toolpath'ler "bayat" (⟳) işaretlenir; `otoGuncelle` true ise otomatik yeniden hesap, false ise kullanıcı "Hesapla" der. Yüz-referanslı Z/normal bir sonraki hesapta yeniden çözülür. Native: Cekirdek recompute olayına CAM abone olur.

---

## 11. NATIVE UYGULAMA YOL HARİTASI (öncelik sırası)

**FAZ 1 — Veri modeli + tek operasyon penceresi (temel)**
1. `cam_islem.hpp` GENİŞLET: `CamGeometri/CamStrateji/CamHizlar/CamMakro/MakroAdim/TakimYonu/PartOperasyon` struct'ları + geniş `CamIslemTip` enum (CATIA türleri) + geniş `TakimTip`/`Takim`.
2. `cam_paneli.cpp` → parçala: `urun_agaci_paneli.cpp` (sol ağaç) + `cam_operasyon_penceresi.cpp` (op başına ayrı pencere, 5 sekme). Tek-pencere-tab-bar kaldır.
3. Ürün ağacı hiyerarşisi (bölüm 7) — CAM node tipleri + çift-tık→pencere + sağ-tık menü.

**FAZ 2 — 3D seçim + BREP**
4. `brep_kontur.cpp` (OCCT): yüz kontur/normal/offset/adalar/silindirik-yüz.
5. Sahne seçim modları (kontur/kenar/nokta/düzlem/toolaxis) → Cekirdek olayı → CAM bağlama. Hover önizleme.
6. Takım ekseni penceresi + parça-op penceresi + takım tanımı penceresi.

**FAZ 3 — Toolpath + linking + post**
7. OpenCAMLib köprüsü genişlet (2.5D offset/pocket/profil/drill + 3D waterline/adaptive). BREP exact kontur/offset girişi.
8. **Linking katmanı (bölüm 9)** — giriş/çıkış/ara hareket makroları (OCL CL noktalarına ekle). Makro sekmesi UI + Build-by-user + mini önizleme.
9. `gkod.cpp` GENİŞLET: canned cycle (G81/83/84/85/82/73/74/86/87), G02/G03 arc, G68.2 tilted plane (3+2), Machining Axis System, work offset.

**FAZ 4 — Simülasyon penceresi (bölüm 6)**
10. `cam_simulasyon_penceresi.cpp` (AYRI pencere): transport + renkli timeline + göstergeler (açı/kaçma/XYZ/ilerleme/devir/süre) + "Araçlar".
11. Vulkan compute stock removal (dexel/voxel) + çarpışma (silindir-üçgen) + gouge (statik).
12. Takım görselleştirme (tip-farkında mesh) + Replay entegrasyonu.

**Her fazda:** Cekirdek registry'ye komut ekle → Lua makro + DLL plugin + olay bedavaya (MEMORY mimari ilkesi). Yeni olay struct'ı enum SONUNA. Fog YOK. Kod: temiz, OOP, mükerrer değil, modüler.

---

## 12. KRİTİK DOSYA REFERANSLARI (web — düzen/akış referansı, KODU KULLANMA)

**fiko-cam/ (ana referans, CATIA-tarzı):**
- `.../IFikoThreeJS/fiko-cam/fiko-cam.types.ts` — tüm CATIA tip modeli (takım/geometri/strateji/hız/makro/tool-axis/part-op/toolpath)
- `.../fiko-cam/fiko-cam-dialog.ts` — 5 sekmeli operasyon penceresi (786 satır)
- `.../fiko-cam/fiko-cam.yonetici.ts` — CRUD/hesap/ağaç/seçim/undo/knowledge (951 satır)
- `.../fiko-cam/fiko-cam-aktivite.ts` — operasyon+takım ağaç node'ları, sağ menü, dialog açma
- `.../fiko-cam/fiko-cam-tool-axis-dialog.ts` — takım ekseni penceresi
- `.../fiko-cam/fiko-cam-part-op-dialog.ts` — parça operasyonu penceresi
- `.../fiko-cam/fiko-cam-takim-dialog.ts` — grafiksel takım tanımı penceresi
- `.../fiko-cam/fiko-cam-toolpath.ts` — 2.5D toolpath motoru + OCCT offset köprüsü (699 satır)
- `.../fiko-cam/fiko-cam-postprocessor.ts` — G-code/APT (canned cycle, G68.2, machining axis)
- `.../fiko-cam/fiko-strateji-3d.component.ts` / `fiko-makro-3d.component.ts` / `fiko-toolaxis-3d.component.ts` / `fiko-takim-3d.component.ts` — gömülü mini 3D viewer'lar

**BREP (topoloji):**
- `.../Fiko-2d-Cam/brep/occt-cam-kontur.ts` — OCCT exact kontur/offset/adalar
- `.../Fiko-2d-Cam/brep/brep-kontur.ts` — mesh boundary loop (fallback)
- `.../Fiko-2d-Cam/brep/face-cam-extract.ts` — faceId → kontur köprüsü

**Lead-in/out sayısal detay (eski, algoritma referansı):**
- `.../Fiko-2d-Cam/aktiviteler/profil/FikoAktiviteProfil.ts` — giriş/çıkış/stay-down algoritmaları
- `.../Fiko-2d-Cam/aktiviteler/cep/FikoAktiviteCep.ts` — cep giriş + clearance/retract/feed yükseklikleri

**Simülasyon:**
- `.../fiko-similasyon-v1/fiko-similasyon-v1.component.{ts,html,scss}` — ayrı simülasyon penceresi (8400+476 satır)
- `.../fiko-similasyon-v1/{TripleDexelEngine,VoxelCSGEngine,DexelGPUEngine,SDFEngine,ZBufferEngine,MarchingCubesGPU}.ts` — stock removal motorları
- `.../SahneFikoAptSimilasyon.ts` — simülasyon sahne kurulumu

**Ürün ağacı:**
- `.../FikoUrunAgaci.ts`, `.../FikoThreeCam/{Fikoperasyon,Fikoperasyonlar,Fikogram,Fikogramlar,FikoKaynakca}.ts`, `.../FikoIsiklar.ts`, `.../FikoKaliciOlcumler.ts`, `.../FikoEtiketler.ts`
- `.../Fiko3DComponent/sahne-step-viewer/SahneStepViewer.ts` — ağaç kurulum sırası
- `.../Fiko3DComponent/agac-item/agac-item.component.ts` — tree render + parametre slider

**Native mevcut (genişletilecek):**
- `fikatia-local/uygulama/fikocad/cam_paneli.cpp` (344, tek pencere — parçalanacak) + `pencere_util.hpp` (pin) + `pusula.hpp`
- `fikatia-local/motor/cam/include/fiko/cam/{cam_islem,cam_sistemi,takim,takim_yolu,gkod,cam_islemleri}.hpp` + `src/*.cpp`
- `fikatia-local/ucuncu_taraf/opencamlib/` (vendored — waterline/adaptive/drop-cutter)
