Home / Netcad Makro / Alan Köşelerine Nokta Taşıma Makrosu (Point to Area Corner Relocation Macro)

Alan Köşelerine Nokta Taşıma Makrosu (Point to Area Corner Relocation Macro)

Alan Köşelerine Nokta Taşıma Makrosu ile Haritalarınızı Mükemmelleştirin! 🌟


Bu makro, Netcad ortamında alan (poligon) objelerinin köşelerine yakın olan noktaları otomatik olarak tam köşe noktalarına taşıyan etkili bir araçtır. Harita düzenleme, veri temizleme ve hassas yerleştirme işlemlerinde büyük kolaylık sağlar. Kullanıcı dostu arayüzü ile noktaların bulunduğu tabakayı, alan objelerinin bulunduğu tabakayı ve tampon mesafesini seçebilirsiniz. Taşınan noktalar renk değiştirerek görsel olarak öne çıkar. Haritalarınızı daha düzenli ve profesyonel hale getirmek için ideal bir çözüm! 🛠️


Nasıl Çalışır (How Does It Work)

Makro, aşağıdaki adımları izleyerek çalışır:

  • Kullanıcı Arayüzü: Makro başlatıldığında, bir diyalog kutusu açılır. Bu kutuda noktaların bulunduğu tabaka, alan objelerinin bulunduğu tabaka ve tampon mesafesi (metre cinsinden) belirlenir.
  • Nokta Taraması: Seçilen tabakadaki noktalar taranır ve her bir nokta için işlem yapılır.
  • Köşe Hesaplama: Her nokta, belirtilen alan objesinin köşelerine olan mesafesi hesaplanarak en yakın köşeye taşınır. Bu işlem, tampon mesafesi sınırları içinde gerçekleştirilir.
  • Taşıma ve Görselleştirme: Nokta, tampon mesafesi içindeyse, en yakın alan köşesine taşınır ve rengi değiştirilir (örneğin, kırmızıya).
  • Sonuç: İşlem tamamlandığında, noktalar alan objelerinin köşelerine hizalanmış olur, haritanız daha temiz ve düzenli görünür.

Etiket ( Labels )

Etiketler

Türkçe Etiketler
AlanKöşelerineNoktaTaşıma, NetcadMakro, HaritaDüzenleme, VeriTemizleme, Otomasyon, NoktaHizalama, PoligonKöşeleri, NetcadOtomasyon, HaritaTemizleme, VeriHassasiyeti, CoğrafiVeriDüzenleme, HaritaOptimizasyonu, NoktaYerleştirme, CBS, CoğrafiBilgiSistemi, HaritaVeriYönetimi, MakroKodu, NetcadVBScript, Veriİşleme, HaritaMühendisliği


📝 Netcad NVB Code

VB
sub Main
  dim Form
  dim i, noktaSayisi
  dim objNokta
  with Netcad
    set Form= .NewBDialog("Noktaları en yakın çizgiye taşıma") 'Kullanıcı arayüzü başlığı
    Form.GetCombo "NOKTA_TABAKA", "Noktaların bulunduğu tabaka: ", "0", 0
    for i = 1 to .Numlayers - 1
      Form.AddCombo .LayerNameOf(i)
    next
    Form.GetCombo "CIZGI_TABAKA", "Çizgilerin bulunduğu tabaka: ", "0", 0
    for i = 1 to .Numlayers - 1
      Form.AddCombo .LayerNameOf(i)
    next
    Form.GetFloat "TAMPON", "Tampon Mesafesi (Metre): ", 1, 2
.BackMessage
    if Form.ShowModal then
      set objNokta= .NewObject()
      .SetFilter nothing, array(Form.ValueByName("NOKTA_TABAKA")), array(oPoint) 'Nokta tabakası filtresi
      noktaSayisi = 0
      while .GetNextObject2(objNokta)
        noktaSayisi = noktaSayisi + 1
        NoktaCek objNokta, Form.ValueByName("CIZGI_TABAKA"), Form.ValueByName("TAMPON"), .CurObjPos
      wend
      .ResetFilter
    end if
'.BackMessage
  end with
end sub

function NoktaCek(objNokta, tabakaCizgi, Tampon, objPos)
  dim i, j, cizgiSayisi, Limit
  dim t, dx, dy, mesafe, enYakinMesafe
  dim objPLine, objCizgi
  dim pt, p1, p2, nokta, enYakinNokta
 
  with Netcad
    set pt = objNokta.p1
    set enYakinNokta = .NewC(0,0,0)
    set nokta = .NewC(0,0,0)
    set Limit = .NewWorld(pt.y-(Tampon+1), pt.x-(Tampon+1), pt.y+(Tampon+1), pt.x+(Tampon+1)) 'Tampon alanı tanımlama
    set objCizgi = .NewObject()
    .SetFilter Limit, array(tabakaCizgi), array(oPLine, oLine) 'Çizgi tabakası filtresi
    cizgiSayisi = 0
    enYakinMesafe = 100*Tampon
    while .GetNextObject2(objCizgi)
      cizgiSayisi = cizgiSayisi + 1
      '.SetMessage cizgiSayisi
      'Set objPLine = .GetPlineExt(objCizgi)
      set objPLine = objCizgi.GetObjectAsPline()
      for j = 0 to objPLine.Num - 2
        set p1 = objPLine.Cor(j)
        set p2 = objPLine.Cor(j+1)
        dx = p2.x - p1.x
        dy = p2.y - p1.y
        if (dx = 0) and (dy = 0) then
          nokta.x = p1.x
          nokta.y = p1.y
          mesafe = NCMath.Distance(pt, p1, false)
        else
          t = ((pt.x - p1.x) * dx + (pt.y - p1.y) * dy) / (dx * dx + dy * dy)
          if (t < 0) then
            nokta.x = p1.x
            nokta.y = p1.y
            mesafe = NCMath.Distance(pt, p1, false)
          else
            if (t > 1) then
              nokta.x = p2.x
              nokta.y = p2.y
              mesafe = NCMath.Distance(pt, p2, false)
            else
              nokta.x = p1.x + t * dx
              nokta.y = p1.y + t * dy
              mesafe = NCMath.Distance(pt, nokta, false)
            end if
          end if
        end if
        if (mesafe < enYakinMesafe) then
          enYakinMesafe = mesafe
          enYakinNokta.x = nokta.x
          enYakinNokta.y = nokta.y
          '.SetMessage "Girdi 1"
        end if
      next
    wend
    .ResetFilter
    '.SetMessage enYakinMesafe
    if (enYakinMesafe <= Tampon) then
      '.SetMessage enYakinNokta.x
      '.SetMessage "Girdi 1"
      objNokta.p1.x = enYakinNokta.x
      objNokta.p1.y = enYakinNokta.y
      objNokta.Renk = 2 'Taşınan noktaların rengini değiştirme
      .PutObject objPos, objNokta
    end if
  end with
end function
VB

netcad-noktalari-objeye-cek

⚠️ 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.
Etiketlendi: