# Ürün Ağacı PROFESYONELLEŞTİRME + Kaynakça Sistemleri TAŞIMA SPEC'İ

> **Amaç:** fikatia-local (C++23 / Vulkan / ImGui + OCCT) Ürün Ağacı'nı "çok ileri seviye profesyonel" (fikoyt-web + CATIA specification tree) hale getirmek; web'in **Kaynakça** sistemlerini (Konumlar / Işıklar / Kamera Kontrolleri / Etiketler / Kalıcı Ölçümler) native'e taşımak.
> **Kural:** Web KODU kopyalanmaz — düzen + alan seti + akış + davranış modeli referans. Hesap tam OCCT B-Rep. Fog YOK (mimari kural).
> **Mimari anayasa:** Ağaçta temsil edilen HER şey `DokumanNesnesi` (+ görünürse `GorunumSaglayici`) türevidir. Merkezî `Cekirdek` registry'ye eklenen her sistem doğduğu an makro (`fiko.sahne`) + plugin (`Modul`) + olay (`OlayGunlugu`) erişilebilir olur. Yeni olay struct'ı **enum SONUNA** (`OlayTuru::SAYAC` öncesi).
> **Kardeş dokümanlar:** `web_aktarim_master_plan.md`, `cam_blueprint.md`, `part_design_blueprint.md`, `parametrik_sistem_blueprint.md`.

---

## 0 — MEVCUT DURUM ENVANTERİ (kilitlenecek dosyalar)

### 0.1 Native ağaç mimarisi (bugün)
| Katman | Dosya | Durum |
|---|---|---|
| Ağaç veri düğümü | `motor/cekirdek/include/fiko/cekirdek/kayit.hpp` (`struct AgacDugum`) | `etiket / varlik / camKimlik / camTip / cocuklar`. CAM için sanal düğüm alanları eklendi |
| Ağaç toplama (ECS) | `motor/cekirdek/src/urun_agaci.cpp` (`urunAgaciTopla`) | `HiyerarsiBilesen.ust` haritasından iç içe ağaç. NesneKok'u olan HER varlık düğüm adayı |
| Sağlayıcı kaydı | `AgacSaglayiciKaydi` (kayit.hpp) | `agac().ekle(saglayici)`. main: `urunAgaciTopla` + `camAgacTopla` |
| CAM sanal ağaç | `uygulama/fikocad/cam_urun_agaci.{hpp,cpp}` | `CamAgacTip` enum (PROGRAM/PARTOP/AXIS/STOK/OP/TAKIM/YOL), renk/ikon/menü |
| Ağaç render | `uygulama/fikocad/main.cpp` `cizDugum` (~2521–2634) | ImGui TreeNode; ikon+ad, seçim, hover→vurgu, çift-tık (sketch→düzenle / else sığdır), renk çipi, görünürlük `◉/○`, CAM dalı |
| Kök objeler | `motor/cekirdek/include/fiko/cekirdek/nesne.hpp` | `DokumanNesnesi` (ad/turAdi/ozellikler/hesapla/bagimliliklar) + `GorunumSaglayici` (gorunur/agacSimgesi/agacRengi) |
| Özellikler | `DokumanNesnesi::ozellikler(Dunya&)` → `OzellikSeti` | Sayi/Metin/Bayrak/Vektor/Renk. Özellikler paneli + serileştirme tek kaynağı |
| Hızlı görünüm | `motor/render/include/fiko/render/orbit_kamera.hpp` | `HizliGorunum{On,Arka,Sol,Sag,Ust,Alt,Izometrik}`, `gorunumeGit()`. **Eased hedef** var: `hedefOdak_/hedefMesafe_/hedefYonelim_` (named views bunu tekrar kullanacak) |
| Olay sistemi | `motor/cekirdek/include/fiko/cekirdek/olay.hpp` | Tipli pub/sub + halka tampon. Enum sonu: `CamOpYoluHesaplandi` → `SAYAC` |
| Işık | `motor/render/shader/model.frag` (24–28) | **SABİT kodlu**: `isik1(0.5,0.3,0.8)`, `isik2` fill, `ortam=0.18`. Push-constant sadece `mvp/model/vurgu` — **ışık uniform'u YOK, ışık nesnesi YOK** |

### 0.2 KRİTİK BOŞLUKLAR (native'de eksik)
1. **Işık nesnesi yok** — aydınlatma tamamen shader'a gömülü. Kullanıcı ışık ekleyemez/düzenleyemez.
2. **Konumlar (named views) yok** — sadece 7 sabit hızlı görünüm; kullanıcı kendi kamera konumunu kaydedemez.
3. **Ölçümler ağaçta yok** — `OlcumSistemi` (`motor/sahne/olcum_sistemi.hpp`) `Olcum` struct'ları tutar ama `DokumanNesnesi` DEĞİL → ağaçta görünmez.
4. **Etiket sistemi yok** — web'de 10 tip annotation var, native'de hiç yok.
5. **Kaynakça kökü yok** — web `FikoKaynakca` (Konumlar+Ölçümler+Kamera Kontrolleri) grubu; native'de karşılığı yok.
6. Ağaçta **in-tree rename (F2), arama/filtre, reorder, bastır/aktifleştir, aktif gövde (In Work Object), inline slider** yok.

---

## 1 — WEB AĞAÇ İNCELİKLERİ ENVANTERİ → NATIVE EŞLEME

Kaynak: `Fiko3DComponent/agac-item/agac-item.component.{ts,html,scss}` + `FikoUrunAgaci.ts`.

