# FikoCAD (fikatia-local) — Komut & Pencere Denetim Raporu

> Baş denetçi taraması. Kapsam: `uygulama/fikocad/main.cpp` (~3762 satır) tüm komut kayıtları + tüm ImGui pencereleri + `motor/` girdi akışları. Yalnız DENETİM — kaynak koda dokunulmadı.
>
> **Ölçüt:** (1) seçilebilir her şey 3D sahneden tıkla-seç olmalı (elle koordinat = kusur, sayısal alan yalnız ince ayar); (2) CATIA + fikoyt web 3D mantığı; (3) parametrik associatif ref + RecomputeMotor DAG; (4) mükerrer/ayrı panel yok.
>
> **Referans kalıp (bu projede ZATEN DOĞRU yapılmış):**
> - **Ölçüm sistemi** — `main.cpp:2247-2255` viewport tık → `olcum.serbestNoktaAl()` / `olcum.secimAl(vurgu.govde, vurgu.alt, vurguTur)`; BREP-linkli referans → geometri değişince yeniden çözülür (`olcum_sistemi.hpp:87-91,114`). **Altın standart.**
> - **Sketcher** — `main.cpp:2140-2233` düzlem-UV tık + snap-aware nokta koyma, geometri seç→kısıt/düzenle. Tamamen sahne-güdümlü.
> - **SecimSistemi** — GPU pick (yüz/kenar/nokta/gövde), filtreli, event-bazlı (`secim_sistemi.hpp`). Tüm sahneden-seçim bunun üzerinden akmalı.
> - **CAM eski yol** — `cam_paneli.cpp:73` "◉ Seçimden Al" → `geometridenAta()` (`cam_sistemi.cpp:282`) gerçek sahne seçimi okur. YENİ CATIA yolu bunu KAYBETTİ (aşağıya bakınız).

---

## 1. Komut Envanteri

Girdi kaynağı: **Sahne ✅** = 3D sahneden seçim · **Elle ❌** = sayısal/koordinat girişi · **Yok** = girdi gerektirmez (görünüm/durum). Parametrik: **DAG** = RecomputeMotor'a bağlı associatif · **—** = bağımsız/statik.

### Dosya / Düzenle / Görünüm
| Grup | Komut | Girdi kaynağı | Pencere | Parametrik | Kusur |
|------|-------|---------------|---------|------------|-------|
| Dosya | STEP İçe Aktar | Dosya diyalog | — (async görev) | — | Temiz |
| Dosya | STEP Dışa Aktar | Seçim ✅ (opsiyonel) | — | — | Temiz |
| Dosya | Olay Günlüğü Yaz | Yok | — | — | Temiz |
| Düzenle | Geri Al / Yinele | Yok | — (durum-duyarlı `etkinMi`) | — | Temiz |
| Düzenle | Seçileni Sil / Seçimi Temizle | Sahne ✅ | — | — | Temiz |
| Görünüm | Sığdır/İzo/Üst/Ön/Ortografik | Yok | Hızlı görünüm HUD | — | Temiz |

