{"id":27992167,"url":"https://github.com/emrepbu/armeter","last_synced_at":"2025-05-08T17:57:47.947Z","repository":{"id":290611733,"uuid":"974299847","full_name":"emrepbu/ARMeter","owner":"emrepbu","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-29T17:27:28.000Z","size":207,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-08T17:57:45.542Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emrepbu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-28T15:02:39.000Z","updated_at":"2025-04-29T17:27:32.000Z","dependencies_parsed_at":"2025-04-29T18:44:55.353Z","dependency_job_id":null,"html_url":"https://github.com/emrepbu/ARMeter","commit_stats":null,"previous_names":["emrepbu/armeter"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emrepbu%2FARMeter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emrepbu%2FARMeter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emrepbu%2FARMeter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emrepbu%2FARMeter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emrepbu","download_url":"https://codeload.github.com/emrepbu/ARMeter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253124196,"owners_count":21857611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-08T17:57:47.367Z","updated_at":"2025-05-08T17:57:47.941Z","avatar_url":"https://github.com/emrepbu.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ARMeter - Arttırılmış Gerçeklik Ölçüm Uygulaması\n\n![ARMeter Logo](ARMeter/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png)\n\nARMeter, iOS cihazlarında ARKit kullanarak gerçek dünyada mesafeleri ölçmenizi sağlayan bir arttırılmış gerçeklik uygulamasıdır. Kullanıcı dostu arayüzü ve çeşitli ölçüm birimleri ile hızlı ve hassas ölçümler yapabilirsiniz.\n\n## İçindekiler\n\n- [Özellikler](#özellikler)\n- [Sistem Gereksinimleri](#sistem-gereksinimleri)\n- [Kurulum](#kurulum)\n- [Kullanım](#kullanım)\n- [Proje Yapısı](#proje-yapısı)\n- [Mimari](#mimari)\n- [Kodlama Yaklaşımı](#kodlama-yaklaşımı)\n- [Performans Optimizasyonları](#performans-optimizasyonları)\n- [Çoklu Dil Desteği](#çoklu-dil-desteği)\n- [Geliştirme Süreci](#geliştirme-süreci)\n- [Gelecekteki Özellikler](#gelecekteki-özellikler)\n- [Lisans](#lisans)\n\n## Özellikler\n\n- **Hassas Ölçüm**: ARKit ile yüzey tespiti ve gerçek dünyada hassas mesafe ölçümü\n- **Çoklu Ölçüm Birimi**: Metre, santimetre, inç ve fit cinsinden ölçümler\n- **Ölçüm Kaydı**: Yapılan ölçümleri kaydedebilme ve not ekleyebilme\n- **Görsel Geri Bildirim**: Başlangıç ve bitiş noktaları, ölçüm çizgileri ve mesafe etiketleri\n- **Haptik Geri Bildirim**: Dokunsal geri bildirimler ile daha iyi kullanıcı deneyimi\n- **Çoklu Dil Desteği**: İngilizce ve Türkçe dil desteği\n- **Başlangıç Rehberi**: Uygulama ilk açıldığında kullanıcıyı yönlendiren başlangıç ekranı\n- **Ayarlar**: Kişiselleştirilebilir ayarlar (haptic geri bildirim, kılavuz noktaları, dil seçimi)\n- **Metal Optimizasyonu**: Metal API ile geliştirilmiş performans\n- **AR Yüzey Algılama**: Yatay ve dikey yüzeylerin otomatik algılanması\n\n## Sistem Gereksinimleri\n\n- iOS 15.0 veya üzeri\n- ARKit destekleyen bir iOS cihazı (iPhone/iPad)\n- Kamera erişimi\n- İnternet bağlantısı gerektirmez (tamamen offline çalışır)\n\n## Kurulum\n\n1. Projeyi klonlayın veya indirin:\n   ```bash\n   git clone https://github.com/yourusername/ARMeter.git\n   ```\n\n2. Xcode'da projeyi açın:\n   ```bash\n   cd ARMeter\n   open ARMeter.xcodeproj\n   ```\n\n3. Uygulamayı bir cihaza veya simülatöre derleyin ve çalıştırın:\n   - Xcode'da uygun bir hedef cihaz seçin\n   - Run butonuna tıklayın veya `Cmd+R` tuşlarına basın\n\n\u003e Not: ARKit işlevselliği için gerçek bir iOS cihazda test edilmesi önerilir. Simülatörde AR özellikleri tam olarak çalışmaz.\n\n## Kullanım\n\n### İlk Kullanım\n\n1. Uygulamayı ilk kez açtığınızda, başlangıç rehberi ile karşılaşacaksınız.\n2. Kamera izinlerini onaylayın.\n3. Rehberlik adımlarını takip ederek uygulamanın temel işlevlerini öğrenin.\n4. \"Başla\" butonuna tıklayarak ana ölçüm ekranına geçin.\n\n### Ölçüm Yapma\n\n1. Cihazınızı yatay veya dikey bir yüzeye doğru tutun.\n2. Yüzeylerin tespit edilmesini bekleyin (ekranın üst kısmında durum mesajı göreceksiniz).\n3. Ortadaki büyük ölçüm butonuna tıklayın.\n4. Başlangıç noktasını seçmek için ekrana dokunun (yeşil bir nokta görünecek).\n5. Bitiş noktasını seçmek için başka bir konuma dokunun (kırmızı bir nokta görünecek).\n6. İki nokta arasındaki mesafe otomatik olarak hesaplanacak ve gösterilecektir.\n7. Ölçümü kaydetmek için \"Kaydet\" butonuna tıklayın.\n8. İsteğe bağlı olarak bir not ekleyebilirsiniz.\n\n### Ölçüm Birimi Değiştirme\n\n1. Ekranın alt kısmındaki cetvel simgesine tıklayın.\n2. Açılan menüden istediğiniz ölçüm birimini seçin (m, cm, inç, fit).\n3. Mevcut ve gelecekteki tüm ölçümler seçilen birimde gösterilecektir.\n\n### Ölçüm Geçmişi\n\n1. Ekranın alt kısmındaki saat simgesine tıklayın.\n2. Kaydedilen tüm ölçümleri ve notları görüntüleyin.\n3. Ölçümleri silmek için \"Düzenle\" butonuna tıklayın.\n\n### Ayarlar\n\n1. Ekranın sağ tarafındaki dişli simgesine tıklayın.\n2. Haptik geri bildirimi açın/kapatın.\n3. Kılavuz noktalarını açın/kapatın.\n4. Dil seçimini değiştirin.\n5. Uygulama hakkında bilgi alın.\n\n## Proje Yapısı\n\nARMeter projesi, MVVM mimari modeli takip ederek modüler bir şekilde yapılandırılmıştır:\n\n```\nARMeter/\n├── ARMeterApp.swift          # Uygulama başlangıç noktası\n├── ContentView.swift         # Ana içerik görünümü\n├── Info.plist                # Uygulama yapılandırma bilgileri\n├── Models/                   # Veri modelleri\n│   └── MeasurementModel.swift # Ölçüm veri modeli\n├── ViewModels/               # Görünüm modelleri\n│   ├── AppViewModel.swift    # Uygulama durumu ve işlemleri\n│   └── ARViewModel.swift     # AR işlemleri ve durumu\n├── Views/                    # Kullanıcı arayüzü görünümleri\n│   ├── MainView.swift        # Ana görünüm\n│   ├── MeasurementView.swift # Ölçüm ekranı\n│   └── OnboardingView.swift  # Başlangıç ekranı\n├── Utils/                    # Yardımcı sınıflar\n│   ├── HapticManager.swift   # Dokunsal geri bildirim yöneticisi\n│   ├── LocalizationManager.swift # Yerelleştirme yöneticisi\n│   ├── MaterialConfigurator.swift # AR malzeme yapılandırıcısı\n│   └── StringExtension.swift # String uzantıları\n└── Resources/                # Kaynaklar\n    ├── Localization/         # Yerelleştirme dosyaları\n    │   ├── en.lproj/         # İngilizce\n    │   └── tr.lproj/         # Türkçe\n    └── Shaders/              # Metal gölgelendiriciler\n        └── ShaderConfig.metal # Metal yapılandırma\n```\n\n## Mimari\n\nARMeter, MVVM (Model-View-ViewModel) mimari modelini kullanarak geliştirilmiştir:\n\n### Model Katmanı\n\n- **MeasurementModel.swift**: Ölçüm sonuçlarını, birimlerini ve diğer ilişkili verileri tanımlayan model.\n- Kullanıcı ölçümlerini ve uygulama durumunu kalıcı olarak saklama.\n\n### View Katmanı\n\n- **MainView.swift**: Uygulamanın ana yapısını ve gezinme akışını yöneten üst düzey görünüm.\n- **MeasurementView.swift**: AR ölçüm arayüzünü, ölçüm kontrol panellerini ve kullanıcı etkileşimlerini içerir.\n- **OnboardingView.swift**: İlk defa uygulama kullananlar için rehberlik ekranı.\n- SwiftUI ile oluşturulmuş modüler alt görünümler (`UnitPickerView`, `SettingsView`, vb.).\n\n### ViewModel Katmanı\n\n- **AppViewModel.swift**: Uygulama durumunu, ölçüm işlemlerini, kullanıcı ayarlarını ve uygulama akışını yönetir.\n- **ARViewModel.swift**: ARKit etkileşimleri, kamera işlemleri, yüzey algılama ve AR sahnesini yönetir.\n\n### Yardımcı Bileşenler\n\n- **LocalizationManager**: Çoklu dil desteği ve yerelleştirme işlemleri.\n- **HapticManager**: Dokunsal geri bildirim işlemleri.\n- **MaterialConfigurator**: AR nesneleri için malzeme yapılandırması.\n\n## Kodlama Yaklaşımı\n\nARMeter projesinde benimsenen kodlama yaklaşımları:\n\n### Reaktif Programlama\n\n- **@Published** özellikleri ve Combine çerçevesi ile reaktif veri akışı.\n- State değişikliklerine dayalı arayüz güncellemeleri.\n\n### Protocol-Oriented Programming\n\n- Protokoller ve uzantılar aracılığıyla kod yeniden kullanımı ve modülerlik.\n- İşlevselliğin, belirli arayüzler üzerinden tanımlanması.\n\n### Performans Optimizasyonu\n\n- Metal API ile yüksek performanslı grafik işleme.\n- İş parçacığı yönetimi ile UI blokajlarının önlenmesi.\n- ARKit kaynaklarının verimli kullanımı.\n\n### Memory Management\n\n- Zayıf referanslar ve bellek sızıntılarının önlenmesi.\n- Autoreleasepool ile geçici bellek kullanımının optimize edilmesi.\n\n## Performans Optimizasyonları\n\nARMeter, optimize edilmiş bir kullanıcı deneyimi için çeşitli tekniklerden yararlanır:\n\n### AR Optimizasyonları\n\n- **Seçici Özellik Kullanımı**: Sadece gerekli ARKit özellikleri etkinleştirilmiştir.\n- **Kademeli AR Başlatma**: AR oturumu, minimum yapılandırma ile başlar ve kademeli olarak geliştirilir.\n- **AR Çerçeve Yönetimi**: Çerçevelerin gereksiz tutulması önlenerek bellek kullanımı optimize edilmiştir.\n\n### Grafik Optimizasyonları\n\n- **Basit Geometriler**: Ölçüm noktaları ve çizgiler için optimize edilmiş geometriler.\n- **Metal Entegrasyonu**: Doğrudan Metal API çağrıları ile grafik işleme.\n- **Basit Malzemeler**: Karmaşık malzemeler yerine basit, düşük maliyetli olanları tercih edilmiştir.\n\n### UI Optimizasyonları\n\n- **Asenkron İşlemler**: Arka planda gerçekleştirilen hesaplamalar ve işlemler.\n- **İş Parçacığı Yönetimi**: UI blokajlarını önlemek için işlemler uygun iş parçacıklarında yürütülür.\n- **Dokunmatik Olay Optimizasyonu**: Dokunma olaylarının işlenme şekli optimize edilmiştir.\n\n## Çoklu Dil Desteği\n\nARMeter şu anda aşağıdaki dilleri desteklemektedir:\n\n- İngilizce (varsayılan)\n- Türkçe\n\nDil desteği, LocalizationManager sınıfı ve Localizable.strings dosyaları aracılığıyla sağlanmaktadır:\n\n```swift\n// Örnek kullanım\nText(\"place_start_point\".localized)\n```\n\nYeni dil eklemek için:\n\n1. Resources/Localization altında yeni bir dil klasörü oluşturun (örn. `fr.lproj`).\n2. Bu klasöre standart bir `Localizable.strings` dosyası ekleyin.\n3. Anahtar/değer çiftlerini yeni dile çevirin.\n4. LocalizationManager'a yeni dil seçeneğini ekleyin.\n\n## Gelecekteki Özellikler\n\nARMeter için planlanan gelecekteki özellikler:\n\n- **Çoklu Ölçüm Noktaları**: Birden fazla nokta ile alan ve hacim ölçümü.\n- **LiDAR Entegrasyonu**: Destekleyen cihazlarda daha hassas ölçümler için LiDAR sensörü kullanımı.\n- **Ölçüm Paylaşımı**: Ölçümleri AR deneyimi veya görüntü olarak paylaşma.\n- **Bölge Taraması**: Bir alanı tarayarak detaylı 3D model oluşturma.\n- **Daha Fazla Dil Desteği**: Ek diller için yerelleştirme desteği.\n- **Şablon Ölçümler**: Yaygın nesneler için ön tanımlı ölçüm şablonları.\n- **Sesli Komutlar**: Sesli komut ile ölçüm işlemlerini yapabilme.\n\n## Lisans\n\nARMeter projesi, ticari olmayan (Non-Commercial) lisans altında lisanslanmıştır. Bu lisans, yazılımın ticari olmayan amaçlarla ücretsiz olarak kullanılmasına, değiştirilmesine ve dağıtılmasına izin verirken, ticari kullanım için telif hakkı sahibinden açık yazılı izin gerektirir. Daha fazla bilgi için `LICENSE` dosyasına bakın.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femrepbu%2Farmeter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femrepbu%2Farmeter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femrepbu%2Farmeter/lists"}