#pragma once // ── 3B PMI/GD&T overlay çizimi ─────────────────────────────────────────────── // Billboard kipi: çerçeve EKRAN uzayında kurulur (doğal zoom-sabit boy) — çapa // dünya noktası `ekrana` ile projekte edilir, kutu+lider piksel koordinatında // çizilir (olcumOverlayCiz kardeş kalıbı; yeni Vulkan pipeline YOK). // // SICAK YOL: kare başına yalnız N çapa projeksiyonu; FCF metni sürüm-anahtarlı // önbellekten (tahsissiz), çözüm/refCoz burada ASLA çağrılmaz (PmiSistemi olayla). #include #include #include #include "fiko/core/temel.hpp" #include #include "fiko/core/mat/vec.hpp" #include "fiko/pmi/pmi.hpp" struct ImDrawList; struct ImGuiIO; struct ImVec2; namespace fiko { struct UygulamaBaglam; struct PmiUIDurum { u32 seciliPmi = 0; // seçili öğe (vurgulu çerçeve) // FCF metin önbelleği: kimlik → (sürüm, metin). ogeMetni yalnız sürüm değişince koşar. std::unordered_map> metinOnbellek; // ---- Etkileşim (DM: kutuyu tut-sürükle, sağ tık menü) ---- bool fareUstunde = false; // imleç bir PMI kutusu üstünde → sahne tık/orbit BASTIRILIR u32 surukle = 0; // sürüklenen öğe (ofsetYerel px delta alır) u32 menuPmi = 0; // sağ-tık menüsünün hedefi // Örtme önbelleği: kimlik → (kamera imzası, örtülü). Kamera/model değişmedikçe // ışın YENİDEN ATILMAZ (sıcak yol); model değişimi imzaya o.surum ile karışır. std::unordered_map> ortmeOnbellek; // Undo kopyaları: sürükleme basışında / menü açılışında alınır (PaftaDuzenIslem kalıbı). std::shared_ptr surukleOncesi; std::shared_ptr menuOncesi; }; struct PmiCizimBaglam { ImDrawList* ciz = nullptr; ImGuiIO* io = nullptr; bool vpHover = false; f32 vpRectMinX = 0, vpRectMinY = 0; std::function ekrana; // dünya → ekran (olcum ile aynı kaynak) f32 kameraMesafe = 9.0f; // DuzlemSabitBoy ölçeği (referansGorselOlcek) Vec3f kameraGoz{}; // örtme ışını hedefi (kamera göz konumu) }; void pmiOverlayCiz(UygulamaBaglam& b, PmiUIDurum& durum, const PmiCizimBaglam& cb); // Ayar bağları (kategori "PMI"). f32& pmiCerceveDolguPx(); // çerçeve iç dolgu f32& pmiOkBoyuPx(); // lider ok başı uzunluğu f32& pmiLodEsigiPx(); // bu genişliğin altında yalnız nokta işareti (metin atlanır) bool& pmiOrtmeKontrolu(); // parça arkasındaki PMI soluklaşsın (varsayılan KAPALI) } // namespace fiko