# FikoYT Web Part Design → fikatia-local Native (C++23/Vulkan/ImGui + OCCT) TAŞIMA BLUEPRINT'İ

> **Amaç:** Web'deki (fikoyt-sistem, CATIA tarzı) Part Design + GSD Yüzey workbench'inin komut düzeni, feature seti ve iş akışını native fikatia-local'e taşımak.
> **Kural:** Web'in KODU kopyalanmaz — yalnız **düzen + alan seti + akış + OCCT algoritma modeli** referans alınır. Hesap **tam OCCT B-Rep** (mesh değil).
> **EN KRİTİK İLKE (kullanıcının vurgusu):** Web'deki gibi **HER KOMUT/FEATURE KENDİ AYRI PENCERESİNDE** — Pad kendi penceresinde, Pocket kendi, Revolve/Shaft kendi, Hole kendi, Fillet/Chamfer/Shell/Draft/Rib/Pattern/Mirror kendi. Referans: `uygulama/fikocad/cam_paneli.cpp` op-başına yüzen+pinlenebilir pencere kalıbı (`###op_<id>` + `ustteTutSinif/ustteTutDugmesi`).
> **Kardeş blueprint:** `docs/cam_blueprint.md` (aynı per-op pencere felsefesi CAM'de kuruldu — Part Design onu birebir izler).

---

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

| Web Katmanı | Web Dosyası | Native Karşılığı |
|---|---|---|
| Veri-odaklı komut kataloğu (100+ komut) | `fiko-modelleme/fiko-komut.registry.ts` (787 satır) | `motor/parca/include/fiko/parca/feature_registry.hpp` (YENİ) — `FeatureTanim` struct listesi |
| Komut+parametre şeması | `fiko-modelleme/fiko-komut.tanim.ts` (`IKomutTanim`/`IKomutParam`) | `feature_tanim.hpp` (YENİ) — `FeatureTanim`/`FeatureParam` |
| Hızlı komut penceresi (canlı önizleme) | `fiko-modelleme/FikoKomutPenceresi.ts`, `FikoKomutIcerik.ts` | `uygulama/fikocad/feature_penceresi.cpp` (YENİ) — genel feature penceresi iskeleti |
| Tam Definition penceresi (Pad/Hole) | `FikoPadDialog.ts`, `FikoHoleDialog.ts`, `FikoShaftDialog.ts`, `FikoOzellikDialoglari.ts` | Aynı `feature_penceresi.cpp` içinde tip-özel çizim fonksiyonları (`padPenceresi`, `holePenceresi`, …) |
| Feature yaşam döngüsü (baslat/guncelle/onayla/iptal) | `FikoModellemeYonetici.ts:1743-1924` (`komutBaslat/komutGuncelle/komutOnayla/komutIptal`) | `motor/parca/.../part_design_sistemi.cpp` (YENİ) — `featureBaslat/featureGuncelle/featureOnayla/featureIptal` |
| OCCT B-Rep operasyonları | `fiko-modelleme/fiko-occt-kernel.ts` (1200+ satır) | `motor/geometri/src/brep.cpp` GENİŞLETİLECEK (`brep.hpp`'ye yeni serbest fonksiyonlar) |
| Topolojik referans (associatif link) | `fiko-modelleme/fiko-toporef.ts` | **MEVCUT**: MEMORY `sistem-modelleme-brep-link` + `fiko-toporef` imza eşleştirme → native karşılığı VAR, genişletilecek |
| Feature DAG yeniden hesap | (web rebuild zinciri) | **MEVCUT**: `motor/cekirdek/.../recompute.hpp` (`RecomputeMotor`) |
| Ürün ağacı feature listesi | (web tree) | **MEVCUT**: `motor/sahne` Dugum hiyerarşisi + CAM omurga ajanının kurduğu ürün ağacı paneli ile uyum |
| Undo/redo | (web gecmisKaydet) | **MEVCUT**: `motor/cekirdek/.../islem.hpp` + `motor/sahne/.../sahne_islem.hpp` |

**Kritik mimari ilke (MEMORY: `fikatia-mimari-ilke-makro-plugin-olay`):** Eklenen HER feature doğduğu an **makro (Lua) + plugin (DLL) + olay** erişilebilir olmalı. Feature'lar merkezi `cekirdek.menuler()` + yeni feature registry'ye eklendiğinde üçü bedavaya gelir. Yeni olay struct'ı `olay.hpp` enum **SONUNA**.

---

## 1. FEATURE ENVANTERİ (web → OCCT → native mevcut durum)

> Kaynak: `fiko-komut.registry.ts` (tüm komutlar) + 3 alt-ajan OCCT eşleme raporu. Native "mevcut" sütunu `motor/geometri/brep.hpp` + `motor/sahne/sahne.hpp` taramasına dayanır.

### 1.1 Temel katı — SKETCH TABANLI (Part Design ana feature'ları)

| Feature id | Web dialog | OCCT operasyonu | Girdi / seçim | Limit/yön | Boolean | Native mevcut? |
|---|---|---|---|---|---|---|
| **pad** | `FikoPadDialog` | `BRepPrimAPI_MakePrism` | kapalı sketch profili (3D'de profil seç) | Blind / UpToNext / UpToLast / UpToFace(+ofset) · 2. limit (ters yön) · simetrik · yön çevir · yön ref (normal/X/Y/Z/3D-yüz) · Thin Solid · Multi-Pad domain | Fuse | ❌ (prism yok — brep.cpp'ye eklenecek) |
| **pocket** | `FikoPadDialog` (aynı) | `BRepPrimAPI_MakePrism` + `BRepAlgoAPI_Cut` | kapalı sketch | pad ile aynı limit seti | Cut | ❌ |
| **shaft** (revolve) | `FikoShaftDialog` | `BRepPrimAPI_MakeRevol` | kapalı sketch + eksen | açı (First) · 2. açı · eksen (sketch V/U · X/Y/Z) · reverse | Fuse | ❌ |
| **groove** | `FikoShaftDialog` (aynı) | `BRepPrimAPI_MakeRevol` + `BRepAlgoAPI_Cut` | kapalı sketch + eksen | shaft ile aynı | Cut | ❌ |
| **hole** | `FikoHoleDialog` | `MakeCylinder` (+`MakeCone` havşa/V-dip) + `BRepAlgoAPI_Cut` | yüz üstünde nokta + normal | Blind / ThroughAll / UpToNext / UpToLast / UpToPlane · tür: Simple/Counterbored/Countersunk/Counterdrilled · taban: flat/V-dip · dişli (M3–M24 tap-drill) · reverse | Cut | ❌ |
| **rib** | `FikoOzellikDialoglari` | `BRepPrimAPI_MakePrism` (açık/kapalı profil) | sketch (açık zincir veya kapalı) | kalınlık · uzunluk · yön (+/−/çift) | Fuse | ❌ |
| **stiffener** (feder) | `FikoOzellikDialoglari` | `MakePrism` (profil Z=0'a izdüşüm) | açık sketch | kalınlık (Z tabana iner) | Fuse | ❌ |
| **loft** (multi-section) | komut penceresi | `BRepOffsetAPI_ThruSections(solid,ruled=false)` | ≥2 kapalı profil (sıralı 3D seç) | — | Fuse | ❌ |
| **removedLoft** | komut penceresi | `ThruSections` + `Cut` | ≥2 profil | — | Cut | ❌ |
| **sweep** | komut penceresi | `BRepOffsetAPI_MakePipe` | profil + yol (2 sketch seç) | — | Fuse | ❌ |
| **slot** | komut penceresi | `MakePipe` + `Cut` | profil + yol | — | Cut | ❌ |
| **combine** (solid combine) | komut penceresi | 2 tam-extrude + `BRepAlgoAPI_Common` | 2 profil | — | Common | ❌ |

### 1.2 Dress-up / yüz-kenar değiştirici (gövde gerektirir)

| Feature id | Web dialog | OCCT operasyonu | Seçim akışı | Koşullu alanlar | Native mevcut? |
|---|---|---|---|---|---|
| **fillet3d** | `FikoOzellikDialoglari` | `BRepFilletAPI_MakeFillet` (`Add`) | Kenar kipi, çoklu kenar; boş → keskin kenarlar oto | yarıçap · kenar eşik açısı (mesh çıkarım tol) · değişken yarıçap → 2. yarıçap | ✅ `geometri::yuvarlat(g, kenarlar, r)` (sabit r; **değişken r yok**) |
| **chamfer3d** | `FikoOzellikDialoglari` | `BRepFilletAPI_MakeChamfer` | Kenar kipi, çoklu kenar | mod: simetrik (`Add` mesafe) / length2 (`Add` d1,d2,komşuYüz) / açı (`AddDA` d1,açı) | ✅ `geometri::pahla(g, kenarlar, mesafe)` (**yalnız simetrik**; length2/açı yok) |
| **faceFillet** | `FikoOzellikDialoglari` | `MakeFillet` yüz-yüz | 2+ komşu yüz (paylaşılan kenar) | yarıçap | ❌ |
| **triFillet** | `FikoOzellikDialoglari` | `MakeFillet` tritangent (auto-r) | tek şerit/orta yüz | yarıçap (0=oto) | ❌ |
| **shell** | `FikoOzellikDialoglari` | `BRepOffsetAPI_MakeThickSolid` (`MakeThickSolidByJoin`) | açılacak yüz(ler); boş → üst yüz | et kalınlığı · join: Arc→Intersection | ❌ |
| **draft** | `FikoOzellikDialoglari` | `BRepOffsetAPI_DraftAngle` (`Add`) | eğilecek yüz(ler) (zorunlu) | açı · nötr düzlem (alt/üst/orta) · çekme ekseni (X/Y/Z) | ❌ |
| **thickness** | `FikoOzellikDialoglari` | `MakeThickSolid` (tüm gövde) veya `MakePrism`+bool (seçili yüz) | seçili yüz → yüze prizma; boş → tüm gövde offset | kalınlık (±) · yön (ekle/çıkar) | ❌ |
| **removeFace** | `FikoOzellikDialoglari` | `BRepAlgoAPI_Defeaturing` (fallback: yüz sil→kabuk) | kaldırılacak yüz(ler) | — | ❌ |
| **removeLump** | — | hacim analizi (en büyük parça) | — | — | ❌ |
| **replaceFace** | `FikoOzellikDialoglari` | prizma tabanlı yüz→düzleme taşı | planar yüz (1) | hedef düzlem (xy/xz/yz) · ofset | ❌ |
| **healing** | komut penceresi | `ShapeUpgrade_UnifySameDomain` | gövde | tolerans | Kısmi (rebuild'de unify var, ayrı feature değil) |
| **simplify** | komut penceresi | yüz sadeleştirme | gövde | — | ❌ |
| **offsetShape** | komut penceresi | `BRepOffsetAPI_MakeOffsetShape.PerformBySimple` | gövde | offset (±) | ❌ |

### 1.3 Dönüşüm / dizi / aynala (gövde gerektirir)

| Feature id | Web dialog | OCCT operasyonu | Girdi | Parametre + koşul | Native mevcut? |
|---|---|---|---|---|---|
| **patternDik** (doğrusal) | `FikoOzellikDialoglari` | `gp_Trsf.SetTranslation` + `BRepBuilderAPI_Transform` × N + `Fuse` | son feature/gövde + yön | adet · aralık | ❌ (donusumUygula var, dizi loop yok) |
| **patternDairesel** | `FikoOzellikDialoglari` | `SetRotation` × N + `Fuse` | gövde + merkez/eksen | adet · toplam açı | ❌ |
| **patternIzgara** | `FikoOzellikDialoglari` | çift eksen translate × N×M + `Fuse` | gövde + U/V | sütun · satır · U aralık · V aralık | ❌ |
| **userPattern** | interaktif | translate (tıklanan noktalara) + `Fuse` | 3D'de n nokta tıkla | nokta listesi | ❌ |
| **mirror** | `FikoOzellikDialoglari` | `gp_Trsf.SetMirror(gp_Ax2)` + `Transform` + `Fuse` | gövde + düzlem | düzlem (xy/xz/yz veya duzlemRef) | ❌ |
| **symmetry** | `FikoOzellikDialoglari` | mirror / nokta ölçek(-1) / eksen 180° döndür | gövde + ref | düzlem · nokta/çizgi ref | ❌ |
| **translate** | `FikoOzellikDialoglari` | `SetTranslation` + `Transform` | gövde | mod: yön+mesafe / koordinat (koşullu alanlar) | ✅ `DonusumIslem` (matris; kalıcı feature değil) |
| **rotate** | `FikoOzellikDialoglari` | `SetRotation(gp_Ax1)` + `Transform` | gövde | açı · eksen (X/Y/Z veya cizgi3d) | ✅ `DonusumIslem` |
| **scaling** | `FikoOzellikDialoglari` | `SetScale` + `Transform` | gövde | katsayı | ✅ (donusum.olcek — tekdüze) |
| **affinity** | `FikoOzellikDialoglari` | `gp_GTrsf` köşegen + `BRepBuilderAPI_GTransform` | gövde | X/Y/Z oran (orantısız) | ❌ (GTransform yok) |
| **axisToAxis** | `FikoOzellikDialoglari` | döndür + öteleme (Z→hedef) | gövde + hedef nokta/eksen | ref nokta + eksen | ❌ |
| **split** | `FikoOzellikDialoglari` | düzlemle böl (`BRepAlgoAPI_Section`/half-space cut) | gövde | kesme düzlemi · ofset · tutulan taraf | ❌ |

### 1.4 GSD Yüzey (workbench: `surface`) — açık shell üreten feature'lar

| Feature id | OCCT | Girdi | Native mevcut? |
|---|---|---|---|
| yuzeyExtrude | `MakePrism` (yüzey) | sketch | ❌ |
| yuzeyRevolve | `MakeRevol` (yüzey) | sketch + açı | ❌ |
| yuzeyFill | `BRepFill`/`GeomFill` dolgu | sketch | ❌ |
| yuzeyLoft / yuzeySweep | `ThruSections(solid=false)` / `MakePipe(shell)` | çoklu profil / profil+yol | ❌ |
| yuzeySphere / yuzeyCylinder | primitif yüzey | parametrik | ❌ |
| closeSurface | `BRepBuilderAPI_MakeSolid` (dik→katı) | yüzeyler | ❌ |
| untrim / multiExtract / disassemble | yüzey işlemleri | gövde/yüz | ❌ |

> **Not:** GSD Yüzey ailesi Part Design DALGA'larından SONRA (opsiyonel Dalga 6). Analiz (`analiz_*`), CAM (`cam3d_*`), makro workbench'leri (tesisat/taki/celik/insaat/marangoz) bu blueprint kapsamı DIŞINDA (ayrı sistemler; makro workbench'ler `fiko-makro.*` eşleniği).

### 1.5 Native'de ZATEN VAR (yeniden yazma)

- **Primitifler:** `geometri::kutu/silindir/kure/koni` + `sahne.ekle(DugumTip)` + menü (`main.cpp:485-488`). Torus/wedge yok → eklenecek.
- **Boolean:** `geometri::birlesim/cikarma/kesisim` + `BooleanIslem` (undo'lu) + menü (`main.cpp:489-491`).
- **Pah/Fillet:** `geometri::pahla/yuvarlat` + `sahne.pahYuvarlatUygula` + "İşlem" menüsü (`main.cpp:493-502`) — **ama tek pencere değil, kenar-seç→değer-gir akışı**; per-feature pencereye taşınacak + length2/açı/değişken-r eklenecek.
- **Sketch:** `SketchNesnesi` + `sahne.sketchEkle/yuzdenDuzlemEkle` + Sketcher workbench (`main.cpp:563-587`).
- **Recompute DAG:** `RecomputeMotor` + `ParametreDegisti/BrepDegisti` olayları kirletir (`main.cpp:591-597`).
- **Workbench:** `WorkbenchKaydi` — "part"/"sketcher"/"cam" kayıtlı (`main.cpp:467-471`). Part Design komutları buraya eklenecek.
- **Topo-ref link:** MEMORY `sistem-modelleme-brep-link` — imza eşleştirme mevcut, feature seçim referansı için genişletilecek.

---

## 2. HER-KOMUT-KENDİ-PENCERESİ MİMARİSİ (çekirdek gereksinim)

### 2.1 Web'in modeli: iki katmanlı pencere sistemi

Web'de her feature için **iki pencere katmanı** var:

**Katman A — Hızlı Komut Penceresi** (`FikoKomutPenceresi.ts` / `FikoKomutIcerik.ts`):
Veri-odaklı. `IKomutTanim.parametreler` dizisini okuyup alanları otomatik üretir. Param değişince `komutGuncelle` → canlı önizleme (rebuild). Alt bar: İptal / Tamam. Basit feature'lar (kutu, pattern, mirror, translate) burada tamamlanır.

**Katman B — Tam Definition Penceresi** (`FikoPadDialog.ts`, `FikoHoleDialog.ts`, `FikoShaftDialog.ts`):
Zengin, tip-özel. pad/pocket/shaft/groove/hole onaylanınca `komutOnayla` → `featureMenu(feat)` ile açılır (`FikoModellemeYonetici.ts:1901`). CATIA "Pad Definition" karşılığı: gruplu bölümler (Birinci Limit, İkinci Limit, Thin Solid, Yön…), 3D seçim butonları (🎯), sil butonu. Feature ağaçtan çift-tıkla tekrar açılabilir (düzenleme).

**Yaşam döngüsü** (`FikoModellemeYonetici.ts:1743-1924`):
```
featureBaslat(id, param)   → ön koşul (sketch/govde) · taslak feature kur · seçim moduna gir (profil/yüz/kenar) · rebuild (önizleme)
featureGuncelle(anahtar, v)→ taslak.param güncelle · rebuild (canlı) · ağaç adı güncelle
featureOnayla()            → seçim yeterli mi kontrol · taslağı kalıcı yap · sketch tüket · geçmişe kaydet · (pad/pocket/shaft/groove ise Definition penceresi aç)
featureIptal()             → taslağı geri al (featureSil) · seçim modundan çık
```

### 2.2 Native eşleme: `feature_penceresi.cpp` (op-başına yüzen pencere)

**Doğrulama — cam_paneli.cpp'deki kalıp birebir uygulanır** (`operasyonPenceresiCiz`, satır 272-329):
- Benzersiz pencere ID: `"⬡ %s###feat_%u"` (feat.ad, feat.kimlik) → aynı anda çok feature penceresi açık olabilir.
- `ImGui::SetNextWindowSize({300, 560}, ImGuiCond_FirstUseEver)` + `ImGuiWindowFlags_NoDocking`.
- `ustteTutSinif(pin)` **Begin'den ÖNCE** + `ustteTutDugmesi("feat_%u", pin)` Begin'den hemen sonra → başlık çubuğunda pin (üstte tut).
- `bool acik=true; if(!Begin(...)){End(); if(!acik) kapat; return;}` → X ile kapanınca taslak iptal.
- Alt eylem çubuğu: **✔ Tamam · ◉ Önizle · 🗑 Sil/İptal** (web'in İptal/Tamam + featureSil'i).

**Ortak feature penceresi iskeleti** (öneri — `feature_penceresi.hpp`):
```cpp
namespace fiko::parca {

// Aktif feature taslağı (part_design_sistemi tutar). cam_paneli g_pinDurum kalıbı gibi
// pin durumu modül-statik haritada.
struct FeaturePencereDurum {
  u32 kimlik = 0;          // feature kimliği (ürün ağacı düğümü)
  std::string tip;         // "pad" | "pocket" | ...
  bool pin = false;        // üstte tut
  bool acik = true;
};

// Bir feature'ın kendi penceresini açar (zaten açıksa yok sayar).
void featurePencereAc(u32 kimlik);
// Tüm açık feature pencerelerini çizer (her kare; geçersiz kimlikleri ayıklar).
void featurePencereleriCiz(Cekirdek&, Sahne&, PartDesignSistemi&);

}  // namespace fiko::parca
```

**Çizim akışı (her pencere)** — 3 bölge:
1. **Ad + hata** — `InputText("##ad")` (inline düzenlenebilir) + kırmızı hata satırı (OCCT başarısızsa).
2. **Alanlar** — tip'e göre:
   - **Basit feature** (pattern/mirror/translate/primitif): veri-odaklı — `FeatureTanim.parametreler` dizisini gez, tipe göre widget çiz (`DragScalar`/`Checkbox`/`Combo`/`ref butonu`). Web'in `FikoKomutIcerik` `@switch(p.tip)` karşılığı (§3.1).
   - **Zengin feature** (pad/hole/shaft/shell/draft/fillet/chamfer): tip-özel fonksiyon (`padPenceresi(op)`, `holePenceresi(op)`, …) — CATIA gruplu bölümler (§3.2).
3. **Alt bar** — Tamam/Önizle/Sil + seçim durumu ipucu ("3D'de profil seç", "N kenar seçili").

**Ürün ağacı entegrasyonu** — cam_paneli `programSatiri` kalıbı: feature satırında çift-tık → `featurePencereAc(kimlik)`, sağ-tık → Düzenle/Bastır/Sil menüsü. Feature durumu: ✓ güncel / ⟳ kirli / ⚠ hata.

### 2.3 Komut kaydı → menü/toolbar (mevcut merkezi registry)

Native'de komutlar zaten `cekirdek.menuler().ekle({grup, ad, simge, sira, fn, etkinMi, wb})` ile kayıtlı (`kayit.hpp:36`). Part Design komutları buraya eklenir → menü çubuğu + yüzen toolbar + (varsa) komut paleti otomatik gelir. `wb="part"` → yalnız Part Design workbench aktifken görünür.

```cpp
// main.cpp komut-kayıt bloğuna (Boolean'dan sonra), her feature bir komut:
komut("Feature", "Pad (Kabartma)", "⬒", [&](Cekirdek&){ pd.featureBaslat("pad"); }, "part");
komut("Feature", "Pocket (Cep)", "⬓", [&](Cekirdek&){ pd.featureBaslat("pocket"); }, "part");
komut("Feature", "Shaft (Döndür)", "⟳", [&](Cekirdek&){ pd.featureBaslat("shaft"); }, "part");
komut("Feature", "Hole (Delik)", "◎", [&](Cekirdek&){ pd.featureBaslat("hole"); }, "part");
komut("Dress-Up", "Fillet", "◜", [&](Cekirdek&){ pd.featureBaslat("fillet3d"); }, "part");
komut("Dress-Up", "Chamfer", "◺", [&](Cekirdek&){ pd.featureBaslat("chamfer3d"); }, "part");
komut("Dress-Up", "Shell", "▢", [&](Cekirdek&){ pd.featureBaslat("shell"); }, "part");
komut("Dress-Up", "Draft", "◿", [&](Cekirdek&){ pd.featureBaslat("draft"); }, "part");
komut("Dizi",    "Doğrusal Dizi", "⋯", [&](Cekirdek&){ pd.featureBaslat("patternDik"); }, "part");
komut("Dizi",    "Dairesel Dizi", "✳", [&](Cekirdek&){ pd.featureBaslat("patternDairesel"); }, "part");
komut("Dizi",    "Aynala", "⇋", [&](Cekirdek&){ pd.featureBaslat("mirror"); }, "part");
// ... registry'deki her feature için (feature_registry.hpp'den otomatik gezilebilir)
```
`featureBaslat` içinde ön koşul + taslak kurulur, `featurePencereAc(feat.kimlik)` çağrılır → o feature'ın kendi penceresi açılır. **cam_paneli.cpp `camEkle` (satır 523-530) birebir kalıbı.**

---

## 3. FEATURE PENCERELERİNİN ALAN SETİ + KOŞULLU GÖRÜNÜRLÜK + SEÇİM AKIŞI

### 3.1 Veri-odaklı param şeması (basit feature'lar)

Web `IKomutParam` → native `FeatureParam`:

| Web tip | ImGui widget | Not |
|---|---|---|
| `mesafe` / `sayi` / `tamsayi` | `DragScalar(Double/Int)` | min/max/adim + birim etiketi |
| `aci` | `DragScalar` + "°" | radyana çevrilir |
| `boolean` | `Checkbox` | |
| `secim` | `Combo` / segment butonlar | secenekler[] |
| `metin` | `InputText` | |
| `duzlemRef` | Combo (XY/XZ/YZ) + "3D'den seç" butonu | mirror/split düzlemi |
| `eksenRef` | Combo (X/Y/Z) + "3D çizgi seç" butonu | rotate/draft ekseni |
| `ref` | "🎯 Seç (3D)" butonu → seçim modu | nokta3d/cizgi3d/yuz/kenar |

**Koşullu görünürlük** (`IKomutParam.gorunur(d)` → native lambda `std::function<bool(const FeatureParam&, const IParamDeger&)>`):
Web örnekleri (registry'den birebir taşınacak):
- **translate**: `trMod==='koordinat'` → trX/trY/trZ göster; aksi → trYon/trMesafe.
- **chamfer3d**: `chamferMod==='length2'` → kenarMesafe2 göster; `==='aci'` → chamferAci göster.
- **split**: tutulan taraf segment (Pozitif/Negatif).

Native'de `feature_penceresi.cpp` param döngüsü `p.gorunur && !p.gorunur(deger)` ise widget'ı atlar (web `gorunenParametreler()` = `FikoKomutIcerik.ts:117`).

### 3.2 Zengin Definition pencereleri (tam CATIA alan seti)

#### PAD / POCKET (`FikoPadDialog.ts` → `padPenceresi(op)`)
| Bölüm | Alanlar | Koşul |
|---|---|---|
| **Birinci Limit** | Tür (Ölçü/UpToNext/UpToLast/UpToPlane) · Uzunluk/Derinlik (Ölçü ise) · Hedef yüz/düzlem seç 🎯 (UpToPlane ise) · Ofset | Tür=Ölçü → uzunluk; Tür=UpToPlane → hedef seç |
| **Bölgeler (Multi-Pad)** | her kapalı bölgeye ayrı boy + dahil/hariç checkbox | domainSayisi>1 ise |
| **İkinci Limit** | aktif checkbox · Tür (Ölçü/UpToLast/UpToNext) · Uzunluk | limit2Aktif ise |
| **İnce Duvar (Thin Solid)** | aktif · Et Kal.1 (içe) · Et Kal.2 (dışa) · Neutral Fiber | incePad ise; notrFiber → Kal.2 gizle |
| **Yön** | Uzatma yönü (Normal/X/Y/Z/3D-yüz 🎯) · Simetrik uzat · Yön çevir (Reverse) | — |
| **Alt bar** | ✔ Tamam · 🗑 Sil | |

#### HOLE (`FikoHoleDialog.ts` → `holePenceresi(op)`)
| Bölüm | Alanlar | Koşul |
|---|---|---|
| **Çap & Diş** | Çap Ø · Dişli checkbox · Standart (M3–M24, tap-drill çapı otomatik) | dişli → çap kilitli (tap-drill) |
| **Derinlik (Extension)** | Tür (Kör/BoydanBoya/Sonrakine/Sona/Düzleme) · Derinlik (Kör ise) · Hedef düzlem 🎯 (Düzleme ise) | |
| **Taban** | Düz / V-Dip segment · Uç açısı (V-Dip ise, def 118°) | yalnız Kör'de |
| **Tür** | Simple / Counterbored / Countersunk / Counterdrilled · havşa çap/derinlik veya çap/açı | türe göre alanlar |
| **Yön** | Yön çevir (diğer tarafa del) | |

#### SHAFT / GROOVE (`FikoShaftDialog.ts` → `shaftPenceresi(op)`)
Açı (First) · 2. Açı (ters yön) · Eksen (sketch V / sketch U / X / Y / Z) · Reverse.

#### FILLET (`fillet3d`)
Yarıçap · Kenar eşik açısı (keskinlik) · Değişken checkbox → 2. yarıçap · **Seçili kenar listesi** (🎯 Ekle butonu → kenar kipi).

#### CHAMFER (`chamfer3d`)
Mod (simetrik/length2/açı) · Mesafe1 · Mesafe2 (length2) · Açı (açı modu) · Kenar eşiği · **kenar listesi**.

#### SHELL / DRAFT / THICKNESS
Shell: et kalınlığı + **açılacak yüz listesi**. Draft: açı + nötr düzlem (alt/üst/orta) + çekme ekseni + **yüz listesi**. Thickness: kalınlık (±) + yön + yüz listesi (boş→tüm gövde).

### 3.3 Seçim akışı (native — mevcut `SecimKip` üzerine)

Web'de seçim modları: `profilSecModu` / `kenarSecModu` / `yuzSecModu`. Native `Sahne::kipAyarla(SecimKip::{Govde,Yuz,Kenar,Nokta})` zaten var.

| Feature grubu | Native seçim | Akış |
|---|---|---|
| pad/pocket/shaft/groove/rib | profil (sketch) | Aktif sketch varsa doğrudan; yoksa 3D'de sketch/yüz düzlemi tıkla. `sahne.yuzdenDuzlemEkle` (mevcut) |
| loft/sweep/slot/combine | çoklu profil (sıralı) | Pencerede "🎯 Profil Ekle" → 3D'de sketch tıkla → sıralı liste (FIFO). loft≥2, sweep=profil+yol |
| fillet/chamfer | kenar | `SecimKip::Kenar` → çoklu kenar; boş → tüm keskin kenarlar |
| shell/draft/thickness/removeFace/faceFillet | yüz | `SecimKip::Yuz` → çoklu yüz |
| userPattern | nokta | `SecimKip::Nokta` → 3D'de n nokta tıkla |
| mirror/split | düzlem ref | Combo (XY/XZ/YZ) veya 3D'de düzlem seç |

**Seçili öğe listesi paneli** (web `FikoSecimListesi` / `FikoKomutIcerik.SECIM_TIP`): pencerede yüz/kenar listesi + "Ekle"/"Çıkar" + adet göstergesi. Native: `sahne.secililer()` filtrele (feat.kimlik'e ait), ImGui listesi.

### 3.4 Canlı önizleme (rubber-band)

Web: her `komutGuncelle` → `rebuild()` → sahnede geçici mesh güncellenir. Native: `featureGuncelle` → taslak feature'ın BRep'ini yeniden hesapla → mesh yeniden üret (`sahne.yenidenInsa` benzeri). MEMORY `fikatia-sketch-kalite` — TÜM sketch araçlarında rubber-band önizleme ZATEN VAR → aynı desen feature'lara. **GOTCHA (MEMORY `fikatia-hiyerarsik-import`):** boş-mesh/geçersiz-yerelSinir → NaN kamera fit → viewport kaybı; önizleme geçersiz BRep üretirse eski mesh korunmalı, fit atlanmalı.

---

## 4. NATIVE ENTEGRASYON

### 4.1 Yeni modül: `motor/parca/` (Part Design sistemi)

```
motor/parca/include/fiko/parca/
  feature_tanim.hpp        # FeatureParam / FeatureTanim (web fiko-komut.tanim.ts)
  feature_registry.hpp     # FEATURE_TANIMLARI[] (web fiko-komut.registry.ts)
  feature.hpp              # Feature struct (tip, param haritası, kimlik, secProfiller/secYuz/secKenar, sonuçBrep)
  part_design_sistemi.hpp  # PartDesignSistemi: featureBaslat/Guncelle/Onayla/Iptal + rebuild
motor/parca/src/
  part_design_sistemi.cpp
  feature_hesap.cpp        # feature tip → OCCT çağrısı (brep.cpp fonksiyonlarını kullanır)
```

`Feature` bir **DokumanNesnesi** olur (`bagimliliklar()` → sketch/önceki-feature) → `RecomputeMotor` DAG'ına doğal düğüm. `ParametreDegisti` yayınlanınca kirlenir, kare sonu topolojik sırada `hesapla()` → OCCT rebuild → `BrepDegisti`.

### 4.2 OCCT genişletme: `motor/geometri/brep.hpp` yeni serbest fonksiyonlar

Mevcut (kutu/silindir/kure/koni/boolean/donusumUygula/pahla/yuvarlat) üstüne:
```cpp
// Prizma (pad/pocket/rib/stiffener): sketch tel→yüz, yön×derinlik.
BrepGovde prizma(const BrepGovde& profilYuz, Vec3d yon, f64 derinlik, bool simetrik=false);
BrepGovde prizmaLimit(const BrepGovde& profil, Vec3d yon, LimitTip, const BrepGovde* hedef); // UpToFace/Next/Last
// Döndürme (shaft/groove):
BrepGovde dondur(const BrepGovde& profilYuz, Vec3d eksenNokta, Vec3d eksenYon, f64 aciRad);
// Delik (hole): silindir + havşa/V-dip → cut. Yüz noktası + normal.
BrepGovde delikAraci(Vec3d merkez, Vec3d normal, HoleParam);
// Çok-kesit / süpürme:
BrepGovde loft(const std::vector<BrepGovde>& profiller, bool katı=true);
BrepGovde sweep(const BrepGovde& profilYuz, const BrepGovde& yolTel);
// Dress-up (mevcut pahla/yuvarlat genişletir):
BrepGovde pahAsimetrik(const BrepGovde&, const std::vector<u32>& kenarlar, f64 d1, f64 d2OrAci, bool aciModu);
BrepGovde yuvarlatDegisken(const BrepGovde&, const std::vector<u32>& kenarlar, f64 r1, f64 r2);
BrepGovde kabuk(const BrepGovde&, const std::vector<u32>& acikYuzler, f64 kalinlik);
BrepGovde egim(const BrepGovde&, const std::vector<u32>& yuzler, Vec3d cekmeYon, f64 aciRad, f64 notrZ);
BrepGovde kalinlikEkle(const BrepGovde&, const std::vector<u32>& yuzler, f64 t);
BrepGovde yuzKaldir(const BrepGovde&, const std::vector<u32>& yuzler); // Defeaturing
BrepGovde offsetKati(const BrepGovde&, f64 offset);
// Dönüşüm/dizi (donusumUygula var; dizi loop feature_hesap.cpp'de Trsf + birlesim):
BrepGovde afinDonusum(const BrepGovde&, f64 kx, f64 ky, f64 kz); // gp_GTrsf
```
Pah/fillet asimetrik ve değişken varyantları için `pahla/yuvarlat` imzaları genişletilir (aşırı yükleme). Kenar/yüz ordinalleri **1-tabanlı TopExp** (mevcut `KenarBilgi/YuzBilgi/yuzKonturlari` ile aynı sıra) — seçim sistemiyle uyumlu.

### 4.3 Associatif referans (topo-ref)

Fillet/chamfer/shell/draft **seçili kenar/yüz ordinalleri** parametre değişince kaymamalı. MEMORY `sistem-modelleme-brep-link` (Faz2: fiko-toporef imza eşleştirme) + web `fiko-toporef.ts` (§merkez+yön+ölçü skoru) native karşılığı: her seçili kenar/yüzün `{merkez, yon, olcu}` imzası saklanır; rebuild sonrası aday ordinallere `topoSkor` ile eşlenir (greedy en-yüksek). `motor/geometri`de `KenarBilgi/YuzBilgi` bu imzayı zaten üretir (merkez=orta/ağırlık, yon=yön/normal, olcu=uzunluk/alan) → skor fonksiyonu doğrudan taşınabilir.

### 4.4 Undo/redo (mevcut Cekirdek Islem)

Her feature onayı `cekirdek.uygula(std::make_unique<FeatureEkleIslem>(pd, feat))` (web `gecmisKaydet`). Parametre düzenleme → `FeatureDuzenleIslem` (eski/yeni param pusulası; `DuzenleIslem` kalıbı — canlı zaten uygulandığı için ilk `uygula` atlanır, redo'da uygulanır). Mevcut `sahne_islem.hpp` `EkleIslem/DuzenleIslem/BooleanIslem/DonusumIslem` kalıbı birebir.

### 4.5 Makro + plugin + olay (ZORUNLU mimari ilke)

Feature'lar `cekirdek.menuler()` + `feature_registry`'ye eklenince Lua makro (`fiko.sahne` API) + DLL plugin (`EklentiYonetici`) + olay erişimi bedavaya gelir (MEMORY `fikatia-makro-eklenti-sistemi`). Yeni olaylar `olay.hpp` **enum sonuna**: `FeatureEklendi`, `FeatureGuncellendi`, `FeatureSilindi`, `FeatureHesaplandi`. `part_design_sistemi` mutasyonları `OlayGunlugu`'ne yayınlar → makro/plugin dinleyebilir.

### 4.6 Ürün ağacı uyumu

CAM omurga ajanı ürün ağacı panelini kuruyor (`urunAgaci` / `cekirdek.agac().ekle`). Part Design feature'ları aynı ağaçta PartBody altında listelenir (Sketch → Pad → Pocket → Fillet…). Feature düğümü çift-tık → `featurePencereAc` (cam_paneli `programSatiri` kalıbı). **Koordinasyon notu:** feature düğüm ikonları/renkleri ürün ağacı ajanıyla ortak `agacSimgesi()`/`agacRengi()` üzerinden (mevcut `GorunumSaglayici` deseni — `sketch_nesne.hpp`/`referans_nesne.hpp` gibi).

---

## 5. İYİLEŞTİRMELER (native'de web'den daha iyi)

1. **Tam OCCT B-Rep her yerde (mesh yok):** Web'de bazı feature'lar mesh-CSG fallback (mirror/rib/thickness bazı yollar). Native OCCT hazır → **hepsi tam B-Rep** → doğru topoloji, yüz/kenar seçimi, hassas ölçüm. Web `FikoKenarIslem.ts` (mesh CSG fillet/chamfer) taşınmaz — gereksiz.
2. **Değişken/asimetrik pah-fillet:** Web'de tanjant grup seçimi UI-only. Native `BRepFilletAPI` `Add(r1,r2,edge)` / `AddDA` ile gerçek değişken yarıçap + açı-modu chamfer.
3. **Daha iyi canlı önizleme:** ImGui + Vulkan → tek framebuffer'da rubber-band mesh + şeffaf hayalet. Web DOM/CD gecikmesi yok. Sketch kalite dalgasındaki rubber-band deseni (MEMORY) feature'lara.
4. **Daha akıcı seçim:** Native GPU pick + `topoSkor` associatif eşleştirme → yüz/kenar seçimi rebuild'ler arası kopmaz. Web'de faceId drift riski (unify atlanıyor); native persistent-naming ile daha sağlam.
5. **Daha iyi hata mesajları:** OCCT exception → Türkçe kullanıcı mesajı (pencerede kırmızı satır, cam_paneli `op.hata` kalıbı). "Yarıçap kenardan büyük", "Yüz çekme eksenine paralel eğilemez" gibi spesifik.
6. **Performans:** Feature DAG `RecomputeMotor` → yalnız kirli feature yeniden hesaplanır (web full-rebuild yerine incremental). Ağır OCCT işlemleri worker'a (STEP import kalıbı — MEMORY) → UI donmaz (cam Vulkan donma fix dersi).
7. **Multi-limit birleşik pencere:** Pad Definition'da First+Second limit tek pencerede, canlı; ok/iptal tutarlı.

---

## 6. UYGULAMA YOL HARİTASI (dalgalar)

> Her dalga build+test temiz bırakır. Implementasyon ajanı tek elden `main.cpp` + `CMakeLists.txt` entegrasyonunu yapar. Yeni testler: `test_parca` (feature hesap doğruluğu — kesim/geometri kritik olduğundan).

### DALGA 1 — Altyapı (komut penceresi iskeleti)
**Üretir:** `motor/parca/` iskeleti (`feature_tanim.hpp`, `feature_registry.hpp` — önce 3-4 feature, `feature.hpp`, `part_design_sistemi.{hpp,cpp}` yaşam döngüsü), `uygulama/fikocad/feature_penceresi.{hpp,cpp}` (cam_paneli op-pencere kalıbından türetilmiş genel iskelet + veri-odaklı param çizimi). `main.cpp`: "part" workbench'e ilk komutlar + `featurePencereleriCiz` çizim döngüsüne. `olay.hpp`: 4 yeni Feature olayı (enum sonu). CMake: yeni modül + OCCT link.
**Doğrulama:** Kutu/silindir feature'ı kendi penceresinde canlı param + Tamam/İptal + undo. (primitifler zaten var → pencereye bağla).

### DALGA 2 — Temel katı feature'ları (Pad / Pocket / Shaft / Groove / Hole)
**Üretir:** `brep.cpp` `prizma`/`prizmaLimit`/`dondur`/`delikAraci`. `part_design_sistemi` sketch profil seçimi + limit modları. `feature_penceresi`: `padPenceresi`/`holePenceresi`/`shaftPenceresi` zengin Definition (§3.2). Onaydan sonra Definition penceresi açma (web `featureMenu` kalıbı).
**Doğrulama:** Sketch → Pad (Blind/UpToFace) → Pocket → Hole (Counterbored/dişli) → Shaft. Ağaçtan çift-tık düzenleme. `test_parca`: prizma hacmi, revolve hacmi, hole çıkarma.

### DALGA 3 — Dress-up (Fillet / Chamfer / Shell / Draft / Thickness)
**Üretir:** `brep.cpp` `kabuk`/`egim`/`kalinlikEkle` + `pahla/yuvarlat` genişletme (asimetrik/değişken). Kenar/yüz seçim akışı + associatif topo-ref eşleştirme (§4.3). "İşlem" menüsündeki mevcut pah/fillet akışını per-feature pencereye taşı (eski akış kaldırılır).
**Doğrulama:** Fillet (değişken r) · Chamfer (3 mod) · Shell (yüz seç) · Draft. Parametre değişince seçim kopmaz. `test_parca`/`test_brep` yeni.

### DALGA 4 — Dizi / Aynala / Dönüşüm feature'ları
**Üretir:** `feature_hesap.cpp` Trsf-loop dizileri (patternDik/Dairesel/Izgara/userPattern) + mirror/symmetry + affinity/axisToAxis (`afinDonusum`) + split. translate/rotate/scaling'i kalıcı feature yap (mevcut `DonusumIslem` matris; feature olarak parametrik).
**Doğrulama:** Pattern (dik/dairesel/ızgara) · Mirror · kalıcı translate/rotate ağaçta düzenlenebilir.

### DALGA 5 — Çok-kesit (Loft / Sweep / Slot / Combine / removedLoft)
**Üretir:** `brep.cpp` `loft`/`sweep`. Çoklu sıralı profil seçimi (FIFO liste paneli). Profil+yol seçim akışı.
**Doğrulama:** 2+ kesit loft · profil+yol sweep · slot (cut) · combine (kesişim).

### DALGA 6 (opsiyonel) — GSD Yüzey + offsetShape/healing/removeFace/replaceFace
**Üretir:** yüzey feature'ları (`ThruSections(solid=false)`, `MakePipe(shell)`, fill, closeSurface) + kalan katı düzenleyiciler (offsetShape/simplify/healing/removeFace/replaceFace/removeLump). Ayrı "surface" workbench görünürlüğü.

---

## EK: KAYNAK DOSYA YOLLARI (mutlak)

**Web (fikoyt-sistem — SALT REFERANS):**
- `D:/__sistem__/Masaustu/FikoYT.Yeni.Cag/fikoyt-sistem/src/service/fikoyt-ui/src/lib/fiko-three-js/IFikoThreeJS/fiko-modelleme/fiko-komut.registry.ts`
- `.../fiko-komut.tanim.ts` · `.../FikoKomutPenceresi.ts` · `.../FikoKomutIcerik.ts`
- `.../FikoModellemeYonetici.ts` (yaşam döngüsü 1743-1924; taslakFeatKur 1925)
- `.../fiko-occt-kernel.ts` (OCCT çağrıları) · `.../FikoKenarIslem.ts` (mesh CSG — taşınmaz)
- `.../FikoPadDialog.ts` · `.../FikoHoleDialog.ts` · `.../FikoShaftDialog.ts` · `.../FikoOzellikDialoglari.ts`
- `.../fiko-toporef.ts` (associatif imza skoru)

**Native (fikatia-local — TAŞIMA HEDEFİ):**
- MEVCUT: `motor/geometri/include/fiko/geometri/brep.hpp` (+`src/brep.cpp`)
- MEVCUT: `motor/sahne/include/fiko/sahne/{sahne,sketch_nesne,referans_nesne,sahne_islem}.hpp`
- MEVCUT: `motor/cekirdek/include/fiko/cekirdek/{workbench,recompute,kayit,olay}.hpp`
- MEVCUT (pencere kalıbı REFERANS): `uygulama/fikocad/cam_paneli.cpp` · `cam_operasyon_penceresi.hpp` · `pencere_util.hpp`
- MEVCUT (entegrasyon): `uygulama/fikocad/main.cpp` (komut kayıt 452-587; recompute 589-597; workbench 465-471)
- YENİ: `motor/parca/**` · `uygulama/fikocad/feature_penceresi.{hpp,cpp}`
