Alan Köşelerini En Yakın Noktaya Taşıma Makrosu (Move Area Corners to Nearest Point Macro)

netcad-objeleri-noktaya-cek

sabangul67@gmail.com
Mayıs 17, 20255 dk okuma2 görüntülenme

🚀 Alan Köşelerini En Yakın Noktaya Hizalayan Güçlü Makro!

🚀 Powerful Macro for Aligning Area Corners to the Nearest Point!


Bu makro, Netcad üzerinde çizgi veya çoklu doğru (polyline) türü objelerin köşelerini, belirtilen bir nokta tabakasına göre otomatik olarak hizalar. Kullanıcı, bir nokta tabakası ve köşesi değişecek tabakayı seçer. Makro, seçilen tabakadaki objelerin köşelerini, belirtilen yakınlık sınırı (örneğin 0.001 birim) içinde en yakın noktaya taşır. Bu işlem, özellikle parsel sınırlarının veya diğer alanların köşelerinin hassas bir şekilde hizalanması için idealdir. Kullanıcı, doğruları ve çoklu doğruları kullanma seçeneklerini belirtebilir, böylece farklı obje türleriyle esnek bir şekilde çalışabilir.

Örnek Kullanım Alanları:

  • Kadastro projelerinde parsel köşelerinin ölçüm noktalarına hizalanması.
  • Harita düzenlemelerinde objelerin hassas konumlandırılması.
  • Ölçüm verilerinin otomatik olarak çizimlere entegre edilmesi.

This macro aligns the corners of line or polyline objects in Netcad to a specified point layer. The user selects a point layer and a layer to modify. The macro moves the corners of objects in the selected layer to the nearest point within a specified proximity limit (e.g., 0.001 units). It’s ideal for precisely aligning parcel boundaries or other areas. Users can choose to include lines and polylines, offering flexibility for various object types.

Example Use Cases:

  • Aligning parcel corners to survey points in cadastre projects.
  • Precise positioning of objects in map editing.
  • Automating the integration of survey data into drawings.

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

Kullanıcı Arayüzü: Makro, bir diyalog kutusu açar ve kullanıcıdan şu bilgileri alır:

  • Nokta Tabakası: Köşelerin hizalanacağı noktaların bulunduğu tabaka (örneğin, \”NOKTA\”).
  • Köşesi Değişecek Tabaka: Köşeleri taşınacak objelerin bulunduğu tabaka (örneğin, \”PARSEL\”).
  • Yakınlık Sınırı: Köşenin taşınacağı maksimum mesafe (varsayılan: 0.001).
  • Doğruları Kullan: Çizgi objelerinin işlenip işlenmeyeceğini belirler.
  • Çoklu Doğruları Kullan: Polyline objelerinin işlenip işlenmeyeceğini belirler.

Filtreleme: Makro, belirtilen tabakalardaki noktaları ve objeleri (çizgi veya çoklu doğru) filtreler. Hizalaması:

  • Her nokta için, yakınlık sınırı içinde bulunan objeler taranır.
  • Çizgi (Line): Eğer çizginin baş veya son noktası yakınlık sınırındaysa, bu nokta ilgili ölçüm noktasına taşınır.
  • Çoklu Doğru (Polyline): Polyline’ın her köşesi kontrol edilir ve yakınlık sınırındaki köşeler ölçüm noktasına taşınır.

Sonuç: İşlem tamamlandığında, ekran yenilenir (REGEN komutu) ve değişiklikler görselleştirilir.

  • User Interface: The macro opens a dialog box, prompting the user to input:
    • Point Layer: The layer containing points to align corners (e.g., \”NOKTA\”).
    • Layer to Modify: The layer with objects whose corners will be moved (e.g., \”PARSEL\”).
    • Proximity Limit: The maximum distance for moving a corner (default: 0.001).
    • Use Lines: Whether to process line objects.
    • Use Polylines: Whether to process polyline objects.
  • Filtering: The macro filters points and objects (lines or polylines) in the specified layers.
  • Alignment:
    • For each point, objects within the proximity limit are scanned.
    • Line: If the start or end point of a line is within the proximity limit, it’s moved to the survey point.
    • Polyline: Each corner of the polyline is checked, and those within the proximity limit are moved to the survey point.
  • Result: Upon completion, the screen is refreshed (REGEN command), and changes are visualized.


Etiket ( Labels )

Netcad Makro, Alan Köşesi Hizalama, Nokta Tabanlı Hizalaması, Parsel Hizalama, Çizgi Düzenleme, Polyline Düzenleme, Kadastro Otomasyonu, Harita Düzenleme, Ölçüm Noktası Hizalama, Otomatik Hizalaması, Netcad VBScript, Coğrafi Bilgi Sistemleri, CBS Otomasyonu, Parsel Köşe Düzenleme, Hassas Haritalama, Netcad Programlama, CAD Otomasyonu, Ölçüm Verisi Entegrasyonu, Harita Hizalaması, Netcad Makro Örnekleri

