#pragma once #include #include #include #include "belge.hpp" #include "belge_ciz.hpp" #include "fiko/girdi/nav_kip.hpp" #include "isik_durum.hpp" #include "navigasyon_ghost.hpp" namespace fiko { class ImGuiKatman; // ============================================================================ // BelgeYonetici — MDI Dalga 2 (docs/mdi_blueprint.md): ek belgeler kendi // penceresinde (###belge_) kendi ViewportHedef + CizimOnbellek + kamera // scope'uyla yaşar. Ana belge main.cpp'deki yerleşik "3D Görünüm" penceresinde // kalır (zengin girdi/panel entegrasyonu); ek belgeler CATIA temel navigasyon // (döndür/zoom/pan/tekerlek/çift-tık sığdır) + hover + tık seçimi alır. // Paneller/komutlar aktif-belge yönlendirmesi Dalga 3. // ============================================================================ struct BelgeKaydi { u32 kimlik = 0; // pencere kimliği (###belge_ sabit) std::string ad; // "Belge 2" — başlıkta görünür std::unique_ptr belge; std::unique_ptr hedef; CizimOnbellek cizim; u64 doku = 0; // ImGui doku kaydı (ImTextureID) VkImageView kayitliGorunum = VK_NULL_HANDLE; bool acik = true; // pencere görünür (kapatınca belge yaşar) // Pencere-yerel görünüm/girdi durumu (kareler arası taşınır) u32 istG = 960, istY = 600; // Image alanının istediği hedef boyutu f32 rectMinX = 0, rectMinY = 0; // Image sol-üst (mutlak ekran) bool hover = false; // imleç Image üstünde mi f32 sonEnBoy = 16.0f / 9.0f, sonG = 960, sonY = 600; f32 imlecX = 0, imlecY = 0; // pick imleci (Image-yerel piksel) int kameraKip = -1; // -1 yok, 0 döndür, 1 zoom, 2 pan (cache) girdi::NavKipTakip navKip; // merkezi kip durum makinesi (kameraKip = int karşılığı) bool kameraKullandi = false; // bu sürüklemede kamera oynadı (tık seçimini bastır) f32 solBasX = 0, solBasY = 0; // sol basış (mikro-tık = seçim) NavGhostDurum navGhost; // pencere-yerel navigasyon ghost runtime (config global'den) }; class BelgeYonetici { public: // Yeni boş belge: origin datum'ları kurulu, kendi Cekirdek/Sahne/kamera scope'u. BelgeKaydi& yeniBelge(VulkanBaglam& vulkan, const std::string& shaderDizin); std::vector>& hepsi() { return kayitlar_; } private: std::vector> kayitlar_; u32 sonrakiKimlik_ = 2; // 1 = ana belge (main.cpp yerleşik pencere) }; // Kare başı (komut tamponu AÇILMADAN): hedefleri istenen boyuta getir, kamera // yumuşatmasını ilerlet, ImGui doku kayıtlarını yenile (boyutlama görünümü değiştirir). // boyutlaniyor: ana pencere sürüklenerek boyutlandırılıyorsa hedef resize'ı ertele // (kare başı ek vkDeviceWaitIdle'dan kaçın; sürükleme bitince tam boyut). void belgeHedefleriniGuncelle(BelgeYonetici& yon, ImGuiKatman& arayuz, VulkanBaglam& vulkan, f32 dt, bool boyutlaniyor); // ImGui aşaması: açık belge pencerelerini çiz — Image + CATIA kamera jestleri // (orta pan / orta+sağ döndür / sol+sağ zoom / tekerlek / çift-tık sığdır) + // mikro sol-tık seçimi. Girdi durumu kayda yazılır (pick koordinatı dahil). void belgePencereleriCiz(BelgeYonetici& yon); // Komut tamponu aşaması: açık belgelerin pick + sahne geçişlerini kaydet. void belgeleriKaydet(BelgeYonetici& yon, VulkanBaglam& vulkan, BoruHatlari& hatlar, const IsikDurum& isikDurum, VkCommandBuffer kb, f32 zaman, int kare); } // namespace fiko