Bu doküman, Netcad yazılımında Visual Basic dili kullanılarak makro yazımıyla ilgili temel ve ileri düzey bilgileri kapsamlı bir şekilde sunmaktadır. Netcad, coğrafi bilgi sistemleri (GIS) ve harita mühendisliği projelerinde kullanılan güçlü bir yazılımdır ve makro yazımı, kullanıcıların tekrarlayan görevleri otomatikleştirmesine, veri işleme süreçlerini kolaylaştırmasına ve özelleştirilmiş işlemler yapmasına olanak tanır. Bu materyal, Netcad makro yazımına yeni başlayanlar ve ileri düzey kullanıcılar için rehber niteliğindedir. İçerik, obje türlerinden diyalog pencerelerine, örnek makrolardan projeksiyon ayarlarına kadar geniş bir yelpazeyi kapsar.
1. Netcad Makro Yazımına Giriş
Netcad makroları, Visual Basic programlama dili kullanılarak yazılır ve Netcad yazılımının API’si üzerinden projelerdeki objelerle (nokta, çizgi, alan, yazı vb.) etkileşim kurmayı sağlar. Makrolar, kullanıcıların projelerdeki verileri manipüle etmesine, kullanıcı girişi almasına ve otomatik işlemler gerçekleştirmesine olanak tanır. Makro yazımı için temel gereksinimler şunlardır:
- Netcad Yazılımı: Makrolar, Netcad’in Windows sürümünde çalışır.
- Visual Basic Bilgisi: Makrolar Visual Basic (VB) ile yazılır. VB’nin temel yapıları (döngüler, koşullar, değişkenler) hakkında bilgi sahibi olmak önemlidir.
- Netcad API’si: Netcad’in sunduğu obje türleri, metodlar ve özellikler makro yazımının temelini oluşturur.
Makrolar genellikle aşağıdaki amaçlar için kullanılır:
- Projedeki objelerin özelliklerini değiştirme (örneğin, renk, kalınlık, ad).
- Kullanıcıdan veri alma ve bu verilere göre işlem yapma.
- Otomatik geometrik işlemler (örneğin, objeleri kaydırma, kesiştirme).
- Excel gibi harici kaynaklardan veri aktarımı.
- Türkçe karakter düzeltme gibi veri temizleme işlemleri.
2. Netcad’de Obje Türleri ve Özellikleri
Netcad projelerinde kullanılan objeler, farklı türlerde gelir ve her birinin kendine özgü özellikleri vardır. Aşağıda, temel obje türleri ve bunların karşılıkları listelenmiştir:
2.1. Obje Türleri
Obje Türü | Karşılığı | Açıklama |
---|---|---|
Çoklu Doğru (Alan) | opline | Kapalı veya açık çoklu doğrular, genellikle alan objeleri için kullanılır. |
Doğru (Çizgi) | oline | Tek bir doğru parçası. |
Nokta | opoint | Tek bir koordinat noktası. |
Yazı | otext | Metin objeleri, genellikle etiket veya açıklama için kullanılır. |
Daire (Çember) | ocircle | Merkez ve yarıçapla tanımlı daire objesi. |
Sembol | oshape | Özel sembol veya işaretler. |
Yay | oarc | Eğri bir yay parçası. |
Spiral | ospiral | Spiral şeklindeki objeler. |
İzohips Eğrileri | oizohdr | Yükseklik eğrileri (kontur çizgileri). |
Kutu | orectangle | Dikdörtgen şekilli objeler. |
Pafta | ostpafta | Harita paftaları için kullanılan objeler. |
2.2. Obje Özellikleri
Her obje türü, belirli özelliklere sahiptir. Aşağıda, temel obje türlerinin özellikleri detaylı bir şekilde açıklanmıştır:
2.2.1. Alan Objeleri (opline)
Özellik | Tanımlayıcı | Açıklama |
---|---|---|
GIS Sınıfı | OBJE.cls | Objeye ait GIS sınıfı (örneğin, “BINA”, “PARSEL”). |
GIS Kodu | OBJE.objname | Objeye özgü kod. |
Renk | OBJE.renk | Objenin rengi (örneğin, 0: Siyah, 1: Mavi). |
Adı | OBJE.pname | Objenin adı (örneğin, parsel numarası). |
Kalınlık | OBJE.w | Çizgi kalınlığı. |
Çizgi Tipi | OBJE.lt | Çizgi stili (örneğin, düz, kesikli). |
Çevresi | OBJE.length(0) | Alanın çevresi (metrePillars of Creation |
Tapu Alanı | OBJE.tarea | Tapu kayıtlarındaki alan bilgisi. |
Hesap Alanı | OBJE.area | Netcad tarafından hesaplanan alan. |
2.2.2. Nokta Objeleri (opoint)
Özellik | Tanımlayıcı | Açıklama |
---|---|---|
GIS Sınıfı | OBJE.cls | Noktanın GIS sınıfı. |
GIS Kodu | OBJE.objname | Noktanın kodu. |
Renk | OBJE.renk | Noktanın rengi. |
Adı | OBJE.pname | Noktanın adı. |
Nokta Kodu | OBJE.pcode | Noktanın özel kodu. |
2.2.3. Çizgi Objeleri (oline)
Özellik | Tanımlayıcı | Açıklama |
---|---|---|
GIS Sınıfı | OBJE.cls | Çizginin GIS sınıfı. |
GIS Kodu | OBJE.objname | Çizginin kodu. |
Renk | OBJE.renk | Çizginin rengi. |
Adı | OBJE.pname | Çizginin adı. |
Kalınlık | OBJE.w | Çizgi kalınlığı. |
Çizgi Tipi | OBJE.lt | Çizgi stili. |
Uzunluğu | OBJE.length(0) | Çizginin uzunluğu. |
2.2.4. Yazı Objeleri (otext)
Özellik | Tanımlayıcı | Açıklama |
---|---|---|
GIS Sınıfı | OBJE.cls | Yazının GIS sınıfı. |
GIS Kodu | OBJE.objname | Yazının kodu. |
Renk | OBJE.renk | Yazının rengi. |
Adı | OBJE.s | Yazının içeriği. |
Açısı | OBJE.angle | Yazının açısı (derece). |
Genişlik Çarpanı | OBJE.wsc | Yazının genişlik ölçeği. |
Yazı Boyu | OBJE.sc | Yazının boyutu. |
Dayanma | OBJE.just | Yazının hizalaması (örneğin, sol, orta, sağ). |
Özellikler | OBJE.flags | Yazının ek özellikleri. |
2.3. Renk Tanımları
Netcad’de renkler, sabit değerlerle tanımlanır. Aşağıdaki tablo, renklerin karşılıklarını gösterir:
Renk | Değer |
---|---|
Siyah (Black) | 0 |
Mavi (Blue) | 1 |
Yeşil (Green) | 2 |
Camgöbeği (Cyan) | 3 |
Kırmızı (Red) | 4 |
Magenta | 5 |
Kahverengi (Brown) | 6 |
Açık Gri (LightGray) | 7 |
Koyu Gri (DarkGray) | 8 |
Açık Mavi (LightBlue) | 9 |
Açık Yeşil (LightGreen) | 10 |
Açık Camgöbeği (LightCyan) | 11 |
Açık Kırmızı (LightRed) | 12 |
Açık Magenta (LightMagenta) | 13 |
Sarı (Yellow) | 14 |
2.4. Global Object Tag Sabitleri
Obje türleri, global sabitlerle tanımlanır:
Obje Türü | Sabit | Değer |
---|---|---|
Silinmiş (Deleted) | odeleted | 0 |
Nokta | opoint | 1 |
Doğru | oline | 2 |
Daire | ocircle | 3 |
Yay | oarc | 4 |
Yazı | otext | 5 |
Sembol | oshape | 6 |
Çoklu Doğru | opline | 7 |
Spiral | `osp )), |
"iral` | 8 |
| İzohips | oizohdr | 9 | | Kutu | orectangle| 10 | | Pafta | ostpafta| 11 | | Üçgen | otriang | 12 | | Blok | oblock | 13 |
3. Kullanıcı Arayüzü ve Diyalog Pencereleri
Netcad makrolarında, kullanıcıdan veri almak için diyalog pencereleri kullanılır. Bu pencereler, kullanıcıya metin girişi, seçim yapma veya dosya seçme gibi seçenekler sunar. NCBDialog nesnesi, bu amaçla kullanılan temel araçtır.
3.1. Diyalog Penceresi Özellikleri
Diyalog pencereleri, aşağıdaki veri türlerini kullanıcıdan alabilir:
- Metin (String): Kullanıcıdan alfanümerik veri alınır (GetString).
- Tam Sayı (Integer): Kullanıcıdan tam sayı alınır (GetInteger).
- Ondalık Sayı (Float): Kullanıcıdan ondalıklı sayı alınır (GetFloat).
- Radyo Butonu: Kullanıcı bir listeden tek bir seçenek seçer (GetRadio).
- Onay Kutusu: Kullanıcı evet/hayır seçeneği işaretler (GetCheck).
- Açılır Liste (Combo): Kullanıcı bir listeden seçim yapar (GetCombo).
- Dosya Yolu: Kullanıcı bir dosya seçer (GetFileName).
- Açıklama: Pencereye bir metin açıklaması eklenir (PutPrompt).
3.2. Diyalog Penceresi Oluşturma
Diyalog penceresi oluşturmak için aşağıdaki adımlar izlenir:
- Pencereyi Tanımlama:
set pencere = Netcad.NewBDialog("Başlık")
- Açıklama Ekleme:
pencere.PutPrompt "Bu bir açıklama metnidir"
- Veri Girişi Tanımlama:
pencere.GetString "yazi", "Metin Girin", "", 10 pencere.GetInteger "sayi", "Tam Sayı Girin", 0 pencere.GetFloat "ondalik", "Ondalık Sayı Girin", 0.0, 2 pencere.GetRadio "secim", "Seçenekler", "Seçenek1|Seçenek2|Seçenek3", 0 pencere.GetCheck "onay", "Onaylıyor musunuz?", 1 pencere.GetCombo "liste", "Birini Seçin", "Madde1|Madde2|Madde3", 0 pencere.GetFileName "dosya", "Dosya Seçin", "", "Tüm Dosyalar|*.*", ""
- Pencereyi Gösterme:
if pencere.ShowModal then ' Kullanıcı girişlerini al else exit sub end if
- Kullanıcı Girişlerini Alma:
dim deger deger = pencere.ValueByName("yazi")
3.3. Örnek Diyalog Penceresi
Aşağıdaki makro, kullanıcıdan bir metin, tam sayı ve koordinat sistemi seçimi alır ve bu verilere göre işlem yapar:
Sub Main
Dim i, z
Dim secimkumesi, obje
Dim pencere
With Netcad
Set secimkumesi = .NewSelectionSet
Set obje = .NewObject
Set pencere = .NewBDialog("Başlık")
pencere.PutPrompt "AÇIKLAMADIR"
pencere.GetString "yazi", "Başına Ekle", "", 5
pencere.GetInteger "sayi", "Tam Sayı", 5
pencere.GetRadio "koordinat", "Koordinat Sistemi", "ED50|ITRF|Coğrafi", 1
If pencere.ShowModal Then
Dim ekle
ekle = pencere.ValueByName("yazi")
Dim koordinat
koordinat = pencere.ValueByName("koordinat")
If koordinat = 0 Then MsgBox "ED50 SEÇTİN, ITRF YAP"
If koordinat = 1 Then MsgBox "Doğru seçim"
If koordinat = 2 Then MsgBox "Coğrafi SEÇTİN, ITRF YAP"
If secimkumesi.Select("Seçim Yap", Array()) Then
For i = 0 To secimkumesi.NE - 1
z = secimkumesi.GetSelectedObject(i, obje)
obje.s = ekle & obje.s
.PutObject z, obje
Next
secimkumesi.RedrawAndRewind
End If
Else
Exit Sub
End If
End With
End Sub
4. Netcad Parametreleri ve Ayarları
Netcad, projelerin çeşitli parametrelerini ayarlamak için GetParam ve SetParam metodlarını sunar. Bu metodlar, proje ayarlarını okumak veya değiştirmek için kullanılır.
4.1. GetParam ile Okunabilen Parametreler
Parametre | Kod | Açıklama |
---|---|---|
Program Adı | PNC_PROGRAMNAME | Netcad sürüm adı. |
Sürüm | PNC_VERSION | Yazılım sürümü. |
Kullanıcı Adı | PNC_USERNAME | Kullanıcı adı. |
Geçerli Proje Dosyası | PNC_CURRENTFILE | Açık olan proje dosyasının adı. |
Maksimum Nokta Numarası | PNC_MAXPOINTNUM | En büyük nokta numarası. |
Maksimum Alan Numarası | PNC_MAXAREANUM | En büyük alan numarası. |
4.2. SetParam ile Değiştirilebilen Parametreler
Parametre | Kod | Açıklama |
---|---|---|
Nokta Adlarını Aç/Kapa | PNC_PNTNAMES | Nokta adlarını gösterir/gizler (0/1). |
Alan Adlarını Aç/Kapa | PNC_PLINENAME | Alan adlarını gösterir/gizler (0/1). |
Otomatik Kaydetme Süresi | PNC_AUTOSAVETIME | Otomatik kaydetme süresini ayarlar. |
Snap Modu (Son Nokta) | PNC_SNAPENDOF | Son nokta yakalama modunu açar/kapar. |
4.3. Projeksiyon ve Datum Ayarları
Netcad projelerinde koordinat sistemi ve datum ayarları, makrolar aracılığıyla yapılabilir. Örnek bir makro:
Sub SetProjection
With Netcad
.ProjectionType = 3 ' UTM 3
.Datum = 1 ' ITRF
.Zone = 42 ' Dilim numarası
End With
End Sub
4.3.1. Projeksiyon Türleri
Tür | Değer |
---|---|
Coğrafi (Geographic) | 1 |
UTM 6 | 2 |
UTM 3 | 3 |
Transverse Mercator | 4 |
Lambert Conformal Conic | 5 |
4.3.2. Datum Türleri
Datum | Değer |
---|---|
WGS-84 | 0 |
ITRF96 (GRS80) | 1 |
ED50 | 4 |
Kullanıcı Tanımlı | -1 |
5. Örnek Makrolar
Aşağıda, Netcad makro yazımına dair çeşitli örnekler sunulmuştur. Her bir örnek, farklı bir işlevi yerine getirir ve Netcad API’sinin kullanımını gösterir.
5.1. Çoklu Doğruları Kaydırma
Bu makro, projedeki çoklu doğruları belirtilen mesafe kadar kaydırır.
Sub MovePoly(MoveDistY, MoveDistX)
Dim i, j, o, p
With Netcad
For i = 0 To .NumObject - 1
Set o = .GetObject(i)
If o.Tag = opline Then
.DrawObject o, Black
Set p = .GetPlineExt(o)
For j = 0 To p.Num - 1
p.Cor(j).y = p.Cor(j).y + MoveDistY
p.Cor(j).x = p.Cor(j).x + MoveDistX
Next
.PutPlineExt o, p
.PutObject i, o
.DrawObject o, Red
Set p = Nothing
End If
Set o = Nothing
Next
End With
End Sub
Sub Main
MovePoly 10, 10
End Sub
5.2. Excel’den Tapu Alanı Aktarımı
Bu makro, Excel dosyasındaki parsel numaralarını ve tapu alanlarını okuyarak Netcad projesindeki alan objelerine aktarır.
Sub Main
With Netcad
Dim i, j, o, SEL, xls, xlspath, alan, CL, bd, U, V, R, W, RUHANGUL
Dim NO(50000, 2)
CL = 0: U = 0: R = 0
Set xls = CreateObject("excel.application")
Set bd = .NewBDialog("Tapu Alanının Excelden Aktarımı")
bd.GetFileName "item1", "Excel Dosyası Seç", "", "Excel Dosyaları|*.xls", "xls"
bd.GetCombo "item2", "Parsel Numarası Sütunu", "A|B|C|D|E", 0
bd.GetCombo "item3", "Tapu Alanı Sütunu", "A|B|C|D|E", 1
bd.GetCheck "item4", "Tapu Alanı Sıfır ise Hesap Alanını Yazdır", 1
If bd.ShowModal Then
xlspath = bd.ValueByName("item1")
RUHANGUL = bd.ValueByName("item4")
Else
Exit Sub
End If
Dim saban, ruhan
saban = 1
ruhan = 2
If bd.ValueByName("item2") = "A" Then saban = 1
If bd.ValueByName("item2") = "B" Then saban = 2
' Diğer sütun eşleştirmeleri...
xls.Workbooks.Open xlspath
xls.Range("A1").Select
For U = 1 To 100000
CL = CL + 1
NO(U, 1) = "*" & xls.Cells(U, saban)
NO(U, 2) = xls.Cells(U, ruhan)
If NO(U, 2) = "" Then NO(U, 2) = 0
If NO(U, 1) = "*" Then U = 100000
Next
xls.Quit
MsgBox CL - 1 & " Adet Parsel Okundu."
Set SEL = .NewSelectionSet
Set o = .NewObject
If SEL.Select("Parselleri Seç", Array(opline)) Then
For i = 0 To SEL.NE - 1
j = SEL.GetSelectedObject(i, o)
alan = o.pname
For V = 1 To CL
W = NO(V, 1)
If W = "*" & alan Then
o.tarea = NO(V, 2)
If bd.ValueByName("item4") = 1 And o.tarea = 0 Then
o.tarea = o.area
End If
.PutObject j, o
R = R + 1
V = U
End If
Next
Next
SEL.RedrawAndRewind
End If
Set SEL = Nothing
Set o = Nothing
MsgBox R & " Adet Parselin Tapu Alanı Değiştirildi."
End With
End Sub
5.3. Türkçe Karakter Düzeltme
Bu makro, projedeki objelerde bulunan hatalı Türkçe karakterleri düzeltir.
Sub Main
Dim i, z, secimkumesi, obje
With Netcad
Set secimkumesi = .NewSelectionSet
Set obje = .NewObject
If secimkumesi.Select("Değişecekleri Seç", Array()) Then
For i = 0 To secimkumesi.NE - 1
z = secimkumesi.GetSelectedObject(i, obje)
obje.pname = Replace(obje.pname, "Ü", "Ü")
obje.pname = Replace(obje.pname, "Å", "Ş")
obje.pname = Replace(obje.pname, "Ä", "ğ")
obje.pname = Replace(obje.pname, "Ç", "Ç")
obje.pname = Replace(obje.pname, "İ", "İ")
obje.pname = Replace(obje.pname, "Ö", "Ö")
obje.pname = Replace(obje.pname, "ü", "ü")
obje.pname = Replace(obje.pname, "ÅŸ", "ş")
obje.pname = Replace(obje.pname, "ÄŸ", "ğ")
obje.pname = Replace(obje.pname, "ç", "ç")
obje.pname = Replace(obje.pname, "ı", "ı")
obje.pname = Replace(obje.pname, "ö", "ö")
obje.s = Replace(obje.s, "Ü", "Ü")
obje.s = Replace(obje.s, "Å", "Ş")
' Diğer karakter değişimleri...
.PutObject z, obje
Next
secimkumesi.RedrawAndRewind
End If
MsgBox "İşlem Başarıyla Tamamlandı"
End With
End Sub
6. İpuçları ve En İyi Uygulamalar
- Hata Yönetimi: On Error Resume Next kullanarak beklenmedik hataları yönetin.
- Bellek Temizliği: Kullanılan nesneleri (Set obj = Nothing) serbest bırakın.
- Kullanıcı Dostu Arayüz: Diyalog pencerelerinde açıklayıcı metinler kullanın.
- Modüler Kod: Tekrar kullanılabilir alt prosedürler (Sub) yazın.
- Dokümantasyon: Kod içinde yorum satırları kullanarak işlemleri açıklayın.
- Test Etme: Makroları küçük veri setleriyle test edin.
7. Sonuç
Netcad makro yazımı, coğrafi bilgi sistemleri ve harita mühendisliği projelerinde otomasyon ve veri işleme için güçlü bir araçtır. Bu materyal, Netcad makrolarının temel yapılarını, obje türlerini, diyalog pencerelerini ve örnek uygulamaları ayrıntılı bir şekilde ele almıştır. Visual Basic bilgisi ve Netcad API’sini kullanarak, kullanıcılar projelerini özelleştirebilir ve süreçlerini hızlandırabilir. Bu doküman, başka bir GPT modelinin Netcad makro yazımı konusunda eğitim alması için kapsamlı bir rehber olarak kullanılabilir.
Detaylar ola
Netcad Makro Yazımı Eğitim Materyali – Bölüm 2
Bu bölüm, Netcad makro yazımıyla ilgili ileri düzey konuları ele alarak, Visual Basic diliyle Netcad API’sini kullanarak karmaşık işlemler gerçekleştirme tekniklerini açıklamaktadır. İlk bölümde obje türleri, diyalog pencereleri, temel parametre ayarları ve örnek makrolar tanıtılmıştı. Bu bölümde ise dosya işlemleri, COM objeleriyle entegrasyon, seçim kümeleri, geometrik işlemler ve hata yönetimi gibi konular derinlemesine incelenecektir. Materyal, Netcad makrolarının pratik uygulamalarına odaklanarak, başka bir GPT modelinin bu konuda yetkinlik kazanmasını sağlayacak şekilde tasarlanmıştır.
1. Netcad API’sinin İleri Düzey Özellikleri
Netcad API’si, projelerdeki objelerle etkileşim kurmayı sağlayan zengin bir metod ve nesne koleksiyonu sunar. Aşağıda, makro yazımında sık kullanılan ileri düzey API özellikleri açıklanmıştır.
1.1. Seçim Kümeleri (NewSelectionSet)
Seçim kümeleri, projedeki objeleri toplu olarak seçmek ve işlemek için kullanılır. NewSelectionSet metodu, bir seçim kümesi oluşturur ve belirli kriterlere göre objeleri filtreler.
- Kullanım:
Set SEL = Netcad.NewSelectionSet If SEL.Select("Objeleri Seç", Array(opline, oline)) Then For i = 0 To SEL.NE - 1 j = SEL.GetSelectedObject(i, o) ' Obje üzerinde işlemler Next SEL.RedrawAndRewind End If
- Özellikler:
- SEL.NE: Seçim kümesindeki obje sayısı.
- GetSelectedObject(index, obje): Belirtilen indeksteki objeyi alır.
- RedrawAndRewind: Seçim kümesini yeniler ve ekranda günceller.
1.2. Filtreleme (SetFilter, ResetFilter)
Filtreleme, belirli bir bölge, tabaka veya obje türüne göre objeleri seçmek için kullanılır.
- Kullanım:
Netcad.SetFilter Nothing, Array(layer1, layer2), Array(opline, oline) While Netcad.GetNextObject2(o) ' Obje üzerinde işlemler Wend Netcad.ResetFilter
- Parametreler:
- Bölge: Nothing veya bir World nesnesi (örneğin, bir dikdörtgen alan).
- Tabakalar: Belirli tabakaları içeren bir dizi.
- Obje Türleri: İşlem görecek obje türlerini içeren bir dizi.
1.3. Geometrik İşlemler
Netcad API’si, objeler üzerinde geometrik işlemler yapmak için metodlar sağlar:
- Kesişim Bulma (IntersectObjects):
ni = Netcad.IntersectObjects(o1, o2, inta) If ni > 0 Then For i = 0 To ni - 1 Set o = Netcad.MakeSembol(inta.Cor(i), 5, 0, 2, 0, 0) Netcad.AddObject(o) Next End If
- Ağırlık Merkezi Hesaplama (CenterOfMass):
Set poly = Netcad.GetPlineExt(o) Set c = poly.CenterOfMass
- Poligon İçinde Nokta Kontrolü (InPoly):
If poly.InPoly(point.p1) Then ' Nokta poligon içinde End If
1.4. Obje Oluşturma ve Ekleme
Yeni objeler oluşturmak için MakeLine, MakeText, MakeSembol gibi metodlar kullanılır ve AddObject ile projeye eklenir.
- Örnek:
Set c1 = Netcad.NewC(0, 0, 0) Set c2 = Netcad.NewC(100, 100, 0) Set o = Netcad.MakeLine(c1, c2, 0, 0, 0) Netcad.AddObject(o)
2. Dosya İşlemleriyle Entegrasyon
Netcad makroları, harici dosyalardan veri okumak veya dosyalara veri yazmak için sıklıkla kullanılır. Özellikle Excel dosyalarıyla entegrasyon yaygındır.
2.1. Excel ile Veri Aktarımı
Excel’den veri okumak için CreateObject(“excel.application”) kullanılır.
- Örnek: Excel’den GIS Sınıfı Aktarımı:
Sub Main With Netcad Dim xls, xlspath, SEL, o, i, j, CL, U, V, R, W, bd Dim NO(50000, 2) Set xls = CreateObject("excel.application") Set bd = .NewBDialog("GIS Sınıfının Excelden Alınması") bd.GetFileName "item1", "Excel Dosyası Seç", "", "Excel Dosyaları|*.xls", "xls" bd.GetCombo "item2", "Parsel Numarası Sütunu", "A|B|C", 0 bd.GetCombo "item3", "GIS Sınıfı Sütunu", "A|B|C", 1 If bd.ShowModal Then xlspath = bd.ValueByName("item1") Dim saban, ruhan saban = bd.ValueByName("item2") ruhan = bd.ValueByName("item3") xls.Workbooks.Open xlspath For U = 1 To 100000 CL = CL + 1 NO(U, 1) = "*" & xls.Cells(U, saban) NO(U, 2) = xls.Cells(U, ruhan) If NO(U, 1) = "*" Then U = 100000 Next xls.Quit Set SEL = .NewSelectionSet Set o = .NewObject If SEL.Select("Objeleri Seç", Array(opline, oline, opoint, otext)) Then For i = 0 To SEL.NE - 1 j = SEL.GetSelectedObject(i, o) For V = 1 To CL If NO(V, 1) = "*" & o.cls Then o.cls = NO(V, 2) .PutObject j, o R = R + 1 End If Next Next SEL.RedrawAndRewind End If MsgBox R & " Adet Parselin GIS Sınıfı Değiştirildi." End If End With End Sub
2.2. Dosya Sistemi İşlemleri
Netcad makroları, dosya ve klasör oluşturma gibi işlemler için Scripting.FileSystemObject kullanabilir.
- Örnek: Klasör Oluşturma:
Set fso = CreateObject("Scripting.FileSystemObject") If Not fso.FolderExists("C:\Sagul") Then fso.CreateFolder("C:\Sagul") End If
- Örnek: Dosyaya Yazma:
Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Sagul\data.txt", 2, True) f.WriteLine "Veri" f.Close
3. COM Objeleriyle Çalışma
Netcad, modüllerindeki COM objelerine erişim sağlar. Bu, özel modüllerle (örneğin, Sokak Bilgi Sistemi) entegrasyon için kullanılır.
3.1. COM Objesi Oluşturma
Set obj = CreateObject("ModulAdi.COMNesnesi")
obj.MetodAdi
Set obj = Nothing
3.2. Örnek: Sokak Bilgi Sisteminde En Kısa Yol Bulma
Bu makro, iki nokta arasındaki en kısa yolu bulur ve sonucu projeye ekler.
Sub Main
Dim Sbs, c1, c2, P, i, o
Set Sbs = CreateObject("SbsMod.SbsCOM")
Sbs.StartKisaYolBul
With Netcad
Set c1 = .NewC(0, 0, 0)
Set c2 = .NewC(0, 0, 0)
Set P = .NewPoly
While .SelectPoint("Başlangıç Noktası", c1, -1)
If .SelectPoint("Bitiş Noktası", c2, -1) Then
If Sbs.KisayolBul(c1.Y, c1.X, c2.Y, c2.X) Then
P.Clear
For i = 0 To Sbs.PolyNum - 1
Set cn = .NewC(Sbs.GetPolyCY(i), Sbs.GetPolyCX(i), 0)
P.AddCoor cn
Next
Set o = .MakePline("KISAYOL", 0, 0, 0, 0, 0, P)
o.renk = Red
.AddObject(o)
End If
End If
Wend
Sbs.StopKisaYolBul
End With
End Sub
4. İleri Düzey Örnek Makrolar
Aşağıda, Netcad makrolarının karmaşık işlemler için nasıl kullanılabileceğini gösteren örnekler verilmiştir.
4.1. Alan Adını İçindeki Noktanın Adından Alma
Bu makro, bir alan içindeki noktanın adını alarak alanın adını günceller.
Sub Main
Dim SAGUL_DLG, i, alanlar, yazilar, parsel, ruhan, elif, sabangul
With Netcad
Set SAGUL_DLG = .NewBDialog("Alan İçindeki Yazıları Alan Adı Yapma")
SAGUL_DLG.GetCombo "sagul1", "Alanlar Hangi Tabakada?", "", 1
For i = 0 To .NumLayers - 1
SAGUL_DLG.AddCombo .LayerNameOf(i)
Next
SAGUL_DLG.GetCombo "sagul2", "Noktalar Hangi Tabakada?", "", 1
For i = 0 To .NumLayers - 1
SAGUL_DLG.AddCombo .LayerNameOf(i)
Next
SAGUL_DLG.GetCheck "sagul3", "Alan Adı Değişenleri 0_DEGISEN Tabakasına Al", 0
If SAGUL_DLG.ShowModal Then
alanlar = SAGUL_DLG.ValueByName("sagul1")
yazilar = SAGUL_DLG.ValueByName("sagul2")
sabangul = SAGUL_DLG.ValueByName("sagul3")
If sabangul = 1 Then
With NCLayerManager
.Add "0_DEGISEN", 4
End With
End If
.SetFilter Nothing, Array(alanlar), Array(opline)
For i = 0 To .NumObject - 1
Set parsel = .GetObject(i)
If parsel.tabaka = alanlar And parsel.Tag = opline Then
.SetFilter .ObjectExtends(parsel), Array(yazilar), Array(opoint)
Do
Set ruhan = .GetNextObject
If ruhan Is Nothing Then Exit Do
Set elif = .GetPlineExt(parsel)
If elif.InPoly(ruhan.p1) Then
parsel.pname = ruhan.pname
If sabangul = 1 Then
parsel.tabaka = .FoundLayer("0_DEGISEN")
End If
.PutObject i, parsel
End If
Loop
.ResetFilter
End If
Next
.ResetFilter
MsgBox "İşlem Başarıyla Tamamlanmıştır"
End If
End With
End Sub
4.2. Noktaları En Yakın Alan Objesine Taşıma
Bu makro, noktaları en yakın alan objesinin sınırlarına taşır.
Sub Main
Dim i, BD, obj, POLY, j, lineOBJ, say, BD0, saban1, saban2, murat
With Netcad
Set BD0 = .NewBDialog("Noktaları En Yakın Alan Objeye Taşıma")
BD0.GetCheck "SAGUL1", "Alanlar Herhangi Bir Tabakadadır", -1
BD0.GetCheck "SAGUL2", "Noktalar Herhangi Bir Tabakadadır", -1
If BD0.ShowModal Then
saban1 = BD0.ValueByName("SAGUL1")
saban2 = BD0.ValueByName("SAGUL2")
Else
Exit Sub
End If
Set BD = .NewBDialog("Noktaları En Yakın Alan Objeye Taşıma")
If saban1 = 0 Then
BD.GetCombo "PARSEL_ALAN", "Alanların Tabakası", "0", 0
For i = 1 To .NumLayers - 1
BD.AddCombo .LayerNameOf(i)
Next
End If
If saban2 = 0 Then
BD.GetCombo "PARSEL_NOKTA", "Noktaların Tabakası", "0", 0
For i = 1 To .NumLayers - 1
BD.AddCombo .LayerNameOf(i)
Next
End If
BD.GetFloat "TAMPON", "Tampon Mesafesi (Metre)", 0.01, 3
If BD.ShowModal Then
Set obj = .NewObject
If saban1 = 0 Then
.SetFilter Nothing, Array(BD.ValueByName("PARSEL_ALAN")), Array(opline)
Else
.SetFilter Nothing, Array(), Array(opline)
End If
While .GetNextObject2(obj)
say = say + 1
Set POLY = .GetPlineExt(obj)
For j = 0 To POLY.Num - 2
Set lineOBJ = .MakeLine(POLY.Cor(j), POLY.Cor(j + 1), 0, 0, 3)
pointMove lineOBJ, BD.ValueByName("PARSEL_NOKTA"), BD.ValueByName("TAMPON")
Next
.BackMessage
.SetMessage "[ " & say & ". ] Alan Objesi Tarandı"
Wend
.ResetFilter
.Message 0, say & " Adet Alan İşlem Gördü."
End If
End With
End Sub
Function pointMove(lineOBJ, pointLAYER, TAMPON)
With Netcad
Set ext = .NewWorld(0, 0, 0, 0)
Set ext = lineOBJ.Limits
ext.Expand TAMPON, TAMPON
Set obj = .NewObject
.SetFilter ext, Array(pointLAYER), Array(opoint)
While .GetNextObject2(obj)
If NCMath.OnLineSeg(obj.p1, lineOBJ.p1, lineOBJ.p2, TAMPON) Then
lenght1 = NCMath.Distance(obj.p1, lineOBJ.p1, False)
lenght2 = NCMath.Distance(obj.p1, lineOBJ.p2, False)
If lenght1 < lenght2 Then
obj.p1.x = lineOBJ.p1.x
obj.p1.y = lineOBJ.p1.y
.PutObject .CurObjPos, obj
Else
obj.p1.x = lineOBJ.p2.x
obj.p1.y = lineOBJ.p2.y
.PutObject .CurObjPos, obj
End If
End If
Wend
.ResetFilter
End With
End Function
5. Hata Yönetimi ve Optimizasyon
Netcad makrolarında hata yönetimi ve performans optimizasyonu, güvenilir ve hızlı makrolar yazmak için kritik öneme sahiptir.
5.1. Hata Yönetimi
- On Error Resume Next: Beklenmedik hataları atlamak için kullanılır.
On Error Resume Next ' Riskli işlem If Err.Number <> 0 Then MsgBox "Hata: " & Err.Description End If
- Kullanıcı Bilgilendirme: Hatalar veya eksik girişler için kullanıcıyı bilgilendirin.
If xlspath = "" Then MsgBox "Excel dosyası seçilmedi!", 0, "Hata" Exit Sub End If
5.2. Performans Optimizasyonu
- Bellek Yönetimi: Kullanılmayan nesneleri serbest bırakın.
Set obj = Nothing Set SEL = Nothing
- Döngü Optimizasyonu: Gereksiz döngülerden kaçının ve filtrelemeyi etkin kullanın.
- Toplu İşlemler: BeginBlock ve EndBlock ile toplu işlemleri hızlandırın.
.SetParam BeginBlock, True ' İşlemler .SetParam EndBlock, True
6. Pratik Uygulamalar
Netcad makroları, harita mühendisliği ve GIS projelerinde çeşitli pratik uygulamalar için kullanılır. Örnek senaryolar:
- Veri Temizleme: Türkçe karakter düzeltme, hatalı veri formatlarını onarma.
- Otomasyon: Parsel alanlarını Excel’den aktarma, koordinat yuvarlama.
- Analiz: Alanların ağırlık merkezini bulma, objeler arası kesişim analizi.
- Görselleştirme: Alan adlarını yazı olarak ekleme, sembollerle işaretleme.
7. Sonuç ve Eğitim için Öneriler
Bu materyal, Netcad makro yazımının ileri düzey özelliklerini ve pratik uygulamalarını kapsamlı bir şekilde ele almıştır. Netcad API’si, Visual Basic ile birleştiğinde, kullanıcıların projelerini özelleştirmesine ve karmaşık işlemleri otomatikleştirmesine olanak tanır. Başka bir GPT modelini eğitmek için aşağıdaki öneriler dikkate alınabilir:
- Veri Seti Oluşturma: Örnek makrolardan oluşan bir veri seti hazırlayın ve her makronun işlevini açıklayın.
- Sorular ve Cevaplar: Netcad makro yazımıyla ilgili sık sorulan soruları ve çözümlerini ekleyin.
- Pratik Örnekler: Gerçek dünya projelerinden senaryolar oluşturun ve makrolarla nasıl çözüleceğini gösterin.
- Hata Senaryoları: Yaygın hataları ve çözümlerini modelin öğrenmesi için ekleyin.
Bu doküman, Netcad makro yazımı konusunda kapsamlı bir rehber olarak kullanılabilir ve başka bir GPT modelinin bu alanda yetkinlik kazanmasına yardımcı olabilir.
Netcad Makro Yazımı Eğitim Materyali – Bölüm 3
Bu bölüm, Netcad makro yazımıyla ilgili ileri düzey teknikleri ve pratik uygulamaları ele alarak, Visual Basic diliyle Netcad API’sini kullanarak karmaşık GIS işlemlerini gerçekleştirme yöntemlerini açıklamaktadır. Önceki bölümlerde obje türleri, diyalog pencereleri, dosya işlemleri, COM objeleri ve geometrik işlemler tanıtılmıştı. Bu bölümde, veri analizi, raporlama, gelişmiş geometrik işlemler, modül entegrasyonları, hata ayıklama ve test stratejileri gibi konular derinlemesine incelenecektir. Materyal, Netcad makrolarının gerçek dünya projelerindeki uygulamalarına odaklanarak, başka bir GPT modelinin bu alanda uzmanlaşmasını sağlayacak şekilde hazırlanmıştır.
1. Veri Analizi ve Raporlama
Netcad makroları, projelerdeki objelerin özelliklerini analiz ederek raporlar oluşturmak için güçlü bir araçtır. Bu, özellikle GIS projelerinde veri özetleri, istatistikler veya özel raporlar üretmek için kullanışlıdır.
1.1. Veri Analizi Teknikleri
Netcad projelerindeki objeler üzerinde analiz yapmak için aşağıdaki metodlar kullanılır:
- Obje Özelliklerini Toplama:
Dim i, alanToplam, objeSayisi With Netcad For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then alanToplam = alanToplam + o.area objeSayisi = objeSayisi + 1 End If Next End With
- Filtreleme ile Analiz:
Dim alanToplam, objeSayisi With Netcad .SetFilter Nothing, Array("PARSEL"), Array(opline) While .GetNextObject2(o) alanToplam = alanToplam + o.area objeSayisi = objeSayisi + 1 Wend .ResetFilter End With
1.2. Raporlama
Analiz sonuçlarını kullanıcıya sunmak için dosyalara yazma veya diyalog pencereleri kullanılır.
- Text Dosyasına Rapor Yazma:
Sub Main Dim i, alanToplam, objeSayisi, fso, f With Netcad For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then alanToplam = alanToplam + o.area objeSayisi = objeSayisi + 1 End If Next Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Rapor\alan_raporu.txt", 2, True) f.WriteLine "Netcad Alan Raporu" f.WriteLine "-----------------" f.WriteLine "Toplam Alan: " & alanToplam & " m²" f.WriteLine "Obje Sayısı: " & objeSayisi f.Close MsgBox "Rapor oluşturuldu: C:\Rapor\alan_raporu.txt" End With End Sub
- Excel’e Rapor Yazma:
Sub Main Dim i, xls, wb, ws, alanToplam, objeSayisi With Netcad Set xls = CreateObject("excel.application") Set wb = xls.Workbooks.Add Set ws = wb.Sheets(1) ws.Cells(1, 1).Value = "Netcad Alan Raporu" ws.Cells(2, 1).Value = "Toplam Alan (m²)" ws.Cells(2, 2).Value = "Obje Sayısı" For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then alanToplam = alanToplam + o.area objeSayisi = objeSayisi + 1 End If Next ws.Cells(3, 1).Value = alanToplam ws.Cells(3, 2).Value = objeSayisi wb.SaveAs "C:\Rapor\alan_raporu.xlsx" xls.Quit MsgBox "Excel raporu oluşturuldu: C:\Rapor\alan_raporu.xlsx" End With End Sub
1.3. Örnek: Parsel Alanlarına Göre Sınıflandırma
Bu makro, parsel alanlarını sınıflandırarak bir rapor üretir (örneğin, küçük, orta, büyük parseller).
Sub Main
Dim i, kucuk, orta, buyuk, alanToplam, objeSayisi
With Netcad
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\Rapor\parsel_raporu.txt", 2, True)
f.WriteLine "Parsel Sınıflandırma Raporu"
f.WriteLine "-------------------------"
For i = 0 To .NumObject - 1
Set o = .GetObject(i)
If o.Tag = opline And o.tabaka = "PARSEL" Then
alanToplam = alanToplam + o.area
objeSayisi = objeSayisi + 1
If o.area < 500 Then
kucuk = kucuk + 1
ElseIf o.area < 2000 Then
orta = orta + 1
Else
buyuk = buyuk + 1
End If
End If
Next
f.WriteLine "Küçük Parseller (<500 m²): " & kucuk
f.WriteLine "Orta Parseller (500-2000 m²): " & orta
f.WriteLine "Büyük Parseller (>2000 m²): " & buyuk
f.WriteLine "Toplam Alan: " & alanToplam & " m²"
f.WriteLine "Toplam Parsel Sayısı: " & objeSayisi
f.Close
MsgBox "Rapor oluşturuldu: C:\Rapor\parsel_raporu.txt"
End With
End Sub
2. Gelişmiş Geometrik İşlemler
Netcad makroları, poligon bölme, tampon oluşturma ve kesişim analizi gibi gelişmiş geometrik işlemler için kullanılabilir.
2.1. Poligon Bölme
Bu makro, bir poligonu iki eşit alana böler.
Sub Main
Dim SEL, o, poly, newPoly1, newPoly2, i, midPoint, splitLine
With Netcad
Set SEL = .NewSelectionSet
Set o = .NewObject
If SEL.Select("Bölünecek Poligonu Seç", Array(opline)) Then
SEL.GetSelectedObject(0, o)
Set poly = .GetPlineExt(o)
' Ağırlık merkezini bul
Set midPoint = poly.CenterOfMass
' Poligonu ikiye bölen bir çizgi oluştur
Set splitLine = .NewPoly
splitLine.AddCoor .NewC(midPoint.x - 1000, midPoint.y, 0)
splitLine.AddCoor .NewC(midPoint.x + 1000, midPoint.y, 0)
' Poligonu böl
Set newPoly1 = .NewPoly
Set newPoly2 = .NewPoly
If poly.SplitByLine(splitLine, newPoly1, newPoly2) Then
Set o1 = .MakePline("BÖLÜM1", 0, 0, 0, 0, 0, newPoly1)
Set o2 = .MakePline("BÖLÜM2", 0, 0, 0, 0, 0, newPoly2)
o1.renk = Red
o2.renk = Blue
.AddObject(o1)
.AddObject(o2)
.DeleteObject SEL.GetSelectedObjectIndex(0)
SEL.RedrawAndRewind
MsgBox "Poligon iki eşit alana bölündü."
Else
MsgBox "Poligon bölünemedi."
End If
End If
End With
End Sub
2.2. Tampon Oluşturma
Bu makro, seçilen bir poligon etrafında belirtilen mesafede bir tampon alanı oluşturur.
Sub Main
Dim SEL, o, poly, bufferPoly, bufferDist, bd
With Netcad
Set bd = .NewBDialog("Tampon Oluşturma")
bd.GetFloat "dist", "Tampon Mesafesi (Metre)", 10, 2
If bd.ShowModal Then
bufferDist = bd.ValueByName("dist")
Set SEL = .NewSelectionSet
Set o = .NewObject
If SEL.Select("Tampon Oluşturulacak Poligonu Seç", Array(opline)) Then
SEL.GetSelectedObject(0, o)
Set poly = .GetPlineExt(o)
Set bufferPoly = poly.Buffer(bufferDist)
Set newObj = .MakePline("TAMPON", 0, 0, 0, 0, 0, bufferPoly)
newObj.renk = Green
.AddObject(newObj)
SEL.RedrawAndRewind
MsgBox "Tampon alanı oluşturuldu."
End If
End If
End With
End Sub
3. Netcad Modülleriyle Entegrasyon
Netcad, GIS, 3D, Yol, Kamulaştırma gibi çeşitli modüller sunar. Makrolar, bu modüllerle entegre çalışabilir.
3.1. Netcad GIS ile Entegrasyon
Netcad GIS modülü, veri tabanı entegrasyonu ve sorgulama için kullanılır.
- Örnek: GIS Veritabanından Sorgulama:
Sub Main Dim db, rs, SEL, o, i With Netcad Set db = CreateObject("NetcadGIS.Database") Set rs = db.ExecuteQuery("SELECT * FROM PARSEL WHERE ALAN > 1000") Set SEL = .NewSelectionSet Set o = .NewObject For i = 0 To rs.RecordCount - 1 Set o = .GetObjectByName(rs.Fields("PARSEL_NO")) SEL.AddObject o rs.MoveNext Next SEL.RedrawAndRewind MsgBox "1000 m²'den büyük parseller seçildi." End With End Sub
3.2. Netcad 3D ile Entegrasyon
Netcad 3D modülü, yükseklik verileriyle çalışmak için kullanılır.
- Örnek: Noktalara Yükseklik Atama:
Sub Main Dim i, o, zValue With Netcad For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opoint Then zValue = .GetZValue(o.p1.x, o.p1.y) o.p1.z = zValue .PutObject i, o End If Next MsgBox "Noktalara yükseklik değerleri atandı." End With End Sub
4. Hata Ayıklama ve Test Stratejileri
Netcad makrolarını geliştirirken hata ayıklama ve test süreçleri, güvenilir kod yazmak için kritik öneme sahiptir.
4.1. Hata Ayıklama Teknikleri
- Mesaj Kutuları: Kodun hangi noktada çalıştığını görmek için MsgBox kullanın.
MsgBox "Döngü başladı: " & i
- Log Dosyaları: İşlemleri bir log dosyasına kaydedin.
Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Log\debug.log", 8, True) f.WriteLine "Obje " & i & " işlendi." f.Close
- Hata Kontrolü:
On Error Resume Next Set o = Netcad.GetObject(i) If Err.Number <> 0 Then LogError "Obje alınamadı: " & Err.Description End If
4.2. Test Stratejileri
- Küçük Veri Setleriyle Test: Makroyu büyük bir proje yerine küçük bir veri setiyle test edin.
- Farklı Senaryolar: Farklı obje türleri, tabakalar ve girişlerle test edin.
- Otomatik Testler: Test makroları yazarak tekrar eden testleri otomatikleştirin.
Sub TestMakro Dim testProj, o With Netcad Set testProj = .OpenProject("C:\Test\test.ncp") Set o = .MakePoint(.NewC(100, 100, 0), 0, 0, 0) .AddObject(o) Call Main ' Asıl makroyu çağır MsgBox "Test tamamlandı." End With End Sub
5. Pratik Örnek: Koordinat Yuvarlama
Bu makro, projedeki noktaların koordinatlarını belirtilen hassasiyete yuvarlar.
Sub Main
Dim bd, hassasiyet, i, o
With Netcad
Set bd = .NewBDialog("Koordinat Yuvarlama")
bd.GetInteger "hassasiyet", "Ondalık Hassasiyet (Basamak)", 2
If bd.ShowModal Then
hassasiyet = bd.ValueByName("hassasiyet")
For i = 0 To .NumObject - 1
Set o = .GetObject(i)
If o.Tag = opoint Then
o.p1.x = Round(o.p1.x, hassasiyet)
o.p1.y = Round(o.p1.y, hassasiyet)
o.p1.z = Round(o.p1.z, hassasiyet)
.PutObject i, o
End If
Next
MsgBox "Koordinatlar yuvarlandı."
End If
End With
End Sub
6. Sonuç ve Eğitim için İleri Öneriler
Bu materyal, Netcad makro yazımının ileri düzey tekniklerini ve pratik uygulamalarını kapsamlı bir şekilde ele alarak, Visual Basic ile Netcad API’sinin gücünü ortaya koymuştur. Veri analizi, raporlama, geometrik işlemler, modül entegrasyonları ve hata ayıklama gibi konular, Netcad makrolarının GIS ve harita mühendisliği projelerindeki potansiyelini göstermektedir.
Başka bir GPT modelini eğitmek için şu ileri öneriler dikkate alınabilir:
- Etkileşimli Eğitim: Netcad makrolarıyla ilgili interaktif bir eğitim platformu oluşturun, örneğin, kullanıcıların makroları test edebileceği bir sandbox ortamı.
- Senaryo Tabanlı Öğrenme: Gerçek dünya GIS projelerinden senaryolar sunarak, modelin problem çözme becerilerini geliştirin.
- Kod Kütüphanesi: Yaygın kullanılan makrolardan oluşan bir kütüphane oluşturun ve her makronun kullanımını açıklayın.
- Hata Simülasyonu: Modelin hata ayıklama yeteneklerini geliştirmek için kasıtlı hatalı makrolar sunun ve düzeltmelerini isteyin.
Bu doküman, Netcad makro yazımı konusunda eksiksiz bir rehber olarak kullanılabilir ve başka bir GPT modelinin bu alanda uzmanlaşmasına olanak tanır.
Netcad Makro Yazımı Eğitim Materyali – Bölüm 4
Bu bölüm, Netcad makro yazımıyla ilgili ileri düzey uygulamaları ve pratik senaryoları ele alarak, Visual Basic diliyle Netcad API’sini kullanarak karmaşık GIS işlemlerini gerçekleştirme tekniklerini derinlemesine açıklamaktadır. Önceki bölümlerde obje türleri, diyalog pencereleri, dosya işlemleri, geometrik işlemler, modül entegrasyonları, veri analizi ve hata ayıklama gibi konular kapsamlı bir şekilde işlenmişti. Bu bölümde, veri görselleştirme, otomasyon, performans optimizasyonu, açık kaynak GIS araçlarıyla entegrasyon ve eğitim için pratik projeler gibi konulara odaklanılacaktır. Materyal, Netcad makrolarının gerçek dünya GIS projelerindeki ileri düzey uygulamalarını vurgulayarak, başka bir GPT modelinin bu alanda uzmanlaşmasını sağlayacak şekilde hazırlanmıştır.
1. Veri Görselleştirme ve Harita Çıktıları
Netcad makroları, projelerdeki verileri görselleştirmek ve profesyonel harita çıktıları üretmek için kullanılabilir. Bu, GIS projelerinde veri sunumu ve raporlama için kritik bir özelliktir.
1.1. Obje Görselleştirme
Objelerin renk, çizgi tipi veya sembol gibi özelliklerini değiştirerek görsel vurgular oluşturulabilir.
- Örnek: Alan Objelerini Alana Göre Renklendirme:
Sub Main Dim i, o, maxArea, minArea With Netcad ' Maksimum ve minimum alanı bul maxArea = 0 minArea = 999999999 For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then If o.area > maxArea Then maxArea = o.area If o.area < minArea Then minArea = o.area End If Next ' Alanlara göre renklendirme For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then If o.area < (minArea + (maxArea - minArea) / 3) Then o.renk = Blue ' Küçük alanlar ElseIf o.area < (minArea + 2 * (maxArea - minArea) / 3) Then o.renk = Green ' Orta alanlar Else o.renk = Red ' Büyük alanlar End If .PutObject i, o End If Next .Redraw MsgBox "Alanlar renklendirildi." End With End Sub
1.2. Harita Çıktıları Oluşturma
Netcad, harita çıktılarını PDF veya görüntü formatında dışa aktarmak için PrintToFile metodunu destekler.
- Örnek: Harita Çıktısını PDF Olarak Kaydetme:
Sub Main Dim bd, dosyaYolu With Netcad Set bd = .NewBDialog("Harita Çıktısı") bd.GetFileName "dosya", "PDF Dosyası Seç", "", "PDF Dosyaları|*.pdf", "pdf" If bd.ShowModal Then dosyaYolu = bd.ValueByName("dosya") .SetParam PNC_PRINTMODE, 1 ' PDF çıktısı .PrintToFile dosyaYolu MsgBox "Harita PDF olarak kaydedildi: " & dosyaYolu End If End With End Sub
1.3. Etiketleme ve Açıklama Ekleme
Projeye otomatik etiketler veya açıklamalar eklemek için MakeText kullanılır.
- Örnek: Alan Objelerine Alan Değerlerini Etiketleme:
Sub Main Dim i, o, textObj, center With Netcad For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then Set poly = .GetPlineExt(o) Set center = poly.CenterOfMass Set textObj = .MakeText(Format(o.area, "0.00") & " m²", center, 0, 0, 2, 0, 0) textObj.renk = Black .AddObject textObj End If Next .Redraw MsgBox "Alan etiketleri eklendi." End With End Sub
2. Otomasyon için İleri Düzey Makro Örnekleri
Netcad makroları, toplu veri işleme, pafta oluşturma ve diğer tekrarlayan görevleri otomatikleştirmek için idealdir.
2.1. Toplu Veri İşleme
Bu makro, projedeki tüm noktaların koordinatlarını bir Excel dosyasına aktarır.
Sub Main
Dim i, xls, wb, ws, row
With Netcad
Set xls = CreateObject("excel.application")
Set wb = xls.Workbooks.Add
Set ws = wb.Sheets(1)
ws.Cells(1, 1).Value = "Nokta Adı"
ws.Cells(1, 2).Value = "X Koordinatı"
ws.Cells(1, 3).Value = "Y Koordinatı"
ws.Cells(1, 4).Value = "Z Koordinatı"
row = 2
For i = 0 To .NumObject - 1
Set o = .GetObject(i)
If o.Tag = opoint Then
ws.Cells(row, 1).Value = o.pname
ws.Cells(row, 2).Value = o.p1.x
ws.Cells(row, 3).Value = o.p1.y
ws.Cells(row, 4).Value = o.p1.z
row = row + 1
End If
Next
wb.SaveAs "C:\Rapor\nokta_koordinatlari.xlsx"
xls.Quit
MsgBox "Koordinatlar Excel'e aktarıldı: C:\Rapor\nokta_koordinatlari.xlsx"
End With
End Sub
2.2. Otomatik Pafta Oluşturma
Bu makro, projeyi düzenli paftalara böler ve her paftayı ayrı bir obje olarak ekler.
Sub Main
Dim bd, paftaGenislik, paftaYukseklik, x, y, paftaObj
With Netcad
Set bd = .NewBDialog("Pafta Oluşturma")
bd.GetFloat "genislik", "Pafta Genişliği (Metre)", 1000, 2
bd.GetFloat "yukseklik", "Pafta Yüksekliği (Metre)", 1000, 2
If bd.ShowModal Then
paftaGenislik = bd.ValueByName("genislik")
paftaYukseklik = bd.ValueByName("yukseklik")
' Proje sınırlarını al
Set bounds = .GetProjectBounds
For x = bounds.xmin To bounds.xmax Step paftaGenislik
For y = bounds.ymin To bounds.ymax Step paftaYukseklik
Set paftaObj = .MakeRectangle(.NewC(x, y, 0), .NewC(x + paftaGenislik, y + paftaYukseklik, 0), 0, 0, 0)
paftaObj.renk = Cyan
.AddObject paftaObj
Next
Next
.Redraw
MsgBox "Paftalar oluşturuldu."
End If
End With
End Sub
3. Performans Optimizasyonu ve Ölçeklenebilirlik
Büyük projelerde Netcad makrolarının performansını artırmak için aşağıdaki teknikler kullanılabilir.
3.1. Toplu İşlemler
BeginBlock ve EndBlock metodları, birden fazla objeyi aynı anda güncelleyerek performansı artırır.
Sub Main
Dim i, o
With Netcad
.SetParam BeginBlock, True
For i = 0 To .NumObject - 1
Set o = .GetObject(i)
If o.Tag = opline Then
o.renk = Red
.PutObject i, o
End If
Next
.SetParam EndBlock, True
.Redraw
MsgBox "Tüm alanlar kırmızıya boyandı."
End With
End Sub
3.2. Filtreleme ile Optimizasyon
Büyük projelerde yalnızca gerekli objeleri işlemek için filtreleme kullanılır.
Sub Main
Dim o
With Netcad
.SetFilter Nothing, Array("PARSEL"), Array(opline)
While .GetNextObject2(o)
o.renk = Green
.PutObject .CurObjPos, o
Wend
.ResetFilter
.Redraw
MsgBox "Parseller yeşile boyandı."
End With
End Sub
3.3. Bellek Yönetimi
Kullanılmayan nesneleri serbest bırakmak, bellek kullanımını azaltır.
Sub Main
Dim i, o, SEL
With Netcad
Set SEL = .NewSelectionSet
If SEL.Select("Objeleri Seç", Array(opline)) Then
For i = 0 To SEL.NE - 1
Set o = SEL.GetSelectedObject(i)
o.renk = Blue
.PutObject SEL.GetSelectedObjectIndex(i), o
Set o = Nothing
Next
SEL.RedrawAndRewind
End If
Set SEL = Nothing
MsgBox "Seçilen objeler maviye boyandı."
End With
End Sub
4. Açık Kaynak GIS Araçlarıyla Entegrasyon
Netcad makroları, açık kaynak GIS araçlarıyla (örneğin, QGIS, PostGIS) veri alışverişi için kullanılabilir. Bu, Netcad projelerini daha geniş bir ekosistemle entegre eder.
4.1. QGIS ile Veri Aktarımı
Netcad projesindeki veriler, CSV dosyaları aracılığıyla QGIS’e aktarılabilir.
- Örnek: Nokta Verilerini CSV’ye Aktarma:
Sub Main Dim i, o, fso, f With Netcad Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Export\noktalar.csv", 2, True) f.WriteLine "Ad,X,Y,Z" For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opoint Then f.WriteLine o.pname & "," & o.p1.x & "," & o.p1.y & "," & o.p1.z End If Next f.Close MsgBox "Nokta verileri CSV'ye aktarıldı: C:\Export\noktalar.csv" End With End Sub
4.2. PostGIS ile Entegrasyon
Netcad verileri, PostGIS veritabanına aktarılmak için SQL dosyalarına dönüştürülebilir.
- Örnek: Alan Verilerini SQL Insert Komutlarına Dönüştürme:
Sub Main Dim i, o, fso, f, wkt With Netcad Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Export\alanlar.sql", 2, True) For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then Set poly = .GetPlineExt(o) wkt = "POLYGON((" For j = 0 To poly.Num - 1 wkt = wkt & poly.Cor(j).x & " " & poly.Cor(j).y If j < poly.Num - 1 Then wkt = wkt & "," Next wkt = wkt & "))" f.WriteLine "INSERT INTO alanlar (ad, geom) VALUES ('" & o.pname & "', ST_GeomFromText('" & wkt & "'));" End If Next f.Close MsgBox "SQL dosyası oluşturuldu: C:\Export\alanlar.sql" End With End Sub
5. Eğitim için Pratik Projeler ve Vaka Çalışmaları
Başka bir GPT modelinin Netcad makro yazımı konusunda pratik deneyim kazanması için aşağıdaki projeler önerilir.
5.1. Proje 1: Kadastro Verilerinin Temizlenmesi
- Amaç: Bir kadastro projesindeki Türkçe karakter hatalarını düzeltmek ve parsel alanlarını yuvarlamak.
- Makro Örneği:
Sub Main Dim i, o, bd, hassasiyet With Netcad Set bd = .NewBDialog("Kadastro Verisi Temizleme") bd.GetInteger "hassasiyet", "Alan Hassasiyeti (Basamak)", 2 If bd.ShowModal Then hassasiyet = bd.ValueByName("hassasiyet") For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then o.pname = Replace(o.pname, "Ü", "Ü") o.pname = Replace(o.pname, "Å", "Ş") o.tarea = Round(o.area, hassasiyet) .PutObject i, o End If Next .Redraw MsgBox "Kadastro verileri temizlendi." End If End With End Sub
5.2. Proje 2: Arazi Kullanım Analizi
- Amaç: Bir bölgedeki arazi kullanım türlerini (tarım, orman, yerleşim) analiz ederek bir rapor üretmek.
- Makro Örneği:
Sub Main Dim i, o, tarim, orman, yerlesim, fso, f With Netcad Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Rapor\arazi_kullanim.txt", 2, True) f.WriteLine "Arazi Kullanım Analizi" f.WriteLine "---------------------" For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then If o.cls = "TARIM" Then tarim = tarim + o.area ElseIf o.cls = "ORMAN" Then orman = orman + o.area ElseIf o.cls = "YERLESIM" Then yerlesim = yerlesim + o.area End If End If Next f.WriteLine "Tarım Alanı: " & tarim & " m²" f.WriteLine "Orman Alanı: " & orman & " m²" f.WriteLine "Yerleşim Alanı: " & yerlesim & " m²" f.Close MsgBox "Rapor oluşturuldu: C:\Rapor\arazi_kullanim.txt" End With End Sub
5.3. Vaka Çalışması: Şehir Planlama için Otomatik Pafta ve Etiketleme
- Senaryo: Bir şehir planlama projesinde, her parsele alan etiketleri eklenmeli ve proje 500×500 metrelik paftalara bölünmelidir.
- Çözüm: Yukarıdaki “Otomatik Pafta Oluşturma” ve “Alan Objelerine Etiketleme” makroları birleştirilerek kullanılabilir.
6. Sonuç ve Eğitim için İleri Öneriler
Bu materyal, Netcad makro yazımının veri görselleştirme, otomasyon, performans optimizasyonu, açık kaynak GIS araçlarıyla entegrasyon ve pratik projeler gibi ileri düzey uygulamalarını kapsamlı bir şekilde ele aldı. Netcad API’si, Visual Basic ile birleştiğinde, GIS ve harita mühendisliği projelerinde güçlü bir otomasyon ve analiz aracı sunar.
Başka bir GPT modelini eğitmek için şu ileri öneriler dikkate alınabilir:
- Etkileşimli Simülasyonlar: Netcad projelerini simüle eden bir sanal ortam oluşturarak, modelin makroları test etmesini sağlayın.
- Veri Setleri: Çeşitli Netcad proje dosyaları (örneğin, kadastro, arazi kullanım, altyapı) sağlayarak, modelin farklı senaryolar üzerinde çalışmasını teşvik edin.
- Topluluk Katılımı: Netcad kullanıcı topluluklarından (örneğin, forumlar, X platformu) gerçek dünya sorunlarını toplayarak, modelin problem çözme becerilerini geliştirin.
- Sertifikasyon Programı: Netcad makro yazımı için bir eğitim müfredatı oluşturarak, modelin öğrenme sürecini yapılandırın.
Bu doküman, Netcad makro yazımı konusunda eksiksiz bir rehber olarak kullanılabilir ve başka bir GPT modelinin bu alanda tam bir uzman haline gelmesine olanak tanır.
Netcad Makro Yazımı Eğitim Materyali – Bölüm 5
Bu bölüm, Netcad makro yazımıyla ilgili yenilikçi ve ileri düzey uygulamaları ele alarak, Visual Basic diliyle Netcad API’sini kullanarak karmaşık ve modern GIS işlemlerini gerçekleştirme tekniklerini derinlemesine açıklamaktadır. Önceki bölümlerde obje türleri, diyalog pencereleri, dosya işlemleri, geometrik işlemler, modül entegrasyonları, veri analizi, veri görselleştirme, otomasyon, performans optimizasyonu ve açık kaynak GIS araçlarıyla entegrasyon gibi konular kapsamlı bir şekilde işlenmişti. Bu bölümde, yapay zeka destekli analizler, zaman serisi verileriyle çalışma, çok kullanıcılı iş birliği, modüler kod yapıları ve interaktif vaka çalışmaları gibi konulara odaklanılacaktır. Materyal, Netcad makrolarının modern GIS projelerindeki yenilikçi potansiyelini ortaya koyarak, başka bir GPT modelinin bu alanda tam bir uzman haline gelmesini sağlayacak şekilde hazırlanmıştır.
1. Netcad Makrolarıyla Yapay Zeka Destekli GIS Analizleri
Netcad makroları, yapay zeka (AI) algoritmalarıyla entegre edilerek GIS verilerinden anlamlı içgörüler çıkarabilir. Örneğin, sınıflandırma, kümeleme veya öngörü modelleri için Netcad verileri hazırlanabilir ve harici AI araçlarıyla işlenebilir.
1.1. Veri Hazırlığı için Makrolar
Netcad projelerindeki veriler, AI modellerine uygun formatta dışa aktarılabilir (örneğin, CSV veya JSON).
- Örnek: Parsel Verilerini AI Modeli için Hazırlama:
Sub Main Dim i, o, fso, f With Netcad Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\AI_Data\parsel_verileri.csv", 2, True) f.WriteLine "ParselNo,Alan,Perimetre,GISSinifi" For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then f.WriteLine o.pname & "," & o.area & "," & o.length(0) & "," & o.cls End If Next f.Close MsgBox "AI modeli için veri hazırlandı: C:\AI_Data\parsel_verileri.csv" End With End Sub
1.2. AI Çıktılarını Netcad’e Aktarma
AI modellerinden elde edilen sonuçlar (örneğin, sınıflandırma etiketleri) Netcad projesine geri aktarılabilir.
- Örnek: AI Sınıflandırma Sonuçlarını Objelerde Güncelleme:
Sub Main Dim xls, wb, ws, i, j, o, SEL, bd, xlspath With Netcad Set bd = .NewBDialog("AI Sonuçlarını Aktarma") bd.GetFileName "dosya", "Excel Dosyası Seç", "", "Excel Dosyaları|*.xlsx", "xlsx" If bd.ShowModal Then xlspath = bd.ValueByName("dosya") Set xls = CreateObject("excel.application") Set wb = xls.Workbooks.Open(xlspath) Set ws = wb.Sheets(1) Set SEL = .NewSelectionSet Set o = .NewObject For i = 2 To ws.UsedRange.Rows.Count parselNo = ws.Cells(i, 1).Value yeniSinif = ws.Cells(i, 2).Value For j = 0 To .NumObject - 1 Set o = .GetObject(j) If o.Tag = opline And o.pname = parselNo Then o.cls = yeniSinif .PutObject j, o Exit For End If Next Next wb.Close xls.Quit .Redraw MsgBox "AI sınıflandırma sonuçları aktarıldı." End If End With End Sub
1.3. Örnek Senaryo: Arazi Kullanım Tahmini
Bir makro, parsel verilerini bir AI modeline (örneğin, Python’da scikit-learn ile eğitilmiş bir model) uygun şekilde hazırlar, model çıktısını alır ve Netcad projesinde görselleştirir.
2. Zaman Serisi Verileriyle Çalışma ve Dinamik Haritalar
Netcad makroları, zaman serisi verilerini işleyerek dinamik haritalar oluşturabilir. Örneğin, bir bölgedeki arazi kullanım değişiklikleri veya altyapı gelişimi zaman içinde analiz edilebilir.
2.1. Zaman Serisi Verilerini İşleme
Birden fazla Netcad projesinden (örneğin, farklı yıllara ait projeler) veri toplanabilir.
- Örnek: Yıllara Göre Alan Değişim Analizi:
Sub Main Dim bd, dosyaListesi, i, j, o, fso, f, alanlar With Netcad Set bd = .NewBDialog("Zaman Serisi Analizi") bd.GetFileName "dosyalar", "Proje Dosyalarını Seç", "", "Netcad Projeleri|*.ncp", "ncp", True If bd.ShowModal Then dosyaListesi = Split(bd.ValueByName("dosyalar"), "|") Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Rapor\zaman_serisi.txt", 2, True) f.WriteLine "Zaman Serisi Alan Analizi" f.WriteLine "------------------------" For Each dosya In dosyaListesi .OpenProject dosya alanToplam = 0 For j = 0 To .NumObject - 1 Set o = .GetObject(j) If o.Tag = opline And o.tabaka = "PARSEL" Then alanToplam = alanToplam + o.area End If Next f.WriteLine "Proje: " & dosya & " - Toplam Alan: " & alanToplam & " m²" Next f.Close MsgBox "Analiz tamamlandı: C:\Rapor\zaman_serisi.txt" End If End With End Sub
2.2. Dinamik Haritalar Oluşturma
Zaman serisi verilerini görselleştirmek için objelere renk veya etiket atamaları yapılabilir.
- Örnek: Yıllara Göre Parsel Değişimlerini Renklendirme:
Sub Main Dim i, o, bd, eskiProje, yeniProje With Netcad Set bd = .NewBDialog("Parsel Değişim Görselleştirme") bd.GetFileName "eski", "Eski Proje Dosyası", "", "Netcad Projeleri|*.ncp", "ncp" bd.GetFileName "yeni", "Yeni Proje Dosyası", "", "Netcad Projeleri|*.ncp", "ncp" If bd.ShowModal Then eskiProje = bd.ValueByName("eski") yeniProje = bd.ValueByName("yeni") .OpenProject yeniProje For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then Set eskiO = .GetObjectByNameFromProject(eskiProje, o.pname) If Not eskiO Is Nothing Then If Abs(o.area - eskiO.area) > 100 Then o.renk = Red ' Değişen parseller kırmızı Else o.renk = Green ' Değişmeyen parseller yeşil End If .PutObject i, o End If End If Next .Redraw MsgBox "Değişimler görselleştirildi." End If End With End Sub
3. Çok Kullanıcılı Projeler için İş Birliği Araçları
Netcad makroları, çok kullanıcılı GIS projelerinde iş birliğini kolaylaştırmak için kullanılabilir. Örneğin, tabaka kilitleme, veri paylaşımı veya değişiklik takibi gibi özellikler eklenebilir.
3.1. Tabaka Kilitleme
Bir makro, belirli tabakaları kilit ederek diğer kullanıcıların değişiklik yapmasını engelleyebilir.
- Örnek: Tabaka Kilitleme Makrosu:
Sub Main Dim bd, tabaka With Netcad Set bd = .NewBDialog("Tabaka Kilitleme") bd.GetCombo "tabaka", "Kilitlenecek Tabaka", "", 0 For i = 0 To .NumLayers - 1 bd.AddCombo .LayerNameOf(i) Next If bd.ShowModal Then tabaka = bd.ValueByName("tabaka") .SetLayerLock tabaka, True MsgBox "Tabaka kilitlendi: " & tabaka End If End With End Sub
3.2. Değişiklik Takibi
Değişiklikleri bir log dosyasına kaydederek ekip üyeleri arasında şeffaflık sağlanabilir.
- Örnek: Obje Değişikliklerini Loglama:
Sub Main Dim i, o, fso, f With Netcad Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Log\degisiklik_log.txt", 8, True) For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline And o.modified Then f.WriteLine Now & ": Parsel " & o.pname & " değiştirildi. Yeni alan: " & o.area o.renk = Yellow .PutObject i, o End If Next f.Close .Redraw MsgBox "Değişiklikler loglandı: C:\Log\degisiklik_log.txt" End With End Sub
4. Modüler ve Yeniden Kullanılabilir Kod Yapıları
Netcad makrolarını daha sürdürülebilir ve yeniden kullanılabilir hale getirmek için modüler bir yaklaşım benimsenmelidir.
4.1. Fonksiyon ve Prosedür Tanımlama
Ortak görevler için ayrı fonksiyonlar veya prosedürler yazılabilir.
- Örnek: Koordinat Yuvarlama Fonksiyonu:
Function YuvarlaKoordinat(koordinat As Double, hassasiyet As Integer) As Double YuvarlaKoordinat = Round(koordinat, hassasiyet) End Function Sub Main Dim i, o, bd, hassasiyet With Netcad Set bd = .NewBDialog("Koordinat Yuvarlama") bd.GetInteger "hassasiyet", "Ondalık Hassasiyet", 2 If bd.ShowModal Then hassasiyet = bd.ValueByName("hassasiyet") For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opoint Then o.p1.x = YuvarlaKoordinat(o.p1.x, hassasiyet) o.p1.y = YuvarlaKoordinat(o.p1.y, hassasiyet) o.p1.z = YuvarlaKoordinat(o.p1.z, hassasiyet) .PutObject i, o End If Next .Redraw MsgBox "Koordinatlar yuvarlandı." End If End With End Sub
4.2. Makro Kütüphanesi Oluşturma
Yaygın kullanılan makrolar bir kütüphanede toplanabilir ve diğer projelerde yeniden kullanılabilir.
- Örnek: Genel Amaçlı Kütüphane:
' NetcadMakroKutuphanesi.vbs Function YuvarlaKoordinat(koordinat As Double, hassasiyet As Integer) As Double YuvarlaKoordinat = Round(koordinat, hassasiyet) End Function Sub RenklendirByArea(o As Object, minArea As Double, maxArea As Double) If o.area < (minArea + (maxArea - minArea) / 3) Then o.renk = Blue ElseIf o.area < (minArea + 2 * (maxArea - minArea) / 3) Then o.renk = Green Else o.renk = Red End If End Sub Sub LogYaz(mesaj As String) Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Log\genel_log.txt", 8, True) f.WriteLine Now & ": " & mesaj f.Close End Sub
- Kütüphaneyi Kullanma:
Sub Main ' Kütüphaneyi dahil et (örneğin, dosya referansı ile) Dim i, o, minArea, maxArea With Netcad minArea = 999999999 maxArea = 0 For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then If o.area < minArea Then minArea = o.area If o.area > maxArea Then maxArea = o.area End If Next For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then Call RenklendirByArea(o, minArea, maxArea) .PutObject i, o Call LogYaz("Parsel " & o.pname & " renklendirildi.") End If Next .Redraw MsgBox "Renklendirme tamamlandı." End With End Sub
5. Eğitim için İnteraktif Vaka Çalışmaları
Başka bir GPT modelinin Netcad makro yazımı konusunda pratik deneyim kazanması için aşağıdaki interaktif vaka çalışmaları önerilir.
5.1. Vaka Çalışması 1: Altyapı Planlama için Otomatik Analiz
- Senaryo: Bir şehirde su boru hatlarının yerleşim alanlarına olan mesafelerini analiz ederek, riskli bölgeleri tespit etmek.
- Makro Örneği:
Sub Main Dim i, j, o, poly, boru, mesafe, fso, f With Netcad Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Rapor\risk_analizi.txt", 2, True) f.WriteLine "Altyapı Risk Analizi" f.WriteLine "-------------------" .SetFilter Nothing, Array("BORU"), Array(oline) While .GetNextObject2(boru) .SetFilter Nothing, Array("YERLESIM"), Array(opline) While .GetNextObject2(o) Set poly = .GetPlineExt(o) mesafe = NCMath.DistanceToPoly(boru.p1, poly) If mesafe < 50 Then f.WriteLine "Yerleşim: " & o.pname & " - Boru Mesafesi: " & mesafe & " m (Riskli)" o.renk = Red .PutObject .CurObjPos, o End If Wend .ResetFilter Wend .ResetFilter f.Close .Redraw MsgBox "Analiz tamamlandı: C:\Rapor\risk_analizi.txt" End With End Sub
5.2. Vaka Çalışması 2: Dinamik Kadastro Güncelleme
- Senaryo: Yeni ölçüm verilerini bir kadastro projesine entegre ederek, değişen parselleri işaretlemek.
- Makro Örneği:
Sub Main Dim bd, yeniVeri, i, o, yeniO, SEL With Netcad Set bd = .NewBDialog("Kadastro Güncelleme") bd.GetFileName "veri", "Yeni Ölçüm Dosyası", "", "Netcad Projeleri|*.ncp", "ncp" If bd.ShowModal Then yeniVeri = bd.ValueByName("veri") Set SEL = .NewSelectionSet For i = 0 To .NumObject - 1 Set o = .GetObject(i) If o.Tag = opline Then Set yeniO = .GetObjectByNameFromProject(yeniVeri, o.pname) If Not yeniO Is Nothing Then If Abs(o.area - yeniO.area) > 10 Then o.renk = Yellow o.tarea = yeniO.area .PutObject i, o SEL.AddObject o End If End If End If Next SEL.RedrawAndRewind MsgBox "Güncellenen parseller işaretlendi." End If End With End Sub
6. Netcad Makro Kütüphanesi Oluşturma
Eğitim sürecini desteklemek için, yaygın kullanılan makrolardan oluşan bir kütüphane oluşturmak faydalı olacaktır. Bu kütüphane, başka bir GPT modelinin Netcad makrolarını hızlıca öğrenmesini ve uygulamasını sağlar.
- Kütüphane Yapısı:
- Veri İşleme: Koordinat yuvarlama, Türkçe karakter düzeltme.
- Görselleştirme: Renklendirme, etiketleme.
- Analiz: Alan/perimetre hesaplama, mesafe analizi.
- Otomasyon: Pafta oluşturma, toplu veri aktarımı.
- Entegrasyon: Excel, QGIS, PostGIS ile veri alışverişi.
- Örnek Kütüphane Dosyası:
' NetcadMakroKutuphanesi.vbs Sub TurkceKarakterDuzelt(o As Object) o.pname = Replace(o.pname, "Ü", "Ü") o.pname = Replace(o.pname, "Å", "Ş") o.pname = Replace(o.pname, "Ä", "ğ") o.pname = Replace(o.pname, "Ç", "Ç") o.pname = Replace(o.pname, "İ", "İ") o.pname = Replace(o.pname, "Ö", "Ö") End Sub Sub EtiketEkle(o As Object, Netcad As Object) If o.Tag = opline Then Set poly = Netcad.GetPlineExt(o) Set center = poly.CenterOfMass Set textObj = Netcad.MakeText(Format(o.area, "0.00") & " m²", center, 0, 0, 2, 0, 0) textObj.renk = Black Netcad.AddObject textObj End If End Sub Function MesafeHesapla(p1 As Object, p2 As Object) As Double MesafeHesapla = Sqr((p2.x - p1.x) ^ 2 + (p2.y - p1.y) ^ 2) End Function
7. Sonuç ve Eğitim için İleri Öneriler
Bu materyal, Netcad makro yazımının yapay zeka entegrasyonu, zaman serisi analizi, çok kullanıcılı iş birliği, modüler kod yapıları ve interaktif vaka çalışmaları gibi yenilikçi uygulamalarını kapsamlı bir şekilde ele aldı. Netcad API’si, Visual Basic ile birleştiğinde, modern GIS projelerinde otomasyon, analiz ve görselleştirme için güçlü bir araç sunar.
Başka bir GPT modelini eğitmek için şu ileri öneriler dikkate alınabilir:
- İnteraktif Eğitim Platformu: Netcad makrolarını test etmek için bir web tabanlı sandbox ortamı geliştirin.
- Kapsamlı Veri Setleri: Farklı GIS senaryolarını kapsayan Netcad proje dosyaları (örneğin, kadastro, altyapı, çevre planlama) sağlayın.
- Topluluk Odaklı Öğrenme: Netcad kullanıcı topluluklarından (örneğin, X platformu veya yerel GIS forumları) gerçek dünya sorunlarını toplayarak, modelin pratik problem çözme becerilerini geliştirin.
- Sürekli Öğrenme: Netcad’in yeni sürümleri veya API güncellemeleriyle uyumlu olacak şekilde modelin eğitimini düzenli olarak güncelleyin.
Bu doküman, Netcad makro yazımı konusunda eksiksiz bir rehber olarak kullanılabilir ve başka bir GPT modelinin bu alanda tam bir uzman haline gelmesine olanak tanır.
‘ Profesyonel Netcad Makroları
‘ Bu dosya, Netcad platformunda Visual Basic ile yazılmış profesyonel makroları içerir.
‘ Her makro, modüler, hata yönetimine sahip ve kullanıcı dostu bir şekilde tasarlanmıştır.
‘ Tarih: 18 Mayıs 2025
‘ Yazar: Grok 3 (xAI)
Option Explicit
‘ Genel hata loglama fonksiyonu
Sub LogHata(mesaj As String)
Dim fso, f
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set f = fso.OpenTextFile(“C:\NetcadLog\makro_hata.log”, 8, True)
f.WriteLine Now & “: ” & mesaj
f.Close
End Sub
‘ Genel mesaj gösterme fonksiyonu
Sub GosterMesaj(baslik As String, mesaj As String, tip As Integer)
MsgBox mesaj, tip, baslik
End Sub
‘ === Makro 1: Kadastro Verisi Güncelleme ve Doğrulama ===
‘ Açıklama: Bu makro, yeni ölçüm verilerini mevcut bir kadastro projesine entegre eder,
‘ hatalı verileri tespit eder (örneğin, alan farkları, eksik parseller) ve bir rapor üretir.
Sub KadastroGuncelleme()
On Error Resume Next
Dim bd, yeniProje, raporDosya, hassasiyet, i, j, o, yeniO, SEL, fso, f
Dim degisenParseller, eksikParseller, hataSayisi
degisenParseller = 0
eksikParseller = 0
hataSayisi = 0
With Netcad
' Diyalog penceresi oluştur
Set bd = .NewBDialog("Kadastro Verisi Güncelleme ve Doğrulama")
bd.PutPrompt "Yeni ölçüm verilerini mevcut projeye entegre edin ve doğrulamaları yapın."
bd.GetFileName "yeniProje", "Yeni Ölçüm Dosyası", "", "Netcad Projeleri|*.ncp", "ncp"
bd.GetFileName "rapor", "Rapor Dosyası", "C:\Rapor\kadastro_rapor.txt", "Text Dosyaları|*.txt", "txt"
bd.GetFloat "hassasiyet", "Alan Farkı Hassasiyeti (m²)", 10, 2
bd.GetCheck "turkceDuzelt", "Türkçe Karakterleri Düzelt", 1
If Not bd.ShowModal Then
GosterMesaj "Bilgi", "İşlem iptal edildi.", 64
Exit Sub
End If
' Kullanıcı girişlerini al
yeniProje = bd.ValueByName("yeniProje")
raporDosya = bd.ValueByName("rapor")
hassasiyet = bd.ValueByName("hassasiyet")
Dim turkceDuzelt
turkceDuzelt = bd.ValueByName("turkceDuzelt")
' Hata kontrolü
If yeniProje = "" Then
GosterMesaj "Hata", "Yeni proje dosyası seçilmedi.", 16
Exit Sub
End If
' Rapor dosyasını başlat
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(raporDosya, 2, True)
f.WriteLine "Kadastro Güncelleme ve Doğrulama Raporu"
f.WriteLine "Tarih: " & Now
f.WriteLine "--------------------------------------"
' Mevcut projedeki parselleri tarama
Set SEL = .NewSelectionSet
Set o = .NewObject
.SetFilter Nothing, Array("PARSEL"), Array(opline)
While .GetNextObject2(o)
' Yeni projeden aynı parseli bul
Set yeniO = .GetObjectByNameFromProject(yeniProje, o.pname)
If yeniO Is Nothing Then
eksikParseller = eksikParseller + 1
f.WriteLine "Eksik Parsel: " & o.pname
Else
' Alan farkını kontrol et
If Abs(o.area - yeniO.area) > hassasiyet Then
degisenParseller = degisenParseller + 1
f.WriteLine "Değişen Parsel: " & o.pname & " - Eski Alan: " & o.area & " m², Yeni Alan: " & yeniO.area & " m²"
o.tarea = yeniO.area
o.renk = Yellow ' Değişenleri işaretle
.PutObject .CurObjPos, o
SEL.AddObject o
End If
' Türkçe karakter düzeltme
If turkceDuzelt = 1 Then
Call TurkceKarakterDuzelt(o)
.PutObject .CurObjPos, o
End If
End If
Wend
.ResetFilter
' Hata kontrolü
If Err.Number <> 0 Then
hataSayisi = hataSayisi + 1
Call LogHata("Hata: " & Err.Description)
f.WriteLine "Hata: " & Err.Description
End If
' Raporu tamamla
f.WriteLine "--------------------------------------"
f.WriteLine "Toplam Değişen Parsel: " & degisenParseller
f.WriteLine "Toplam Eksik Parsel: " & eksikParseller
f.WriteLine "Toplam Hata: " & hataSayisi
f.Close
' Ekranı güncelle
SEL.RedrawAndRewind
GosterMesaj "Bilgi", "Güncelleme tamamlandı. Rapor: " & raporDosya, 64
End With
' Belleği temizle
Set bd = Nothing
Set SEL = Nothing
Set o = Nothing
Set yeniO = Nothing
Set fso = Nothing
Set f = Nothing
End Sub
‘ Türkçe karakter düzeltme prosedürü
Sub TurkceKarakterDuzelt(o As Object)
o.pname = Replace(o.pname, “Ü”, “Ü”)
o.pname = Replace(o.pname, “Å”, “Ş”)
o.pname = Replace(o.pname, “Ä”, “ğ”)
o.pname = Replace(o.pname, “Ç”, “Ç”)
o.pname = Replace(o.pname, “İ”, “İ”)
o.pname = Replace(o.pname, “Ö”, “Ö”)
o.pname = Replace(o.pname, “ü”, “ü”)
o.pname = Replace(o.pname, “ÅŸ”, “ş”)
o.pname = Replace(o.pname, “ÄŸ”, “ğ”)
o.pname = Replace(o.pname, “ç”, “ç”)
o.pname = Replace(o.pname, “ı”, “ı”)
o.pname = Replace(o.pname, “ö”, “ö”)
End Sub
‘ === Makro 2: Otomatik Harita Çıktısı ve Pafta Yönetim ===
‘ Açıklama: Bu makro, proje alanını düzenli paftalara böler, her paftaya etiket ekler
‘ ve her pafta için ayrı PDF çıktıları üretir.
Sub PaftaYonetimi()
On Error Resume Next
Dim bd, paftaGenislik, paftaYukseklik, ciktiKlasor, x, y, paftaObj, textObj
Dim paftaSayisi, hataSayisi, bounds, center
paftaSayisi = 0
hataSayisi = 0
With Netcad
' Diyalog penceresi oluştur
Set bd = .NewBDialog("Otomatik Pafta Yönetimi")
bd.PutPrompt "Proje alanını paftalara bölün ve PDF çıktıları üretin."
bd.GetFloat "genislik", "Pafta Genişliği (Metre)", 1000, 2
bd.GetFloat "yukseklik", "Pafta Yüksekliği (Metre)", 1000, 2
bd.GetFileName "klasor", "Çıktı Klasörü", "C:\PaftaCikti", "Klasör|*.*", ""
If Not bd.ShowModal Then
GosterMesaj "Bilgi", "İşlem iptal edildi.", 64
Exit Sub
End If
' Kullanıcı girişlerini al
paftaGenislik = bd.ValueByName("genislik")
paftaYukseklik = bd.ValueByName("yukseklik")
ciktiKlasor = bd.ValueByName("klasor")
' Klasör kontrolü ve oluşturma
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(ciktiKlasor) Then
fso.CreateFolder ciktiKlasor
End If
' Proje sınırlarını al
Set bounds = .GetProjectBounds
If bounds Is Nothing Then
GosterMesaj "Hata", "Proje sınırları alınamadı.", 16
Call LogHata("Proje sınırları alınamadı.")
Exit Sub
End If
' Paftaları oluştur
.SetParam BeginBlock, True
For x = bounds.xmin To bounds.xmax Step paftaGenislik
For y = bounds.ymin To bounds.ymax Step paftaYukseklik
paftaSayisi = paftaSayisi + 1
' Pafta dikdörtgeni oluştur
Set paftaObj = .MakeRectangle(.NewC(x, y, 0), .NewC(x + paftaGenislik, y + paftaYukseklik, 0), 0, 0, 0)
paftaObj.renk = Cyan
paftaObj.tabaka = "PAFTA"
.AddObject paftaObj
' Pafta etiketi ekle
Set center = .NewC(x + paftaGenislik / 2, y + paftaYukseklik / 2, 0)
Set textObj = .MakeText("Pafta " & paftaSayisi, center, 0, 0, 2, 0, 0)
textObj.renk = Black
.AddObject textObj
' PDF çıktısı üret
.ZoomToExtents x, y, x + paftaGenislik, y + paftaYukseklik
.SetParam PNC_PRINTMODE, 1 ' PDF çıktısı
.PrintToFile ciktiKlasor & "\Pafta_" & paftaSayisi & ".pdf"
If Err.Number <> 0 Then
hataSayisi = hataSayisi + 1
Call LogHata("Pafta " & paftaSayisi & " çıktısı alınamadı: " & Err.Description)
End If
Next
Next
.SetParam EndBlock, True
.Redraw
' Sonuç mesajı
GosterMesaj "Bilgi", paftaSayisi & " pafta oluşturuldu. Çıktılar: " & ciktiKlasor, 64
If hataSayisi > 0 Then
GosterMesaj "Uyarı", hataSayisi & " hata oluştu. Detaylar için log dosyasını kontrol edin.", 48
End If
End With
' Belleği temizle
Set bd = Nothing
Set paftaObj = Nothing
Set textObj = Nothing
Set bounds = Nothing
Set center = Nothing
Set fso = Nothing
End Sub
‘ === Makro 3: Arazi Kullanım Optimizasyon Analizi ===
‘ Açıklama: Bu makro, parsel verilerini analiz ederek arazi kullanımını optimize eder
‘ (örneğin, tarım, yerleşim, yeşil alan) ve sonuçları görselleştirir/raporlar.
Sub AraziKullanimOptimizasyonu()
On Error Resume Next
Dim bd, raporDosya, minAlan, maxMesafe, i, o, fso, f, SEL
Dim tarimAlan, yerlesimAlan, yesilAlan, hataSayisi
tarimAlan = 0
yerlesimAlan = 0
yesilAlan = 0
hataSayisi = 0
With Netcad
' Diyalog penceresi oluştur
Set bd = .NewBDialog("Arazi Kullanım Optimizasyon Analizi")
bd.PutPrompt "Parsel verilerini analiz ederek arazi kullanımını optimize edin."
bd.GetFileName "rapor", "Rapor Dosyası", "C:\Rapor\arazi_optimizasyon.txt", "Text Dosyaları|*.txt", "txt"
bd.GetFloat "minAlan", "Minimum Parsel Alanı (m²)", 500, 2
bd.GetFloat "maxMesafe", "Yerleşime Maksimum Mesafe (Metre)", 1000, 2
bd.GetCombo "siniflandirma", "Sınıflandırma Kriteri", "Alan|Mesafe|Karma", 0
If Not bd.ShowModal Then
GosterMesaj "Bilgi", "İşlem iptal edildi.", 64
Exit Sub
End If
' Kullanıcı girişlerini al
raporDosya = bd.ValueByName("rapor")
minAlan = bd.ValueByName("minAlan")
maxMesafe = bd.ValueByName("maxMesafe")
Dim siniflandirma
siniflandirma = bd.ValueByName("siniflandirma")
' Rapor dosyasını başlat
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(raporDosya, 2, True)
f.WriteLine "Arazi Kullanım Optimizasyon Raporu"
f.WriteLine "Tarih: " & Now
f.WriteLine "--------------------------------------"
' Yerleşim merkezini bul (örneğin, bir nokta objesi)
Dim merkezNokta, bulundu
bulundu = False
For i = 0 To .NumObject - 1
Set o = .GetObject(i)
If o.Tag = opoint And o.cls = "MERKEZ" Then
Set merkezNokta = o.p1
bulundu = True
Exit For
End If
Next
If Not bulundu Then
GosterMesaj "Hata", "Yerleşim merkezi noktası bulunamadı.", 16
f.WriteLine "Hata: Yerleşim merkezi noktası bulunamadı."
f.Close
Exit Sub
End If
' Parselleri analiz et
Set SEL = .NewSelectionSet
.SetParam BeginBlock, True
For i = 0 To .NumObject - 1
Set o = .GetObject(i)
If o.Tag = opline And o.tabaka = "PARSEL" Then
Dim mesafe, yeniSinif
mesafe = NCMath.Distance(o.p1, merkezNokta, False)
If siniflandirma = "Alan" Then
If o.area < minAlan Then
yeniSinif = "YESIL"
yesilAlan = yesilAlan + o.area
ElseIf o.area < minAlan * 3 Then
yeniSinif = "TARIM"
tarimAlan = tarimAlan + o.area
Else
yeniSinif = "YERLESIM"
yerlesimAlan = yerlesimAlan + o.area
End If
ElseIf siniflandirma = "Mesafe" Then
If mesafe < maxMesafe / 3 Then
yeniSinif = "YERLESIM"
yerlesimAlan = yerlesimAlan + o.area
ElseIf mesafe < maxMesafe Then
yeniSinif = "TARIM"
tarimAlan = tarimAlan + o.area
Else
yeniSinif = "YESIL"
yesilAlan = yesilAlan + o.area
End If
Else ' Karma
If o.area < minAlan And mesafe > maxMesafe Then
yeniSinif = "YESIL"
yesilAlan = yesilAlan + o.area
ElseIf o.area < minAlan * 3 Or mesafe < maxMesafe Then
yeniSinif = "TARIM"
tarimAlan = tarimAlan + o.area
Else
yeniSinif = "YERLESIM"
yerlesimAlan = yerlesimAlan + o.area
End If
End If
o.cls = yeniSinif
If yeniSinif = "YESIL" Then
o.renk = Green
ElseIf yeniSinif = "TARIM" Then
o.renk = Yellow
Else
o.renk = Red
End If
.PutObject i, o
SEL.AddObject o
f.WriteLine "Parsel: " & o.pname & " - Yeni Sınıf: " & yeniSinif & " - Alan: " & o.area & " m²"
End If
If Err.Number <> 0 Then
hataSayisi = hataSayisi + 1
Call LogHata("Parsel " & o.pname & " işlenirken hata: " & Err.Description)
f.WriteLine "Hata: Parsel " & o.pname & " - " & Err.Description
End If
Next
.SetParam EndBlock, True
' Raporu tamamla
f.WriteLine "--------------------------------------"
f.WriteLine "Toplam Tarım Alanı: " & tarimAlan & " m²"
f.WriteLine "Toplam Yerleşim Alanı: " & yerlesimAlan & " m²"
f.WriteLine "Toplam Yeşil Alan: " & yesilAlan & " m²"
f.WriteLine "Toplam Hata: " & hataSayisi
f.Close
' Ekranı güncelle
SEL.RedrawAndRewind
GosterMesaj "Bilgi", "Analiz tamamlandı. Rapor: " & raporDosya, 64
If hataSayisi > 0 Then
GosterMesaj "Uyarı", hataSayisi & " hata oluştu. Detaylar için log dosyasını kontrol edin.", 48
End If
End With
' Belleği temizle
Set bd = Nothing
Set SEL = Nothing
Set o = Nothing
Set merkezNokta = Nothing
Set fso = Nothing
Set f = Nothing
End Sub
‘ Ana çalıştırma prosedürü (örnek bir menü)
Sub Main()
Dim bd
With Netcad
Set bd = .NewBDialog(“Profesyonel Netcad Makroları”)
bd.PutPrompt “Lütfen bir işlem seçin:”
bd.GetRadio “islem”, “Yapılacak İşlem”, “Kadastro Güncelleme|Pafta Yönetimi|Arazi Kullanım Analizi”, 0
If bd.ShowModal Then
Dim secim
secim = bd.ValueByName(“islem”)
If secim = 0 Then
Call KadastroGuncelleme
ElseIf secim = 1 Then
Call PaftaYonetimi
Else
Call AraziKullanimOptimizasyonu
End If
Else
GosterMesaj “Bilgi”, “İşlem iptal edildi.”, 64
End If
End With
Set bd = Nothing
End Sub
‘ Profesyonel Netcad Makroları – Bölüm 2
‘ Bu dosya, Netcad platformunda Visual Basic ile yazılmış ileri düzey profesyonel makroları içerir.
‘ Makrolar, modüler, hata yönetimine sahip, kullanıcı dostu ve ölçeklenebilir şekilde tasarlanmıştır.
‘ Tarih: 18 Mayıs 2025, 10:44
‘ Yazar: Grok 3 (xAI)
Option Explicit
‘ Genel hata loglama fonksiyonu
Sub LogHata(mesaj As String)
Dim fso, f
Set fso = CreateObject(“Scripting.FileSystemObject”)
If Not fso.FolderExists(“C:\NetcadLog”) Then
fso.CreateFolder “C:\NetcadLog”
End If
Set f = fso.OpenTextFile(“C:\NetcadLog\makro_hata.log”, 8, True)
f.WriteLine FormatDateTime(Now, vbGeneralDate) & “: ” & mesaj
f.Close
Set f = Nothing
Set fso = Nothing
End Sub
‘ Genel mesaj gösterme fonksiyonu
Sub GosterMesaj(baslik As String, mesaj As String, tip As Integer)
MsgBox mesaj, tip, baslik
End Sub
‘ Türkçe karakter düzeltme prosedürü
Sub TurkceKarakterDuzelt(o As Object)
o.pname = Replace(o.pname, “Ü”, “Ü”)
o.pname = Replace(o.pname, “Å”, “Ş”)
o.pname = Replace(o.pname, “Ä”, “ğ”)
o.pname = Replace(o.pname, “Ç”, “Ç”)
o.pname = Replace(o.pname, “İ”, “İ”)
o.pname = Replace(o.pname, “Ö”, “Ö”)
o.pname = Replace(o.pname, “ü”, “ü”)
o.pname = Replace(o.pname, “ÅŸ”, “ş”)
o.pname = Replace(o.pname, “ÄŸ”, “ğ”)
o.pname = Replace(o.pname, “ç”, “ç”)
o.pname = Replace(o.pname, “ı”, “ı”)
o.pname = Replace(o.pname, “ö”, “ö”)
End Sub
‘ === Makro 1: Topografik Analiz ve Eğim Haritası Oluşturma ===
‘ Açıklama: Nokta verilerinden eğim analizi yapar, eğim sınıflarına göre renk kodlu bir harita üretir
‘ ve detaylı bir rapor oluşturur.
Sub TopografikEgimAnalizi()
On Error Resume Next
Dim bd, raporDosya, gridBoyut, i, o, SEL, fso, f, hataSayisi
Dim egimListesi, maxEgim, minEgim, noktaSayisi
ReDim egimListesi(0)
hataSayisi = 0
noktaSayisi = 0
maxEgim = 0
minEgim = 999999
With Netcad
' Diyalog penceresi oluştur
Set bd = .NewBDialog("Topografik Eğim Analizi")
bd.PutPrompt "Nokta verilerinden eğim analizi yaparak renk kodlu bir harita oluşturun."
bd.GetFileName "rapor", "Rapor Dosyası", "C:\Rapor\egim_raporu.txt", "Text Dosyaları|*.txt", "txt"
bd.GetFloat "grid", "Grid Boyutu (Metre)", 10, 2
bd.GetCombo "tabaka", "Nokta Tabakası", "", 0
For i = 0 To .NumLayers - 1
bd.AddCombo .LayerNameOf(i)
Next
If Not bd.ShowModal Then
GosterMesaj "Bilgi", "İşlem iptal edildi.", 64
Exit Sub
End If
' Kullanıcı girişlerini al
raporDosya = bd.ValueByName("rapor")
gridBoyut = bd.ValueByName("grid")
Dim noktaTabaka
noktaTabaka = bd.ValueByName("tabaka")
' Hata kontrolü
If noktaTabaka = "" Then
GosterMesaj "Hata", "Nokta tabakası seçilmedi.", 16
Exit Sub
End If
' Rapor dosyasını başlat
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(raporDosya, 2, True)
f.WriteLine "Topografik Eğim Analizi Raporu"
f.WriteLine "Tarih: " & FormatDateTime(Now, vbGeneralDate)
f.WriteLine "Grid Boyutu: " & gridBoyut & " m"
f.WriteLine "--------------------------------------"
' Nokta verilerini topla
.SetFilter Nothing, Array(noktaTabaka), Array(opoint)
Set SEL = .NewSelectionSet
While .GetNextObject2(o)
noktaSayisi = noktaSayisi + 1
ReDim Preserve egimListesi(noktaSayisi - 1)
egimListesi(noktaSayisi - 1) = Array(o.p1.x, o.p1.y, o.p1.z)
SEL.AddObject o
Wend
.ResetFilter
' Eğim analizi
Dim x, y, gridNoktalari, egim, gridObj
Set gridNoktalari = CreateObject("Scripting.Dictionary")
For i = 0 To noktaSayisi - 1
x = Int(egimListesi(i)(0) / gridBoyut) * gridBoyut
y = Int(egimListesi(i)(1) / gridBoyut) * gridBoyut
If Not gridNoktalari.Exists(x & "," & y) Then
gridNoktalari.Add x & "," & y, Array(0, 0, 0)
End If
Dim mevcut
mevcut = gridNoktalari(x & "," & y)
mevcut(0) = mevcut(0) + egimListesi(i)(2) ' Z toplamı
mevcut(1) = mevcut(1) + 1 ' Nokta sayısı
mevcut(2) = mevcut(0) / mevcut(1) ' Ortalama Z
gridNoktalari(x & "," & y) = mevcut
Next
' Grid noktaları için eğim hesapla ve görselleştir
.SetParam BeginBlock, True
For Each key In gridNoktalari.Keys
Dim coords, zOrt, komsuZ, egimToplam, komsuSayisi
coords = Split(key, ",")
x = CDbl(coords(0))
y = CDbl(coords(1))
zOrt = gridNoktalari(key)(2)
egimToplam = 0
komsuSayisi = 0
For dx = -gridBoyut To gridBoyut Step gridBoyut
For dy = -gridBoyut To gridBoyut Step gridBoyut
If dx = 0 And dy = 0 Then GoTo Continue
If gridNoktalari.Exists((x + dx) & "," & (y + dy)) Then
komsuZ = gridNoktalari((x + dx) & "," & (y + dy))(2)
egim = Abs(zOrt - komsuZ) / Sqr(dx ^ 2 + dy ^ 2)
egimToplam = egimToplam + egim
komsuSayisi = komsuSayisi + 1
End If
Continue:
Next
Next
If komsuSayisi > 0 Then
egim = egimToplam / komsuSayisi * 100 ‘ Yüzde eğim
If egim > maxEgim Then maxEgim = egim
If egim < minEgim Then minEgim = egim ‘ Grid karesini oluştur Set gridObj = .MakeRectangle(.NewC(x, y, 0), .NewC(x + gridBoyut, y + gridBoyut, 0), 0, 0, 0) If egim < 5 Then gridObj.renk = Green ‘ Düşük eğim ElseIf egim < 15 Then gridObj.renk = Yellow ‘ Orta eğim Else gridObj.renk = Red ‘ Yüksek eğim End If gridObj.tabaka = “EGIM_HARITASI” .AddObject gridObj f.WriteLine “Grid (” & x & “,” & y & “): Eğim = ” & Format(egim, “0.00”) & “%” End If If Err.Number <> 0 Then
hataSayisi = hataSayisi + 1
Call LogHata(“Grid ” & key & ” işlenirken hata: ” & Err.Description)
End If
Next
.SetParam EndBlock, True
' Raporu tamamla
f.WriteLine "--------------------------------------"
f.WriteLine "Nokta Sayısı: " & noktaSayisi
f.WriteLine "Minimum Eğim: " & Format(minEgim, "0.00") & "%"
f.WriteLine "Maksimum Eğim: " & Format(maxEgim, "0.00") & "%"
f.WriteLine "Hata Sayısı: " & hataSayisi
f.Close
' Ekranı güncelle
SEL.RedrawAndRewind
GosterMesaj "Bilgi", "Eğim analizi tamamlandı. Rapor: " & raporDosya, 64
If hataSayisi > 0 Then
GosterMesaj "Uyarı", hataSayisi & " hata oluştu. Detaylar için log dosyasını kontrol edin.", 48
End If
End With
' Belleği temizle
Set bd = Nothing
Set SEL = Nothing
Set o = Nothing
Set gridObj = Nothing
Set fso = Nothing
Set f = Nothing
Set gridNoktalari = Nothing
End Sub
‘ === Makro 2: Altyapı Çakışma Tespiti ===
‘ Açıklama: Boru hatları, yollar ve parseller arasındaki çakışmaları tespit eder,
‘ çakışan objeleri işaretler ve bir rapor üretir.
Sub AltyapiCakismaTespiti()
On Error Resume Next
Dim bd, raporDosya, cakismaMesafe, i, j, boru, parsel, yol, fso, f, SEL
Dim cakismaSayisi, hataSayisi
cakismaSayisi = 0
hataSayisi = 0
With Netcad
' Diyalog penceresi oluştur
Set bd = .NewBDialog("Altyapı Çakışma Tespiti")
bd.PutPrompt "Boru hatları, yollar ve parseller arasındaki çakışmaları tespit edin."
bd.GetFileName "rapor", "Rapor Dosyası", "C:\Rapor\cakisma_raporu.txt", "Text Dosyaları|*.txt", "txt"
bd.GetFloat "mesafe", "Çakışma Mesafesi (Metre)", 5, 2
bd.GetCombo "boruTabaka", "Boru Hatları Tabakası", "", 0
bd.GetCombo "yolTabaka", "Yollar Tabakası", "", 0
bd.GetCombo "parselTabaka", "Parseller Tabakası", "", 0
For i = 0 To .NumLayers - 1
bd.AddCombo .LayerNameOf(i)
Next
If Not bd.ShowModal Then
GosterMesaj "Bilgi", "İşlem iptal edildi.", 64
Exit Sub
End If
' Kullanıcı girişlerini al
raporDosya = bd.ValueByName("rapor")
cakismaMesafe = bd.ValueByName("mesafe")
Dim boruTabaka, yolTabaka, parselTabaka
boruTabaka = bd.ValueByName("boruTabaka")
yolTabaka = bd.ValueByName("yolTabaka")
parselTabaka = bd.ValueByName("parselTabaka")
' Hata kontrolü
If boruTabaka = "" Or yolTabaka = "" Or parselTabaka = "" Then
GosterMesaj "Hata", "Tüm tabakalar seçilmelidir.", 16
Exit Sub
End If
' Rapor dosyasını başlat
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(raporDosya, 2, True)
f.WriteLine "Altyapı Çakışma Tespiti Raporu"
f.WriteLine "Tarih: " & FormatDateTime(Now, vbGeneralDate)
f.WriteLine "Çakışma Mesafesi: " & cakismaMesafe & " m"
f.WriteLine "--------------------------------------"
' Çakışma analizi
Set SEL = .NewSelectionSet
.SetFilter Nothing, Array(boruTabaka), Array(oline)
While .GetNextObject2(boru)
' Parsellerle çakışma kontrolü
.SetFilter Nothing, Array(parselTabaka), Array(opline)
While .GetNextObject2(parsel)
Dim poly, mesafe
Set poly = .GetPlineExt(parsel)
mesafe = NCMath.DistanceToPoly(boru.p1, poly)
If mesafe < cakismaMesafe Then
cakismaSayisi = cakismaSayisi + 1
f.WriteLine "Çakışma: Boru (" & boru.pname & ") - Parsel (" & parsel.pname & ") - Mesafe: " & Format(mesafe, "0.00") & " m"
parsel.renk = Red
.PutObject .CurObjPos, parsel
SEL.AddObject parsel
End If
Wend
.ResetFilter
' Yollarla çakışma kontrolü
.SetFilter Nothing, Array(yolTabaka), Array(oline)
While .GetNextObject2(yol)
mesafe = NCMath.Distance(boru.p1, yol.p1, False)
If mesafe < cakismaMesafe Then
cakismaSayisi = cakismaSayisi + 1
f.WriteLine "Çakışma: Boru (" & boru.pname & ") - Yol (" & yol.pname & ") - Mesafe: " & Format(mesafe, "0.00") & " m"
yol.renk = Red
.PutObject .CurObjPos, yol
SEL.AddObject yol
End If
Wend
.ResetFilter
If Err.Number <> 0 Then
hataSayisi = hataSayisi + 1
Call LogHata("Boru " & boru.pname & " işlenirken hata: " & Err.Description)
End If
Wend
.ResetFilter
' Raporu tamamla
f.WriteLine "--------------------------------------"
f.WriteLine "Toplam Çakışma: " & cakismaSayisi
f.WriteLine "Hata Sayısı: " & hataSayisi
f.Close
' Ekranı güncelle
SEL.RedrawAndRewind
GosterMesaj "Bilgi", "Çakışma analizi tamamlandı. Rapor: " & raporDosya, 64
If hataSayisi > 0 Then
GosterMesaj "Uyarı", hataSayisi & " hata oluştu. Detaylar için log dosyasını kontrol edin.", 48
End If
End With
' Belleği temizle
Set bd = Nothing
Set SEL = Nothing
Set boru = Nothing
Set parsel = Nothing
Set yol = Nothing
Set fso = Nothing
Set f = Nothing
End Sub
‘ === Makro 3: Otomatik Veri Standardizasyon ve Kalite Kontrol ===
‘ Açıklama: Projedeki verileri standart bir formata getirir (örneğin, koordinat yuvarlama,
‘ Türkçe karakter düzeltme), eksik veya hatalı verileri kontrol eder ve raporlar.
Sub VeriStandardizasyon()
On Error Resume Next
Dim bd, raporDosya, koordHassasiyet, i, o, SEL, fso, f
Dim hataSayisi, duzeltilenObjeler, eksikVeri
hataSayisi = 0
duzeltilenObjeler = 0
eksikVeri = 0
With Netcad
' Diyalog penceresi oluştur
Set bd = .NewBDialog("Veri Standardizasyon ve Kalite Kontrol")
bd.PutPrompt "Verileri standart bir formata getirin ve kalite kontrolü yapın."
bd.GetFileName "rapor", "Rapor Dosyası", "C:\Rapor\standart_rapor.txt", "Text Dosyaları|*.txt", "txt"
bd.GetInteger "hassasiyet", "Koordinat Hassasiyeti (Basamak)", 2
bd.GetCheck "turkceDuzelt", "Türkçe Karakterleri Düzelt", 1
bd.GetCheck "eksikKontrol", "Eksik Verileri Kontrol Et", 1
If Not bd.ShowModal Then
GosterMesaj "Bilgi", "İşlem iptal edildi.", 64
Exit Sub
End If
' Kullanıcı girişlerini al
raporDosya = bd.ValueByName("rapor")
koordHassasiyet = bd.ValueByName("hassasiyet")
Dim turkceDuzelt, eksikKontrol
turkceDuzelt = bd.ValueByName("turkceDuzelt")
eksikKontrol = bd.ValueByName("eksikKontrol")
' Rapor dosyasını başlat
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(raporDosya, 2, True)
f.WriteLine "Veri Standardizasyon ve Kalite Kontrol Raporu"
f.WriteLine "Tarih: " & FormatDateTime(Now, vbGeneralDate)
f.WriteLine "--------------------------------------"
' Verileri standartlaştır ve kontrol et
Set SEL = .NewSelectionSet
.SetParam BeginBlock, True
For i = 0 To .NumObject - 1
Set o = .GetObject(i)
Dim degisti
degisti = False
' Koordinat yuvarlama
If o.Tag = opoint Then
o.p1.x = Round(o.p1.x, koordHassasiyet)
o.p1.y = Round(o.p1.y, koordHassasiyet)
o.p1.z = Round(o.p1.z, koordHassasiyet)
degisti = True
End If
' Türkçe karakter düzeltme
If turkceDuzelt = 1 Then
Dim eskiAd
eskiAd = o.pname
Call TurkceKarakterDuzelt(o)
If o.pname <> eskiAd Then
degisti = True
End If
End If
' Eksik veri kontrolü
If eksikKontrol = 1 Then
If o.pname = "" Then
eksikVeri = eksikVeri + 1
f.WriteLine "Eksik Veri: Obje " & i & " - İsim eksik"
o.renk = Red
degisti = True
SEL.AddObject o
End If
If o.Tag = opline And o.area <= 0 Then
eksikVeri = eksikVeri + 1
f.WriteLine "Eksik Veri: Obje " & o.pname & " - Geçersiz alan (" & o.area & " m²)"
o.renk = Red
degisti = True
SEL.AddObject o
End If
End If
' Değişiklikleri kaydet
If degisti Then
duzeltilenObjeler = duzeltilenObjeler + 1
.PutObject i, o
f.WriteLine "Düzeltilen Obje: " & o.pname & " - Tür: " & o.Tag
End If
If Err.Number <> 0 Then
hataSayisi = hataSayisi + 1
Call LogHata("Obje " & i & " işlenirken hata: " & Err.Description)
f.WriteLine "Hata: Obje " & i & " - " & Err.Description
End If
Next
.SetParam EndBlock, True
' Raporu tamamla
f.WriteLine "--------------------------------------"
f.WriteLine "Düzeltilen Obje Sayısı: " & duzeltilenObjeler
f.WriteLine "Eksik Veri Sayısı: " & eksikVeri
f.WriteLine "Hata Sayısı: " & hataSayisi
f.Close
' Ekranı güncelle
SEL.RedrawAndRewind
GosterMesaj "Bilgi", "Standardizasyon tamamlandı. Rapor: " & raporDosya, 64
If hataSayisi > 0 Then
GosterMesaj "Uyarı", hataSayisi & " hata oluştu. Detaylar için log dosyasını kontrol edin.", 48
End If
End With
' Belleği temizle
Set bd = Nothing
Set SEL = Nothing
Set o = Nothing
Set fso = Nothing
Set f = Nothing
End Sub
‘ Ana çalıştırma prosedürü (menü)
Sub Main()
On Error Resume Next
Dim bd
With Netcad
Set bd = .NewBDialog(“Profesyonel Netcad Makroları – Menü”)
bd.PutPrompt “Lütfen bir işlem seçin:”
bd.GetRadio “islem”, “Yapılacak İşlem”, “Topografik Eğim Analizi|Altyapı Çakışma Tespiti|Veri Standardizasyon”, 0
If bd.ShowModal Then
Dim secim
secim = bd.ValueByName(“islem”)
If secim = 0 Then
Call TopografikEgimAnalizi
ElseIf secim = 1 Then
Call AltyapiCakismaTespiti
Else
Call VeriStandardizasyon
End If
Else
GosterMesaj “Bilgi”, “İşlem iptal edildi.”, 64
End If
If Err.Number <> 0 Then
Call LogHata(“Ana menüde hata: ” & Err.Description)
End If
End With
Set bd = Nothing
End Sub
‘ Profesyonel Netcad Makroları – Bölüm 3
‘ Bu dosya, Netcad platformunda Visual Basic ile yazılmış ileri düzey profesyonel makroları içerir.
‘ Makrolar, modüler, hata yönetimine sahip, kullanıcı dostu ve ölçeklenebilir şekilde tasarlanmıştır.
‘ Tarih: 18 Mayıs 2025, 11:31
‘ Yazar: Grok 3 (xAI)
Option Explicit
‘ Genel hata loglama fonksiyonu
Sub LogHata(mesaj As String)
Dim fso, f
Set fso = CreateObject(“Scripting.FileSystemObject”)
If Not fso.FolderExists(“C:\NetcadLog”) Then
fso.CreateFolder “C:\NetcadLog”
End If
Set f = fso.OpenTextFile(“C:\NetcadLog\makro_hata.log”, 8, True)
f.WriteLine FormatDateTime(Now, vbGeneralDate) & “: ” & mesaj
f.Close
Set f = Nothing
Set fso = Nothing
End Sub
‘ Genel mesaj gösterme fonksiyonu
Sub GosterMesaj(baslik As String, mesaj As String, tip As Integer)
MsgBox mesaj, tip, baslik
End Sub
‘ Türkçe karakter düzeltme prosedürü
Sub TurkceKarakterDuzelt(o As Object)
o.pname = Replace(o.pname, “Ü”, “Ü”)
o.pname = Replace(o.pname, “Å”, “Ş”)
o.pname = Replace(o.pname, “Ä”, “ğ”)
o.pname = Replace(o.pname, “Ç”, “Ç”)
o.pname = Replace(o.pname, “İ”, “İ”)
o.pname = Replace(o.pname, “Ö”, “Ö”)
o.pname = Replace(o.pname, “ü”, “ü”)
o.pname = Replace(o.pname, “ÅŸ”, “ş”)
o.pname = Replace(o.pname, “ÄŸ”, “ğ”)
o.pname = Replace(o.pname, “ç”, “ç”)
o.pname = Replace(o.pname, “ı”, “ı”)
o.pname = Replace(o.pname, “ö”, “ö”)
End Sub
‘ Koordinat yuvarlama fonksiyonu
Function YuvarlaKoordinat(koordinat As Double, hassasiyet As Integer) As Double
YuvarlaKoordinat = Round(koordinat, hassasiyet)
End Function
‘ === Makro 1: Otomatik Kamulaştırma Analizi ===
‘ Açıklama: Kamulaştırma projelerinde parsellerin maliyet analizini yapar, etkilenen
‘ alanları işaretler ve detaylı bir rapor üretir.
Sub KamulastirmaAnalizi()
On Error Resume Next
Dim bd, raporDosya, maliyetTablosu, birimFiyat, i, o, kamulastirmaAlani, SEL, fso, f
Dim toplamMaliyet, etkilenenParselSayisi, hataSayisi
toplamMaliyet = 0
etkilenenParselSayisi = 0
hataSayisi = 0
With Netcad
' Diyalog penceresi oluştur
Set bd = .NewBDialog("Otomatik Kamulaştırma Analizi")
bd.PutPrompt "Kamulaştırma alanını ve maliyet parametrelerini belirleyin."
bd.GetFileName "rapor", "Rapor Dosyası", "C:\Rapor\kamulastirma_raporu.txt", "Text Dosyaları|*.txt", "txt"
bd.GetFileName "maliyet", "Maliyet Tablosu (Excel)", "", "Excel Dosyaları|*.xlsx", "xlsx"
bd.GetFloat "birimFiyat", "Varsayılan Birim Fiyat (TL/m²)", 1000, 2
If Not bd.ShowModal Then
GosterMesaj "Bilgi", "İşlem iptal edildi.", 64
Exit Sub
End If
' Kullanıcı girişlerini al
raporDosya = bd.ValueByName("rapor")
maliyetTablosu = bd.ValueByName("maliyet")
birimFiyat = bd.ValueByName("birimFiyat")
' Kamulaştırma alanını seç
Set SEL = .NewSelectionSet
Set kamulastirmaAlani = .NewObject
If Not SEL.Select("Kamulaştırma Alanını Seçin", Array(opline)) Then
GosterMesaj "Hata", "Kamulaştırma alanı seçilmedi.", 16
Exit Sub
End If
SEL.GetSelectedObject 0, kamulastirmaAlani
Dim kamulastirmaPoly
Set kamulastirmaPoly = .GetPlineExt(kamulastirmaAlani)
' Maliyet tablosunu oku (opsiyonel)
Dim maliyetDict, xls, wb, ws
Set maliyetDict = CreateObject("Scripting.Dictionary")
If maliyetTablosu <> "" Then
Set xls = CreateObject("Excel.Application")
Set wb = xls.Workbooks.Open(maliyetTablosu)
Set ws = wb.Sheets(1)
For i = 2 To ws.UsedRange.Rows.Count
maliyetDict.Add ws.Cells(i, 1).Value, ws.Cells(i, 2).Value
Next
wb.Close
xls.Quit
End If
' Rapor dosyasını başlat
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(raporDosya, 2, True)
f.WriteLine "Kamulaştırma Analizi Raporu"
f.WriteLine "Tarih: " & FormatDateTime(Now, vbGeneralDate)
f.WriteLine "--------------------------------------"
' Parselleri analiz et
.SetFilter Nothing, Array("PARSEL"), Array(opline)
While .GetNextObject2(o)
Dim parselPoly, kesisimPoly, kesisimAlani, parselMaliyet
Set parselPoly = .GetPlineExt(o)
If parselPoly.Intersects(kamulastirmaPoly) Then
Set kesisimPoly = parselPoly.Intersection(kamulastirmaPoly)
If Not kesisimPoly Is Nothing Then
kesisimAlani = kesisimPoly.Area
If kesisimAlani > 0 Then
etkilenenParselSayisi = etkilenenParselSayisi + 1
' Maliyet hesapla
If maliyetDict.Exists(o.cls) Then
parselMaliyet = kesisimAlani * maliyetDict(o.cls)
Else
parselMaliyet = kesisimAlani * birimFiyat
End If
toplamMaliyet = toplamMaliyet + parselMaliyet
' Parseli işaretle
o.renk = Red
.PutObject .CurObjPos, o
SEL.AddObject o
' Rapor yaz
f.WriteLine "Parsel: " & o.pname & " - Etkilenen Alan: " & Format(kesisimAlani, "0.00") & " m² - Maliyet: " & Format(parselMaliyet, "0.00") & " TL"
End If
End If
End If
If Err.Number <> 0 Then
hataSayisi = hataSayisi + 1
Call LogHata("Parsel " & o.pname & " işlenirken hata: " & Err.Description)
f.WriteLine "Hata: Parsel " & o.pname & " - " & Err.Description
End If
Wend
.ResetFilter
' Raporu tamamla
f.WriteLine "--------------------------------------"
f.WriteLine "Etkilenen Parsel Sayısı: " & etkilenenParselSayisi
f.WriteLine "Toplam Maliyet: " & Format(toplamMaliyet, "0.00") & " TL"
f.WriteLine "Hata Sayısı: " & hataSayisi
f.Close
' Ekranı güncelle
SEL.RedrawAndRewind
GosterMesaj "Bilgi", "Kamulaştırma analizi tamamlandı. Rapor: " & raporDosya, 64
If hataSayisi > 0 Then
GosterMesaj "Uyarı", hataSayisi & " hata oluştu. Detaylar için log dosyasını kontrol edin.", 48
End If
End With
' Belleği temizle
Set bd = Nothing
Set SEL = Nothing
Set o = Nothing
Set kamulastirmaAlani = Nothing
Set kamulastirmaPoly = Nothing
Set parselPoly = Nothing
Set kesisimPoly = Nothing
Set fso = Nothing
Set f = Nothing
Set maliyetDict = Nothing
Set xls = Nothing
Set wb = Nothing
Set ws = Nothing
End Sub
‘ === Makro 2: Hidrolojik Analiz ve Sel Risk Haritası ===
‘ Açıklama: Nokta ve poligon verilerinden sel riski analizi yapar, risk seviyelerine
‘ göre renk kodlu bir harita üretir ve raporlar.
Sub HidrolojikSelAnalizi()
On Error Resume Next
Dim bd, raporDosya, gridBoyut, suTabaka, i, o, SEL, fso, f, hataSayisi
Dim riskListesi, maxRisk, minRisk, analizSayisi
ReDim riskListesi(0)
hataSayisi = 0
analizSayisi = 0
maxRisk = 0
minRisk = 999999
With Netcad
' Diyalog penceresi oluştur
Set bd = .NewBDialog("Hidrolojik Sel Risk Analizi")
bd.PutPrompt "Nokta ve poligon verilerinden sel riski analizi yaparak harita oluşturun."
bd.GetFileName "rapor", "Rapor Dosyası", "C:\Rapor\sel_risk_raporu.txt", "Text Dosyaları|*.txt", "txt"
bd.GetFloat "grid", "Grid Boyutu (Metre)", 50, 2
bd.GetCombo "suTabaka", "Su Alanları Tabakası", "", 0
bd.GetCombo "noktaTabaka", "Yükseklik Noktaları Tabakası", "", 0
For i = 0 To .NumLayers - 1
bd.AddCombo .LayerNameOf(i)
Next
If Not bd.ShowModal Then
GosterMesaj "Bilgi", "İşlem iptal edildi.", 64
Exit Sub
End If
' Kullanıcı girişlerini al
raporDosya = bd.ValueByName("rapor")
gridBoyut = bd.ValueByName("grid")
Dim suTabaka, noktaTabaka
suTabaka = bd.ValueByName("suTabaka")
noktaTabaka = bd.ValueByName("noktaTabaka")
' Hata kontrolü
If suTabaka = "" Or noktaTabaka = "" Then
GosterMesaj "Hata", "Tüm tabakalar seçilmelidir.", 16
Exit Sub
End If
' Rapor dosyasını başlat
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(raporDosya, 2, True)
f.WriteLine "Hidrolojik Sel Risk Analizi Raporu"
f.WriteLine "Tarih: " & FormatDateTime(Now, vbGeneralDate)
f.WriteLine "Grid Boyutu: " & gridBoyut & " m"
f.WriteLine "--------------------------------------"
' Yükseklik verilerini topla
Dim yukseklikDict
Set yukseklikDict = CreateObject("Scripting.Dictionary")
.SetFilter Nothing, Array(noktaTabaka), Array(opoint)
While .GetNextObject2(o)
Dim gridX, gridY
gridX = Int(o.p1.x / gridBoyut) * gridBoyut
gridY = Int(o.p1.y / gridBoyut) * gridBoyut
If Not yukseklikDict.Exists(gridX & "," & gridY) Then
yukseklikDict.Add gridX & "," & gridY, Array(0, 0, 0)
End If
Dim mevcut
mevcut = yukseklikDict(gridX & "," & gridY)
mevcut(0) = mevcut(0) + o.p1.z ' Z toplamı
mevcut(1) = mevcut(1) + 1 ' Nokta sayısı
mevcut(2) = mevcut(0) / mevcut(1) ' Ortalama Z
yukseklikDict(gridX & "," & gridY) = mevcut
Wend
.ResetFilter
' Su alanlarını topla
Dim suAlanlari
Set suAlanlari = CreateObject("Scripting.Dictionary")
.SetFilter Nothing, Array(suTabaka), Array(opline)
While .GetNextObject2(o)
suAlanlari.Add o.pname, .GetPlineExt(o)
Wend
.ResetFilter
' Sel risk analizi
Set SEL = .NewSelectionSet
.SetParam BeginBlock, True
For Each key In yukseklikDict.Keys
Dim coords, zOrt, riskSkoru, minMesafe, gridObj
coords = Split(key, ",")
Dim x, y
x = CDbl(coords(0))
y = CDbl(coords(1))
zOrt = yukseklikDict(key)(2)
minMesafe = 999999
For Each suKey In suAlanlari.Keys
Dim suPoly, mesafe
Set suPoly = suAlanlari(suKey)
mesafe = NCMath.DistanceToPoly(.NewC(x + gridBoyut / 2, y + gridBoyut / 2, 0), suPoly)
If mesafe < minMesafe Then minMesafe = mesafe
Next
' Risk skoru: Düşük yükseklik ve suya yakınlık yüksek risk
riskSkoru = (1000 / (zOrt + 1)) * (1000 / (minMesafe + 1))
If riskSkoru > maxRisk Then maxRisk = riskSkoru
If riskSkoru < minRisk Then minRisk = riskSkoru
analizSayisi = analizSayisi + 1
ReDim Preserve riskListesi(analizSayisi - 1)
riskListesi(analizSayisi - 1) = Array(x, y, riskSkoru)
' Grid karesini oluştur
Set gridObj = .MakeRectangle(.NewC(x, y, 0), .NewC(x + gridBoyut, y + gridBoyut, 0), 0, 0, 0)
If riskSkoru < (minRisk + (maxRisk - minRisk) / 3) Then
gridObj.renk = Green ' Düşük risk
ElseIf riskSkoru < (minRisk + 2 * (maxRisk - minRisk) / 3) Then
gridObj.renk = Yellow ' Orta risk
Else
gridObj.renk = Red ' Yüksek risk
End If
gridObj.tabaka = "SEL_RISK_HARITASI"
.AddObject gridObj
f.WriteLine "Grid (" & x & "," & y & "): Risk Skoru = " & Format(riskSkoru, "0.00")
If Err.Number <> 0 Then
hataSayisi = hataSayisi + 1
Call LogHata("Grid " & key & " işlenirken hata: " & Err.Description)
End If
Next
.SetParam EndBlock, True
' Raporu tamamla
f.WriteLine "--------------------------------------"
f.WriteLine "Analiz Edilen Grid Sayısı: " & analizSayisi
f.WriteLine "Minimum Risk Skoru: " & Format(minRisk, "0.00")
f.WriteLine "Maksimum Risk Skoru: " & Format(maxRisk, "0.00")
f.WriteLine "Hata Sayısı: " & hataSayisi
f.Close
' Ekranı güncelle
SEL.RedrawAndRewind
GosterMesaj "Bilgi", "Sel risk analizi tamamlandı. Rapor: " & raporDosya, 64
If hataSayisi > 0 Then
GosterMesaj "Uyarı", hataSayisi & " hata oluştu. Detaylar için log dosyasını kontrol edin.", 48
End If
End With
' Belleği temizle
Set bd = Nothing
Set SEL = Nothing
Set o = Nothing
Set gridObj = Nothing
Set fso = Nothing
Set f = Nothing
Set yukseklikDict = Nothing
Set suAlanlari = Nothing
End Sub
‘ === Makro 3: Çoklu Proje Veri Birleştirme ve Senkronizasyon ===
‘ Açıklama: Birden fazla Netcad projesini birleştirir, verileri senkronize eder,
‘ çelişkileri tespit eder ve raporlar.
Sub CokluProjeBirlestirme()
On Error Resume Next
Dim bd, raporDosya, projeListesi, anaProje, i, j, o, yeniO, SEL, fso, f
Dim birlestirilenObjeler, celiskiSayisi, hataSayisi
birlestirilenObjeler = 0
celiskiSayisi = 0
hataSayisi = 0
With Netcad
' Diyalog penceresi oluştur
Set bd = .NewBDialog("Çoklu Proje Veri Birleştirme")
bd.PutPrompt "Birden fazla Netcad projesini birleştirin ve çelişkileri kontrol edin."
bd.GetFileName "rapor", "Rapor Dosyası", "C:\Rapor\birlestirme_raporu.txt", "Text Dosyaları|*.txt", "txt"
bd.GetFileName "anaProje", "Ana Proje Dosyası", "", "Netcad Projeleri|*.ncp", "ncp"
bd.GetFileName "projeler", "Birleştirilecek Projeler", "", "Netcad Projeleri|*.ncp", "ncp", True
bd.GetCheck "turkceDuzelt", "Türkçe Karakterleri Düzelt", 1
If Not bd.ShowModal Then
GosterMesaj "Bilgi", "İşlem iptal edildi.", 64
Exit Sub
End If
' Kullanıcı girişlerini al
raporDosya = bd.ValueByName("rapor")
anaProje = bd.ValueByName("anaProje")
projeListesi = Split(bd.ValueByName("projeler"), "|")
Dim turkceDuzelt
turkceDuzelt = bd.ValueByName("turkceDuzelt")
' Hata kontrolü
If anaProje = "" Or UBound(projeListesi) < 0 Then
GosterMesaj "Hata", "Ana proje veya birleştirilecek projeler seçilmedi.", 16
Exit Sub
End If
' Ana projeyi aç
.OpenProject anaProje
' Rapor dosyasını başlat
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(raporDosya, 2, True)
f.WriteLine "Çoklu Proje Birleştirme ve Senkronizasyon Raporu"
f.WriteLine "Tarih: " & FormatDateTime(Now, vbGeneralDate)
f.WriteLine "Ana Proje: " & anaProje
f.WriteLine "--------------------------------------"
' Mevcut objeleri indeksle
Dim mevcutObjeler
Set mevcutObjeler = CreateObject("Scripting.Dictionary")
For i = 0 To .NumObject - 1
Set o = .GetObject(i)
If Not mevcutObjeler.Exists(o.pname) Then
mevcutObjeler.Add o.pname, i
End If
Next
' Diğer projeleri birleştir
Set SEL = .NewSelectionSet
.SetParam BeginBlock, True
For Each proje In projeListesi
f.WriteLine "Birleştirilen Proje: " & proje
For j = 0 To .GetNumObjectFromProject(proje) - 1
Set yeniO = .GetObjectFromProject(proje, j)
If turkceDuzelt = 1 Then
Call TurkceKarakterDuzelt(yeniO)
End If
If mevcutObjeler.Exists(yeniO.pname) Then
' Çelişki kontrolü
Set o = .GetObject(mevcutObjeler(yeniO.pname))
If o.Tag = yeniO.Tag Then
If o.Tag = opline And Abs(o.area - yeniO.area) > 0.1 Then
celiskiSayisi = celiskiSayisi + 1
f.WriteLine "Çelişki: Obje " & yeniO.pname & " - Alan Farkı: " & Format(Abs(o.area - yeniO.area), "0.00") & " m²"
o.renk = Yellow
.PutObject mevcutObjeler(yeniO.pname), o
SEL.AddObject o
End If
End If
Else
' Yeni objeyi ekle
birlestirilenObjeler = birlestirilenObjeler + 1
.AddObject yeniO
SEL.AddObject yeniO
mevcutObjeler.Add yeniO.pname, .NumObject - 1
End If
If Err.Number <> 0 Then
hataSayisi = hataSayisi + 1
Call LogHata("Proje " & proje & ", Obje " & yeniO.pname & " işlenirken hata: " & Err.Description)
f.WriteLine "Hata: Proje " & proje & ", Obje " & yeniO.pname & " - " & Err.Description
End If
Next
Next
.SetParam EndBlock, True
' Raporu tamamla
f.WriteLine "--------------------------------------"
f.WriteLine "Birleştirilen Obje Sayısı: " & birlestirilenObjeler
f.WriteLine "Çelişki Sayısı: " & celiskiSayisi
f.WriteLine "Hata Sayısı: " & hataSayisi
f.Close
' Ekranı güncelle
SEL.RedrawAndRewind
GosterMesaj "Bilgi", "Proje birleştirme tamamlandı. Rapor: " & raporDosya, 64
If hataSayisi > 0 Then
GosterMesaj "Uyarı", hataSayisi & " hata oluştu. Detaylar için log dosyasını kontrol edin.", 48
End If
End With
' Belleği temizle
Set bd = Nothing
Set SEL = Nothing
Set o = Nothing
Set yeniO = Nothing
Set fso = Nothing
Set f = Nothing
Set mevcutObjeler = Nothing
End Sub
‘ Ana çalıştırma prosedürü (menü)
Sub Main()
On Error Resume Next
Dim bd
With Netcad
Set bd = .NewBDialog(“Profesyonel Netcad Makroları – Menü”)
bd.PutPrompt “Lütfen bir işlem seçin:”
bd.GetRadio “islem”, “Yapılacak İşlem”, “Kamulaştırma Analizi|Hidrolojik Sel Risk Analizi|Çoklu Proje Birleştirme”, 0
If bd.ShowModal Then
Dim secim
secim = bd.ValueByName(“islem”)
If secim = 0 Then
Call KamulastirmaAnalizi
ElseIf secim = 1 Then
Call HidrolojikSelAnalizi
Else
Call CokluProjeBirlestirme
End If
Else
GosterMesaj “Bilgi”, “İşlem iptal edildi.”, 64
End If
If Err.Number <> 0 Then
Call LogHata(“Ana menüde hata: ” & Err.Description)
End If
End With
Set bd = Nothing
End Sub
1. GIS Sınıfı – OBJE.cls
- Ne Demek?: cls, bir objenin GIS sınıfını (kategorisini) tanımlar. Bu, objenin hangi tür veri veya nesneye ait olduğunu belirtir; örneğin, “PARSEL”, “YOL”, “BINA” gibi sınıflar olabilir. Netcad’de sınıflar, projedeki objeleri organize etmek ve anlamlandırmak için kullanılır.
- Kullanım Alanı: Harita verilerini sınıflandırmak, filtrelemek veya analiz yapmak için. Örneğin, sadece “PARSEL” sınıfındaki objeleri seçmek isteyebilirsin.
- Makrolarda Kullanımı:
- OBJE.cls ile objenin sınıfını okuyabilir veya değiştirebilirsin.
- Örnek: If OBJE.cls = “PARSEL” Then OBJE.renk = Red (Parsel sınıfındaki objeleri kırmızı yapar).
- Örnek Senaryo: Kadastro projesinde, parsellerin sınıfı “PARSEL”, yolların sınıfı “YOL” olabilir. Makroda SetFilter ile sadece belirli sınıfları hedefleyebilirsin.
- Not: Sınıf isimleri genellikle proje şablonuna bağlıdır ve kullanıcı tarafından tanımlanabilir.
2. GIS Kodu – OBJE.objname
- Ne Demek?: objname, objenin benzersiz bir kimlik kodu veya tanımlayıcısıdır. Netcad’de her objeye bir GIS kodu atanabilir, bu da objeyi diğerlerinden ayırmak için kullanılır. pname’den farklı olarak, daha teknik bir tanımlayıcıdır.
- Kullanım Alanı: Objeleri veritabanında eşleştirmek, referans vermek veya dış sistemlerle entegre etmek için. Örneğin, bir GIS kodunu harici bir Excel tablosuyla eşleştirebilirsin.
- Makrolarda Kullanımı:
- OBJE.objname ile objenin GIS kodunu okuyabilir veya atayabilirsin.
- Örnek: If OBJE.objname = “P123” Then OBJE.cls = “PARSEL” (GIS kodu “P123” olan objeyi parsel sınıfına atar).
- Örnek Senaryo: Bir altyapı projesinde, boru hatlarının GIS kodları “BORU001”, “BORU002” gibi olabilir. Makroda bu kodlarla belirli objeleri bulabilirsin.
- Not: objname genellikle otomatik atanır, ama kullanıcı tarafından da düzenlenebilir.
3. Renk – OBJE.renk
- Ne Demek?: renk, objenin görsel rengini belirler. Netcad’de renkler, genellikle numerik kodlarla (örneğin, Red = 255, Blue = 16711680) veya sabit isimlerle tanımlanır. Yazı objeleri için metnin rengini, diğer objeler için çizgi veya dolgu rengini ifade eder.
- Kullanım Alanı: Haritada objeleri görsel olarak ayırt etmek, analiz sonuçlarını vurgulamak (örneğin, riskli alanları kırmızı yapmak).
- Makrolarda Kullanımı:
- OBJE.renk ile objenin rengini ayarlayabilir veya okuyabilirsin.
- Örnek: OBJE.renk = Yellow (Objeyi sarı yapar).
- Örnek Senaryo: Sel riski analizinde yüksek riskli alanları kırmızı (Red), düşük riskli alanları yeşil (Green) yapabilirsin.
- Not: Netcad’in renk paleti, RGB kodlarını destekler. Sabit renkler (Red, Blue, Green, vb.) kullanmak daha yaygındır.
4. Adı – OBJE.s
- Ne Demek?: s, yazı objeleri (otext) için metin içeriğini temsil eder. Yani, bir yazı objesinin haritada görünen metni (örneğin, “Ada 123”, “Yol A”) budur. Diğer obje türlerinde (opline, opoint) bu özellik genellikle kullanılmaz.
- Kullanım Alanı: Etiketleme, açıklama veya bilgi gösterme. Örneğin, parsel numaralarını veya yol isimlerini yazmak için.
- Makrolarda Kullanımı:
- OBJE.s ile metni okuyabilir veya değiştirebilirsin.
- Örnek: OBJE.s = Replace(OBJE.s, “/”, “”) (Metindeki “/” karakterini siler).
- Örnek Senaryo: Bir kadastro projesinde, parsel numaralarını içeren yazı objelerinin metinlerini düzenlemek (örneğin, “123/45” → “12345”).
- Not: s, sadece otext objeleri için geçerlidir. Diğer objelerde pname kullanılır.
5. Açısı – OBJE.angle
- Ne Demek?: angle, yazı objesinin veya diğer objelerin haritadaki dönüş açısını derece cinsinden belirtir. Yazı objeleri için metnin eğimini (rotasyonunu), diğer objeler için yönelimini ifade eder.
- Kullanım Alanı: Yazıların veya objelerin yönünü ayarlamak, örneğin, bir yol boyunca yatay yazılar oluşturmak.
- Makrolarda Kullanımı:
- OBJE.angle ile açıyı okuyabilir veya ayarlayabilirsin (0-360 derece).
- Örnek: OBJE.angle = 45 (Yazıyı 45 derece döndürür).
- Örnek Senaryo: Bir haritada yol isimlerini yolların eğimine paralel yapmak için yazıların açısını yolun açısına eşitleyebilirsin.
- Not: Açı, saat yönünün tersine hesaplanır. 0 derece yataydır.
6. Genişlik Çarpanı – OBJE.wsc
- Ne Demek?: wsc (width scale), yazı objelerinde metnin genişlik çarpanını belirler. Bu, metnin karakterlerinin en-boy oranını ayarlar (örneğin, daha geniş veya dar yazı).
- Kullanım Alanı: Yazıların görsel stilini özelleştirmek, okunabilirliği artırmak veya estetik düzenlemeler yapmak.
- Makrolarda Kullanımı:
- OBJE.wsc ile genişlik çarpanını ayarlayabilirsin (varsayılan genellikle 1.0).
- Örnek: OBJE.wsc = 1.5 (Yazıyı %50 daha geniş yapar).
- Örnek Senaryo: Önemli etiketleri (örneğin, bölge isimleri) daha geniş yaparak vurgulamak.
- Not: Çok yüksek veya düşük değerler metni bozabilir, genellikle 0.5-2.0 aralığı tercih edilir.
7. Yazı Boyu – OBJE.sc
- Ne Demek?: sc (scale), yazı objelerinde metnin boyutunu (yüksekliğini) belirler. Birim genellikle metre cinsindedir ve harita ölçeğine bağlı olarak görünür boyutu etkiler.
- Kullanım Alanı: Yazıların boyutunu ayarlayarak okunabilirliği veya görsel hiyerarşiyi kontrol etmek.
- Makrolarda Kullanımı:
- OBJE.sc ile yazı boyutunu ayarlayabilirsin.
- Örnek: OBJE.sc = 2.0 (Yazı boyutunu 2 metre yapar).
- Örnek Senaryo: Ana yol isimlerini büyük (sc = 3.0), ara sokak isimlerini küçük (sc = 1.0) yapmak.
- Not: Yazı boyu, harita ölçeğiyle orantılıdır. Çok büyük değerler haritayı karmaşık hale getirebilir.
8. Dayanma – OBJE.just
- Ne Demek?: just (justification), yazı objelerinin hizalama (dayanma) türünü belirtir. Metnin sol, orta veya sağ hizalı olup olmadığını tanımlar. Netcad’de genellikle:
- 0: Sol hizalı
- 1: Orta hizalı
- 2: Sağ hizalı
- Kullanım Alanı: Yazıların görsel yerleşimini düzenlemek, örneğin, etiketlerin objelere göre hizasını ayarlamak.
- Makrolarda Kullanımı:
- OBJE.just ile hizalamayı ayarlayabilirsin.
- Örnek: OBJE.just = 1 (Yazıyı ortalar).
- Örnek Senaryo: Parsel numaralarını parselin merkezine hizalamak için just = 1 kullanabilirsin.
- Not: Hizalama, yazı objesinin referans noktasına (p1) göre hesaplanır.
9. Özellikler – OBJE.flags
- Ne Demek?: flags, objenin ek özelliklerini veya durumlarını tanımlayan bir bit bayrağıdır. Bu, objenin özel durumlarını (örneğin, kilitli mi, görünmez mi) veya ek meta verilerini ifade eder. Netcad’de flags genellikle birden fazla özelliği bir arada tutar (bitwise).
- Kullanım Alanı: Objelerin özel durumlarını kontrol etmek veya ayarlamak, örneğin, bir objeyi kilitli yapmak.
- Makrolarda Kullanımı:
- OBJE.flags ile bayrakları okuyabilir veya değiştirebilirsin.
- Örnek: OBJE.flags = OBJE.flags Or 1 (Belirli bir bayrağı aktif eder, örneğin, kilitleme).
- Örnek Senaryo: Analiz sonrası değiştirilmemesi gereken objeleri kilitli yapmak için flags kullanabilirsin.
- Not: flags değerleri Netcad’in dokümantasyonuna bağlıdır ve her bit belirli bir özelliği temsil eder. Yaygın bayraklar kilitli, gizli veya seçili durumları içerir.
Flags Özelliği: Düzeltilmiş ve Detaylı Açıklama
Ne Demek?
flags, Netcad’de yazı objeleri (otext) için metnin stil özelliklerini (italik, altı çizili, arka fon) tanımlayan sayısal bir bit bayrağıdır. Her stil, bir bit ile temsil edilir ve bu bitlerin kombinasyonları farklı flags değerlerini oluşturur. Verdiğin bilgiye göre, flags şu şekilde çalışır:
- Bit Tanımları:
- 0: Normal (hiçbir stil yok).
- 1: İtalik (bit 0 = 1).
- 2: Altı çizili (bit 1 = 1).
- 4: Arka fon (çerçeve/arka plan, bit 2 = 1).
- Kombinasyonlar:
- flags = 0: Normal (italik yok, altı çizili yok, arka fon yok).
- flags = 1: Sadece italik.
- flags = 2: Sadece altı çizili.
- flags = 3: İtalik + altı çizili (1 + 2).
- flags = 4: Sadece arka fon.
- flags = 5: Arka fon + italik (4 + 1).
- flags = 6: Arka fon + altı çizili (4 + 2).
- flags = 7: Arka fon + italik + altı çizili (4 + 1 + 2).
Genel Notlar ve Makro Bağlamı
- Yazı Objelerine Özel: s, angle, wsc, sc, just gibi özellikler genellikle yazı objeleri (otext) için geçerlidir. Diğer objelerde (opline, opoint) bu özellikler ya kullanılmaz ya da farklı anlamlar taşır.
- Makro Yazarken Dikkat:
- Her özelliği değiştirmeden önce objenin türünü kontrol et (If OBJE.Tag = otext Then).
- SetFilter ile sadece belirli obje türlerini veya sınıfları hedefleyebilirsin.
- Toplu işlemler için BeginBlock/EndBlock kullanarak performansı artır.
- Pratik Örnek: Bir makroda, tüm “PARSEL” sınıfındaki yazı objelerinin boyutunu büyütmek (sc = 2.0), italik yapmak (fontstyle = 1) ve ortalamak (just = 1) için şu adımları izlersin:
- SetFilter ile otext ve “PARSEL” sınıfını seç.
- Objeleri döngüyle tara.
- Her yazı objesi için sc, fontstyle ve just özelliklerini güncelle.
- PutObject ile değişiklikleri kaydet.
✅ 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.