#include #include "fiko/sketch/eskiz_veri.hpp" #include "fiko/sketch/snap.hpp" #include "fiko_test.hpp" using namespace fiko; using namespace fiko::eskiz; // Ortak eskiz: bir yatay cizgi (0,0)-(10,0) + bir cember (5,5) r=3. static void kurEskiz(EskizVeri& e, u32& cizgi, u32& cember) { cizgi = e.cizgiEkle(0.0, 0.0, 10.0, 0.0); cember = e.daireEkle(5.0, 5.0, 3.0); e.coz(); } // (a) Uc noktaya yakin fare → UcNokta snap; konum tam uc. FIKO_TEST(snap_uc_nokta) { EskizVeri e; u32 cizgi, cember; kurEskiz(e, cizgi, cember); SnapMotoru m; m.aperture = 0.4; m.inference = false; // sadece diskret test SnapSonuc s = m.coz(e, 10.05, -0.05); // (10,0) ucuna cok yakin FIKO_KONTROL(s.tip == SnapTip::UcNokta); FIKO_YAKIN(s.u, 10.0, 1e-9); FIKO_YAKIN(s.v, 0.0, 1e-9); FIKO_KONTROL(s.refGeo == cizgi); FIKO_KONTROL(s.refUc == 1); } // (b) Cember merkezine yakin → Merkez. FIKO_TEST(snap_merkez) { EskizVeri e; u32 cizgi, cember; kurEskiz(e, cizgi, cember); SnapMotoru m; m.aperture = 0.4; m.inference = false; SnapSonuc s = m.coz(e, 5.1, 4.95); FIKO_KONTROL(s.tip == SnapTip::Merkez); FIKO_YAKIN(s.u, 5.0, 1e-9); FIKO_YAKIN(s.v, 5.0, 1e-9); FIKO_KONTROL(s.refGeo == cember); } // (c) Cember sag kadranina (8,5) yakin → Kadran. FIKO_TEST(snap_kadran) { EskizVeri e; u32 cizgi, cember; kurEskiz(e, cizgi, cember); SnapMotoru m; m.aperture = 0.4; m.inference = false; SnapSonuc s = m.coz(e, 8.05, 5.05); // (5+3, 5) FIKO_KONTROL(s.tip == SnapTip::Kadran); FIKO_YAKIN(s.u, 8.0, 1e-9); FIKO_YAKIN(s.v, 5.0, 1e-9); } // (d) Cizgi orta noktasi (5,0) → OrtaNokta. FIKO_TEST(snap_orta_nokta) { EskizVeri e; u32 cizgi, cember; kurEskiz(e, cizgi, cember); SnapMotoru m; m.aperture = 0.4; m.inference = false; SnapSonuc s = m.coz(e, 5.02, 0.03); FIKO_KONTROL(s.tip == SnapTip::OrtaNokta); FIKO_YAKIN(s.u, 5.0, 1e-9); FIKO_YAKIN(s.v, 0.0, 1e-9); } // (e) Oncelik: hem uc (0,0) hem orta (5,0) uzak; ama fare (0.1,0.05) uctan // yakin → UcNokta kazanir (orta noktadan uzak zaten). FIKO_TEST(snap_oncelik_uc_orta) { EskizVeri e; u32 cizgi, cember; kurEskiz(e, cizgi, cember); SnapMotoru m; m.aperture = 1.0; m.inference = false; SnapSonuc s = m.coz(e, 0.1, 0.05); FIKO_KONTROL(s.tip == SnapTip::UcNokta); FIKO_KONTROL(s.refUc == 0); } // (f) Nesne-uzeri: cizgi ustunde ama uclardan/orta'dan uzak nokta → NesneUzeri. FIKO_TEST(snap_nesne_uzeri) { EskizVeri e; u32 cizgi, cember; kurEskiz(e, cizgi, cember); SnapMotoru m; m.aperture = 0.4; m.inference = false; m.izgaraSnap = false; SnapSonuc s = m.coz(e, 2.5, 0.1); // cizgi uzeri ~ (2.5,0) FIKO_KONTROL(s.tip == SnapTip::NesneUzeri); FIKO_YAKIN(s.v, 0.0, 1e-9); FIKO_YAKIN(s.u, 2.5, 1e-9); FIKO_KONTROL(s.refGeo == cizgi); } // (g) Yatay inference: aktif nokta (0,0), fare (7, 0.05) → yatay hiza. FIKO_TEST(snap_yatay_hiza) { EskizVeri e; // Bos eskiz + aktif nokta: sadece inference test. SnapMotoru m; m.aperture = 0.4; m.inference = true; m.izgaraSnap = false; Skalar au = 0.0, av = 0.0; SnapSonuc s = m.coz(e, 7.0, 0.05, &au, &av); FIKO_KONTROL(s.tip == SnapTip::Yatay); FIKO_KONTROL(s.yatayHiza); FIKO_YAKIN(s.v, 0.0, 1e-9); // aktif nokta v'sine hizalandi FIKO_YAKIN(s.hizaV, 0.0, 1e-9); } // (h) Dikey inference: aktif nokta (3,3), fare (3.05, 9) → dikey hiza. FIKO_TEST(snap_dikey_hiza) { EskizVeri e; SnapMotoru m; m.aperture = 0.4; m.inference = true; Skalar au = 3.0, av = 3.0; SnapSonuc s = m.coz(e, 3.05, 9.0, &au, &av); FIKO_KONTROL(s.tip == SnapTip::Dikey); FIKO_KONTROL(s.dikeyHiza); FIKO_YAKIN(s.u, 3.0, 1e-9); } // (i) Izgara: bos eskiz, inference kapali, izgara acik → yuvarlanmis nokta. FIKO_TEST(snap_izgara) { EskizVeri e; SnapMotoru m; m.aperture = 0.4; m.inference = false; m.izgaraSnap = true; m.gridAdim = 1.0; SnapSonuc s = m.coz(e, 3.4, 6.6); FIKO_KONTROL(s.tip == SnapTip::Izgara); FIKO_YAKIN(s.u, 3.0, 1e-9); FIKO_YAKIN(s.v, 7.0, 1e-9); } // (j) Serbest: bos eskiz, her sey kapali → ham nokta. FIKO_TEST(snap_serbest) { EskizVeri e; SnapMotoru m; m.inference = false; m.izgaraSnap = false; SnapSonuc s = m.coz(e, 4.2, 7.7); FIKO_KONTROL(s.tip == SnapTip::Serbest); FIKO_YAKIN(s.u, 4.2, 1e-9); FIKO_YAKIN(s.v, 7.7, 1e-9); } // (k) Aci snap: aktif (0,0), fare 30 dereceye yakin (aciSnap=15) → 30'a yuvarlar. FIKO_TEST(snap_aci) { EskizVeri e; SnapMotoru m; m.inference = false; // yatay/dikey kapali ki aci test edilsin m.aciSnapDeg = 15.0; Skalar au = 0.0, av = 0.0; // 32 derece yonu, uzunluk 5. Skalar aci = 32.0 * 3.14159265358979323846 / 180.0; Skalar fu = std::cos(aci) * 5.0, fv = std::sin(aci) * 5.0; SnapSonuc s = m.coz(e, fu, fv, &au, &av); FIKO_KONTROL(s.tip == SnapTip::Aci); // 30 dereceye yuvarlanmis. Skalar bek30 = 30.0 * 3.14159265358979323846 / 180.0; FIKO_YAKIN(s.u, std::cos(bek30) * 5.0, 1e-6); FIKO_YAKIN(s.v, std::sin(bek30) * 5.0, 1e-6); } // (l) Kesisim: iki cizgi (2,0)-(2,10) dikey + (0,3)-(10,3) yatay → kesisim (2,3). // Uc/orta noktalar kesisimden uzak tutulur ki Kesisim tipi test edilsin. FIKO_TEST(snap_kesisim) { EskizVeri e; e.cizgiEkle(2.0, 0.0, 2.0, 10.0); // orta (2,5), uclar (2,0)/(2,10) e.cizgiEkle(0.0, 3.0, 10.0, 3.0); // orta (5,3), uclar (0,3)/(10,3) e.coz(); SnapMotoru m; m.aperture = 0.4; m.inference = false; SnapSonuc s = m.coz(e, 2.05, 2.95); // kesisim (2,3) yakin, orta/uctan uzak FIKO_KONTROL(s.tip == SnapTip::Kesisim); FIKO_YAKIN(s.u, 2.0, 1e-6); FIKO_YAKIN(s.v, 3.0, 1e-6); }