#include "fiko/baglam/baglam_hedef.hpp" #include "fiko/sahne/sahne.hpp" // DugumTip değerleri + eksensis:: ordinal semantiği namespace fiko::baglam { // Karar sırası tasarım §1.2 (öncelik yukarıdan aşağı). d==nullptr (boşluk) çağıranda // Bos olarak ele alınır; buraya yalnız geçerli düğüm tipi gelir. HedefKategori kategoriBelirle(DugumTip tip, girdi::HedefTur topo, u32 alt, bool sketchAktif, const GeoOzet& geo) { using girdi::HedefTur; // 1) EksenSistemi: alt-ordinal ile eksen / düzlem / orijin ayrımı (tek datum düğümü). if (tip == DugumTip::EksenSistemi) { if (alt == eksensis::ORIJIN) return HedefKategori::Orijin; if (eksensis::eksenMi(alt)) return HedefKategori::RefEksen; if (eksensis::duzlemMi(alt)) return HedefKategori::RefDuzlem; return HedefKategori::RefDuzlem; // ordinalsiz gövde-vurgu → datum kümesi varsayılanı } // 2) Tekil referans / CAM görsel düğümleri. if (tip == DugumTip::Duzlem) return HedefKategori::RefDuzlem; if (tip == DugumTip::Eksen) return HedefKategori::RefEksen; if (tip == DugumTip::Nokta) return HedefKategori::Orijin; // referans nokta → nokta kategorisi if (tip == DugumTip::Cizgi) return HedefKategori::RefEksen; // referans cizgi → eksen kategorisi if (tip == DugumTip::TakimYolu) return HedefKategori::TakimYolu; // 3) GSD wireframe / yüzey. if (tip == DugumTip::Tel) return HedefKategori::GsdTel; if (tip == DugumTip::Yuzey) return HedefKategori::GsdYuzey; // 4) Sketch entity: Sketch düğümü VEYA aktif sketch + topolojik alt-eleman (2B). if ((tip == DugumTip::Sketch || sketchAktif) && (topo == HedefTur::Kenar || topo == HedefTur::Nokta)) { return HedefKategori::SketchEntity; } // 5) Katı gövde: topoloji + brep alt-tip. switch (topo) { case HedefTur::Nokta: return HedefKategori::Vertex; case HedefTur::Kenar: if (geo.cember) return HedefKategori::KenarCember; // yay/çember (brep ayırmıyor) if (geo.spline) return HedefKategori::KenarSpline; return HedefKategori::KenarCizgi; // doğru veya bilinmeyen case HedefTur::Yuz: if (geo.duzlem) return HedefKategori::YuzDuz; if (geo.silindir) return HedefKategori::YuzSilindir; if (geo.konik) return HedefKategori::YuzKonik; if (geo.kure) return HedefKategori::YuzKure; return HedefKategori::YuzEgri; case HedefTur::Govde: return HedefKategori::Govde; case HedefTur::Gui: case HedefTur::Hic: return HedefKategori::Bos; } return HedefKategori::Bos; } // Boşluk hariç tüm kategori bitleri (Govde..TakimYolu). SAYAC ve Bos dışlanır. u32 geometriHepsi() { u32 m = 0; for (u32 i = static_cast(HedefKategori::Govde); i < static_cast(HedefKategori::SAYAC); ++i) m |= (1u << i); return m; } std::string regKimlik(const std::string& grup, const std::string& ad) { std::string k; k.reserve(grup.size() + ad.size() + 1); k += grup; k += REG_AYRAC; k += ad; return k; } bool regAyristir(const std::string& kimlik, std::string& grup, std::string& ad) { const auto p = kimlik.find(REG_AYRAC); if (p == std::string::npos) return false; grup.assign(kimlik, 0, p); ad.assign(kimlik, p + 1, std::string::npos); return true; } } // namespace fiko::baglam