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

> **Amaç:** Web'deki (fikoyt-sistem, CATIA tarzı) **GSD = yüzey (surface) + tel-kafes (wireframe) modelleme** workbench'ini native fikatia-local'e taşımak. Part Design katı-tabanlı; GSD **yüzey/eğri-tabanlı** (sonuç açık shell / wire / vertex — katı değil).
> **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** — Extrude Surface kendi, Sweep kendi, Fill kendi, Loft/Multi-Section kendi, Blend kendi, wireframe Point/Line/Circle/Spline/Helix kendi. Referans: `uygulama/fikocad/cam_paneli.cpp` op-başına yüzen+pinlenebilir pencere kalıbı (`###op_<id>` + `ustteTutSinif/ustteTutDugmesi`).
> **KARDEŞ BLUEPRINT — TEKRAR ETME, REFERANS VER:** `docs/part_design_blueprint.md`. Komut-penceresi altyapısı (`feature_penceresi.{hpp,cpp}`), `motor/parca/` sistemi (`feature_tanim/feature_registry/part_design_sistemi`), RecomputeMotor DAG düğümü, undo Islem, makro+plugin+olay doğuştan, associatif topo-ref — ORADA belgelendi. Bu doküman **GSD'ye ÖZGÜ** (yüzey/wireframe/operations) kısma odaklanır. **Part Design ile ORTAK feature'lar** (Fillet/Chamfer/Pattern/Mirror/Translate/Rotate/Scale/Symmetry) için → **"Part Design blueprint'e bak"**.

---

## 0. GSD ↔ PART DESIGN AYRIMI (ne buraya, ne oraya)