| # | Web incelik | Web nasıl | Native eşleme (ImGui `cizDugum`) | Öncelik |
|---|---|---|---|---|
| 1 | **Inline parametre slider** | `userData.FikoParametreler` `[{isim,turu:'Çubuk',ayar{min,maks,adim},degeri,degisti}]`; ağaçta `<input type=range>`. Örnek: Pan/Döndürme/Zoom hızı | Düğüm altında `ImGui::SliderFloat(min,maks)` → `param.degisti(v)`. `AgacDugum`'a `std::vector<AgacParam>` alanı (isim, min, maks, adim, `f64* deger` veya oku/yaz kapanışı, `std::function<void(f64)> degisti`). Referans: `Boyut Katsayısı` benzeri. **Çubuk/Sayı/Açılır/Renk/Formül** türleri | ★★★ |
| 2 | **Görünürlük göz toggle** | `.fiko-goz` göz ikonu; hover'da belirir, gizlide sabit; `grup.visible` çocukları da gizler | VAR (`◉/○` SmallButton). İyileştir: hover'da belir + gizli düğüm soluk (VAR) + **grup görünürlüğü alt ağaca cascade** | ✔ (kısmen) |
| 3 | **Inline rename** | `duzenlenenUuid`, F2 / isim çift-tık → `<input>`; Enter kaydet, Esc iptal, blur kaydet. `grp.adDegistirildi(ad)` | `DokumanNesnesi::adAyarla()` VAR. `cizDugum`'a düzenleme durumu: `u32 duzenlenenVarlik`, F2 veya çift-tık(ad) → `ImGui::InputText` (aynı satır); Enter/Esc/focus-kaybı. `adAyarla` çağır | ★★★ |
| 4 | **Arama/filtre** | `agacArama` input; eşleşmeyen `.fiko-arama-soluk` (opacity .28), eşleşen `.fiko-arama-vurgu`. Türkçe-duyarsız (`toLocaleLowerCase('tr')`) | Ağaç penceresi üstüne `ImGui::InputTextWithHint("🔍 Ara")`; `cizDugum`'da ad eşleşmezse `ImGui::PushStyleColor` soluk + (alt eşleşme varsa göster). Türkçe küçük harf yardımcısı. Boşsa hepsi | ★★★ |
| 5 | **Drag-reorder** | `[draggable]` `grp.siralanabilir`; `dragstart/over/drop` → `treeReorder.emit({kaynak,hedef})` | `ImGui::BeginDragDropSource/Target` (varlık kimliği payload). Feature reorder → **RecomputeMotor DAG korumalı** (§2.4). `siralanabilir` bayrağı `DokumanNesnesi`'ne (veya tür bazlı) | ★★ |
| 6 | **3D↔ağaç senkron vurgu** | hover ağaçta→3D `treeHover`; 3D→ağaç `selectionState{hoveredUuid,selectedUuids,parentPathUuids}`; seçili sarı, hover cyan, ata-yolu soluk sarı breadcrumb | VAR kısmen (hover→`sahne.vurgu`, seçim→`govdeSeciliMi`). Ekle: **ata-yolu vurgu** (seçili düğümün üst zinciri soluk renk), seçili düğüme **otomatik scroll** (`ImGui::SetScrollHereY`) | ★★ |
| 7 | **Multi-select** | Ctrl+tık toggle | VAR (`io.KeyCtrl` → `secimTemizle` atla). Ekle: **Shift+tık aralık** (görünen düğüm sırasına göre) | ★ |
| 8 | **Feature durum rozeti** | `.fiko-feat-bastik` (line-through, opacity .5), `.fiko-feat-hata` (kırmızı, `ban`/`exclamation triangle` ikon) | `GorunumSaglayici`'a `durum()` → {Normal, Bastik, Hata, Bayat}. `cizDugum`: bastık→üstü çizili gri, hata→kırmızı+⚠, bayat→turuncu+⟳. CAM'de `camDugumRenk` VAR → **genelleştir** | ★★ |
| 9 | **Sağ-tık bağlam menü** | `overlay` + `grp.sagMenu[]` (baslik/simge/tiklandi/tipi:'Ayraç'/'Grup'). "Yeniden Adlandır" hep var | VAR (`BeginPopupContextItem`). Genelleştir: `DokumanNesnesi::baglamMenu()` → `std::vector<MenuOge>` (yeniden adlandır / gizle / sil / odakla + tür-özel) | ★★ |
| 10 | **Sağ butonlar** | `grp.sagButonlar[]` satır-içi hızlı komut (ör. "Konum Ekle" +, "Işık Ekle") | Grup düğümünde `ImGui::SameLine` + `SmallButton` (ikon). Grup türüne göre (Konumlar→"＋Konum", Işıklar→"＋Ortam/＋Yönsel") | ★★ |
| 11 | **Expand/collapse durumu** | `userData.FikoArayuz.listeGoster` +/− ikon | ImGui `DefaultOpen` VAR. Ekle: **düğüm bazlı kalıcı açık/kapalı** (varlık→bool harita) + "Tümünü Genişlet/Daralt" | ★ |
| 12 | **İkon + renk çipi** | `simge` (webp/svg), renk çipi | VAR (`agacSimgesi` + `agacRengiVar/agacRengi` ColorButton). Genişlet: renk çipine **tık → renk seçici** (şimdilik salt gösterim) | ✔→★ |

**Inline slider veri modeli (native):**
```cpp
struct AgacParam {          // AgacDugum'a: std::vector<AgacParam> parametreler
  std::string isim;
  enum class Tur { Cubuk, Sayi, Acilir, Renk, Formul } tur = Tur::Cubuk;
  f64 min = 0, maks = 1, adim = 0.1;
  std::function<f64()> oku;              // canlı değer
  std::function<void(f64)> yaz;          // degisti(v)
  std::vector<std::pair<std::string,f64>> secenekler;  // Acilir
};
```
`cizDugum` açık grup içinde: `for (auto& p : dug.parametreler) { f64 v=p.oku(); if (ImGui::SliderFloat(p.isim, &v, p.min, p.maks)) p.yaz(v); }`.

---

## 2 — CATIA SPECIFICATION TREE DAVRANIŞ SEÇKİSİ → NATIVE PLAN

CATIA envanteri + hangileri alınmalı (gerekçeli):

