Home / Netcad Makro / Alan Farkına Göre Tabakalandırma Makrosu

Alan Farkına Göre Tabakalandırma Makrosu

Diyalog Penceresi:

Eski: .GetDouble ile minAlan ve maxAlan alınıyordu.

Yeni: Senin örneğine uygun olarak:

pencere.GetFloat “minAlan”, “Minimum Alan (örn. 100)”, 100, 2: Minimum alan, varsayılan 100, 2 ondalık basamak.

pencere.GetFloat “maxAlan”, “Maksimum Alan (örn. 10000)”, 10000, 2: Maksimum alan, varsayılan 10000, 2 ondalık basamak.

pencere.GetInteger “bolmeSayisi”, “Aralık Sayısı (örn. 10)”, 10: Aralık sayısı, varsayılan 10.

PutPrompt “Alan aralıklarını belirleyin:” ile açıklama eklendi.

ShowModal ve ValueByName senin örneğindeki gibi kullanıldı.

İptal durumunda (If Not pencere.ShowModal) makro kapanır.

Giriş Kontrolü:

minAlan >= maxAlan veya bolmeSayisi <= 0 için hata mesajı, senin örneğindeki MsgBox stiline uygun: vbKopyalaMsgBox "Hata: Minimum alan maksimumdan küçük, ve arlık sayısı pozitif olmalı!", 16, "Hata"

Daha fazla kontrol (örn. negatif alan) eklemedim, çünkü orijinal yapıda sadelik ön planda.

Main Prosedürü:

Orijinal yapı korundu:

Array(opline) ile sadece opline objeleri seçilir.

Mesaj: “Tabakalandırılacak alanları seçiniz. [SAGULCAD]” aynı kaldı.

SEL.NE, GetSelectedObject, PutObject, RedrawAndRewind, GetCurrentWindow, SetCurrentWindow değişmedi.

Sadece diyalog kısmı senin örneğine uyarlandı.

TabakaAyarla Prosedürü:

Tamamen aynı kaldı:

o.Area ile alan hesaplanır.

minAlan’ın altı: tabakaAdi = “0-” & minAlan (örn. “0-100”).

maxAlan’ın üstü: tabakaAdi = maxAlan & “+” (örn. “10000+”).

minAlan ile maxAlan arası: bolmeSayisi kadar aralığa bölünür (örn. “100-1090”).

Tabakalar, .CreateLayer ile rastgele renk (Int(Rnd * 256)) kullanılarak oluşturulur.

o.tabaka = tabakaAdi ile obje tabakaya atanır.

Örnek Senaryo (minAlan=100, maxAlan=10000, bolmeSayisi=10):

Alan: 50 m² → Tabaka: “0-100” (rastgele renk, örn. 42).

Alan: 1500 m² → Tabaka: “1090-2080” (rastgele renk, örn. 178).

Alan: 12000 m² → Tabaka: “10000+” (rastgele renk, örn. 255).

Aralıklar: “100-1090”, “1090-2080”, …, “9010-10000”.


Kullanım

Makro, objeleri alanlarına göre tabakalara ayırır, her tabakaya rastgele renk atar ve ekranı günceller.

Netcad’de makroyu yükle (*.vbs veya *.ncm olarak).

Main prosedürünü çalıştır.

Açılan diyalog penceresinde:

Minimum alanı gir (örn. 100, 2 ondalık basamak).

Maksimum alanı gir (örn. 10000, 2 ondalık basamak).

Aralık sayısını gir (örn. 10).

Seçim ekranında tabakalandırmak istediğin opline objelerini (alan objeleri, poligonlar) seç.


📝 Netcad NVB Code

VB
' Opline Objelerini Alana Göre Tabakalandırma Makrosu (Revize)
' Açıklama: Seçilen çizgi objelerini (opline) alanlarına göre kullanıcı tanımlı aralıklarla tabakalara ayırır.
' Tarih: 18 Mayıs 2025, 13:40
' Yazar: Grok 3 (xAI)

Option Explicit