Netcad Macro, Area Corner Alignment, Point-Based Alignment, Parcel Alignment, Line Editing, Polyline Editing, Cadastre Automation, Map Editing, Survey Point Alignment, Automatic Alignment, Netcad VBScript, Geographic Information Systems, GIS Automation, Parcel Corner Adjustment, Precise Mapping, Netcad Programming, CAD Automation, Survey Data Integration, Map Alignment, Netcad Macro Examples


📝 Netcad NVB Code

VB
sub Main
  dim dialog, kayacakTabaka, noktaTabaka
  dim i, j, tab, nes, world, objNokta, objPoly, tab1, nes1
  dim dogruKullan, cokDogruKullan, yakObjUzaklik
  dim objPl, pline2, curObj, curObjPol
  dim x, y, z, c

  with Netcad
    .SetMessage "Noktalara göre objeler konumlandırılıyor" ' İşlem mesajı
    set dialog = .NewBDialog("Netcad")
    dialog.GetString "noktaTabaka", "Nokta Tabakası:", "NOKTA", 100
    dialog.GetString "kayacakTabaka", "Köşesi Değişecek Tabaka:", "PARSEL", 100
    dialog.GetFloat "uzaklik", "Yakınlık Sınırı", 0.001, 7
    dialog.GetCheck "cokluDogru", "Çoklu Doğruları Kullan", 1
    dialog.GetCheck "dogru", "Doğruları Kullan", 1

    if dialog.ShowModal then
      kayacakTabaka = dialog.ValueByName("kayacakTabaka")
      noktaTabaka = dialog.ValueByName("noktaTabaka")
      yakObjUzaklik = dialog.ValueByName("uzaklik")
      dogruKullan = dialog.ValueByName("dogru")
      cokDogruKullan = dialog.ValueByName("cokluDogru")
    else
      .BackMessage
      exit sub
    end if

    ' Nokta filtresi oluşturuluyor
    dim objTipArr(0)
    objTipArr(0) = oPoint
    set nes = .MakeFilter(objTipArr)
    dim tabArr(0)
    tabArr(0) = .FoundLayer(noktaTabaka)
    set tab = .MakeFilter(tabArr)

    ' Çizgi/çoklu doğru filtresi oluşturuluyor
    dim objTipArr1()
    redim objTipArr1(1)
    dim no
    no = 0
    if dogruKullan = 1 then
      objTipArr1(no) = oLine
      no = no + 1
    end if
    if cokDogruKullan = 1 then
      objTipArr1(no) = oPLine
    end if
    set nes1 = .MakeFilter(objTipArr1)
    dim tabArr1(0)
    tabArr1(0) = .FoundLayer(kayacakTabaka)
    set tab1 = .MakeFilter(tabArr1)

    ' Noktalar taranıyor
    set world = .NewWorld(0, 0, 0, 0)
    .SetFilter world, tab, nes
    set objNokta = .NewObject()
    while .GetNextObject2(objNokta)
      ' Nokta bulundu
      curObj = .CurObjPos()
      set world = .NewWorld(objNokta.p1.y - (yakObjUzaklik + 1), objNokta.p1.x - (yakObjUzaklik + 1), objNokta.p1.y + (yakObjUzaklik + 1), objNokta.p1.x + (yakObjUzaklik + 1))

      ' Noktaya yakın objeler taranıyor
      .SetFilter world, tab1, nes1
      set objPl = .NewObject()
      while .GetNextObject2(objPl)
        curObjPol = .CurObjPos()
        if objPl.Tag = oPLine then
          ' Çoklu doğru bulundu
          set objPoly = objPl.GetObjectAsPline()
          set pline2 = .NewPoly()
          ' Köşeler kontrol ediliyor
          for j = 0 to objPoly.Num - 1
            if NCMath.Distance(objNokta.p1, objPoly.Cor(j), false) < yakObjUzaklik then
              x = objNokta.p1.x
              y = objNokta.p1.y
            else
              x = objPoly.Cor(j).x
              y = objPoly.Cor(j).y
            end if
            z = objPoly.Cor(j).z
            set c = .NewC(y, x, z)
            pline2.AddCoor c
          next
          .PutPlineExt objPl, pline2
          .PutObject curObjPol, objPl
        elseif objPl.Tag = oLine then
          ' Çizgi bulundu
          if NCMath.Distance(objNokta.p1, objPl.p1, false) < yakObjUzaklik then
            objPl.p1.y = objNokta.p1.y
            objPl.p1.x = objNokta.p1.x
          elseif NCMath.Distance(objNokta.p1, objPl.p2, false) < yakObjUzaklik then
            objPl.p2.y = objNokta.p1.y
            objPl.p2.x = objNokta.p1.x
          end if
          .PutObject curObjPol, objPl
        end if
      wend
      .ResetFilter
    wend
    .ResetFilter
    .BackMessage
    .NetcadCommand "REGEN" ' Ekran yenileniyor
  end with
end sub
VB

netcad-objeleri-noktaya-cek

Yazar

sabangul67@gmail.com

Bu yazarın yayınladığı diğer içerikleri inceleyebilirsiniz.

Tüm yazıları