| CATIA davranışı | Açıklama | Native'e AL? | Gerekçe / plan |
|---|---|---|---|
| **F3 ağaç gizle/göster** | Tree panelini gizler | ★ AL | Panel toggle zaten var; F3 kısayolu bağla |
| **Expand First/Second Level** | Seviye-sınırlı genişletme | ★ AL | Sağ-menü "1. Seviye / 2. Seviye Genişlet" + Collapse All (Ctrl+Shift+C) |
| **In-tree rename** | Çift-tık/yavaş-tık → adı düzenle | ★★★ AL | §1.3 — `adAyarla`. En çok istenen |
| **Reorder (Graph tree Reordering)** | Feature'ı ağaçta taşı, referansa göre | ★★ AL (DAG korumalı) | §2.4 — parametrik feature sırası; RecomputeMotor topolojik geçerlilik |
| **Activate/Deactivate (Bastır)** | Öğeyi hesaptan çıkar (deaktif ikonu) | ★★ AL | `durum=Bastik` → recompute atlar, ağaçta üstü çizili gri. Olay: `FeatureBastirildi` |
| **Define In Work Object** | Aktif gövde (yeşil altı çizgi); yeni feature buraya eklenir | ★★ AL | `Cekirdek::aktifGovde()` VAR mı? yoksa ekle. Ağaçta **altı çizgi + kalın**. Part Design'da zorunlu |
| **Update / Error sembolü** | Kırmızı şimşek (hata), turuncu ⟳ (bayat/güncel değil) | ★★ AL | `durum=Hata/Bayat` rozeti (§1.8). CAM'de op ⏳/⟳/✓ VAR → geneleştir |
| **Edit>Search + tip filtresi** | Ada/tipe göre ara | ★★★ AL | §1.4 arama + tip filtre açılırı (Geometri/Sketch/Ölçüm/Işık…) |
| **Compact tree / Overview** | Küçük harita | ✗ ATLA | ImGui'de düşük getiri; ileride |
| **Graph tree overload uyarısı** | Çok düğümde performans uyarı | ✗ ATLA (şimdilik) | Native ağaç zaten hafif (immediate mode); büyürse tekrar bak |
| **Ağaç yazı ölçeği (Ctrl+wheel)** | Tree font boyutu | ★ AL | Ağaç penceresinde Ctrl+wheel → `ImGui::SetWindowFontScale` (0.7–2.0) |
| **Alt-ağaç zoom/taşıma** | Beyaz dala tıkla → tree pan/zoom | ✗ ATLA | ImGui scroll yeterli; native gerekçesi zayıf |
| **Otomatik expand kapatma** | Düzenleyince ağaç açılmasın | ★ AL | Seçenek: çift-tık düğüm açmasın |

### 2.4 Reorder + DAG koruması (KRİTİK)
Feature reorder parametrik sırayı bozabilir. MEMORY `sistem-modelleme-brep-link` **Faz 3** (feature DAG reorder koruması) notuna uyulur:
- Reorder yalnız **topolojik geçerli** ise izin verilir: taşınan feature'ın tüm bağımlılıkları (`DokumanNesnesi::bagimliliklar()`) yeni konumundan ÖNCE olmalı.
- Geçersizse drop reddedilir + ImGui'de kırmızı "geçersiz sıra" ipucu.
- Geçerliyse `HiyerarsiBilesen`/sıra güncellenir → `ParametreDegisti` yayınla → RecomputeMotor DAG'ı yeniden hesaplar.
- **Yeni olay:** `AgacYenidenSiralandi{u32 varlik}` (enum sonuna).

---

## 3 — IŞIK SİSTEMİ NATIVE TASARIMI

**Anayasa:** `IsikNesnesi : DokumanNesnesi` + `IsikGorunum : GorunumSaglayici`. ECS'te `IsikBilesen` verisi.

### 3.1 Tipler (web `FikoIsikOrtam` / `FikoIsikYonsel` eşleniği)
| Tip | Web karşılığı | Alanlar |
|---|---|---|
| **Ortam (Ambient)** | `FikoIsikOrtam` | renk, siddet(intensity) |
| **Yönsel (Directional)** | `FikoIsikYonsel` | renk, siddet, yon(dir), **kameraTakip** (headlight: kamera önünden ışık — CATIA/FreeCAD tarzı), offsetUzaklik |
| **Nokta (Point)** | (web'de yok, CATIA'da var) | renk, siddet, konum, menzil |

`kameraTakip` web'de zero-alloc `updateLightPosition()` (kamera quaternion'ı ile offset). Native'de `OrbitKamera` yönelimi kullanılır; kamera değişince ışık yönü güncellenir.

### 3.2 ECS + kök
```cpp
struct IsikBilesen {          // Dunya bileşeni
  enum class Tip { Ortam, Yonsel, Nokta } tip = Tip::Yonsel;
  Vec3f renk{1,1,1};
  f32 siddet = 1.0f;
  Vec3f yon{-0.5f,-0.3f,-0.8f};   // Yonsel
  Vec3f konum{10,10,10};          // Nokta
  f32 menzil = 100.0f;            // Nokta
  bool kameraTakip = false;       // Yonsel headlight
  f32 offsetUzaklik = 20.0f;
  bool acik = true;
};
class IsikNesnesi : public DokumanNesnesi {  // turAdi "Işık"
  OzellikSeti ozellikler(Dunya&) override;   // Renk + Siddet(Sayi 0..5) + KameraTakip(Bayrak)
};
class IsikGorunum : public GorunumSaglayici { // agacSimgesi "☀"/"💡", agacRengiVar=true → ışık rengi
  bool gorunur() / gorunurAyarla();           // = acik
};
```

### 3.3 Render entegrasyonu (SABİT ışık → uniform'a bağla)
`model.frag` bugün sabit 2 ışık + ambient. Plan:
1. **UBO ekle** (set 0, binding 0) veya push-constant genişlet: `struct IsikUBO { vec4 ortam; vec4 isik[N]; }` (N=4 başlangıç). Her ışık: `vec4 yonKonum` (w=tip), `vec4 renkSiddet`.
2. `motor/render` yeni tampon: her kare `IsikSistemi` aktif ışıkları toplar → UBO'ya yazar. Işık yoksa → **mevcut sabit varsayılan** (geriye uyum: hiç ışık eklenmemiş belge aynı görünür).
3. `model.frag`: sabit `isik1/isik2/ortam` yerine UBO döngüsü. Fresnel/spekülar korunur. **Fog EKLENMEZ.**
4. Gölge (web `castShadow`, shadow map): **Dalga 2** (Vulkan shadow pass ayrı iş) — ilk dalga sadece diffuse/ambient.

