Home / Netcad Makro / Ncsagul Dosya Okuma Makrosu (Netcad)

Ncsagul Dosya Okuma Makrosu (Netcad)

A contemporary office desk featuring a dual monitor setup with stylish lighting, ideal for tech enthusiasts.
' 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

Sub Main
    Dim fso, f, BD, inputFile, line, fields, objType, isHeader, layerName, layerId
    Dim projectPath, defaultInputPath, points, pointPairs, k, poly
    Dim netcadObj, sabangul_i

    ' Netcad nesnesi ile çalış
    With Netcad
        ' Proje dosyasının yolunu al
        projectPath = .GetParam(PNC_CURRENTFILE)
        ' Proje klasörünü çıkar ve varsayılan giriş yolunu ayarla
        Set fso = CreateObject("Scripting.FileSystemObject")
        defaultInputPath = fso.BuildPath(fso.GetParentFolderName(projectPath), "ncsagul.ncs")

        ' Diyalog penceresi oluştur
        Set BD = .NewBDialog("Netcad Obje Okuma [Harita Akademi, Şaban GÜL]")
        BD.PutPrompt "Okunacak Dosyayı Seçiniz"
        BD.GetFileName "inputFile", "Giriş Dosyası:", defaultInputPath, "Text Dosyaları|*.ncsagul|Tüm Dosyalar|*.*", "ncsagul"
        BD.PutPrompt "Tamam'a basarak işlemi başlatın."

        If Not BD.ShowModal Then
            Exit Sub
        End If

        ' Kullanıcı girişini al
        inputFile = BD.ValueByName("inputFile")

        ' Dosya var mı kontrol et
        If Not fso.FileExists(inputFile) Then
            MsgBox "Dosya bulunamadı: " & inputFile, 16, "Hata"
            Exit Sub
        End If

        ' Dosyayı oku
        Set f = fso.OpenTextFile(inputFile, ForReading, False)
        objType = ""
        isHeader = False
        Set netcadObj = .NewObject

        Do Until f.AtEndOfStream
            line = f.ReadLine

            ' Boş satırı işle
            If Len(Trim(line)) = 0 Then
                isHeader = False
                objType = ""
            ElseIf Left(line, 3) = "###" Then
                ' Obje türü değişti
                objType = Mid(line, 4, Len(line) - 6) ' ###CIZGI### -> CIZGI
                isHeader = True
            ElseIf isHeader Then
                ' Başlık satırını atla
                isHeader = False
            Else
                ' Obje satırını işle
                fields = Split(line, "|")

                ' Tabaka veya obje işleme
                Select Case objType
                    Case "TABAKALAR"
                        If UBound(fields) >= 10 Then
                            layerName = fields(1)
                            With ncLayerManager
                                layerId = -1
                                For sabangul_i = 0 To .NumLayer - 1
                                    If UCase(.Layer(sabangul_i).name) = UCase(layerName) Then
                                        layerId = sabangul_i
                                        Exit For
                                    End If
                                Next
                            If layerId = -1 Then
                                    layerId = netcad.createlayer(layerName,5)
                                End If
                                ' Tabaka özelliklerini uygula
                              
                                 .Layer(layerId).name=layerName
                                        .Layer(layerId).color = CLng(fields(3))
                                        .Layer(layerId).VisStartScale=CDbl(fields(9))
                                        .Layer(layerId).VisEndScale = CDbl(fields(10))
                                      if fields(5) ="Doğru" then netcad.openlayer(layerId) else netcad.closelayer(layerId)
                                      if fields(7) ="Doğru" then   .layer(layerId).LockActive=True else   .layer(layerId).LockActive=False
                                      if fields(8) ="Doğru" then   .layer(layerId).PrintableActive=True else   .layer(layerId).PrintableActive=False
                            
                            
                            
                            
                            End With
                        End If

                    Case Else
                        ' Mevcut tabaka kontrolü
                        If UBound(fields) > 1 Then
                            layerName = fields(1)
                            With ncLayerManager
                                layerId = -1
                                For sabangul_i = 0 To .NumLayer - 1
                                    If UCase(.Layer(sabangul_i).name) = UCase(layerName) Then
                                        layerId = sabangul_i
                                        Exit For
                                    End If
                                Next
                                If layerId = -1 Then
                                    layerId = netcad.createlayer(layerName,5)
                                    Randomize
                                    '.SetLayerColor layerId, Int(Rnd * 256)
                                End If
                            End With
                        End If

                        ' Obje türüne göre işleme
                        Select Case objType
                            Case "CIZGI"
                                If UBound(fields) >= 11 Then
                                    netcadObj.tag = 2
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.pname = fields(4)
                                    netcadObj.w = CDbl(fields(5))
                                    netcadObj.lt = CInt(fields(6))
                                    netcadObj.p1.x = CDbl(fields(8))
                                    netcadObj.p1.y = CDbl(fields(9))
                                    netcadObj.p2.x = CDbl(fields(10))
                                    netcadObj.p2.y = CDbl(fields(11))
                                    .AddObject netcadObj
                                End If

                            Case "COKLUDOGRU"
                                If UBound(fields) >= 11 Then
                                    netcadObj.tag = 7
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.pname = fields(4)
                                    netcadObj.w = CDbl(fields(5))
                                    netcadObj.lt = CInt(fields(6))
                                    netcadObj.tarea = CDbl(fields(8))
                                    'netcadObj.area = CDbl(fields(9))
                                    netcadObj.flags = fields(10)
                                    Set poly = .newpoly
                                    points = Split(fields(11), "#")
                                    For k = 0 To UBound(points)
                                        pointPairs = Split(points(k), "$")
                                        If UBound(pointPairs) = 1 Then
                                            Dim c  
                                            Set c = .newc(CDbl(pointPairs(1)), CDbl(pointPairs(0)), 0)
                                            poly.addcoor c  
                                        End If
                                    Next
                                    Dim alanss
                                    Dim tabks
                                    tabks = 0 
                                    For k = 0 To NCLayerManager.NumLayer - 1
                                        If NCLayerManager.layer(k).name = fields(1) Then tabks = k
                                    Next
                                    Set alanss = .MakePline("ADI!", fields(10), fields(8), tabks, 0, 0, poly)
                                    alanss.cls = fields(2)
                                    alanss.objname = fields(3)
                                    alanss.pname = fields(4)
                                    alanss.w = CDbl(fields(5))
                                    alanss.lt = CInt(fields(6))
                                    alanss.tarea = CDbl(fields(8))
                                    .AddObject(alanss)
                                    Set poly = Nothing
                                End If

                            Case "DAIRE"
                                If UBound(fields) >= 8 Then
                                    netcadObj.tag = 3
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.p1.x = CDbl(fields(4))
                                    netcadObj.p1.y = CDbl(fields(5))
                                    netcadObj.p1.z = CDbl(fields(6))
                                    netcadObj.rad = CDbl(fields(7))
                                    .AddObject netcadObj
                                End If

                            Case "NOKTA"
                                If UBound(fields) >= 8 Then
                                    netcadObj.tag = 1
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.pname = fields(4)
                                    netcadObj.pcode = fields(5)
                                    netcadObj.p1.x = CDbl(fields(6))
                                    netcadObj.p1.y = CDbl(fields(7))
                                    netcadObj.p1.z = CDbl(fields(8))
                                    .AddObject netcadObj
                                End If

                            Case "YAY"
                                If UBound(fields) >= 11 Then
                                    netcadObj.tag = 4
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.pname = fields(4)
                                    netcadObj.p1.x = CDbl(fields(5))
                                    netcadObj.p1.y = CDbl(fields(6))
                                    netcadObj.p1.z = CDbl(fields(7))
                                    netcadObj.rad = CDbl(fields(8))
                                    netcadObj.angle = CDbl(fields(9))
                                    netcadObj.stangle = CDbl(fields(10))
                                    netcadObj.enangle = CDbl(fields(11))
                                    .AddObject netcadObj
                                End If

                            Case "YAZI"
                                If UBound(fields) >= 11 Then
                                    netcadObj.tag = 5
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.s = fields(4)
                                    netcadObj.p1.x = CDbl(fields(5))
                                    netcadObj.p1.y = CDbl(fields(6))
                                    netcadObj.angle = CDbl(fields(7))
                                    netcadObj.wsc = CDbl(fields(8))
                                    netcadObj.sc = CDbl(fields(9))
                                    netcadObj.just = fields(10)
                                    netcadObj.flags = fields(11)
                                    .AddObject netcadObj
                                End If

                            Case "SEMBOL"
                                If UBound(fields) >= 10 Then
                                    netcadObj.tag = 6
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.pname = fields(4)
                                    netcadObj.p1.x = CDbl(fields(5))
                                    netcadObj.p1.y = CDbl(fields(6))
                                    netcadObj.p1.z = CDbl(fields(7))
                                    netcadObj.angle = CDbl(fields(8))
                                    netcadObj.sembolno = CDbl(fields(9))
                                    netcadObj.sc = CDbl(fields(10))
                                    .AddObject netcadObj
                                End If

                            Case "SPIRAL"
                                If UBound(fields) >= 7 Then
                                    netcadObj.tag = 9
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.pname = fields(4)
                                    netcadObj.renk = CLng(fields(5))
                                    netcadObj.w = CDbl(fields(6))
                                    netcadObj.lt = CInt(fields(7))
                                    .AddObject netcadObj
                                End If

                            Case "IZOHIPS"
                                If UBound(fields) >= 8 Then
                                    netcadObj.tag = 16
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.pname = fields(4)
                                    netcadObj.renk = CLng(fields(5))
                                    netcadObj.w = CDbl(fields(6))
                                    netcadObj.lt = CInt(fields(7))
                                    netcadObj.elevation = CDbl(fields(8))
                                    .AddObject netcadObj
                                End If

                            Case "KUTU"
                                If UBound(fields) >= 13 Then
                                    netcadObj.tag = 12
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.pname = fields(4)
                                    netcadObj.renk = CLng(fields(5))
                                    netcadObj.w = CDbl(fields(6))
                                    netcadObj.lt = CInt(fields(7))
                                    netcadObj.p1.x = CDbl(fields(8))
                                    netcadObj.p1.y = CDbl(fields(9))
                                    netcadObj.p1.z = CDbl(fields(10))
                                    netcadObj.p2.x = CDbl(fields(11))
                                    netcadObj.p2.y = CDbl(fields(12))
                                    netcadObj.p2.z = CDbl(fields(13))
                                    .AddObject netcadObj
                                End If

                            Case "PAFTA"
                                If UBound(fields) >= 7 Then
                                    netcadObj.tag = 20
                                    netcadObj.tabaka = layerId
                                    netcadObj.cls = fields(2)
                                    netcadObj.objname = fields(3)
                                    netcadObj.pname = fields(4)
                                    netcadObj.renk = CLng(fields(5))
                                    netcadObj.w = CDbl(fields(6))
                                    netcadObj.lt = CInt(fields(7))
                                    .AddObject netcadObj
                                End If
                        End Select
                End Select
            End If
        Loop

        ' Temizlik
        f.Close
        Set f = Nothing
        Set fso = Nothing
        Set netcadObj = Nothing
        Set BD = Nothing
    
        MsgBox "Obje bilgileri başarıyla " & inputFile & " dosyasından okundu ve projeye eklendi.", 64, "Harita Akademi, Şaban GÜL"
    End With
End Sub
⚠️ Dikkat! Netcad Makrosu Kullanımı Hakkında Bilgilendirme

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

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

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

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

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

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

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