Netcad Projelerinizi Kolayca Raporlayın! 🚀
Bu netcad makrosu ile objeleri ve proje bilgilerini “.ncsagul” (özünde bir csv) formatında hızlıca kaydedin. 💻
Makro, Netcad projesindeki seçilen obje türlerini (nokta, çizgi, çoklu doğru, daire, yay, yazı, sembol, spiral, izohips, kutu, pafta) bir metin dosyasına (ncsagul formatında) dışa aktarır. Kullanıcı, hangi obje türlerinin dahil edileceğini ve koordinatların ondalık hassasiyetini bir diyalog penceresi üzerinden seçer. Ayrıca proje bilgileri ve tabaka (layer) bilgileri de dosyaya kaydedilir. Bu dosya, daha sonra başka bir yazılımda (örneğin, Excel’de) analiz edilmek veya işlenmek üzere kullanılabilir.
Çalışma Mantığı
- Diyalog Penceresi:
- Kullanıcıya bir form (diyalog penceresi) gösterilir.
- Çıktı dosyasının adı ve yolu (ncsagul uzantılı) seçilir.
- Koordinatların ondalık basamak sayısı (0-10 arası) belirlenir.
- Hangi obje türlerinin dışa aktarılacağı (nokta, çizgi, vb.) seçilir.
- Proje ve Tabaka Bilgileri:
- Netcad projesinin adı, projeksiyon türü (UTM, Coğrafi), datum (WGS84, ED50), zone ve EPSG kodu gibi bilgiler alınır.
- Tüm tabakaların (layers) özellikleri (ad, renk, görünürlük, vb.) kaydedilir.
- Obje Seçimi:
- Kullanıcı, Netcad ekranında objeleri seçer.
- Seçilen objeler, belirlenen türlerine göre filtrelenir ve özellikleriyle birlikte dosyaya yazılır.
- Çıktı Dosyası:
- .ncsagul dosyası, bölümler (###SECTION###) halinde organize edilir.
- Her bölüm, belirli bir obje türünün özelliklerini içerir.
- Sonuç:
- İşlem tamamlandığında, kullanıcıya dosyanın başarıyla oluşturulduğu bildirilir.
Netcad’de Hangi Objeler ve Özellikleri Kaydediliyor?
Aşağıda, her obje türü için hangi özelliklerin .ncsagul dosyasına kaydedildiği detaylı olarak listelenmiştir. Her obje türü, kendine özgü bir başlık satırıyla (header) tanımlanır ve veriler | (pipe) karakteriyle ayrılmış sütunlar halinde yazılır.
1. Proje Bilgileri (###PROJE_BILGILERI###)
- Açıklama: Netcad projesinin genel bilgileri.
- Özellikler:
- EPSGKOD: EPSG kodu (projeksiyona göre, örn., UTM 3° GRS80 Zone 33 için 7933).
- Projeksiyon: Projeksiyon türü (Coğrafi, UTM 3°, UTM 6°).
- Datum: Datum türü (WGS84, GRS80, ED50).
- Zone: Projeksiyon bölgesi (zone, örn., 33, 36).
- Ölçek: Proje ölçeği.
- Rapor Tarihi: Dosyanın oluşturulduğu tarih ve saat.
- Proje Adı: Proje dosyasının tam yolu.
- Proje: Projenin adı.
- ProjeksiyonParam0 – ProjeksiyonParam63: Netcad’in 64 parametresi (genellikle projeksiyonla ilgili teknik detaylar).
2. Tabakalar (###TABAKALAR###)
- Açıklama: Projede tanımlı tüm tabakaların (layers) özellikleri.
- Başlık: Index|Tabaka Adı|ID|Renk|RGB Renk|Açık|Görünür|Kilit|Yazıcı Gönder|Başlangıç Ölçeği|Bitiş Ölçeği
- Özellikler:
- Index: Tabaka sırası (0’dan başlar).
- Tabaka Adı: Tabakanın adı.
- ID: Tabaka kimliği (genellikle index ile aynı).
- Renk: Tabakanın renk kodu.
- RGB Renk: Renk, RGB formatında (örn., 255-128-0).
- Açık: Tabaka açık mı (1/0).
- Görünür: Tabaka görünür mü (1/0).
- Kilit: Tabaka kilitli mi (1/0).
- Yazıcı Gönder: Tabaka yazıcıya gönderilir mi (1/0).
- Başlangıç Ölçeği: Tabakanın göründüğü minimum ölçek.
- Bitiş Ölçeği: Tabakanın göründüğü maksimum ölçek.
3. Çizgi Objeleri (###CIZGI###, Tag: 2)
- Açıklama: Tekil çizgi segmentleri.
- Başlık: Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Kalınlık|Çizgi Tipi|Uzunluğu (m)|Başlangıç X|Başlangıç Y|Bitiş X|Bitiş Y
- Özellikler:
- Index: Çizgi sırası.
- Tabaka: Çizginin bulunduğu tabaka adı.
- GIS Sınıfı: GIS sınıflandırma kodu (obj.cls).
- GIS Kodu: GIS objesinin kodu (obj.objname).
- Renk: Çizginin renk kodu (obj.renk).
- Adı: Çizginin adı (obj.pname).
- Kalınlık: Çizgi kalınlığı (obj.w).
- Çizgi Tipi: Çizgi türü (örn., kesikli, düz; obj.lt).
- Uzunluğu (m): Çizginin uzunluğu (obj.length(0)).
- Başlangıç X, Başlangıç Y: Çizginin başlangıç koordinatları (obj.p1.x, obj.p1.y).
- Bitiş X, Bitiş Y: Çizginin bitiş koordinatları (obj.p2.x, obj.p2.y).
4. Çoklu Doğru Objeleri (###COKLUDOGRU###, Tag: 7)
- Açıklama: Kapalı veya açık poligonlar (polyline).
- Başlık: Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Kalınlık|Çizgi Tipi|Çevresi (m)|Tapu Alanı (m²)|Hesap Alanı (m²)|Flags|Köşe Noktaları
- Özellikler:
- Index: Poligon sırası.
- Tabaka: Poligonun bulunduğu tabaka.
- GIS Sınıfı: GIS sınıflandırma kodu.
- GIS Kodu: GIS objesinin kodu.
- Renk: Poligonun renk kodu.
- Adı: Poligonun adı.
- Kalınlık: Çizgi kalınlığı.
- Çizgi Tipi: Çizgi türü.
- Çevresi (m): Poligonun çevresi (obj.length(0)).
- Tapu Alanı (m²): Tapu alanı (obj.tarea).
- Hesap Alanı (m²): Hesaplanan alan (obj.area).
- Flags: Poligon özellikleri (obj.flags).
- Köşe Noktaları: Poligonun köşe koordinatları, Y$X#Y$X#… formatında (poly.cor(k).x, poly.cor(k).y).
5. Daire Objeleri (###DAIRE###, Tag: 3)
- Açıklama: Daire veya çember objeleri.
- Başlık: Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Merkez X|Merkez Y|Merkez Z|Yarıçap|Alan (m²)
- Özellikler:
- Index: Daire sırası.
- Tabaka: Dairenin bulunduğu tabaka.
- GIS Sınıfı: GIS sınıflandırma kodu.
- GIS Kodu: GIS objesinin kodu.
- Renk: Dairenin renk kodu.
- Merkez X, Merkez Y, Merkez Z: Dairenin merkez koordinatları (obj.p1.x, obj.p1.y, obj.p1.z).
- Yarıçap: Dairenin yarıçapı (obj.rad).
- Alan (m²): Dairenin alanı (obj.area).
6. Nokta Objeleri (###NOKTA###, Tag: 1)
- Açıklama: Tekil noktalar.
- Başlık: Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Nokta Kodu|X Koordinatı|Y Koordinatı|Z Koordinatı
- Özellikler:
- Index: Nokta sırası.
- Tabaka: Noktanın bulunduğu tabaka.
- GIS Sınıfı: GIS sınıflandırma kodu.
- GIS Kodu: GIS objesinin kodu.
- Renk: Noktanın renk kodu.
- Adı: Noktanın adı (obj.pname).
- Nokta Kodu: Noktanın kodu (obj.pcode).
- X Koordinatı, Y Koordinatı, Z Koordinatı: Noktanın koordinatları (obj.p1.x, obj.p1.y, obj.p1.z).
7. Yay Objeleri (###YAY###, Tag: 4)
- Açıklama: Yay veya kavisli çizgiler.
- Başlık: Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Merkez X|Merkez Y|Merkez Z|Yarıçap|açı|başaçı|bitaçı
- Özellikler:
- Index: Yay sırası.
- Tabaka: Yay’ın bulunduğu tabaka.
- GIS Sınıfı: GIS sınıflandırma kodu.
- GIS Kodu: GIS objesinin kodu.
- Renk: Yay’ın renk kodu.
- Adı: Yay’ın adı.
- Merkez X, Merkez Y, Merkez Z: Yay’ın merkez koordinatları (obj.p1.x, obj.p1.y, obj.p1.z).
- Yarıçap: Yay’ın yarıçapı (obj.rad).
- açı: Yay’ın açısı (obj.angle).
- başaçı, bitaçı: Yay’ın başlangıç ve bitiş açıları (obj.stangle, obj.enangle).
8. Yazı Objeleri (###YAZI###, Tag: 5)
- Açıklama: Metin (text) objeleri.
- Başlık: Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Yazı Metni|X Koordinatı|Y Koordinatı|Açı (Grad)|Genişlik Çarpanı|Yazı Boyu|Dayanma|Özellikler
- Özellikler:
- Index: Yazı sırası.
- Tabaka: Yazının bulunduğu tabaka.
- GIS Sınıfı: GIS sınıflandırma kodu.
- GIS Kodu: GIS objesinin kodu.
- Renk: Yazının renk kodu.
- Yazı Metni: Yazının içeriği (obj.s).
- X Koordinatı, Y Koordinatı: Yazının koordinatları (obj.p1.x, obj.p1.y).
- Açı (Grad): Yazının açısı (obj.angle).
- Genişlik Çarpanı: Yazı genişlik çarpanı (obj.wsc).
- Yazı Boyu: Yazı boyutu (obj.sc).
- Dayanma: Yazının hizalaması (obj.just).
- Özellikler: Yazı özellikleri (obj.flags).
9. Sembol Objeleri (###SEMBOL###, Tag: 6)
- Açıklama: Sembol veya işaretçi objeleri.
- Başlık: Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|X Koordinatı|Y Koordinatı|Z Koordinatı|Açı (Grad)|sembolno|boyutu
- Özellikler:
- Index: Sembol sırası.
- Tabaka: Sembolün bulunduğu tabaka.
- GIS Sınıfı: GIS sınıflandırma kodu.
- GIS Kodu: GIS objesinin kodu.
- Renk: Sembolün renk kodu.
- Adı: Sembolün adı (obj.pname).
- X Koordinatı, Y Koordinatı, Z Koordinatı: Sembolün koordinatları (obj.p1.x, obj.p1.y, obj.p1.z).
- Açı (Grad): Sembolün açısı (obj.angle).
- sembolno: Sembol numarası (obj.sembolno).
- boyutu: Sembol boyutu (obj.sc).
10. Spiral Objeleri (###SPIRAL###, Tag: 9)
- Açıklama: Spiral şeklindeki objeler.
- Başlık: Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Renk|Kalınlık|Çizgi Tipi
- Özellikler:
- Index: Spiral sırası.
- Tabaka: Spiralin bulunduğu tabaka.
- GIS Sınıfı: GIS sınıflandırma kodu.
- GIS Kodu: GIS objesinin kodu.
- Renk: Spiralin renk kodu (iki kez yazılıyor, muhtemelen hata).
- Adı: Spiralin adı.
- Kalınlık: Spiral kalınlığı (obj.w).
- Çizgi Tipi: Spiral çizgi türü (obj.lt).
11. İzohips Objeleri (###IZOHIPS###, Tag: 16)
- Açıklama: Yükseklik eğrileri (izohipler).
- Başlık: Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Renk|Kalınlık|Çizgi Tipi|Yükseklik
- Özellikler:
- Index: İzohips sırası.
- Tabaka: İzohipsin bulunduğu tabaka.
- GIS Sınıfı: GIS sınıflandırma kodu.
- GIS Kodu: GIS objesinin kodu.
- Renk: İzohipsin renk kodu (iki kez yazılıyor).
- Adı: İzohipsin adı.
- Kalınlık: İzohips kalınlığı.
- Çizgi Tipi: İzohips çizgi türü.
- Yükseklik: İzohipsin yüksekliği (obj.elevation).
12. Kutu Objeleri (###KUTU###, Tag: 12)
- Açıklama: Dikdörtgen veya kutu objeleri.
- Başlık: Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Renk|Kalınlık|Çizgi Tipi|Köşe 1 X|Köşe 1 Y|Köşe 1 Z|Köşe 2 X|Köşe 2 Y|Köşe 2 Z
- Özellikler:
- Index: Kutu sırası.
- Tabaka: Kutunun bulunduğu tabaka.
- GIS Sınıfı: GIS sınıflandırma kodu.
- GIS Kodu: GIS objesinin kodu.
- Renk: Kutunun renk kodu (iki kez yazılıyor).
- Adı: Kutunun adı.
- Kalınlık: Kutu kalınlığı.
- Çizgi Tipi: Kutu çizgi türü.
- Köşe 1 X, Köşe 1 Y, Köşe 1 Z: Kutunun birinci köşe koordinatları (obj.p1.x, obj.p1.y, obj.p1.z).
- Köşe 2 X, Köşe 2 Y, Köşe 2 Z: Kutunun ikinci köşe koordinatları (obj.p2.x, obj.p2.y, obj.p2.z).
13. Pafta Objeleri (###PAFTA###, Tag: 20)
- Açıklama: Harita paftaları.
- Başlık: Index|Tabaka|GIS Sınıfı|Renk|GIS Kodu|Adı|Renk|Kalınlık|Çizgi Tipi
- Özellikler:
- Index: Pafta sırası.
- Tabaka: Paftanın bulunduğu tabaka.
- GIS Sınıfı: GIS sınıflandırma kodu.
- GIS Kodu: GIS objesinin kodu.
- Renk: Paftanın renk kodu (iki kez yazılıyor).
- Adı: Paftanın adı.
- Kalınlık: Pafta kalınlığı.
- Çizgi Tipi: Pafta çizgi türü.
Örnek Çıktı Dosyası Yapısı
Aşağıda, .ncsagul dosyasının nasıl görünebileceğine dair bir örnek:
Proje Bilgileri EPSGKOD|7933 Projeksiyon|UTM 3° Datum|GRS80 Zone|33 Ölçek|1000 Rapor Tarihi|16.06.2025 09:11 Proje Adı|C:\Proje\ornek.ncw Proje|OrnekProje ProjeksiyonParam0|... ###TABAKALAR### Index|Tabaka Adı|ID|Renk|RGB Renk|Açık|Görünür|Kilit|Yazıcı Gönder|Başlangıç Ölçeği|Bitiş Ölçeği 1|Parsel|1|255|255-128-0|1|1|0|1|100|10000 2|Yol|2|128|128-128-128|1|1|0|1|100|10000 ###CIZGI### Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Kalınlık|Çizgi Tipi|Uzunluğu (m)|Başlangıç X|Başlangıç Y|Bitiş X|Bitiş Y 1|Parsel|CLS1|KOD1|255|Çizgi1|1|0|100.123|500.000|600.000|550.000|650.000 ###COKLUDOGRU### Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Kalınlık|Çizgi Tipi|Çevresi (m)|Tapu Alanı (m²)|Hesap Alanı (m²)|Flags|Köşe Noktaları 1|Parsel|CLS1|KOD1|255|Poligon1|1|0|400.123|1000.456|1000.789|0|500.000$600.000#550.000$650.000#500.000$600.000 ...
Neden Bu Makro? 🤔
Şaban Gül tarafından geliştirilen bu makro, Netcad kullanıcıları için özel olarak tasarlandı. Hızlı, güvenilir ve kullanıcı dostu! Üretilen dosya ile çok daha fazlasına erişebilirsiniz.
İşte kodumuz:
' www.sabangul.com.tr Web Sayfasından İndirilmiştir
' Şaban GÜL, Harita Mühendisi
' Her Türlü Hata, İstek ve Öneriler İçin
' haritaakademi@gmail.com veya sagulnet@gmail.com
Option Explicit
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Sub Main
Dim fso, decimalPlaces, f, BD, outputFile, i, j, obj, sel, poly, layerName
Dim includePoint, includeLine, includePoly, includeCircle, includeArc, includeText, includeShape
Dim includeSpiral, includeIzoHdr, includeRectangle, includePafta
Dim projectPath, defaultOutputPath
' Netcad nesnesi ile çalış
With Netcad
' Proje dosyasının yolunu al
projectPath = .GetParam(PNC_CURRENTFILE)
' Proje klasörünü çıkar ve varsayılan çıktı yolunu ayarla
Set fso = CreateObject("Scripting.FileSystemObject")
defaultOutputPath = fso.BuildPath(fso.GetParentFolderName(projectPath), "ncsagul.ncsagul")
' Diyalog penceresi oluştur
Set BD = .NewBDialog("Netcad Obje Aktarımı [Harita Akademi, Şaban GÜL]")
BD.PutPrompt "Çıktı Dosyası ve Obje Türlerini Seçiniz"
BD.GetFileName "outputFile", "Çıktı Dosyası:", defaultOutputPath, "Ncsagul Dosyaları|*.ncsagul|Tüm Dosyalar|*.*", "ncsagul"
BD.GetFloat "decimalPlaces", "Koordinat Ondalığı (0-10):", 3,0
BD.GetCheck "point", "Nokta Objelerini Dahil Et", 1
BD.GetCheck "line", "Çizgi Objelerini Dahil Et", 1
BD.GetCheck "poly", "Çoklu Doğru Objelerini Dahil Et", 1
BD.GetCheck "circle", "Daire Objelerini Dahil Et", 1
BD.GetCheck "arc", "Yay Objelerini Dahil Et", 1
BD.GetCheck "text", "Yazı Objelerini Dahil Et", 1
BD.GetCheck "shape", "Sembol Objelerini Dahil Et", 1
BD.GetCheck "spiral", "Spiral Objelerini Dahil Et", 1
BD.GetCheck "izohdr", "İzohips Objelerini Dahil Et", 0
BD.GetCheck "rectangle", "Kutu Objelerini Dahil Et", 1
BD.GetCheck "pafta", "Pafta Objelerini Dahil Et", 0
BD.PutPrompt "Tamam'a basarak işlemi başlatın."
If Not BD.ShowModal Then
Exit Sub
End If
' Kullanıcı girişlerini al
outputFile = BD.ValueByName("outputFile")
decimalPlaces = BD.ValueByName("decimalPlaces")
' 0-10 arasında tamsayı kontrolü
If decimalPlaces < 0 Or decimalPlaces > 10 Or Int(decimalPlaces) <> decimalPlaces Then
decimalPlaces = 3 ' Varsayılan değer
End If
includePoint = BD.ValueByName("point")
includeLine = BD.ValueByName("line")
includePoly = BD.ValueByName("poly")
includeCircle = BD.ValueByName("circle")
includeArc = BD.ValueByName("arc")
includeText = BD.ValueByName("text")
includeShape = BD.ValueByName("shape")
includeSpiral = BD.ValueByName("spiral")
includeIzoHdr = BD.ValueByName("izohdr")
includeRectangle = BD.ValueByName("rectangle")
includePafta = BD.ValueByName("pafta")
' Çıktı dosyasını oluştur
Set f = fso.OpenTextFile(outputFile, ForWriting, True)
Const PR_GEO = 1
Const PR_UTM3 = 3
Const PR_UTM = 2
Const DATUM_WGS84 = 0
Const DATUM_GRS80 = 1
Const DATUM_TUR_1 = 4
dim projName,proj,projType,datum,zone,epsg
projName = .GetParam(34)
Set proj = .NewProjection
proj.GetFromCurrentProject
Select Case proj.ProjectionType
Case PR_GEO: projType = "Coğrafi"
Case PR_UTM3: projType = "UTM 3°"
Case PR_UTM: projType = "UTM 6°"
Case Else: projType = "Diğer"
End Select
Select Case proj.Datum
Case DATUM_WGS84: datum = "WGS84"
Case DATUM_GRS80: datum = "GRS80"
Case DATUM_TUR_1: datum = "ED50"
Case Else: datum = "Diğer"
End Select
zone = proj.Zone
If IsEmpty(zone) Then zone = .GetParam(49)
If IsEmpty(zone) Then zone = "Bilinmiyor"
epsg = "Bilinmiyor"
If projType = "UTM 3°" And datum = "GRS80" AND zone=33 Then
epsg = "7933"
elseIf projType = "UTM 3°" And datum = "GRS80" and zone=36 Then
epsg = "7934"
elseIf projType = "UTM 3°" And datum = "GRS80" and zone=39 Then
epsg = "7935"
elseIf projType = "UTM 3°" And datum = "GRS80" and zone=42 Then
epsg = "7936"
elseIf projType = "UTM 3°" And datum = "GRS80" and zone=45 Then
epsg = "7937"
elseIf projType = "UTM 3°" And datum = "GRS80" and zone=30 Then
epsg = "7932"
elseIf projType = "UTM 3°" And datum = "GRS80" and zone=27 Then
epsg = "7931"
elseIf projType = "UTM 3°" And datum = "ED50" and zone=27 Then
epsg = "2319"
elseIf projType = "UTM 3°" And datum = "ED50" and zone=30 Then
epsg = "2320"
elseIf projType = "UTM 3°" And datum = "ED50" and zone=33 Then
epsg = "2321"
elseIf projType = "UTM 3°" And datum = "ED50" and zone=36 Then
epsg = "2322"
elseIf projType = "UTM 3°" And datum = "ED50" and zone=39 Then
epsg = "2323"
elseIf projType = "UTM 3°" And datum = "ED50" and zone=42 Then
epsg = "2324"
elseIf projType = "UTM 3°" And datum = "ED50" and zone=45 Then
epsg = "2325"
elseIf projType = "UTM 3°" And datum = "ED50" and zone=27 Then
epsg = "2326"
ElseIf projType = "UTM 6°" And datum = "ED50" and zone=35 Then
epsg = "23035"
ElseIf projType = "UTM 6°" And datum = "ED50" and zone=36 Then
epsg = "23036"
ElseIf projType = "UTM 6°" And datum = "ED50" and zone=37 Then
epsg = "23037"
ElseIf projType = "UTM 6°" And datum = "ED50" and zone=38 Then
epsg = "23038"
End If
' Proje bilgilerini yaz
f.WriteLine "Proje Bilgileri"
f.WriteLine "EPSGKOD|" & epsg
f.WriteLine "Projeksiyon|" & projType
f.WriteLine "Datum|" & datum
f.WriteLine "Zone|" & zone
f.WriteLine "Ölçek|" & .GetParam (94)
f.WriteLine "Rapor Tarihi|" & FormatDateTime(Now, 2) & " " & FormatDateTime(Now, 4)
f.WriteLine "Proje Adı|" & .GetParam(PNC_CURRENTFILE)
f.WriteLine "Proje|" & projName
f.WriteLine projectPath
'f.WriteLine "###PROJEKSIYON###"
'f.WriteLine "EPSG|" & .GetParam(61)
'f.WriteLine "Datum|" & .GetParam(38)
'f.WriteLine "Zone|" & .GetParam(39)
'f.WriteLine "ProjectionType|" & .GetParam(36)
For i = 0 To 63
f.WriteLine "ProjeksiyonParam" & i & "|" & .GetParam(i)
Next
' Tabaka bilgilerini yaz
f.WriteLine "###TABAKALAR###"
f.WriteLine "Index|Tabaka Adı|ID|Renk|RGB Renk|Açık|Görünür|Kilit|Yazıcı Gönder|Başlangıç Ölçeği|Bitiş Ölçeği"
With ncLayerManager
For i = 0 To .NumLayer - 1
Dim bgrColor, red, green, blue, rgbColor
bgrColor = .Layer(i).ColorBGR
blue = bgrColor Mod 256
green = (bgrColor \ 256) Mod 256
red = (bgrColor \ 65536) Mod 256
rgbColor = red & "-" & green & "-" & blue
f.WriteLine (i) & "|" & .LAYER(i).NAME & "|" & i & "|" & .Layer(i).COLOR & "|" & rgbColor & "|" & .Layer(i).isopen & "|" & .Layer(i).VisibiltyActive & "|" & .Layer(i).LockActive & "|" & .Layer(i).PrintableActive & "|" & .Layer(i).VisStartScale & "|" & .Layer(i).VisEndScale
Next
End With
f.WriteLine ""
' Seçim kümesi oluştur
Set sel = .NewSelectionSet
Set obj = .NewObject
If sel.Select("Objeleri Seçiniz...", Array(1, 2, 7, 3, 4, 5, 6, 9, 16, 12, 20)) Then
' Çizgi objeleri (tag: 2)
If includeLine Then
f.WriteLine "###CIZGI###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Kalınlık|Çizgi Tipi|Uzunluğu (m)|Başlangıç X|Başlangıç Y|Bitiş X|Bitiş Y"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 2 Then
layerName = .LayerNameOf(obj.tabaka)
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.objname & "|" & obj.renk & "|" & obj.pname & "|" & obj.w & "|" & obj.lt & "|" & FormatNumber(obj.length(0), decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.x, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.y, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p2.x, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p2.y, decimalPlaces, , , 0)
End If
Next
End If
' Çoklu doğru objeleri (tag: 7)
If includePoly Then
f.WriteLine "###COKLUDOGRU###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Kalınlık|Çizgi Tipi|Çevresi (m)|Tapu Alanı (m²)|Hesap Alanı (m²)|Flags|Köşe Noktaları"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 7 Then
layerName = .LayerNameOf(obj.tabaka)
Set poly = .GetPlineExt(obj)
Dim points, k
points = ""
For k = 0 To poly.num - 1
points = points & FormatNumber(poly.cor(k).x, decimalPlaces, , , 0) & "$" & FormatNumber(poly.cor(k).y, decimalPlaces, , , 0)
If k < poly.num - 1 Then points = points & "#"
Next
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.renk & "|" & obj.objname & "|" & obj.pname & "|" & obj.w & "|" & obj.lt & "|" & FormatNumber(obj.length(0), decimalPlaces, , , 0) & "|" & FormatNumber(obj.tarea, decimalPlaces, , , 0) & "|" & FormatNumber(obj.area, decimalPlaces, , , 0) & "|" & obj.flags & "|" & points
Set poly = Nothing
End If
Next
End If
' Daire objeleri (tag: 3)
If includeCircle Then
f.WriteLine "###DAIRE###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Merkez X|Merkez Y|Merkez Z|Yarıçap|Alan (m²)"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 3 Then
layerName = .LayerNameOf(obj.tabaka)
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.renk & "|" & obj.objname & "|" & FormatNumber(obj.p1.x, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.y, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.z, decimalPlaces, , , 0) & "|" & FormatNumber(obj.rad, decimalPlaces, , , 0) & "|" & FormatNumber(obj.area, decimalPlaces, , , 0)
End If
Next
End If
' Nokta objeleri (tag: 1)
If includePoint Then
f.WriteLine "###NOKTA###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Nokta Kodu|X Koordinatı|Y Koordinatı|Z Koordinatı"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 1 Then
layerName = .LayerNameOf(obj.tabaka)
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.renk & "|" & obj.objname & "|" & obj.pname & "|" & obj.pcode & "|" & FormatNumber(obj.p1.x, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.y, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.z, decimalPlaces, , , 0)
End If
Next
End If
' Yay objeleri (tag: 4)
If includeArc Then
f.WriteLine "###YAY###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Merkez X|Merkez Y|Merkez Z|Yarıçap|açı|başaçı|bitaçı"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 4 Then
layerName = .LayerNameOf(obj.tabaka)
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.renk & "|" & obj.objname & "|" & obj.pname & "|" & FormatNumber(obj.p1.x, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.y, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.z, decimalPlaces, , , 0) & "|" & FormatNumber(obj.rad, decimalPlaces, , , 0) & "|" & obj.angle & "|" & obj.stangle & "|" & obj.enangle
End If
Next
End If
' Yazı objeleri (tag: 5)
If includeText Then
f.WriteLine "###YAZI###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Yazı Metni|X Koordinatı|Y Koordinatı|Açı (Grad)|Genişlik Çarpanı|Yazı Boyu|Dayanma|Özellikler"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 5 Then
layerName = .LayerNameOf(obj.tabaka)
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.renk & "|" & obj.objname & "|" & obj.s & "|" & FormatNumber(obj.p1.x, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.y, decimalPlaces, , , 0) & "|" & FormatNumber(obj.angle, decimalPlaces, , , 0) & "|" & FormatNumber(obj.wsc, decimalPlaces, , , 0) & "|" & FormatNumber(obj.sc, decimalPlaces, , , 0) & "|" & obj.just & "|" & obj.flags
End If
Next
End If
' Sembol objeleri (tag: 6)
If includeShape Then
f.WriteLine "###SEMBOL###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|X Koordinatı|Y Koordinatı|Z Koordinatı|Açı (Grad)|sembolno|boyutu"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 6 Then
layerName = .LayerNameOf(obj.tabaka)
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.renk & "|" & obj.objname & "|" & obj.pname & "|" & FormatNumber(obj.p1.x, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.y, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.z, decimalPlaces, , , 0) & "|" & FormatNumber(obj.angle, decimalPlaces, , , 0) & "|" & obj.sembolno & "|" & obj.sc
End If
Next
End If
' Spiral objeleri (tag: 9)
If includeSpiral Then
f.WriteLine "###SPIRAL###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Renk|Kalınlık|Çizgi Tipi"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 9 Then
layerName = .LayerNameOf(obj.tabaka)
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.renk & "|" & obj.objname & "|" & obj.pname & "|" & obj.renk & "|" & obj.w & "|" & obj.lt
End If
Next
End If
' İzohips objeleri (tag: 16)
If includeIzoHdr Then
f.WriteLine "###IZOHIPS###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Renk|Kalınlık|Çizgi Tipi|Yükseklik"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 16 Then
layerName = .LayerNameOf(obj.tabaka)
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.renk & "|" & obj.objname & "|" & obj.pname & "|" & obj.renk & "|" & obj.w & "|" & obj.lt & "|" & FormatNumber(obj.elevation, decimalPlaces, , , 0)
End If
Next
End If
' Kutu objeleri (tag: 12)
If includeRectangle Then
f.WriteLine "###KUTU###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|GIS Kodu|Renk|Adı|Renk|Kalınlık|Çizgi Tipi|Köşe 1 X|Köşe 1 Y|Köşe 1 Z|Köşe 2 X|Köşe 2 Y|Köşe 2 Z"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 12 Then
layerName = .LayerNameOf(obj.tabaka)
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.objname & "|" & obj.renk & "|" & obj.pname & "|" & obj.renk & "|" & obj.w & "|" & obj.lt & "|" & FormatNumber(obj.p1.x, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.y, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p1.z, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p2.x, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p2.y, decimalPlaces, , , 0) & "|" & FormatNumber(obj.p2.z, decimalPlaces, , , 0)
End If
Next
End If
' Pafta objeleri (tag: 20)
If includePafta Then
f.WriteLine "###PAFTA###"
f.WriteLine "Index|Tabaka|GIS Sınıfı|Renk|GIS Kodu|Adı|Renk|Kalınlık|Çizgi Tipi"
For i = 0 To sel.NE - 1
j = sel.GetSelectedObject(i, obj)
If obj.tag = 20 Then
layerName = .LayerNameOf(obj.tabaka)
f.WriteLine i + 1 & "|" & layerName & "|" & obj.cls & "|" & obj.objname & "|" & obj.renk & "|" & obj.pname & "|" & obj.renk & "|" & obj.w & "|" & obj.lt
End If
Next
End If
sel.RedrawAndRewind
End If
' Temizlik
f.Close
Set f = Nothing
Set fso = Nothing
Set sel = Nothing
Set obj = Nothing
Set BD = Nothing
MsgBox "Obje bilgileri başarıyla " & outputFile & " dosyasına aktarıldı.", 64, "Harita Akademi, Şaban GÜL"
End With
End Sub
Netcad ile Proje Verilerinizi Hızla .ncsagul Formatında Raporlayın ! 📊 Daha sonra bu formata uygun tüm uygulamalarda sorunsuz kullanın
Netcad kullanıcıları için geliştirilen bu güçlü VBScript makrosu, projelerinizdeki tüm verileri ve objeleri zahmetsizce .ncsagul uzantılı sade bir TXT dosyasına (CSV formatında) aktarır. 📄 Harita, planlama veya mühendislik projelerinizde kullanılan çoklu doğru, çizgi, nokta, yazı, daire, sembol, yay, spiral, izohips, kutu ve pafta gibi objeleri tek bir tıkla raporlayın! 💻 Bu makro, Netcad’in sunduğu zengin veri setlerini düzenli, okunabilir ve analiz dostu bir formata dönüştürerek iş akışınızı hızlandırır. ✨
Makro Ne Yapar? 🛠️
Bu makro, Netcad ortamında seçilen objeleri tarar ve her birini türüne göre sınıflandırarak .ncsagul dosyasına kaydeder. Çıktı, sade bir CSV formatında düzenlenir ve obje türleri ###TÜR### başlıklarıyla ayrılır. Örneğin:
- Çoklu Doğru (###COKLUDOGRU###): Köşe noktaları Y$X#Y$X formatında (örn. 789.012$123.456#790.123$124.567), çevre, tapu alanı ve hesap alanı gibi özelliklerle.
- Çizgi (###CIZGI###): Başlangıç/bitiş koordinatları, uzunluk, kalınlık ve çizgi tipi.
- Nokta (###NOKTA###): X, Y, Z koordinatları ve nokta kodu.
- Yazı (###YAZI###): Metin, koordinat, açı, genişlik çarpanı ve dayanma özellikleri.
- Daire (###DAIRE###): Merkez koordinatları, yarıçap ve alan.
- Diğer objeler (sembol, yay, spiral, izohips, kutu, pafta) ve bilinmeyen türler için de özel sütunlar.
Proje Bilgileri ve Projeksiyon Detayları 🌍
Makro, sadece objelerle yetinmez; projenizin tüm kritik bilgilerini de rapora ekler. Proje adı, dosya yolu ve rapor tarihi/saati gibi temel verilerin yanı sıra, Netcad’in koordinat sistemi detaylarını tam kapsamlı şekilde sunar:
- WKT: Projeksiyonun tam tanımı.
- EPSG: Uluslararası standart kodu.
- Datum, Zone, ProjectionType: Koordinat sisteminin temel bileşenleri.
Bu bilgiler, özellikle coğrafi bilgi sistemleri (GIS) projelerinde çalışanlar için vazgeçilmezdir. 🗺️
Netcad Parametreleri ⚙️
Projenizin teknik detaylarını derinlemesine anlamak isteyenler için makro, Netcad’in 0’dan 63’e kadar olan parametrelerini ve ek olarak Param94’ü çeker. Bu parametreler, projenizin yapılandırmasını ve ayarlarını belgelemek için idealdir. Her parametre, ParamX,Değer formatında rapora eklenir, böylece veri bütünlüğü korunur.
Kullanım Kolaylığı ve Esneklik 🎯
Makronun kullanımı son derece basittir. Netcad ortamında objeleri seçin, sağ tıklayın ve makro çalışsın! Seçim işlemi, çoklu doğru (Tag 7), çizgi (Tag 2), nokta (Tag 1) gibi 11 farklı obje türünü destekler. Seçilen objeler, tabaka isimleriyle birlikte (bilinmeyen tabakalar için “Bilinmeyen Tabaka” etiketi) raporlanır. Dosya kaydetme diyalogu, .ncsagul uzantılı dosyalar için özel bir filtre sunar ve kullanıcı dostu bir arayüzle dosya yolunu seçmenizi sağlar. 📂
Dosya yolu mevcut değilse, makro otomatik olarak gerekli klasörü oluşturur. Hata yönetimi sayesinde, obje seçilmezse veya klasör oluşturulamazsa kullanıcıya net hata mesajları gösterilir. Bu, hem yeni başlayanlar hem de profesyoneller için sorunsuz bir deneyim sunar. 😊
Neden .ncsagul Formatı? 📋
.ncsagul uzantısı, bu makroya özgü bir dosya türü olsa da, içerik tamamen standart bir TXT (CSV) formatındadır. Bu, dosyaların Excel, Python, R veya herhangi bir veri analiz aracıyla kolayca açılmasını sağlar. CSV yapısı, veri ayrıştırılmasını ve işlenmesini hızlandırır.
✅ 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.