#pragma once // DM tutamaç/gizmo bırakışında çağrılan ORTAK kayıtlar (her commit yolu ikisini de yapar): // 1) KomutCalisti olayı — gizmo işlemleri registry komutundan GEÇMEZ, yaymazsak makro // önerisi + öğrenen menü DM'in ana işlerini HİÇ görmez. ad+grup registry'deki komutla // BİREBİR olmalı (üretilen makro fiko.komut.calistir ile o aracı açar). // 2) Undo kaydı — featureOnayla YALNIZ taslak bayrağını temizler, yığına hiçbir Islem // itmez. Eskiden sadece sayısal pencere (feature_penceresi.cpp) FeatureEkleIslem // üretiyordu → tutamaçla yapılan it/çek, fillet, yüz taşı, blok kaydır, sketch it-çek // Ctrl+Z ile geri ALINMIYORDU. #include #include #include #include "fiko/cekirdek/cekirdek.hpp" #include "fiko/parca/parca_islemleri.hpp" namespace fiko { inline void dmTutamacOlayiYay(Cekirdek& c, const char* grup, const char* ad) { c.olaylar().yayinla(KomutCalisti{ad, grup, "gizmo", true}, ad); } // ---- Undo kaydı ---- // ASYNC yolda bunlar bitti(ok) callback'inde ve YALNIZ ok iken çağrılmalı: iş × ile iptal // edilirse callback hiç koşmaz (featureAsyncGeriAl sonucu atar) → bayat kayıt oluşmaz. // Tutamaçla YENİ üretilen feature'ı yığına al (feature zaten canlı → ilk uygula() no-op). inline void dmFeatureEkleUndo(Cekirdek& c, parca::PartDesignSistemi& pd, u32 fk) { if (fk) c.uygula(std::make_unique(pd, fk)); } // Feature'ın TAM parametre anlığı. FeatureDuzenleIslem snapshot'ı haritanın TAMAMINI yazar // (parametreleriUygula: f->parametreler() = p) → kısmi harita yuzSayi/yuz0..N'i silerdi. inline std::unordered_map dmFeatureParamAnlik(parca::PartDesignSistemi& pd, u32 fk) { parca::Feature* f = pd.bul(fk); return f ? f->parametreler() : std::unordered_map{}; } // MEVCUT feature'ın tutamaçla değişen parametrelerini yığına al. once = değişiklikten ÖNCE // dmFeatureParamAnlik ile alınmış kopya, sonra = uygulandıktan sonraki anlık. inline void dmFeatureDuzenleUndo(Cekirdek& c, parca::PartDesignSistemi& pd, u32 fk, std::unordered_map once, std::unordered_map sonra) { if (fk && once != sonra) c.uygula(std::make_unique(pd, fk, std::move(once), std::move(sonra))); } } // namespace fiko