#pragma once // ── Pafta (teknik resim) modu UI durumu ────────────────────────────────────── // Sketcher'ın (SketchUIDurum) ikizi ama MİNİMAL: pafta modunda toolbar/panel yok — // sayfa doğrudan viewport'ta çizilir, niyet çift-tık + bağlam menüsünden okunur. // Moda girerken 3B bağlam (workbench + kamera) yedeklenir, çıkışta AYNEN geri gelir. #include #include #include #include #include "fiko/cekirdek/cekirdek.hpp" #include #include #include "fiko/pafta/pafta_kesit.hpp" #include "fiko/pafta/pafta_olcu.hpp" #include "fiko/pafta/pafta_uretim.hpp" namespace fiko { struct PaftaUIDurum { Varlik aktifPafta = VARLIK_YOK; // düzenlenen pafta (VARLIK_YOK = 3B moddayız) std::string oncekiWb; // moda girmeden önceki workbench (çıkışta geri) bool kamVar = false; // kamera anlık görüntüsü geçerli mi f32 kamYon[4] = {0, 0, 0, 1}; f32 kamOdak[3] = {0, 0, 0}; f32 kamMesafe = 9.0f, kamFov = 45.0f; bool kamOrtho = false; // Sayfa görünümü: kaydırma + yakınlaştırma (ekran px / çarpan). f32 sayfaPanX = 0, sayfaPanY = 0, sayfaZoom = 1.0f; // HLR çizim önbelleği (görünüm kimliği → çizim) + üretimi süren görünümler. // Önbellek UI durumundadır: belge verisi değil, türev — kaydedilmez. pafta::CizimOnbellek onbellek; std::unordered_set uretimde; // Worker sonucu PAYLAŞIMLI kutuya yazılır, çizim her kare "biten"leri toplar. // Finalize lambda'sı durum/bağlam REFERANSI yakalamaz: pencere iş sürerken // kapanırsa dangling olurdu (MDI ek pencere yıkımı). struct BeklenenCizim { u32 gorunumKimlik = 0; std::shared_ptr sonuc; std::shared_ptr> bitti; }; std::vector beklenenler; // ---- Ölçülendirme (DM: toolbar yok, bağlam menüsünden başlar) ---- // Tutunma adayları görünüm başına ÖNBELLEKLİ (imza + liste): her kare BREP // taraması yapılmaz, çizim imzası değişince tazelenir. std::unordered_map>> tutunmaOnbellek; u32 seciliOlcu = 0; u32 menuOlcu = 0; // sağ-tık menüsünün hedef ölçüsü u32 olcuSurukle = 0; // ofseti sürüklenen ölçü int olcuFaz = 0; // 0 yok · 1 ilk nokta bekleniyor · 2 ikinci · 3 ofset u32 olcuGorunum = 0; // ölçünün ekleneceği görünüm pafta::OlcuTip olcuTip = pafta::OlcuTip::Dogrusal; Vec2d olcuP1{0, 0}, olcuP2{0, 0}; // görünüm-yerel yakalanan noktalar // Tarama (hatch) çizgileri: görünüm başına önbellekli — anahtar (çizim imzası, // açı, aralık). Kontur değişmedikçe scanline yeniden koşmaz (sıcak yol temiz). struct TaramaKayit { u64 imza = 0; f64 aci = 0, aralik = 0; std::vector> cizgiler; }; std::unordered_map taramaOnbellek; // ---- Detay alma (bağlam menüsü → merkez tıkı + yarıçap tıkı) ---- int detayFaz = 0; // 0 yok · 1 merkez bekleniyor · 2 yarıçap bekleniyor u32 detayAna = 0; Vec2d detayMerkez{0, 0}; // ana görünüm-yerel // ---- Kesit alma (bağlam menüsü → iki tık) ---- int kesitFaz = 0; // 0 yok · 1 ilk nokta · 2 ikinci nokta bekleniyor u32 kesitAna = 0; // kesit çizgisinin çizildiği ANA görünüm Vec2d kesitP1{0, 0}; // ana görünüm-yerel ilk nokta // Undo: düzenleme başlangıcında alınan ÖNCE kopyası (bkz. PaftaDuzenIslem). std::shared_ptr duzenOncesi; std::shared_ptr menuOncesi; // bağlam menüsü açılış kopyası (ayrı — sürüklemeyle çakışmaz) bool menuDegisti = false; // bağlam menüsünde en az bir değişiklik yapıldı bool dxfIstek = false; // bağlam menüsü 'DXF dışa aktar' → bir sonraki karede dialog u32 seciliGorunum = 0; // birincil seçim (menü/tekil işlemler) std::unordered_set seciliKume; // çoklu seçim (Ctrl+tık toggle); sürükleme hepsini taşır u32 menuGorunum = 0; // sağ-tık bağlam menüsünün hedefi (0 = boş sayfa menüsü) u32 surukleGorunum = 0; // sürüklenen görünüm (0 = yok) Vec2d surukleKapma{0, 0}; // tıklama anında imleç−konum farkı (sayfa mm) bool modda() const { return aktifPafta != VARLIK_YOK; } }; } // namespace fiko