### Geometri / Boolean (Part Design workbench)
| Grup | Komut | Girdi kaynağı | Pencere | Parametrik | Kusur |
|------|-------|---------------|---------|------------|-------|
| Geometri | Kutu/Silindir/Küre/Koni | Yok (birim primitif) | — (Özellikler'de düzenlenir) | DAG (Donusum/Brep) | Ekleme sonrası boyut Özellikler panelinden; sahne-tık gerekmiyor — kabul |
| Boolean | Birleştir/Çıkar/Kesişim | **Sahne ✅** (tam 2 gövde) | — | DAG | Temiz. `main.cpp:356` |

### Feature (Part Design)
| Komut | Girdi kaynağı | Pencere | Parametrik | Kusur |
|-------|---------------|---------|------------|-------|
| Pad (Kabartma) | Sahne ✅ (aktif sketch profili) | `feature_penceresi` ✅ | DAG | Temiz. `main.cpp:511` |
| Pocket (Cep) | Sahne ✅ (sketch + seçili hedef katı) | ✅ | DAG | Temiz. `main.cpp:517` |
| Shaft (Döndür) | Sahne ✅ (aktif sketch) | ✅ | DAG | Temiz. `main.cpp:530` |
| Groove (Oyuk) | Sahne ✅ (sketch + hedef katı) | ✅ | DAG | Temiz. `main.cpp:537` |
| **Hole (Delik)** | Hedef katı ✅ + **konum ELLE ❌** | ✅ | DAG (param) | **KUSUR (b/a):** konum "Sayısal XYZ (yüzey-tık sonraki faz)" — `feature_penceresi.cpp:121`. Yüz üstünde nokta pick edilmeli (blueprint §1.1 "yüz üstünde nokta + normal") |

### İşlem (3B pah/yuvarlat)
| Komut | Girdi kaynağı | Pencere | Parametrik | Kusur |
|-------|---------------|---------|------------|-------|
| Pah (3B) | **Sahne ✅** (kenar kipine geçer, kenar seç) | `pah3DAcik` değer penceresi | — (undo'ya bağlı değil, bilinen) | Akış temiz. Parametrik/DAG kopukluğu bilinen iş. `main.cpp:561, 3380` |
| Kenar Yuvarlat (3B) | **Sahne ✅** (kenar seç) | ✅ | — | Aynı. `main.cpp:566` |

### GSD — Tel-Kafes (wireframe) / Yüzey
| Komut | Girdi kaynağı | Pencere | Parametrik | Kusur |
|-------|---------------|---------|------------|-------|
| **Nokta** | **ELLE ❌** (X/Y/Z DragScalar) | `gsd_penceresi` | — (statik koordinat) | **KUSUR (a):** hiç sahne pick yok. `gsd_registry.cpp:53` |
| **Çizgi** | **ELLE ❌** (Başlangıç/Bitiş XYZ veya yön+uzunluk) | ✅ | — | **KUSUR (a):** nokta/kenar pick yok. `gsd_registry.cpp:67` |
| **Çember** | **ELLE ❌** (merkez+normal+R veya 3 nokta XYZ) | ✅ | — | **KUSUR (a):** nokta pick yok. `gsd_registry.cpp:90` |
| **Spline** | **ELLE ❌** (8 kontrol noktası XYZ) | ✅ | — | **KUSUR (a):** nokta pick yok. `gsd_registry.cpp:122` |
| Yüzey Extrude | Sahne ✅ (aktif sketch) | ✅ | DAG | Temiz. `main.cpp:590` |
| Yüzey Revolve | Sahne ✅ (aktif sketch) + eksen combo | ✅ | DAG | Temiz. `main.cpp:591` |

### Sketcher (2D — düzlem içinde çizim)
| Grup | Komutlar | Girdi kaynağı | Kusur |
|------|----------|---------------|-------|
| Sketch | Sketch Oluştur | **Sahne ✅** (düzlemsel yüz veya referans düzlem seç → `sketchDuzlemBul`) | Temiz. `main.cpp:674,689` |
| Sketch | Sketch'ten Çık | Yok | Temiz |
| Çizim | Çizgi/Dikdörtgen/Daire/Daire3N/Yay3N/Nokta/Elips/Slot/Çokgen/Merkezli Dikdörtgen | **Sahne ✅** (düzlem-UV tık + snap) | Temiz. `main.cpp:2214-2219` |
| Düzenle | HızlıKırp/Kırp/Uzat/Böl/Köşe/Pah/Ayna/Simetri/Ötele/Döndür/Ölçekle/Ofset/Kapat | **Sahne ✅** (geometri tık, çok-fazlı akış) | Temiz. `main.cpp:2155-2213` |
| Kısıt | Yatay/Dikey/Dik/Paralel/Eşit/Çakışık/Mesafe/Yarıçap/Oto Ölçü | **Sahne ✅** (seçili sketch geometrisi) | Temiz. `main.cpp:1103-1129` |

### Ölçüm / Makro
| Komut | Girdi kaynağı | Kusur |
|-------|---------------|-------|
| Ölçüm Penceresi / Kumpas / Cetvel / Temizle | **Sahne ✅** (BREP-linkli, serbest nokta + topolojik) | Temiz — **referans kalıp** |
| Makro Konsolu / Eklenti Yöneticisi | Panel aç | Temiz |

### CAM — ESKİ yol (CamIslem, `cam_paneli`)
| Komut | Girdi kaynağı | Pencere | Kusur |
|-------|---------------|---------|-------|
| Profil/Cep/Delik/3D Kaba/RestKaba/Finiş/Sweep/Advanced/Kontur/Rework | **Sahne ✅** (`camEkle`→`geometridenAta` seçili geometriyi bağlar) | `cam_paneli` + op-pencere | Çalışıyor ama YENİ CATIA yolu ile **mükerrer** (aşağıya) |
| Üretim Programı / Tümünü Hesapla | Yok | `cam_paneli` | Temiz |
| 🎬 Simülasyon | Yok | `cam_simulasyon_penceresi` | Temiz |
| 🔧 Takım Tanımla | Yok (yeni takım) | `cam_takim_penceresi` (grafiksel) | Temiz |

### CAM — YENİ CATIA yolu (CamOperasyon/PartOperasyon)
| Komut | Girdi kaynağı | Pencere | Kusur |
|-------|---------------|---------|-------|
| ◫ Part Operation Ekle | Yok | `cam_parca_op_penceresi` | Eksen/stok/fikstür seçimi no-op (aşağı) |
| Üretim Ağacı | Yok | `cam_uretim_agaci` (AYRI pencere) | **KUSUR (e):** ayrı panel, ana Ürün Ağacına gömülmeli (bilinen) |
| Facing/Pocketing/Contouring/CurveFollow/CircularMill/Drilling/SpotDrill/DeepHole/Tapping/Reaming | **ELLE ❌** (Geometri sekmesi tüm seçim butonları no-op) | `cam_operasyon_penceresi` | **KUSUR (a/b):** hiç raycast yok (aşağı) |

---

## 2. Kusur Listesi (Önceliklendirilmiş)

### P0 — Kritik: Sahneden-seçim tamamen eksik

**K1 · GSD Wireframe: nokta/kenar/eğri hiç pick edilemiyor** — kategori (a)
- Dosya: `motor/gsd/src/gsd_registry.cpp:53-141` (tüm wireframe param'ları `mesafe`=DragScalar) + `uygulama/fikocad/gsd_penceresi.cpp:33-67` (sadece `paramAlanlari`, pick UI yok) + `main.cpp:574-582` (`gsdEkle`, pencere açar ama viewport'a seçim modu bağlamaz) + `main.cpp:2140-2258` (viewport tık dispatch'inde GSD dalı yok).
- Şu an: Nokta X/Y/Z elle, Çizgi Başlangıç/Bitiş elle, Çember merkez+3 nokta elle, Spline 8 nokta elle.
- Olması gereken (CATIA/web + `gsd_blueprint.md:86,94-98`): her ref alanı **combo + 🎯 (3D'den seç)** ikilisi. "Tür" dropdown (koordinat/arası/eğriUzerinde/extremum/cemberMerkez/projeksiyon…) + koşullu alanlar. Sahnede mevcut Vertex/Edge tıklanınca ref bağlanır; sayısal alan yalnız ince ayar.
- Öneri: Ölçüm sisteminin `serbestNoktaAl`/`secimAl` + `SecimSistemi` kalıbını GSD'ye taşı. GsdFeature'a `RefSecim{tip, govde, alt}` alanı; viewport dispatch'e "GSD ref seçim modu aktifse tık→ref bağla" dalı. Blueprint'in Dalga 2'si.

**K2 · CAM CATIA op Geometri sekmesi: tüm seçim butonları no-op** — kategori (b/a)
- Dosya: `uygulama/fikocad/cam_operasyon_penceresi.cpp:57-80` (Delik Merkezi/Profil-Kontur/Kenar/Stok/Ada butonları `{}` gövdeli, "FAZ 2 — henüz raycast yok").
- Şu an: Geometri sekmesinde hiçbir geometri operasyona bağlanamıyor → op hesaplanamaz.
- Olması gereken (`cam_blueprint.md §2`, satır 153-182): buton→`secBaslat()`→viewport pick→yüz/kenar/kontur bağla; toggle; associatif faceId + Z düzlemi.
- **NOT:** Bu iş AYRI ajanda planlı → `docs/cam_strateji3d_secim_spec.md` (yazılıyor). **BURADA TEKRAR ETME**, o spec'e referans ver. Eski `geometridenAta` (`cam_sistemi.cpp:282`) çalışan örnek.

### P1 — Yüksek: Kısmî no-op / mantıksız akış

**K3 · Hole konum: yüzden tık yerine sayısal XYZ** — kategori (a)
- Dosya: `uygulama/fikocad/feature_penceresi.cpp:114-121` ("Sayısal XYZ (yüzey-tık sonraki faz)") + hole komutu `main.cpp:549-558` (hedef katı sahneden ✅ ama konum değil).
- Olması gereken: yüz seç → yüzey üstünde tıklanan nokta + yüz normali → delik ekseni (`part_design_blueprint.md:41`). Ölçüm `serbestNoktaAl` (`main.cpp:2252`) birebir bu — yeniden kullanılabilir.
- Öneri: hole penceresi açıkken viewport tık→yüz-üstü nokta al→feature param'a yaz. Pah/Yuvarlat'ın kenar-seçim kipine geçme kalıbını izle.

**K4 · CAM Part Operation: eksen/stok/fikstür seçimi no-op** — kategori (b)
- Dosya: `uygulama/fikocad/cam_parca_op_penceresi.cpp:44-67` (Machining Axis 🎯 x4 no-op), `:141` (Stok origin/boyut sayısal), `:148` (Fikstür Seç no-op).
- Olması gereken: origin/eksen yüz/kenar/nokta pick'ten; stok "gövdeden türet" seçili gövdeden; fikstür sahne gövdesi seç.
- **NOT:** CAM kapsamı → aynı `cam_strateji3d_secim_spec.md` ajanına ait. Referans ver, tekrar etme.

**K5 · CAM Op alt-bar "⚙ Hesapla" ve Takım butonları no-op** — kategori (b)
- Dosya: `cam_operasyon_penceresi.cpp:252-255` (Takımı Düzenle / Yeni Takım no-op — ama `cam_takim_penceresi` VAR!), `:466-469` (Hesapla no-op).
- Olması gereken: "Yeni Takım" → mevcut `camTakimPencereAc` çağırmalı (komut zaten var, `main.cpp:633`); "Hesapla" → op yol hesabı (CAM ajanı).
- Öneri (bu ajan, küçük): Takım butonlarını mevcut `camTakimPencereAc`/takım combo'ya bağlamak trivial — CAM seçim ajanından bağımsız yapılabilir.

### P2 — Orta: Mükerrer panel / mimari

**K6 · CAM Üretim Ağacı ayrı pencere** — kategori (e)
- Dosya: `cam_uretim_agaci.cpp` (tüm dosya) + `main.cpp:658` (`camAgacAcik` toggle).
- Olması gereken: CAM operasyonları/part-op'lar ana **Ürün Ağacı**na (`cekirdek.agac()`, `main.cpp:469 urunAgaciTopla`) gömülmeli; ayrı pencere kalkmalı. **Bilinen kusur** — CAM ana-ağaç işi `cam_strateji3d_secim_spec.md` ajanında. Referans ver.

**K7 · CAM eski (CamIslem) ↔ yeni (CamOperasyon) çift sistem** — kategori (e)
- İki paralel CAM modeli: `cam_paneli`+`CamIslem` (seçim çalışıyor) ve `cam_operasyon_penceresi`+`CamOperasyon` (CATIA, seçim yok). Menüde 2 ayrı "Profil/Cep/Delik" seti (`main.cpp:620-629` vs `659-668`) → kullanıcı için kafa karıştırıcı mükerrerlik.
- Öneri: tek modelde birleş (yeni CATIA modeli hedef, eski `geometridenAta` seçim mantığı oraya taşınır). CAM ajanı kapsamı.

### P3 — Düşük: parametrik kopukluk (geniş)

**K8 · GSD/Hole değerleri associatif ref alamıyor** — kategori (d)
- RecomputeMotor DAG yalnız `DonusumDegisti`/`BrepDegisti`/`ParametreDegisti` dinliyor (`main.cpp:718-723`). GSD nokta X/Y/Z ve Hole XYZ statik sayı → "yüz→Z", "parça değişince güncelle" mümkün değil.
- Olması gereken: ref-tabanlı param (yüz→düzlem→Z) associatif olmalı; K1/K3 çözülünce DAG'a doğal bağlanır (ölçüm zaten böyle: `olcum_sistemi.hpp:114` gövde değişince yenile).

**K9 · Kinematik/Sinematik altyapı yok** — kategori (f)
- Kinematik: joint/eksen çözücü yok (CAM eksen sistemi statik `Vec3d`, `cam_parca_op_penceresi.cpp:59-66`; montaj mate/joint yok). Yol haritası maddesi.
- Sinematik: kamera `gorunumeGit`/`yonelimeGit` anlık geçiş (`main.cpp:594-598,699`) — yumuşak/eğrili geçiş (ease/tween) yok. `orbit_kamera` genişletilebilir.

---

## 3. Düzeltme Dalgaları (implementasyon ajanları için)

> **CAM'e AİT HER ŞEY ayrı ajanda:** K2, K4, K6, K7 ve CAM "Hesapla" → `docs/cam_strateji3d_secim_spec.md`. Aşağıdaki dalgalar CAM-dışı; sıralı bağımlılıklı.

### Dalga A — Sahneden-Seçim Altyapısı (ortak, ÖNCE)
Amaç: GSD + Hole için ölçüm-tarzı "pencere açıkken viewport ref seç" mekanizması.
- **Kilitler:** `uygulama/fikocad/main.cpp` (viewport tık dispatch ~2140-2258 + görev döngüsü), yeni ortak yardımcı (isteğe bağlı `sahne_ref_secim.hpp`).
- İşler:
  1. `SecimSistemi`/`imlecVurus` üzerinden "aktif ref-seçim modu" durumu (hedef feature + anahtar + tip) — ölçümdeki `aktifFiltre`+`serbestNoktaAl` kalıbı.
  2. Viewport dispatch'e dal: ref-seçim modu aktifse tık→ref bağla (topolojik `SecimOge` veya serbest nokta), aksi halde mevcut davranış.
  3. Overlay'de aktif ref-seçim ipucu (ölçümdeki `refIsaret` gibi).
- Bağımlılık: yok (ilk).

### Dalga B — Hole yüzden konum (K3)
- **Kilitler:** `feature_penceresi.cpp` (hole bölümü), `motor/parca/` (feature param → nokta+normal), `main.cpp` (hole pencere↔viewport köprüsü).
- İşler: hole penceresinde "🎯 Yüzden Konum" → Dalga A modu; tık→yüz-üstü nokta+normal→param; sayısal XYZ ince-ayar kalır (satır 121 metni güncellenir).
- Bağımlılık: **Dalga A**.

### Dalga C — GSD Wireframe sahne-seçim + çok-modlu tür (K1, K8)
- **Kilitler:** `motor/gsd/src/gsd_registry.cpp` (param şeması: `secim` tür dropdown + koşullu + ref alanları), `motor/gsd/{gsd_feature,gsd_sistemi}` (RefSecim alanı + associatif çözüm + DAG kirlet), `gsd_penceresi.cpp` (combo+🎯 UI), `main.cpp` (viewport köprüsü).
- İşler (`gsd_blueprint.md §3` şeması): Nokta 10 mod, Çizgi 6, Çember 8, Spline ref-listesi. Her ref combo+🎯; seçilen Vertex/Edge associatif (parça değişince yeniden çöz).
- Bağımlılık: **Dalga A**. (Blueprint'in "Dalga 2"si.)

### Dalga D — CAM Op takım/hesapla küçük bağlamalar (K5, CAM-dışı kısım)
- **Kilitler:** `cam_operasyon_penceresi.cpp` (yalnız Takım butonları + Hesapla combo).
- İşler: "Yeni Takım Ekle"/"Takımı Düzenle" → mevcut `camTakimPencereAc` (`main.cpp:633,644`); Takım combo zaten var. Hesapla no-op'u CAM ajanına bırak (yalnız tooltip netleştir).
- Bağımlılık: yok. **Not:** CAM seçim ajanıyla `cam_operasyon_penceresi.cpp` üzerinde çakışabilir → CAM ajanı bu dosyayı ele alıyorsa D'yi ONA dahil et, ayrı açma.

### Dalga E — Kinematik/Sinematik (yol haritası, sonra)
- Kinematik: montaj joint/mate + eksen çözücü (`motor/cekirdek` yeni alt-sistem veya `motor/sahne`). CAM eksen sistemi bununla beslenir.
- Sinematik: `orbit_kamera`'ya tween/ease (görünüm geçişleri + op önizleme uçuşu).
- Bağımlılık: bağımsız; düşük öncelik.

---

## 4. Parametrik / Kinematik / Sinematik Yol Haritası (kısa)

- **Parametrik (associatif ref):** DAG altyapısı sağlam (`recompute` + 3 olay `main.cpp:718-723`; ölçüm birebir doğru örnek). Eksik: GSD/Hole/CAM değerlerinin **ref** (yüz→Z, kenar→uzunluk) alması — K1/K3/K4 çözülünce DAG'a doğal bağlanır. İlke: her sayısal alanın yanında "ref" seçeneği (formül/ölçü referansı), ölçüm sistemindeki BREP-link modeli genelleştirilir.
- **Kinematik:** Şu an joint/eksen çözücü yok. Öneri: `motor/` altına `kinematik` (mate: çakışık/eş-eksen/açı; DOF; ileri kinematik). CAM `PartOperasyon` eksen sistemi ve montaj bunu paylaşır.
- **Sinematik:** Kamera geçişleri anlık. `orbit_kamera`'ya süre-tabanlı ease (pozisyon+yönelim SLERP), op/feature seçilince hedefe yumuşak uçuş, simülasyon replay ile senkron.

---

## Özet Skor

| Alan | Durum |
|------|-------|
| Sketcher (2D) | ✅ Tam sahne-güdümlü |
| Ölçüm | ✅ Tam sahne-güdümlü + associatif (referans kalıp) |
| Part Design Pad/Pocket/Shaft/Groove | ✅ sahne (sketch+hedef) |
| Boolean | ✅ sahne (2 gövde) |
| Pah/Yuvarlat (3B) | ✅ sahne (kenar) · DAG kopuk (bilinen) |
| **Hole** | ⚠️ hedef sahne ✅ / konum elle ❌ (K3) |
| **GSD Wireframe** | ❌ tamamen elle koordinat (K1) |
| GSD Yüzey | ✅ sahne (sketch) |
| **CAM (yeni CATIA)** | ❌ seçim no-op + ayrı ağaç + çift sistem (K2/K4/K6/K7 → CAM ajanı) |
| CAM (eski) | ✅ sahne (`geometridenAta`) ama mükerrer |
| Kinematik/Sinematik | ⚠️ altyapı yok (K9, yol haritası) |