### 3.4 Ağaç temsili
- Kök grup: **"Işıklar"** (Kaynakça altında). Sağ butonlar: `＋Ortam`, `＋Yönsel`, `＋Nokta`.
- Her ışık: ikon (☀/💡/•), renk çipi = ışık rengi, görünürlük = acik.
- Çift-tık → **Işık penceresi** (pencere-içi 3D önizleme opsiyonel): renk, siddet slider, kameraTakip toggle, yön gizmo.
- Inline slider: "Şiddet" (§1.1 AgacParam Çubuk 0–5).
- **Yeni olay:** `IsikEklendi{u32}`, `IsikDegisti{u32}`, `IsikSilindi{u32}` (enum sonuna).

---

## 4 — KONUMLAR (NAMED VIEWS) SİSTEMİ

**Anayasa:** `KonumNesnesi : DokumanNesnesi`. Web `FikoKonumlar`/`FikoKonum` eşleniği.

### 4.1 Veri
```cpp
struct KonumVeri {            // kamera pozu snapshot
  Vec3f odak;                 // OrbitKamera.odak()
  Quatf yonelim;              // OrbitKamera.yonelim()
  f32 mesafe;                 // OrbitKamera.mesafe()
  bool ortografik;
  std::string isim, aciklama;
};
class KonumNesnesi : public DokumanNesnesi { // turAdi "Konum"
  KonumVeri veri;
  OzellikSeti ozellikler(Dunya&) override;   // İsim(Metin) + Açıklama(Metin)
};
```
Not: Web matriks tabanlı kaydeder; native `OrbitKamera` zaten `odak/yonelim/mesafe/ortografik` ayrık tutuyor → doğrudan snapshot. `oran/zoom` gerekmez (orbit modeli).

