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ç.
Detaylar ola
📝 Netcad NVB Code
' 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✅ 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.