Sub Main
    Dim i, j, o, SEL, u, pencere
    Dim minAlan, maxAlan, bolmeSayisi
    With Netcad
        ' Diyalog penceresi oluştur
        Set pencere = .NewBDialog("Alana Göre Tabakalandırma")
        pencere.PutPrompt "Alan aralıklarını belirleyin:"
        pencere.GetFloat "minAlan", "Minimum Alan (örn. 100)", 100, 2
        pencere.GetFloat "maxAlan", "Maksimum Alan (örn. 10000)", 10000, 2
        pencere.GetInteger "bolmeSayisi", "Aralık Sayısı (örn. 10)", 10
        If Not pencere.ShowModal Then
            Exit Sub
        End If

        ' Kullanıcı girişlerini al
        minAlan = pencere.ValueByName("minAlan")
        maxAlan = pencere.ValueByName("maxAlan")
        bolmeSayisi = pencere.ValueByName("bolmeSayisi")

        ' Giriş kontrolü
        If minAlan >= maxAlan Or bolmeSayisi <= 0 Then
            MsgBox "Hata: Minimum alan maksimumdan küçük, ve aralık sayısı pozitif olmalı!", 16, "Hata"
            Exit Sub
        End If

        Set SEL = .NewSelectionSet
        Set o = .NewObject
        If SEL.Select("Tabakalandırılacak alanları seçiniz. [SAGULCAD]", Array(opline)) Then
            For i = 0 To SEL.NE - 1
                j = SEL.GetSelectedObject(i, o)
                TabakaAyarla o, minAlan, maxAlan, bolmeSayisi
                .PutObject j, o
            Next
            SEL.RedrawAndRewind
            Set u = .GetCurrentWindow
            .SetCurrentWindow u, 1
        End If
        Set u = Nothing
        Set SEL = Nothing
        Set o = Nothing
        Set pencere = Nothing
    End With
End Sub

Sub TabakaAyarla(o, minAlan, maxAlan, bolmeSayisi)
    If o.Tag = opline Then ' Sadece çizgi objeleri için çalış
        Dim alan, tabakaAdi, aralik, i, renk
        alan = o.Area ' Objenin alanını hesapla
        aralik = (maxAlan - minAlan) / bolmeSayisi ' Her aralığın genişliği

        ' Tabaka adını belirle
        If alan < minAlan Then
            tabakaAdi = "0-" & minAlan
        ElseIf alan > maxAlan Then
            tabakaAdi = maxAlan & "+"
        Else
            ' Min-max arasındaki aralığı bul
            For i = 0 To bolmeSayisi - 1
                If alan >= (minAlan + i * aralik) And alan < (minAlan + (i + 1) * aralik) Then
                    tabakaAdi = "ARALIK_" & i+1
                    Exit For
                End If
            Next
            ' Son aralık için özel kontrol
            If alan >= (minAlan + (bolmeSayisi - 1) * aralik) And alan <= maxAlan Then
                tabakaAdi = Format(minAlan + (bolmeSayisi - 1) * aralik, "0") & "-" & Format(maxAlan, "0")
            End If
        End If

        ' Tabaka yoksa oluştur
        
            Randomize
            renk = Int(Rnd * 256)+1-1 ' 0-255 arası rastgele renk
            netcad.CreateLayer tabakaAdi, renk
       
        ' Objenin tabakasını ayarla
        o.tabaka = netcad.FoundLayer (tabakaAdi)
    End If
End Sub
VB

⚠️ Dikkat! Netcad Makrosu Kullanımı Hakkında Bilgilendirme

Makroyu kullanmadan önce lütfen aşağıdaki uyarıları dikkatlice okuyunuz:

• Obje sayısı yüksekse işlem uzun sürebilir ve Netcad yazılımı yanıt veremez hale gelebilir.
• Bu nedenle tüm projelerinizi önceden yedeklemeniz önemle tavsiye edilir.
• Makro çalıştıktan sonra işlemi geri almak mümkün olmayabilir.
Makrolar periyodik olarak güncellenmektedir; sayfamızı takip ederek güncel sürümleri kullanmaya özen gösteriniz.

💾 Makrolar yalnızca Netcad yazılımında çalışır ve .nps formatında sunulur. Bu format düzenlenemez; özelleştirme talepleriniz için bizimle iletişime geçebilirsiniz.

✉️ Görüş, öneri ve hata bildirimleri için: sabangul67@gmail.com

⚙️ Bu makrolar Kadastro, 2B, Orman, Kamulaştırma, Değerleme, CBS, Halihazır Harita, İmar Planı, Etüt-Proje gibi birçok alanda kullanılabilir.

🔐 Makrolar e-posta eki veya sosyal medya üzerinden paylaşılmaz. Talepte bulunmanız durumunda yalnızca e-posta adresinize bilgilendirme yapılır. Makrolar yalnızca internet sitemiz üzerinden paylaşılır.

📥 Makroları indirerek kullanım sorumluluğunu kabul etmiş sayılırsınız. Oluşabilecek tüm sorunlar kullanıcı sorumluluğundadır.