### 4.2 Kaydet / Çağır (EASED animasyon)
- **Kaydet:** "＋Konum" → `KonumVeri` = kameranın anlık `odak/yonelim/mesafe/ortografik`. `Fikonum.N` otomatik ad (web `FikoKonum.SAYAC`).
- **Çağır (çift-tık / tık):** `OrbitKamera` zaten **eased hedef** kullanıyor (`hedefOdak_/hedefMesafe_/hedefYonelim_`) → `kamera.hedefOdak_=v.odak; hedefMesafe_=v.mesafe; yonelimeGit(v.yonelim); ortografikAyarla(v.ortografik)`. Yumuşak geçiş bedavaya gelir (web'in TWEEN slerp mantığının native karşılığı). **Sinematik kuyruk** (CAM sim / sunum) ile birleşir.
- **Sabit görünümler:** `HizliGorunum` 7'lisi (On/Arka/Sol/Sag/Ust/Alt/Izometrik) "Konumlar" altında **hazır** düğümler olarak listelenebilir (web `olusturSabitGorunumler` mantığı) → tek yerden tüm görünümler.

### 4.3 Ağaç temsili
- Kök grup: **"Konumlar"** (ikon 📷). Sağ buton: `＋Konum`.
- Her konum: ikon 📷, çift-tık→git, tık→git (web davranışı), sağ-menü: **Güncelle** (kamerayı bu konuma yaz), **Yeniden Adlandır**, **Sil**.
- **Yeni olay:** `KonumEklendi{u32}`, `KonumSilindi{u32}`, `KonumaGidildi{u32}` (enum sonuna).

---

## 5 — ETİKETLER (ANNOTATIONS)

Web `FikoEtiketler` **10 tip** annotation (envanter):

| # | Tip | Web metod | userData alanları | Dalga |
|---|---|---|---|---|
| 1 | Metin Notu (text) | `ekleMetinNotu` | icerik, renk, boyut | B |
| 2 | Boyut Ölçüsü (dimension) | `ekleBoyutOlcusu` | baslangic, bitis, deger, birim | (Ölçüm sistemiyle örtüşür → §6) |
| 3 | Ok İşaretçi (leader) | `ekleOkIsaretci` | baslangic, bitis, metin | B |
| 4 | Bayrak (flag) | `ekleBayrak` | pozisyon, metin, renk | B |
| 5 | Geometrik Tolerans (tolerance) | `ekleGeometrikTolerans` | toleransTipi, deger, datum | C |
| 6 | Datum Özellik (datum) | `ekleDatumOzellik` | datumHarfi, hedefYuzey | C |
| 7 | Yüzey Kalitesi (surface) | `ekleYuzeyKalite` | raValue, islemTipi | C |
| 8 | Kaynak Sembolü (weld) | `ekleKaynakSembol` | kaynakTipi, boyut, uzunluk | C |
| 9 | CSS3D Annotation | `ekleCSS3DAnnotation` | baslik, aciklama, connectionPoints | B |
| 10 | Smart Point 3D | `ekleSmartPoint3D` | baslik, kategori, ikon, renk, pencereBoyut | B |

**Native plan:** `EtiketNesnesi : DokumanNesnesi` (tip enum + POD alanlar). Kök grup **"Etiketler"** (ikon 🏷). Render: 3D dünyada ImGui overlay (ekran-uzayı text via `ImDrawList` + world→screen projeksiyon) veya billboard mesh. GD&T sembolleri (5–8) CATIA MBD kapsamı → **Dalga C** (metin/ok/bayrak/smartpoint önce). Ölçü (tip 2) native `OlcumSistemi`'ne delege (mükerrer kurma yok).
- **Yeni olay:** `EtiketEklendi{u32}`, `EtiketSilindi{u32}` (enum sonuna).

---

## 6 — TAM AĞAÇ İÇERİK ENVANTERİ (mimari anayasa: HER sistem ağaçta)

> Kullanıcı: "ölçümler de ağaçta olsun; hepsini saymamı bekleme, sen bul." İlke: **her `DokumanNesnesi`/sistem ürün ağacında temsil edilir.** Aşağıdaki tam envanter native tarafı tarayarak + web'i referans alarak çıkarıldı.

### 6.1 Grup envanteri (ikon / boş-durum / sağ-menü / çift-tık hedefi / görünürlük-renk)

| Grup | İkon | Kaynak (native) | Ağaçta VAR? | Boş durum | Sağ-menü asgari | Çift-tık hedefi | Görünürlük | Renk çipi |
|---|---|---|---|---|---|---|---|---|
| **Geometri gövdeleri** | ▪/geom | ECS `NesneKok` + `GeometriNesne` | ✔ VAR | — | Yeniden Adlandır / Gizle / Sil / Odakla | Sığdır | ✔ | ✔ |
| **Sketch'ler** | ✎ | `SketchNesne` | ✔ VAR | "eskiz yok" | + Düzenle | **Sketch düzenleme kipi** (VAR) | ✔ | — |
| **Part Design Feature** (Pad/Pocket/Fillet…) | feature | `parca/feature.hpp` | ⚠ KONTROL: ECS'te NesneKok'lu mu? Değilse **ağaca ekle** | "feature yok" | Düzenle / **Bastır** / **Aktif Gövde Yap** / Sil / **Reorder** | Feature düzenle penceresi | ✔ | — |
| **GSD Geometrical Set** (Tel/Yüzey) | 〜/▱ | `gsd/gsd_feature.hpp`, `DugumTip::Tel/Yuzey` | ✔ VAR (referans/gsd düğümleri) | "GSD yok" | Düzenle / Gizle / Sil | GSD feature penceresi | ✔ | ✔ |
| **Referanslar** (Düzlem/Eksen/Origin) | ◱/⊥ | `referans_nesne.hpp` | ✔ VAR | — | Gizle / Sil | — | ✔ | — |
| **CAM: Manufacturing Program** | 🗂 | `cam_urun_agaci` CAM_PROGRAM | ✔ VAR (sanal) | "operasyon yok" | — | — | — | — |
| **CAM: Part Operation** | ⚙ | CAM_PARTOP | ✔ VAR | — | Düzenle / Sil | **Part Op penceresi** (VAR) | — | — |
| **CAM: Machining Axis** | ✛ | CAM_AXIS | ✔ VAR | — | Düzenle | Part Op penceresi | — | — |
| **CAM: Stok / Fikstür** | ▦ | CAM_STOK | ✔ VAR | "stok tanımsız" | Düzenle | Part Op penceresi | ✔(ileride) | — |
| **CAM: Operasyon** (kaba/finiş…) | ▣ | CAM_OP | ✔ VAR | — | Düzenle/Hesapla/**Bastır**/Takım Değiştir/Sil | **Op penceresi** (VAR) | — | ✔(durum rengi) |
| **CAM: Takım** (T1..Tn) | 🔧 | CAM_TAKIM | ✔ VAR | — | Takım Değiştir | **Takım penceresi** (`cam_takim_penceresi_spec`) | — | — |
| **CAM: Nc Yol** | 〰 | CAM_YOL | ✔ VAR | — | — | Op penceresi | — | — |
| **Ölçümler** ⟵ EKSİK | 📏 | `OlcumSistemi` (`Olcum`, DokumanNesnesi DEĞİL) | ✗ **EKLE** | "ölçüm yok" | Yeniden Adlandır / Gizle / **Odakla** / Sil / Tümünü Sil | **değere zoom** (Odakla) | ✔ | ✔ (altın #FFD700, web) |
| **Konumlar** ⟵ EKSİK | 📷 | (yeni `KonumNesnesi`) §4 | ✗ **EKLE** | "kayıtlı konum yok" | Güncelle / Yeniden Adlandır / Sil | **konuma git (eased)** | — | — |
| **Işıklar** ⟵ EKSİK | ☀ | (yeni `IsikNesnesi`) §3 | ✗ **EKLE** | (varsayılan sabit ışık) | Gizle / Düzenle / Sil | Işık penceresi | ✔ | ✔ (ışık rengi) |
| **Etiketler** ⟵ EKSİK | 🏷 | (yeni `EtiketNesnesi`) §5 | ✗ **EKLE** | "etiket yok" | Yeniden Adlandır / Gizle / Sil | Etiket düzenle | ✔ | ✔ (etiket rengi) |
| **Kamera Kontrolleri** ⟵ EKSİK | 📷 | web `FikoKaynakca.kameraKontrolleri` | ✗ **EKLE** | (hep dolu: 3 slider) | — | — | — | — |
| **Parametreler + Bağıntılar** | ƒ(x) | `parametrik_sistem_blueprint` (D2) | ⚠ D2 dalga | "parametre yok" | Yeniden Adlandır / f(x) Düzenle / Sil | Formül editörü | — | — |
| **Malzemeler** (preset) | ⬤ | (öneri — yok) | ✗ öneri | "malzeme atanmadı" | Ata / Düzenle | Malzeme penceresi | — | ✔ |
| **Kesitler** (kesit düzlemleri) | ⊘ | `web_aktarim_master_plan` §1 KesitSistemi | ⚠ o iş dalgası | "kesit yok" | Düzenle / Gizle / Sil | Kesit penceresi | ✔ | — |
| **Analizler** (draft/undercut/et-kalınlığı) | 🔬 | `web_aktarim_master_plan` §2 | ⚠ o iş dalgası | "analiz yok" | Yenile / Gizle / Sil | Analiz penceresi | ✔ | ✔(gradient) |
| **Kinematik Mekanizmalar** | ⚙⟳ | (gelecek) | ✗ gelecek | "mekanizma yok" | Düzenle / Oynat | Kinematik penceresi | — | — |
| **Döküm Projesi** | 🫗 | `dokum_sim_blueprint` | ⚠ o iş dalgası | "döküm tanımsız" | Düzenle | Döküm penceresi | — | — |

**"⟵ EKSİK" = bu spec'in getirdiği. "⚠" = başka blueprint'in dalgası; ağaç şeması yeri şimdiden ayrılır.**

### 6.2 Ölçümlerin ağaca alınması (native, web `FikoKaliciOlcumler` eşleniği)
`OlcumSistemi::hepsi()` `Olcum` döndürür ama bunlar `DokumanNesnesi` değil. İki yol:
- **(A önerilen)** Ağaç sağlayıcısı `olcumAgacTopla(cekirdek, olcumSis, kok)` → CAM gibi **sanal düğümler** (`AgacDugum.varlik=VARLIK_YOK`, yeni `olcumKimlik` alanı veya mevcut `camKimlik`'i genelleştir → `ekstraKimlik/ekstraTip`). `cizDugum` ölçüm dalı: tık→sahnede vurgula, çift-tık→**değere zoom** (`OlcumSistemi` `Olcum.a/b` orta noktaya `kamera.sigdir`), sağ-tık→sil/yeniden adlandır, görünürlük toggle.
  - Avantaj: `Olcum` struct'ı olduğu gibi kalır (mükerrer nesne kurma yok).
- **(B)** `OlcumNesnesi : DokumanNesnesi` sarmalayıcı. Daha "anayasal" ama her ölçüm için nesne+bileşen maliyeti.
- **Karar:** A (CAM ile aynı sanal-düğüm kalıbı; `AgacDugum`'daki `camKimlik/camTip`'i `ekstraKimlik/ekstraTip {CAM_*, OLCUM}` olarak genelleştir).
- **Olay:** `OlcumEklendi/OlcumSilindi` **zaten var** (olay.hpp) → ağaç bunları dinleyip yenilenir.

### 6.3 EKSİKSİZ AĞAÇ ŞEMASI (tek hiyerarşi)
```
📁 Ürün (belge kökü)
├─ 📐 Origin
│   ├─ ◱ XY Düzlemi   ⊥ XZ Düzlemi   ◱ YZ Düzlemi
│   └─ ⊥ X/Y/Z Ekseni
├─ 🧊 Gövde (Part Body)              [In Work Object → altı çizgi]
│   ├─ ✎ Sketch.1
│   ├─ ▣ Pad.1        [Reorder / Bastır / Hata rozeti]
│   ├─ ▣ Pocket.1
│   └─ ◠ Fillet.1
├─ 〜 Geometrical Set (GSD)
│   ├─ 〜 Tel/Spline
│   └─ ▱ Yüzey
├─ ⬤ Malzemeler            (öneri)     [renk çipi]
├─ 🗂 Manufacturing Program (CAM)
│   └─ ⚙ Part Operation.1
│       ├─ ✛ Machining Axis
│       ├─ ▦ Stok / Fikstür
│       └─ ▣ Kaba İşleme.1
│           ├─ 🔧 T1  Ø10 Düz Freze    → Takım penceresi
│           └─ 〰 Nc Yol               ⏳/⟳/✓ durum
├─ ⊘ Kesitler              (o dalga)   [görünürlük]
├─ 🔬 Analizler            (o dalga)   [görünürlük + gradient renk]
├─ ƒ(x) Parametreler+Bağıntılar (D2)
└─ 📦 KAYNAKÇA
    ├─ 📷 Konumlar          [＋Konum]   → çift-tık: eased git
    │   ├─ 📷 İzometrik / Ön / Üst … (sabit)
    │   └─ 📷 Fikonum.1 (kullanıcı)
    ├─ ☀ Işıklar            [＋Ortam ＋Yönsel ＋Nokta]  [renk çipi + görünürlük]
    │   ├─ ☀ Ortam Işığı
    │   └─ 💡 Yönsel Işık   [KameraTakip ☑]  [Şiddet ▬slider]
    ├─ 📷 Kamera Kontrolleri            [inline slider]
    │   ├─ ▬ Pan Hızı      (0.1–10)
    │   ├─ ▬ Döndürme Hızı (0.1–20)
    │   └─ ▬ Zoom Hızı     (0.1–15)
    ├─ 📏 Ölçümler          → çift-tık: değere zoom  [görünürlük + altın renk]
    │   └─ 📏 Ölçüm_1  123.45 mm
    ├─ 🏷 Etiketler         → metin/ok/bayrak/smartpoint (Dalga B), GD&T (C)
    └─ 🫗 Döküm Projesi     (o dalga)
```

### 6.4 CATIA'da standart olup bizde eksik (işaretli)
- **Applications / Product** kökü (üst düzey belge kökü) — native'de örtük; açık kök düğüm eklenebilir.
- **Constraints** (kısıt) düğümü — sketch kısıtları ağaçta ayrı; native sketch içi (D2).
- **Annotations Set** — §5 Etiketler karşılar.
- **Ordered Geometrical Set** — GSD sıralı varyant (ileride).
- **Publications** (dış referans yayınları) — assembly bağlamı (gelecek).

---

## 6.5 — SAHNE-İÇİ ÜRÜN AĞACI (CATIA P2 MODU)

CATIA P2 "power input" platformunda specification tree 3D viewport **İÇİNDE** çizilir (dekorsuz overlay, model üstünde). Odak ağaç ile model arasında geçiş yapar: ağaç odaktayken zoom/pan **ağacı** ölçekler/kaydırır (model değil), tekrar geçişte model kontrolü döner.

### 6.5.1 CATIA davranışı (araştırma teyidi)
- **Shift+F3** (veya alt-sağ eksen sistemine / boş ağaç dalına tık) → ağaç ile geometri odağı arasında geçiş.
- Ağaç odaktayken: **MMB+RMB** ağacı zoomlar, yukarı/aşağı kaydırır; boş dala tıkla → ağaç ölçekleme modu; "Fit All In" ağacı sığdırır.
- Geometri odaktayken: **Ctrl+wheel** ağaç yazı boyutunu değiştirir (ağaç panel/overlay konumundan bağımsız).
- Model kontrolleri ağaç odaktayken kilitli (kullanıcı yanlışlıkla modeli döndürmez).

### 6.5.2 Native mod: "Ağaç: Panel / Sahne-içi"
İki mod, **tek kaynak** `cizDugum` (kod kopyalanmaz):
| Mod | Yerleşim | Durum |
|---|---|---|
| **Panel** (mevcut) | Ayrı dockable ImGui penceresi "Ürün Ağacı" | KALIR (varsayılan) |
| **Sahne-içi (P2)** | 3D Görünüm pencere sınırlarına kenetli, dekorsuz saydam overlay child; model üstünde | YENİ |

Toggle: **Görünüm menüsü → "Ağaç: Sahne-içi"** (onay kutusu) + kısayol. Aynı `agacKok` toplanır, aynı `cizDugum` çağrılır; sadece **kapsayıcı pencere** ve **odak/ölçek durumu** değişir.

### 6.5.3 Overlay pencere (mevcut HUD kalıplarıyla)
main.cpp'de hazır kalıplar: `SetNextWindowBgAlpha` (0.45–0.96 kullanımları var), viewport-anchored `ImGui::GetWindowDrawList()` overlay'ler (pusula, CAM/ölçüm/GSD HUD, sketch overlay). Sahne-içi ağaç bunları izler:
```cpp
// 3D Görünüm penceresi içinde, sol-üst köşeye kenetli dekorsuz child:
ImGui::SetNextWindowPos({vpRectMinX + 8, vpRectMinY + 8});
ImGui::SetNextWindowBgAlpha(agacOdakta ? 0.55f : 0.30f);  // odaktayken biraz belirgin
ImGuiWindowFlags bayrak = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove |
                          ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoSavedSettings |
                          (agacOdakta ? 0 : ImGuiWindowFlags_NoInputs);  // odak yoksa geçirgen
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, agacOdakta ? 2.0f : 0.0f);
if (agacOdakta) ImGui::PushStyleColor(ImGuiCol_Border, /*cyan çerçeve vurgu*/);
ImGui::BeginChild/Begin("##agacSahneIci", {agacGenislik, avail.y - 16}, ...);
ImGui::SetWindowFontScale(agacSahneOlcek);      // ağaç zoom (P2)
for (auto& k : agacKok) cizDugum(k);            // ← TEK KAYNAK, aynı fonksiyon
ImGui::SetWindowFontScale(1.0f);
```
- **Odak göstergesi:** ağaç odaktayken cyan çerçeve vurgusu (border) + hafif belirginleşen arka plan. Model "karartma" hissi **opsiyonel** çok hafif bir viewport karartma quad'ı (fog DEĞİL — sadece alpha overlay); istenirse kapalı.

### 6.5.4 Ağaç zoom / pan (sahne-içi mod)
- **Zoom:** `agacSahneOlcek` (0.6–2.5) — ağaç odaktayken **wheel** (CATIA'da MMB+RMB; native'de wheel daha doğal) → `SetWindowFontScale`. Geometri odaktayken **Ctrl+wheel** yine yazı ölçeği (§2 ile birleşir, iki modda da).
- **Pan:** ağaç odaktayken sol-tık sürükle → `ImGui::SetScrollX/Y` delta (ağacı kaydır). Overlay yüksekliği viewport'u aşarsa dikey scroll.
- **Fit:** "Ağacı Sığdır" → ölçek 1.0 + scroll 0.

### 6.5.5 Odak geçişi + model kilidi
```
agacOdakta (bool) durumu:
- Shift+F3 → agacOdakta = !agacOdakta
- Sahne-içi ağaçta bir düğüme/boş alana tık → agacOdakta = true
- Viewport'ta modele/boşluğa tık (ağaç dışı) → agacOdakta = false
- ESC → agacOdakta = false

agacOdakta iken: viewport orbit/pan/zoom girişi YOK SAYILIR (vpHover kontrolüne
`&& !agacOdakta` eklenir). Böylece zoom/pan/döndürme AĞACA gider, modele değil.
```
- **Çakışma kontrolü:** main.cpp'de F3/Shift+F3 **bağlı DEĞİL** (grep: hiç F-tuşu shortcut yok, sadece Escape). Güvenli.
- **Kısayol önerisi:** `Shift+F3` = odak toggle (CATIA birebir); `F3` = ağaç modunu Panel↔Sahne-içi değiştir (CATIA'da F3 tree gizle/göster; native'de panel toggle zaten var → F3'ü mod-değiştir'e ata veya panel gizle'de tut, kullanıcı tercihine bırak — spec önerisi: **F3=Panel/Sahne-içi mod, Shift+F3=odak toggle**).

### 6.5.6 Tek-kaynak garantisi
- `cizDugum` lambda AYNEN iki modda çağrılır (Panel `ImGui::Begin` içinde / Sahne-içi overlay child içinde). Ağaç toplama (`cekirdek.agac().topla`) ve düğüm çizimi TEK yerde. Yalnız sarmalayıcı (Begin/BeginChild + font scale + odak border) farklı.
- **Yeni durum alanları (main döngüsü):** `bool agacSahneIci=false, agacOdakta=false; f32 agacSahneOlcek=1.0f;`

---

## 7 — UYGULAMA ADIMLARI + DOSYA LİSTESİ

### 7.1 Dalgalar
**Dalga A — Ağaç profesyonelleştirme (kod eklemeden mevcut `cizDugum`):**
1. `AgacDugum`'a `std::vector<AgacParam> parametreler` + `ekstraKimlik/ekstraTip` (camKimlik/camTip genelleştir) — `kayit.hpp`.
2. `main.cpp cizDugum`: inline slider (§1.1), in-tree rename F2 (§1.3), arama kutusu+filtre (§1.4), ata-yolu vurgu + auto-scroll (§1.6), durum rozeti genelleştir (§1.8), Ctrl+wheel font ölçek (§2).
3. `GorunumSaglayici`'a `durum()` + `siralanabilir()` (+ opsiyonel `baglamMenu()`).

**Dalga B — Kaynakça kökü + Konumlar + Işıklar + Kamera Kontrolleri:**
4. `motor/sahne` (veya yeni `motor/kaynakca`): `KonumNesnesi`, `IsikNesnesi`+`IsikBilesen`, `IsikSistemi`. Kaynakça kök grubu sağlayıcısı.
5. `motor/render`: `IsikUBO` + `model.frag` uniform'a bağla (§3.3), varsayılan geriye-uyum.
6. `main.cpp`: Kaynakça ağaç sağlayıcısı `kaynakcaAgacTopla`; ışık/konum pencereleri; Kamera Kontrolleri inline slider (web `FikoKaynakca` birebir: panSpeed/rotateSpeed/zoomSpeed → `OrbitKamera`).
7. Ölçümler ağaç sağlayıcısı `olcumAgacTopla` (§6.2 A): sanal düğüm + zoom/vurgu/sil.

**Dalga C — Etiketler (metin/ok/bayrak/smartpoint) + GD&T (sonra) + reorder/bastır/aktif-gövde:**
8. `EtiketNesnesi` + overlay render. Reorder DAG koruması (§2.4). Bastır/In-Work-Object (Part Design bağlamı).

**Dalga D — Sahne-içi ağaç (CATIA P2 modu, §6.5):**
9. main.cpp: `bool agacSahneIci/agacOdakta`, `f32 agacSahneOlcek` durumları; Görünüm menüsü "Ağaç: Sahne-içi" toggle; F3=mod, Shift+F3=odak toggle kısayolları.
10. `cizDugum`'u iki sarmalayıcıdan (Panel `Begin` / Sahne-içi dekorsuz overlay child + `SetWindowFontScale` + odak border) TEK KAYNAK olarak çağır.
11. Odak kilidi: viewport orbit/pan/zoom girişine `&& !agacOdakta` guard'ı; ağaç zoom (wheel→font scale) + pan (drag→scroll) + "Ağacı Sığdır".

### 7.2 Kilitlenecek dosyalar
- `uygulama/fikocad/main.cpp` (`cizDugum` ~2521–2634 genişleme; Kaynakça/ölçüm sağlayıcı kaydı ~489; **sahne-içi ağaç modu** — `cizDugum` iki sarmalayıcıdan tek-kaynak çağrı, odak/kilit durumu, F3/Shift+F3, viewport `vpHover && !agacOdakta` guard'ı; overlay kalıbı: mevcut pusula/HUD/`SetNextWindowBgAlpha` satırları).
- `motor/cekirdek/include/fiko/cekirdek/kayit.hpp` (`AgacDugum` + `AgacParam`).
- `motor/cekirdek/include/fiko/cekirdek/olay.hpp` (**enum SONUNA**: `IsikEklendi/IsikDegisti/IsikSilindi`, `KonumEklendi/KonumSilindi/KonumaGidildi`, `EtiketEklendi/EtiketSilindi`, `AgacYenidenSiralandi`).
- `motor/sahne/…` (veya yeni modül): `KonumNesnesi`, `IsikNesnesi`, `IsikSistemi`, ölçüm ağaç sağlayıcısı.
- `motor/render/shader/model.frag` + `motor/render/src/vulkan_baglam.cpp` (IsikUBO — ışık uniform, KİLİT).
- `motor/render/include/fiko/render/orbit_kamera.hpp` (Konumlar `yonelimeGit`/hedef alanlarını okur — zaten hazır).

### 7.3 Makro / Plugin / Olay (doğuştan — anayasa)
Her yeni sistem `Cekirdek` registry'ye eklenince:
- **Makro:** `fiko.sahne.isikEkle/konumKaydet/konumaGit/etiketEkle` Lua API (undo-uyumlu, mevcut `fiko.sahne` kalıbı).
- **Plugin:** `IsikSistemi/KonumSistemi` birer `Modul` (kur/kaldir); `AgacSaglayiciKaydi`'na sağlayıcı ekler.
- **Olay:** yukarıdaki struct'lar (enum sonuna), `diske yazma` bayrağı yüksek-frekans olanlar için kapalı (`KonumaGidildi`, `IsikDegisti` gibi).

---

## 8 — ÖZET KARARLAR
1. **Işık:** shader'daki sabit aydınlatma → `IsikUBO`; `IsikNesnesi`/`IsikBilesen` (Ortam/Yönsel+kameraTakip/Nokta); ağaçta "Işıklar" grubu. Geriye-uyum: ışıksız belge = mevcut görünüm. **Fog YOK.**
2. **Konumlar:** `KonumNesnesi` (odak/yonelim/mesafe/ortografik) — `OrbitKamera` **eased hedef** ile animasyonlu git; sabit 7 görünüm + kullanıcı konumları.
3. **Ölçümler ağaca:** CAM sanal-düğüm kalıbı (`ekstraTip=OLCUM`), `Olcum` struct'ı korunur; çift-tık→değere zoom.
4. **Ağaç incelikleri:** inline slider, F2 rename, arama/filtre, ata-yolu vurgu, durum rozeti, reorder (DAG korumalı), In-Work-Object, font ölçek.
5. **Etiketler:** 10 tipin envanteri; metin/ok/bayrak/smartpoint önce (B), GD&T sonra (C).
6. **Tam ağaç:** §6.3 tek şema — mevcut (geometri/sketch/GSD/CAM) + eksik (Ölçüm/Konum/Işık/Etiket/Kamera Kontrolleri) + gelecek (Kesit/Analiz/Parametre/Malzeme/Döküm/Kinematik) yerleri ayrılmış.

**Kaynaklar (CATIA araştırması):**
- [Managing the Design Tree in CATIA V5-6 and 3DEXPERIENCE](https://www.cati.com/blog/managing-the-design-tree-in-catia-v5-6-and-3dexperience/)
- [Deactivating Elements (CATIA doc)](http://catiadoc.free.fr/online/cfyug_C2/cfyugdeactivate.htm)
- [CATIA Tree manipulation – resizes, moves, hide and scrolls](https://catiav5v6tutorials.com/catia-v5-tutorials/catia-tree-manipulation-resizes-moves-hide-and-scrolls/)
- [Expanding and Collapsing the Specification Tree](http://catiadoc.free.fr/online/basug_C2/basugbt0508.htm)
- [Common CATIA V5 Shortcuts & Customization (Shift+F3 ağaç/geometri odak)](https://edstechnologies.com/blog/common-catia-v5-shortcuts-customization/)
- [Some CATIA HOTKEYs description (Eng-Tips)](https://www.eng-tips.com/forums/560/faqs/1319)