| Konu | Nerede belgeli |
|---|---|
| Komut penceresi iskeleti (`feature_penceresi.cpp`, cam op-pencere kalıbı, pin, alt bar) | **Part Design blueprint §2** — buradan türet |
| `motor/parca/` sistemi + feature yaşam döngüsü (baslat/guncelle/onayla/iptal) | **Part Design blueprint §4.1** |
| Veri-odaklı param şeması (`FeatureParam`/`FeatureTanim`, koşullu görünürlük, ImGui widget eşleme) | **Part Design blueprint §3.1** |
| RecomputeMotor DAG, undo Islem, makro+plugin+olay | **Part Design blueprint §4.4–4.5** |
| Katı feature'lar (Pad/Pocket/Shaft/Hole/Rib/Shell/Draft/Fillet/Chamfer) | **Part Design blueprint §1–3** |
| Transformations Translate/Rotate/Scale/Mirror/Symmetry (uniform Trsf) | **Part Design blueprint §1.3** |
| **Wireframe** (Point/Line/Circle/Spline/Helix/Conic/Corner/Connect/Parallel/Projection/Intersection/Boundary) | **BU DOKÜMAN §1, §3, §6-Dalga 1-2** |
| **Surface** (Extrude/Revolve/Sweep/Fill/Loft/Blend/Offset/Sphere/Cylinder + Extrapolate) | **BU DOKÜMAN §2, §4, §6-Dalga 3-4** |
| **Operations** (Join/Sew, Heal, Simplify, Disassemble, Split, Trim, Extract, Untrim, Concatenate) | **BU DOKÜMAN §5, §6-Dalga 5** |
| **Affinity/GTransform** (non-uniform — GSD'ye özgü) | **BU DOKÜMAN §5** |
| **Yüzey kalite analizi** (zebra/kurvatür/draft/reflect/porcupine — İYİLEŞTİRME) | **BU DOKÜMAN §7, §8** |

**Web'in en kritik mimari bulgusu (3 alt-ajan doğruladı):**
- **Yüzey (surface) ailesi ZATEN GERÇEK OCCT B-Rep** (opencascade.js WASM) — açık **Shell**/**Face** üretir, `shapeToGeo` ile yalnız görüntüleme için mesh'e tessellate edilir. Native C++/OCCT'ye **birebir** taşınır (aynı sınıflar).
- **Wireframe (tel-kafes) ailesi web'de B-Rep DEĞİL — polyline/mesh!** Nokta→Sphere, Çizgi→Cylinder, Çember→Torus, Spline→TubeGeometry. OCCT'ye HİÇ gitmiyor (sadece Intersection + Boundary gerçek OCCT). **Native'de en büyük İYİLEŞTİRME:** wireframe'i gerçek `TopoDS_Edge`/`Geom_Curve` yap → snap/ölçüm gerçek çember merkezi/yarıçap alır.

---

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

> Kaynak: `FikoNoktaDialog/FikoCizgiDialog/FikoCemberDialog/FikoSplineDialog/FikoDuzlemDialog` + `FikoModellemeYonetici.ts` hesap fonksiyonları. **Wireframe registry'de YOK** — dialog + `*Ekle()` tabanlı (registry'de `nokta3d`/`cizgi3d` yalnız ref-picker tipi). Native'de wireframe'i registry'ye taşı (her biri kendi komutu+penceresi).

| Feature | Web dialog var? | Modlar | Web hesap (FikoModellemeYonetici) | OCCT karşılığı (native gerçek B-Rep) | Native mevcut? |
|---|---|---|---|---|---|
| **Nokta (Point)** | ✅ FikoNoktaDialog | 10: koordinat · arası(2 nokta+oran) · egriUzerinde(eğri+oran) · extremum(eğri+eksen+min/max) · polarExtremum · cemberMerkez · tegetEgri · ortalama(N mean) · duzlemde(düzlem+u,v) · projeksiyon(nokta→düzlem) | `noktaKonum()` | `BRepBuilderAPI_MakeVertex(gp_Pnt)`; projeksiyon `GeomAPI_ProjectPointOnCurve`/`ProjLib`; extremum `Extrema_ExtPC` | ❌ |
| **Çizgi (Line)** | ✅ FikoCizgiDialog | 6: iki-nokta · nokta-yon(eksen+uzunluk) · aci(ref çizgi+açı+dönme ekseni) · bisecting(2 çizgi açıortay) · tanjant(eğri+oran) · normal(düzlem/yüz normali) | `cizgiUclar()` | `BRepBuilderAPI_MakeEdge(gp_Lin)` / iki `gp_Pnt`; teğet `BRepAdaptor_Curve.D1` | ❌ |
| **Çember/Yay (Circle)** | ✅ FikoCemberDialog | 8: merkez+R · merkez-nokta · iki-nokta-cap · merkez-eksen · merkez-teget · bitangent(2 çizgi+R) · tritangent(3 çizgi incircle) · uc-nokta(circumcircle) | `cemberBilgi()`, `bitangentMerkez`, `tritangentMerkez` | `BRepBuilderAPI_MakeEdge(gp_Circ(gp_Ax2,r))`; yay `GC_MakeArcOfCircle` | ❌ |
| **Spline** | ✅ FikoSplineDialog | Sıralı nokta ref listesi (`refler[]`) | `splineNoktalar()` | `GeomAPI_PointsToBSpline` → `MakeEdge(BSplineCurve)` | ❌ |
| **Düzlem (ref datum)** | ✅ FikoDuzlemDialog | 5: ofset · paralelNokta · uc-nokta · egriNormal · iki-cizgi | `duzlemBilgi()` | `gp_Pln`/`Geom_Plane` (datum düğüm — **mevcut** `ReferansNesnesi` genişletilir) | ⚠️ kısmi (XY/XZ/YZ + ofset var) |
| **Polyline** | ❌ dialog YOK | Nokta ref listesi (düz segment) | `telKafesKur` | `BRepBuilderAPI_MakePolygon` | ❌ |
| **Helix (Helis)** | ❌ dialog YOK | merkez+eksen+yaricap+yükseklik+tur | `helixNoktalar()` | `Geom_CylindricalSurface`+`Geom2d_Line`→`MakeEdge(curve2d,surf)` | ❌ |
| **Spiral (Arşimet)** | ❌ dialog YOK | yaricap+adım+yükseklik+tur | `spiralNoktalar()` | örneklenmiş `PointsToBSpline` | ❌ |
| **Conic (Konik)** | ❌ dialog YOK | 3 nokta + ρ: parabol/elips/hiperbol | `conicNoktalari()` | `Geom_Ellipse`/`Hyperbola`/`Parabola` veya ağırlıklı `Geom_BezierCurve` | ❌ |
| **Corner** | ❌ dialog YOK | 2 çizgi + yaricap (teğet yay) | `cornerNoktalari()` | `GC_MakeArcOfCircle` teğet çözüm | ❌ |
| **Connect Curve** | ❌ dialog YOK | 2 eğri + gerginlik (teğet-sürekli cubic) | `connectNoktalari()` | `GeomFill`/`Geom_BezierCurve` (G1/G2 süreklilik) | ❌ |
| **Parallel Curve** | ❌ dialog YOK | kaynak eğri + mesafe + düzlem | `paralelEgriNoktalari()` | `BRepOffsetAPI_MakeOffset` (kernel'de yüz-konturu için var) | ❌ |
| **Intersection** | ❌ dialog YOK | 2 shape ref | **GERÇEK OCCT** `fikoOCCT.kesit` | `BRepAlgoAPI_Section` | ❌ |
| **Boundary** | ❌ dialog YOK | yüzey ref | **GERÇEK OCCT** `shapeToEdges` | `BRepTools::OuterWire`/`BRepAlgoAPI_Section` | ❌ |
| Isoparametric / Curve Smooth / Equation / Spine | ❌ dialog YOK | çeşitli | çeşitli | `Geom_Surface.UIso/VIso`, Laplacian, param eğri | ❌ |

**Kritik:** Yalnız 5 wireframe tipinin (Nokta/Çizgi/Çember/Spline/Düzlem) kendi dialogu var. Diğerleri (Polyline/Helix/Spiral/Conic/Corner/Connect/Parallel/Intersection/Boundary…) web'de hesap mantığı VAR ama **penceresi YOK** — native'de **her biri kendi ImGui penceresi + gerçek OCCT B-Rep üretimi** ile sıfırdan doğar.

---

## 2. SURFACE FEATURE ENVANTERİ (web → OCCT → native)

> Kaynak: `fiko-komut.registry.ts` `workbench:'surface'` komutları + `fiko-occt-kernel.ts` (satır no'lar). **Hepsi gerçek OCCT** — açık Shell/Face; katı gövdeyle BİRLEŞMEZ, ayrı `yuzeyMeshler[]` (DoubleSide) render.

| Feature | registry id | Parametreler | OCCT operasyonu (kernel fonksiyon) | Girdi/seçim | Native mevcut? |
|---|---|---|---|---|---|
| **Yüzey Extrude** | `yuzeyExtrude` | `param` (uzatma mm) | `BRepPrimAPI_MakePrism` **wire üstünde** → ruled shell (`makeYuzeyExtrude` k:709) | sketch profili + düzlem normali | ❌ |
| **Yüzey Revolve** | `yuzeyRevolve` | `aci` (°) | `BRepPrimAPI_MakeRevol` wire üstünde (`makeYuzeyRevolve` k:715) | sketch + eksen (düzlem eksenV) | ❌ |
| **Yüzey Fill** | `yuzeyFill` | — | `BRepBuilderAPI_MakeFace(wire)` tek düzlemsel yüz (`makeYuzeyFill` k:722) | kapalı sketch | ❌ (native'de `BRepFill_Filling` ile İYİLEŞTİR) |
| **Multi-Section (Loft)** | `yuzeyLoft` | — (3D'de ≥2 kesit) | `BRepOffsetAPI_ThruSections(isSolid=false)` (`makeLoft(...,false)` k:667) | `secProfiller[]` sıralı N kesit | ❌ |
| **Sweep (Süpürme)** | `yuzeySweep` | — (profil+yol) | `BRepOffsetAPI_MakePipe(yol,profWire)` (`makeYuzeySweep` k:727); yol ≥3 nokta → `PointsToBSpline` | `secProfiller[0]`=profil, `[1]`=yol | ❌ (native'de `MakePipeShell` ile İYİLEŞTİR) |
| **Sphere Yüzey** | `yuzeySphere` | `pCap` | `BRepPrimAPI_MakeSphere` → `yuzler()[0]` (`kureYuzey` k:839) | ref nokta/koordinat | ❌ |
| **Cylinder Yüzey** | `yuzeyCylinder` | `pCap`,`pYuk`,`aynaTip` | circle wire→face→`MakePrism` → yan yüz seç (`silindirYanYuzey` k:844) | merkez + eksen | ❌ |
| **Blend** | — (registry YOK, motor `yuzeyBlendEkle`) | 2 açık profil | `BRepOffsetAPI_ThruSections(false)` (`makeBlend` k:678) | 2 açık kesit | ❌ (native'de `GeomFill_BSplineCurves` ile İYİLEŞTİR) |
| **Extrapolate (Uzat)** | — (registry YOK, `yuzeyExtrapolateEkle`) | mesafe | `NurbsConvert`+`GeomLib::ExtendSurfByLength`×4 yön (`yuzeyUzat` k:690) | yüzey | ❌ |
| **Offset Yüzey** | — (`yuzeyOffsetFor` sağ menü) | mesafe | **Web: profil-2D-offset taklidi** (gerçek B-Rep açık offset DEĞİL) | yüzey | ❌ (native'de `BRepOffsetAPI_MakeOffsetShape(isOpenResult)` ile GERÇEK yap) |
| **Thick Surface** | — (`thickSurface` sağ menü) | kalınlık | Web: profil-offset→prism KATI (`yuzeyKalinlik`=`MakeThickSolid` VAR ama güvenilmez bulunmuş) | shell | ❌ (native'de `MakeThickSolid` doğrudan) |

**Fill web'de yalnız düzlemsel `MakeFace`.** `GeomFill_*`, `BRepFill_Filling`, `GeomPlate_BuildPlateSurface`, `MakePipeShell` (guide law) web kernelinde **HİÇ yok** → native'de eklenecek yeni yetenekler (§8 İyileştirme).

---

## 3. HER-KOMUT-KENDİ-PENCERESİ (GSD wireframe) — registry şeması + seçim akışı

> Part Design blueprint §2 **iskeleti** (cam op-pencere kalıbı) burada da geçerli. Aşağıda GSD wireframe'e ÖZGÜ **çok-modlu tür-dropdown + koşullu alan + çoklu ref-seçim** deseni.

### 3.1 Web deseni (tek-tip dialog anatomisi)

Tüm wireframe dialogları aynı iskelet: **üstte Tür dropdown** → **koşullu (@if) alan grubu** → **alt bar (Tamam/Sil)**. Referans seçimi her yerde **dropdown + 🎯 (3D'den seç)** ikili yapısı. Ortak servis metotları: `noktaSecenekleri()`, `egriSecenekleri()`, `tumEgriSecenekleri()`, `duzlemSecenekleri()`, `refSecBaslat(el, anahtar, [tip], cb)`.

### 3.2 Native ImGui eşleme — `feature_registry`'ye wireframe komutları

Wireframe web'de registry-dışı; native'de **registry'ye alınır** (her biri kendi komutu). Tür seçimi `secim` param (Combo) + koşullu alanlar `gorunur` lambda ile (Part Design §3.1 veri-odaklı param şeması aynen).

```cpp
// motor/parca/include/fiko/parca/feature_registry.hpp (Part Design ile ORTAK dosya, wireframe grubu):
// Nokta — 10 mod
{ "nokta", "Nokta (Point)", "•", "gsd", {}, {
    { "noktaTip", "Tür", secim, "koordinat", {koordinat,arasi,egriUzerinde,extremum,
       polarExtremum,cemberMerkez,tegetEgri,ortalama,duzlemde,projeksiyon} },
    { "p1x","X",mesafe,0, gorunur=[](d){return d["noktaTip"]=="koordinat";} }, /* p1y,p1z */
    { "ref1","1. Nokta/Eğri",ref,-1,{nokta3d,cizgi3d}, gorunur=[](d){return d["noktaTip"]!="koordinat";} },
    { "ref2","2. Nokta",ref,-1,{nokta3d}, gorunur=[](d){return d["noktaTip"]=="arasi"||d["noktaTip"]=="ortalama";} },
    { "oran","Oran (0-1)",sayi,0.5, gorunur=[](d){return d["noktaTip"]=="arasi"||d["noktaTip"]=="egriUzerinde";} },
    { "eksenTip","Eksen",eksenRef,"z", gorunur=[](d){return d["noktaTip"]=="extremum"||d["noktaTip"]=="tegetEgri";} },
    { "duzlemRef","Düzlem",duzlemRef,"xy", gorunur=[](d){return d["noktaTip"]=="duzlemde"||d["noktaTip"]=="projeksiyon";} },
}},
```

### 3.3 Her wireframe komutu — alan seti + seçim akışı özeti

| Komut | ImGui alanları (koşullu) | Seçim akışı (3D pick) |
|---|---|---|
| **Nokta** | Tür(10) → koordinat: X/Y/Z + "🎯 Yüze tıkla"; arası: ref1+ref2+oran; egriUzerinde: eğri+oran; extremum: eğri+eksen+yön(max/min); duzlemde: düzlem+u,v; projeksiyon: nokta+düzlem | `refSecBaslat(['nokta3d'\|'cizgi3d'\|'duzlem3d'])` |
| **Çizgi** | Tür(6) → Başlangıç(ref/koord X/Y/Z); iki-nokta: Bitiş; nokta-yon: yön(x/y/z)+uzunluk; aci: ref çizgi+açı+dönme ekseni+uzunluk; bisecting: 2 çizgi+uzunluk; tanjant: eğri+konum(0-1)+uzunluk; normal: düzlem+uzunluk | ref: `['nokta3d']` / `['cizgi3d']` |
| **Çember** | Tür(8) → merkez: merkez(ref/koord)+R+düzlem; merkez-nokta; iki-nokta-cap; merkez-eksen: +çizgi ekseni+R; merkez-teget; bitangent: 2 çizgi+R; tritangent: 3 çizgi; uc-nokta: 3 nokta | ref3d `['nokta3d']`, ref3dEksen `['cizgi3d']` |
| **Spline** | Dinamik sıralı liste (`refler[]`): satır başı nokta dropdown + ✕; "🎯 Nokta Ekle", "Ardışık Çiz (sağ-tık bitir)", "Tümünü Al" | `refSecListeBaslat` çoklu; `splineArdisik3dBaslat` sürekli |
| **Düzlem** | Tür(5) → ofset: temel+ofset+ters; paralelNokta; uc-nokta; egriNormal: eğri+konum; iki-cizgi: 2 çizgi. Ortak: görünüm boyut | secici widget |
| **Polyline/Helix/Spiral/Conic/Corner/Connect/Parallel** (yeni) | tip-özel (Helix: merkez+eksen+R+yükseklik+tur; Conic: 3 nokta+ρ+tip; Corner: 2 çizgi+R; Connect: 2 eğri+gerginlik; Parallel: eğri+mesafe+düzlem) | tip-özel ref seçim |
| **Intersection** | 2 shape ref | `['govde'\|'yuz'\|'cizgi3d']` |
| **Boundary** | 1 yüzey ref (+ propagate opsiyonu — İYİLEŞTİRME) | `['yuz']` |

**Yeniden-kullanılabilir alt-widget — "Referans Düzlem/Eksen Seçici"** (web `FikoDuzlemSecici`): iki tür (düzlem XY/XZ/YZ · eksen X/Y/Z), iki mod (datum ref-idx · 3D yüz/çizgi→standart). Native'de `duzlemEksenSecici(FeatureParam&)` ortak ImGui helper — Nokta/Çizgi/Çember/Düzlem pencereleri paylaşır.

---

## 4. HER-KOMUT-KENDİ-PENCERESİ (GSD surface) — alan seti + çoklu profil akışı

> Part Design §2 iskeleti + §3.2 zengin pencere. Surface'e özgü: **çoklu sıralı profil seçim akışı** (loft ≥2, sweep profil+yol).

| Komut | ImGui alanları | Seçim akışı |
|---|---|---|
| **Yüzey Extrude** | Uzatma (mm) | `profilSecBaslat()` tekli — pencere açık, sketch profiline tıkla |
| **Yüzey Revolve** | Açı (°) | tekli profil (eksen düzlem eksenV'den) |
| **Yüzey Fill** | — (İYİLEŞTİRME: süreklilik G0/G1/G2 combo) | kapalı profil zorunlu |
| **Multi-Section (Loft)** | (İYİLEŞTİRME: guide curve ref, coupling, smoothing checkbox) | `profilSecBaslat(coklu=true)` → **N kesiti SIRAYLA tıkla** → `secProfiller[]` FIFO liste paneli (≥2) |
| **Sweep** | (İYİLEŞTİRME: profil kanunu Frenet/CorrectedFrenet, guide) | çoklu: `secProfiller[0]`=profil, `[1]`=yol |
| **Sphere/Cylinder** | Çap (+Yükseklik+Eksen Düzlemi) | ref nokta / koordinat (sketch yok) |
| **Blend** (yeni registry) | Süreklilik (G0/G1/G2 combo — İYİLEŞTİRME) | 2 açık profil/eğri seç |
| **Extrapolate** | Mesafe + süreklilik (İYİLEŞTİRME) | 1 yüzey/eğri seç |
| **Offset Yüzey** | Mesafe (±) | 1 yüzey seç (GERÇEK açık offset — §8) |

**Çoklu profil FIFO paneli** (web `FikoSecimListesi`): pencerede sıralı kesit listesi + sıra no + "Çıkar" + adet göstergesi. Native: `secProfiller` (Varlik listesi) ImGui `Selectable` satırları, sürükle-sırala.

**Koşullu alan surface ailesinde web'de yok** (hepsi düz alan) — ama İYİLEŞTİRME alanları (Fill süreklilik, Loft guide, Sweep kanun) koşullu eklenir.

---

## 5. HER-OPERASYON-KENDİ-PENCERESİ (GSD operations) — alan + seçim

> Transformasyonlar (Translate/Rotate/Scale/Mirror/Symmetry) → **Part Design blueprint'e bak**. Aşağıda GSD'ye ÖZGÜ: yüzey Join/Sew, Extract, Affinity/GTransform, Disassemble, Heal, Split/Trim, Untrim, Concatenate.

| Operasyon | registry id | OCCT (kernel fonksiyon) | ImGui alanları | Seçim akışı |
|---|---|---|---|---|
| **Join / Sew** (yüzey dik) | `yuzeyJoin` (motor; registry'ye AL) | `BRepBuilderAPI_Sewing(tol,…)` (`sew`/`dikis` k:564) | Tolerans | N yüzey (`refler[]` çoklu) |
| **Heal / Onar** | `healing` | `ShapeFix_Shape` + fallback `ShapeUpgrade_UnifySameDomain` (`iyilestir` k:575) | Tolerans (0.001–10) | gövde/shell (seçimsiz) |
| **Simplify** | `simplify` | `ShapeUpgrade_UnifySameDomain` (`sadelestir` k:595) | — | gövde |
| **Disassemble / Parçala** | `disassemble` | `TopExp_Explorer(FACE)` → ayrı yüzler | — | gövde/yüzey |
| **Split / Böl** | `split` | `BRepAlgoAPI_Cut` + yarı-uzay kutu | Kesme Düzlemi(duzlemRef) · Ofset · Tutulan Taraf(Poz/Neg) | gövde + düzlem |
| **Trim / Buda** (yüzey) | `yuzeyTrim` | `BRepAlgoAPI_Common` (`kesistir`, `occtYuzeyTrimShape` k:3960) | Kesme düzlemi · taraf | 2 yüzey karşılıklı |
| **Extract / Çıkar** | `yuzeyExtract` | `TopExp_Explorer(FACE)` tek yüz (k:3925) | Yüz No (tamsayı) | kaynak ref + yüz seç. **İYİLEŞTİRME: tangent-propagate** |
| **Multiple Extract** | `multiExtract` | `yuzler()` + `dikis` (k:3939) | — | gövde/yüzey |
| **Untrim** | `untrim` | `BRep_Tool.Surface` + `MakeFace(surf)` doğal sınır (`untrimYuzey` k:585) | Yüz No | yüz index |
| **Extrapolate** | `yuzeyExtrapolate` (motor) | `GeomLib::ExtendSurfByLength` (§2) | Mesafe | yüzey (İYİLEŞTİRME: eğri de) |
| **Offset (katı)** | `offsetShape` | `BRepOffsetAPI_MakeOffsetShape.PerformBySimple` (k:791) | Offset (±) | gövde |
| **Affinity** (non-uniform) | `affinity` | **`gp_GTrsf` + `BRepBuilderAPI_GTransform`** (`afinDonusum` k:885) | X/Y/Z Oran (×) | gövde. **GSD'ye ÖZGÜ** (uniform Transform değil) |
| **Axis to Axis** | `axisToAxis` | `SetRotation`+öteleme (`ekseneYerlestir` k:905) | Hedef nokta(ref) + eksen | nokta+çizgi ref |
| **Remove/Replace Face** | `removeFace`/`replaceFace` | `BRepAlgoAPI_Defeaturing`/yüz→düzlem | (Part Design §1.2 — orada) | yüz seç |
| **Close Surface** | `closeSurface` | `Sewing`+`BRepBuilderAPI_MakeSolid` (`katiYap` k:1220) → **KATI** | — | tüm yüzey feature'ları |
| **Concatenate** (eğri) | ❌ YOK | `GeomConvert_CompCurveToBSplineCurve` (native'de EKLE) | — | N eğri → tek B-spline |

**Yüz-seçim modu mekaniği (web → native):** `SEC_YUZ_OP_TIPLER = {thickness,draft,shell,removeFace,faceFillet,triFillet,replaceFace}` — aktif yüz-seçim sırasında rebuild op'u **canlı uygulamaz** (gövde sabit → faceId kaymaz, highlight atlamaz), `Tamam`'da uygulanır. Native: yüz-seçim modunda taslak feature'ın hesabı **askıda**, seçim bitince tetiklenir. Part Design §3.3 seçim akışı ile uyumlu.

---

## 6. YÜZEY/EĞRİ VERİ MODELİ (native)

GSD'de sonuç **katı değil**: açık **Shell** (surface) / **Wire/Edge** (wireframe) / **Vertex** (point). Native `BrepGovde` zaten herhangi `TopoDS_Shape` sarar (`gecerliMi`, `ucgenle`, `kenarMesh`, `noktaMesh`, `KenarBilgi`/`YuzBilgi` — hepsi mevcut) → shell/wire/vertex doğrudan tutulabilir.

### 6.1 Yeni düğüm tipleri (`motor/sahne`)

```cpp
// motor/sahne/include/fiko/sahne/yuzey_nesne.hpp (YENİ) — GeometriNesnesi kalıbı (mevcut)
class YuzeyNesnesi : public DokumanNesnesi {   // açık shell/face
  const char* turAdi() const override { return "Yüzey"; }
  // BrepGovde tutar; DugumTip::Yuzey; ayrı DoubleSide render katmanı (web yuzeyMeshler ayrımı)
  std::vector<Varlik> bagimliliklar() const override;  // sketch/kaynak yüzey
  void hesapla(Dunya&, OlayGunlugu&) override;         // yuzeyTip → OCCT → BrepGovde
};
// motor/sahne/include/fiko/sahne/tel_nesne.hpp (YENİ) — wireframe edge/wire/vertex
class TelNesnesi : public DokumanNesnesi {
  const char* turAdi() const override { return "Tel"; }  // "Nokta"/"Çizgi"/"Çember"…
  // BrepGovde = TopoDS_Edge/Wire/Vertex (GERÇEK B-Rep — web polyline DEĞİL)
};
```

- **`DugumTip` enum**'a ekle (mevcut `Kutu/Silindir/Kure/Koni/…` sonuna): `Yuzey`, `Tel`, `NoktaRef`, `EgriRef`.
- **`GorunumSaglayici`** (mevcut) `agacSimgesi()`/`agacRengi()` override: Nokta "•", Çizgi "╱", Çember "◯", Yüzey "▱" (cyan çip web 0x22d3ee), Tel sarı (web 0xfacc15). Part Design ürün ağacı ajanıyla ortak (`sketch_nesne.hpp`/`referans_nesne.hpp` deseni).
- **Yüzey feature'ları `agacGorunur` ayrı katman** + `DoubleSide` render (katı ile birleşmez — web `yuzeyMeshler` ayrımı). Native mesh üretiminde `MeshVeri` iki taraflı bayrağı.
- **Referanslar KALICI ID** (web index-tabanlı `ref1:3` kırılgan — native `Varlik` kimlik kullan).

### 6.2 Ürün ağacı — GSD karakteristik yapısı (Open_body / Geometrical Set)

CATIA GSD ağacı Part Design'dan **farklı**: feature'lar **Geometrical Set** (Açık Küme) veya **Ordered Geometrical Set** altında toplanır (`PartBody` yerine). Native: `GrupNesnesi` (mevcut, iç içe ürün ağacı) ile "Geometrical Set 1" grubu → wireframe/surface feature'ları çocuk. Part Design katı feature'ları PartBody'de kalır. GSD workbench aktifken yeni feature aktif Geometrical Set'e eklenir.

---

## 7. ASSOCIATIF REFERANS (topo-ref) — 3 KATMANLI (web bulgusu)

> Part Design §4.3 topo-ref temelini kurar. Alt-ajan web'de **3 katmanlı** sistem tespit etti — native'e taşınmalı (rebuild-güvenli seçim).

Web öncelik sırası (`occtSecYuz`/`occtSecKenar`):
1. **Persistent Naming (birincil)** — `FikoTopoKimlik.yuzId[faceId] → stableId` (`fiko-toporef.ts:91`). OCCT history (`builder.Modified(face)`/`IsDeleted`) ile op sonrası stableId **taşınır**. Feature'da `secYuzKimlik[]` saklanır. **Native:** OCCT `TNaming_NamedShape` (OCAF) mevcut — ya native OCAF kullan, ya el-yapımı `TopoKimlik` (web deseni) taşı.
2. **Centroid eşleştirme (fallback)** — `secYuzNok[]` (yüz merkez koord). En yakın yüz merkezi (`BRepGProp.SurfaceProperties.CentreOfMass`). Adaptif tavan = model köşegeni × %6.
3. **Geometrik imza (topoSkor)** — `ITopoImza{merkez, yon?, olcu?}`, skor `sKonum·(0.55+0.3·sYon+0.15·sOlcu)`, greedy en-yüksek, eşik 0.35. Native `KenarBilgi`/`YuzBilgi` (mevcut) merkez/yön/uzunluk-alan ÜRETİR → skor fonksiyonu **doğrudan taşınabilir** (zaten Part Design §4.3'te belgeli; GSD wireframe/yüzey seçimlerine de uygula).

`fiko-toporef.ts` matematiği saf-sayı (zero-alloc) → C++'a birebir çevrilir.

---

## 8. İYİLEŞTİRMELER (native'de web'den daha iyi — kullanıcı "aktar + geliştir")

1. **Wireframe = GERÇEK B-Rep (mesh değil):** Web wireframe polyline/tube. Native `TopoDS_Edge`/`Geom_Curve` üret → snap gerçek çember merkezi/yarıçap/teğet alır, ölçüm doğru, iki eğri kesişimi gerçek. `GeomAPI_PointsToBSpline`, `gp_Circ`, `MakeEdge/MakeWire`, `GC_MakeArcOfCircle`, `BRepAlgoAPI_Section` altyapısı mevcut.
2. **Tam NURBS yüzey operasyonları** (web'de HİÇ yok):
   - **Sweep** → `BRepOffsetAPI_MakePipeShell` (guide curve, Frenet/CorrectedFrenet law, `SetMode`, coupling). Web basit `MakePipe`'tan üstün.
   - **Loft** → `ThruSections::SetSmoothing(true)` + guide + coupling.
   - **Fill** → `BRepFill_Filling` / `GeomPlate_BuildPlateSurface` — N-kenarlı süreklilik (G0/G1/G2) yaması. Web'in düz `MakeFace`'inden gerçek GSD Fill'e yükseltme.
   - **Blend** → `GeomFill_BSplineCurves(c1,c2,GeomFill_CoonsStyle)` teğet-sürekli. Web `ThruSections` yerine.
   - **Açık Offset** → `BRepOffsetAPI_MakeOffsetShape(BRepOffset_Skin, isOpenResult=true)` gerçek yüzey offset (web profil-2D taklidi yerine).
3. **Gerçek zamanlı yüzey kalite analizi (GPU shader):** Web analiz CPU vertex-renk (mesh yaklaşımı, tessellation'a bağlı). Native:
   - **Zebra** (web'de bile YOK) — Vulkan fragment shader: paralel ışık şeritleri normal haritasıyla, kamera dönünce şeritler kayar (gerçek CATIA hissi, G2 süreklilik denetimi).
   - **Kurvatür** → `BRepLProp_SLProps` analitik `GaussianCurvature()`/`MeanCurvature()`/principal (mesh-yoğunluğa duyarsız, web Gauss-Bonnet açı-açığı yaklaşımından doğru).
   - **Draft** → `BRepLProp_SLProps.Normal()` gerçek yüzey normali · çekme ekseni.
   - **Porcupine** → `GeomLProp_CLProps` analitik eğrilik vektörü (web örneklenmiş).
   - **Reflect line** → normal·göz=0 izo-çizgi.
4. **Daha akıcı seçim:** GPU pick + 3-katman topo-ref (§7) → yüz/kenar rebuild'ler arası kopmaz.
5. **Türkçe hata mesajları:** OCCT exception → pencere kırmızı satırı (cam_paneli `op.hata` kalıbı). "Profil kapalı değil (Fill için kapalı gerekir)", "Yol eğrisi profil düzlemine teğet değil" gibi.
6. **Performans:** RecomputeMotor DAG → yalnız kirli feature yeniden hesaplanır. Ağır OCCT (loft/sweep/heal) worker'a (STEP import + cam Vulkan donma dersi).

---

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

> Her dalga build+test temiz. Implementasyon ajanı/orkestratör tek elden `main.cpp` + `CMakeLists.txt` entegrasyonu yapar. Yeni "gsd" workbench (`cekirdek.workbenchler().ekle({"gsd","Generative Shape Design","▱",aktivasyon,nullptr})` — cam kalıbı). Testler: `test_gsd` (wireframe eğri doğruluğu, yüzey topoloji — geometri kritik).
> **ÖN KOŞUL:** Part Design blueprint DALGA 1 (komut penceresi iskeleti + `motor/parca/` + `feature_penceresi.cpp` + veri-odaklı param) TAMAMLANMIŞ olmalı — GSD onu paylaşır.

### DALGA 1 — GSD workbench + Wireframe temel (Nokta / Çizgi / Çember / Spline / Düzlem)
**Üretir:** `motor/sahne/tel_nesne.hpp` (edge/wire/vertex düğüm). `brep.hpp`'ye wireframe serbest fonksiyonları (`nokta`,`cizgiIkiNokta`,`cizgiYonUzunluk`,`cemberMerkezR`,`cemberUcNokta`,`splineBSpline`,`duzlemDatum`). `feature_registry`'ye 5 wireframe komutu (çok-modlu, koşullu alan). `feature_penceresi`: çok-modlu tür-dropdown + `duzlemEksenSecici` ortak widget. `main.cpp`: "gsd" workbench + wireframe komutları. `olay.hpp` enum sonuna: `TelEklendi`. Geometrical Set grubu (mevcut `GrupNesnesi`).
**Doğrulama:** Nokta (koordinat/arası/eğri üzerinde) · Çizgi (iki-nokta/nokta-yön/teğet) · Çember (merkez+R/3-nokta/tritangent) · Spline · Düzlem — her biri kendi penceresinde canlı önizleme + Tamam/İptal + undo. Ağaçta Geometrical Set altında. `test_gsd`: çember yarıçapı, spline nokta geçişi.

### DALGA 2 — Wireframe genişletme (Polyline / Helix / Spiral / Conic / Corner / Connect / Parallel / Intersection / Boundary)
**Üretir:** `brep.hpp` wireframe fonksiyonları (`polyline`,`helix`(CylindricalSurface+Line2d),`conic`,`corner`(GC_MakeArcOfCircle),`connectCurve`,`paralelEgri`(MakeOffset),`kesisim`(Section),`sinir`(OuterWire)). Her biri kendi registry komutu + penceresi (web'de penceresi YOK — sıfırdan).
**Doğrulama:** Helix (pitch/tur) · Conic (parabol/elips) · Corner (teğet yay) · Intersection (2 shape → eğri) · Boundary (yüz → sınır). Tümü gerçek B-Rep. `test_gsd` kesişim/helix.

### DALGA 3 — Temel yüzey (Extrude / Revolve / Fill / Sphere / Cylinder)
**Üretir:** `brep.hpp` yüzey fonksiyonları (`yuzeyExtrude`(MakePrism/wire),`yuzeyRevolve`(MakeRevol/wire),`yuzeyFill`(BRepFill_Filling — İYİLEŞTİRİLMİŞ),`kureYuzey`,`silindirYuzey`). `motor/sahne/yuzey_nesne.hpp` (shell/face düğüm, DoubleSide ayrı katman). `DugumTip::Yuzey`. `olay.hpp`: `YuzeyEklendi`. Registry surface komutları + pencereleri. Sketch profil seçimi (Part Design §3.3).
**Doğrulama:** Sketch → Yüzey Extrude (açık shell) · Revolve · Fill (kapalı) · Sphere/Cylinder yüzeyi. Ayrı DoubleSide render, katıyla birleşmez. `test_gsd` yüzey alanı.

### DALGA 4 — Çok-kesit + süpürme (Loft / Sweep / Blend / Offset / Extrapolate)
**Üretir:** `brep.hpp` `loft`(ThruSections solid=false + SetSmoothing/guide),`sweep`(MakePipeShell + Frenet law + guide),`blend`(GeomFill_BSplineCurves),`yuzeyOffset`(MakeOffsetShape isOpenResult),`extrapolate`(ExtendSurfByLength). Çoklu sıralı profil FIFO paneli (§4). Guide curve seçim akışı.
**Doğrulama:** ≥2 kesit Loft (guide'lı) · profil+yol Sweep · 2 eğri Blend (G1) · açık Offset · Extrapolate. `test_gsd` loft/sweep topoloji.

### DALGA 5 — Operations (Join/Sew / Heal / Simplify / Disassemble / Split / Trim / Extract / Untrim / Concatenate / Affinity)
**Üretir:** `brep.hpp` `dikis`(Sewing),`onar`(ShapeFix_Shape),`sadelestir`(UnifySameDomain),`parcala`(TopExp explode),`bol`(Splitter),`buda`(Common),`cikar`(Extract + tangent-propagate İYİLEŞTİRME),`untrim`,`concatenate`(GeomConvert_CompCurveToBSplineCurve),`afinDonusum`(GTransform). Her operasyon kendi penceresi (§5). closeSurface (yüzey→katı köprü). 3-katman topo-ref (§7).
**Doğrulama:** Join (N yüzey→shell) · Heal · Split (düzlem) · Extract (yüz) · Affinity (non-uniform) · Close Surface (→katı). Parametre değişince seçim kopmaz. `test_gsd` sew/split/gtransform.

### DALGA 6 (İYİLEŞTİRME) — Yüzey kalite analizi
**Üretir:** `analiz` alt-sistemi: `BRepLProp_SLProps` kurvatür/draft/reflect + **zebra** (Vulkan fragment shader — web'de yok) + porcupine (`GeomLProp_CLProps`) + kütle/mesafe/kontrol/bbox (`BRepGProp`/`BRepExtrema`/`BRepCheck_Analyzer`/`Bnd_Box` — mevcut motor). Gerçek zamanlı GPU shader analiz (kamera dönünce zebra kayar).
**Doğrulama:** Zebra (G2 süreklilik) · Kurvatür renk haritası · Draft (undercut) · Porcupine tarağı. Analitik (mesh-yoğunluğa duyarsız).

---

## EK: KAYNAK DOSYA YOLLARI (mutlak)

**Web (fikoyt-sistem — SALT REFERANS, .claude/worktrees kopyalarına BAKMA):**
Kök: `D:/__sistem__/Masaustu/FikoYT.Yeni.Cag/fikoyt-sistem/src/service/fikoyt-ui/src/lib/fiko-three-js/IFikoThreeJS/fiko-modelleme/`
- `fiko-komut.registry.ts` (surface/analiz komutları) · `fiko-komut.tanim.ts` (IKomutParam şeması)
- `fiko-occt-kernel.ts` (1356 satır — TÜM yüzey/wireframe/operasyon OCCT köprüsü; §1-2-5 satır no'ları buradan)
- `FikoModellemeYonetici.ts` (7448 satır — wireframe hesap `noktaKonum/cizgiUclar/cemberBilgi/splineNoktalar`, yaşam döngüsü, analiz `analiz_*` handler'lar, associatif referans)
- `FikoNoktaDialog.ts` · `FikoCizgiDialog.ts` · `FikoCemberDialog.ts` · `FikoSplineDialog.ts` · `FikoDuzlemDialog.ts` · `FikoDuzlemSecici.ts` (wireframe pencereleri — çok-modlu)
- `FikoOzellikDialoglari.ts` (operasyon dialog alanları) · `FikoFeatureDialog.ts` (generic yüzey feature penceresi)
- `fiko-toporef.ts` (96 satır — 3-katman associatif imza + FikoTopoKimlik persistent naming)

**Native (fikatia-local — TAŞIMA HEDEFİ):**
- MEVCUT: `motor/geometri/include/fiko/geometri/brep.hpp` (+`src/brep.cpp`) — `BrepGovde` her `TopoDS_Shape` sarar; `KenarBilgi/YuzBilgi` merkez/yön/ölçü üretir (topo-ref hazır)
- MEVCUT: `motor/sahne/include/fiko/sahne/{sahne,geometri_nesne,referans_nesne,grup_nesne,sketch_nesne,sahne_islem}.hpp`
- MEVCUT: `motor/cekirdek/include/fiko/cekirdek/{workbench,recompute,kayit,olay,nesne}.hpp` — `DokumanNesnesi` (turAdi/hesapla/bagimliliklar DAG düğümü); `WorkbenchKaydi` ("part"/"sketcher"/"cam" var, "gsd" eklenecek); `OlayTuru` enum (sonuna Tel/Yuzey olayları)
- MEVCUT (pencere kalıbı REFERANS): `uygulama/fikocad/cam_paneli.cpp` (`operasyonPenceresiCiz`/`programSatiri`/`g_pinDurum`/`ustteTutSinif`)
- MEVCUT (entegrasyon): `uygulama/fikocad/main.cpp` (komut kayıt `komut(grup,ad,simge,fn,wb)` 489+; workbench 471-475; recompute 591+)
- ORTAK (Part Design ile): `motor/parca/**` (`feature_tanim/feature_registry/part_design_sistemi`) · `uygulama/fikocad/feature_penceresi.{hpp,cpp}` — GSD wireframe/surface komutları AYNI registry+pencere altyapısını kullanır
- YENİ: `motor/sahne/{tel_nesne,yuzey_nesne}.hpp` · `brep.hpp`'ye wireframe/yüzey/operasyon serbest fonksiyonları
