Home / Netcad Makro / Nokta Numarası Yazma Makrosu (Point Number Labeling Macro)

Nokta Numarası Yazma Makrosu (Point Number Labeling Macro)

NADI Yazdırma: Nokta Adlarını Otomatik ve Hassas Etiketleme Çözümü 🚀


Bu makro, Netcad ortamında nokta adlarını (NADI) otomatik olarak etiketlemek için tasarlanmıştır. Nokta koordinatlarına uygun konumlarda, okunabilir ve düzenli bir şekilde nokta adlarını yazdırır. Kullanıcı dostu bir arayüzle, etiketlerin yazılacağı tabakayı seçebilirsiniz. Poligon veya nirengi noktalarını algılayarak bu noktalara özel formatlar uygular. Yazı boyutları, proje ölçeğine göre otomatik ayarlanır, böylece haritalarınızda profesyonel ve estetik bir görünüm elde edersiniz. 🗺️


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

Tabaka Seçimi: Makro, bir diyalog penceresi ile nokta adlarının yazılacağı tabakayı seçmenizi sağlar.

Nokta Algılama: Seçilen tabakadaki noktaları tarar ve her noktanın adını (pname) analiz eder.

Özel Nokta Tanımlama: Poligon (P.) veya nirengi (N.) noktalarını tespit eder ve bunlara özel yazı formatları uygular.

Konum Hesaplama: GetNoktaNoPozisyon fonksiyonu, nokta adlarının yazılacağı en uygun konumu hesaplar ve çakışmaları önlemek için çevredeki nesneleri kontrol eder.

Yazım ve Formatlama: Nokta adları, ölçeğe uygun yazı boyutları ve hizalamalarla (sol veya orta) belirtilen tabakaya yazılır.

Temizlik: Geçici katmanlar (SILSAGULXXX) işlem sonunda otomatik olarak silinir.


Etiket ( Labels )

NADI yazdırma, nokta adı etiketleme, otomatik etiketleme, Netcad makro, harita çizimi, jeodezik noktalar, poligon noktaları, nokta koordinatları, harita otomasyonu, CAD makro, Netcad otomasyon, nokta etiketleme, haritacılık, coğrafi bilgi sistemleri, GIS makro, proje çizimi, hassas etiketleme, ölçek uyumlu, profesyonel harita, tabaka yönetimi


📝 Netcad NVB Code

VB
CONST CONST_PART_ACI=20  ' Açı Bölme artış değeri 1-400 aralığında olabilir. Nokta Numaralarını yazarken pozisyon seçmede kullanıyoruz.
CONST GRAD_TO_RAD = 63.6620

Sub Main
Dim obj
dim pts() : redim preserve pts(0)

  with Netcad
    
    dim OLCEK ,TXT_SIZE
    OLCEK= .getparam(94)
   ' TXT_SIZE = OLCEK*1.5
  dim BD,i
      dim t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t10x
      dim t1x,t2x,t3x,t4x

   set BD = .NewBDialog("Nokta No Yazdır - Sagulcad")
    BD.GetCombo "NOKTA_LAYER","Nokta No Yazdırılacak Tabaka:","",0
    for i = 0 to .numlayers-1
        BD.AddCombo .LayerNameOf(i)
    next
  
   ' BD.GetString "YENI1","Yeni Oluşturulacak Noktaların Tabakası:","",20
   ' BD.GetString "YENI2","Yeni Nokta (Düzeltilecek) Tabakası:","",20
   ' BD.GetString "YENI3","Yeni Nokta (Jeodezik Noktalar) Tabakası:","",20

if BD.ShowModal then
   t1= BD.ValueByName("NOKTA_LAYER")
 '  t2= BD.ValueByName("YENI_1")
 '  t3= BD.ValueByName("YENI_2")
 '  t4= BD.ValueByName("YENI_3")
  t1x= nclayermanager.layer(t1).name
      t2=""
      t3=""
      t4=""

   if t2="" then t2="SAGUL_NOKTA"
   if t3="" then t3="SAGUL_NOKTA_DZL"
   if t4="" then t4="SAGUL_NOKTA_JEO"
ELSE
exit sub
end if

    .setfilter nothing, array(.foundlayer(t1x)),array(opoint)
     do
        set obj=.getnextobject

        if obj is nothing then
           exit do
        else
           redim preserve pts(ubound(pts)+1)
           set pts(ubound(pts)-1)=obj
        end if

     loop
    .resetfilter

      NoktaNoYaz pts,1.5*OLCEK/1000,1

  end with

  
 dim m ,l
m = netcad.numlayers - 1
With nclayermanager
For l =m To 0 step -1
  if  .layer(l).name = "SILSAGULXXX"  then  .Delete l, true
next
End With
 
End Sub

private sub NoktaNoYaz(pts(),TXT_SIZE,sc)
dim i
dim c
dim txt
dim layer,layer1,layer2
dim nno
dim pos
dim pos1
dim pos2
dim flag
dim just

     with netcad
          LAYER =.createlayer("SAGUL_NOKTA",4)
          LAYER1=.createlayer("SAGUL_NOKTA_DZL",10)
          LAYER2=.createlayer("SAGUL_NOKTA_JEO",3)

          Flag=0

          for i=0 to ubound(pts)-1

              pos=instr(pts(i).pname,"/")

              if pos>0 then
                 nno=trim(mid(pts(i).pname,pos+1,len(pts(i).pname)))
              else
                 nno=trim(pts(i).pname)
              end if

              'Poligon veya nirengi ise
              if instr(pts(i).pname,"P.") >0 or   instr(pts(i).pname,"N.")  then
                nno= trim(pts(i).pname)
                Flag=1
              else
                Flag=0
              end if

              if flag=1 then
                set c=GetNoktaNoPozisyon(pts(i).p1,nno,sc*1000,sc*1000,CONST_PART_ACI)
              else
                set c=GetNoktaNoPozisyon(pts(i).p1,nno,sc*1000,TXT_SIZE,CONST_PART_ACI)
              end if

               if c.z=0 THEN
                 just="L"
               else
                 just="2"
               end if

              if pts(i).p1.SamePoint(c)=TRUE then

                 if flag=1 then
                    SET TXT= .MakeText(c,nno,0,0, 2*sc,c.z,just,LAYER2)
                 else
                    SET TXT= .MakeText(c,nno,0,0, TXT_SIZE*sc,c.z,just,LAYER1)
                 end if

              else
                 if Flag=1 then
                   SET TXT= .MakeText(c,nno,0,0, 2 * sc,c.z,just,LAYER2)
                 else
                   SET TXT= .MakeText(c,nno,0,0, TXT_SIZE*sc,c.z,just,LAYER)
                 end if

              end if

              .addobject txt
              pos=0
         next
     end with
End Sub

Function GetNoktaNoPozisyon(c,txt1,Olcek,SIZE,Partition)
Dim i ,j
Dim Region
Dim Rad

Dim bTest
dim obj
dim c1
dim rec
dim txt
dim pos1

WITH NETCAD

    Rad=OLCEK /1000

    SET TXT= .MakeText(c, txt1, 0,0, size*OLCEK/1000,0,"L",.CREATELAYER("SILSAGULXXX",0))
    set Region=txt.limits
    dim dy: dy=region.cur.y-region.cll.y
    dim dx: dx=region.cur.x-region.cll.x

   '.addobject .MakeCircle(c, rad, 0, 0, 0)

    for j=0 to 1

    for i=0 to 400 step Partition
        set c1=KOORDINAT_HESAPLA(c,i,rad)  :c1.z=0

        if i =>0 and i<=100 then
             set rec=.MakeRect(c1, .newc(c1.y+dy,c1.x+dx,0), i, .CREATELAYER("SILSAGULXXX",0))
        elseif i=>101 and i<=200 then
             set c1=.newc(c1.y,c1.x-dx,0)
             set rec=.MakeRect(c1, .newc(c1.y+dy,c1.x+dx,0), i, .CREATELAYER("SILSAGULXXX",0))
        elseif i=>201 and i<=300 then
             set c1=.newc(c1.y-dy,c1.x-dx,0)
             set rec=.MakeRect(c1, .newc(c1.y+dy,c1.x+dx,0), i, .CREATELAYER("SILSAGULXXX",0))
        elseif i=>301 and i<=400 then
             set c1=.newc(c1.y-dy,c1.x,0)
             set rec=.MakeRect(c1, .newc(c1.y+dy,c1.x+dx,0), i, .CREATELAYER("SILSAGULXXX",0))
        end if

       if ObjeVarmi(rec,olcek) = 0 then
            set GetNoktaNoPozisyon=c1
            rec.tabaka=.CREATELAYER("SILSAGULXXX",5)
           .ADDOBJECT rec
             exit function
      'else
      '    .ADDOBJECT rec
       end if
     next

     rad=rad+rad * 0.5

    next

    Rad=OLCEK /1000
    SET TXT= .MakeText(c, txt1, 0,0, size*OLCEK/1000,1.5708,"2",.CREATELAYER("SILSAGULXXX",0))

    set Region=txt.limits
    dy=region.cur.y-region.cll.y
    dx=region.cur.x-region.cll.x

    i=0 : j=0 :

    for j=0 to 1
    for i=0 to 400 step Partition

        set c1=KOORDINAT_HESAPLA(c,i,rad) :  c1.z=1.57079

        if i =>0 and i<=100 then
             set rec=.MakeRect(c1, .newc(c1.y+dy,c1.x+dx,0), i, .CREATELAYER("SILSAGULXXX",0))
        elseif i=>101 and i<=200 then
             set c1=.newc(c1.y,c1.x-dx,1.57079)
             set rec=.MakeRect(c1, .newc(c1.y+dy,c1.x+dx,0), i, .CREATELAYER("SILSAGULXXX",0))
        elseif i=>201 and i<=300 then
             set c1=.newc(c1.y-dy,c1.x-dx,1.57079)
             set rec=.MakeRect(c1, .newc(c1.y+dy,c1.x+dx,0), i, .CREATELAYER("SILSAGULXXX",0))
        elseif i=>301 and i<=400 then
             set c1=.newc(c1.y-dy,c1.x,1.57079)
             set rec=.MakeRect(c1, .newc(c1.y+dy,c1.x+dx,0), i, .CREATELAYER("SILSAGULXXX",0))
        end if

        .ADDObject rec

       if ObjeVarmi(rec,olcek) = 0 then
            set GetNoktaNoPozisyon=c1

            exit function

       end if
     next

     rad=rad+rad * 0.5
    next

    c.z=0
    set GetNoktaNoPozisyon=c
    set GetNoktaNoPozisyon=KOORDINAT_HESAPLA(c,100,rad)

end with

End function

Function KOORDINAT_HESAPLA(pt1,semt,kenar)
dim RO
dim pt2

with netcad
     RO=50/ATN(1)
     set pt2=.newc(0,0,0)

     pt2.y = pt1.y + kenar * sin(semt/RO)
     pt2.x = pt1.x + kenar * cos(semt/RO)

     set KOORDINAT_HESAPLA=pt2
     set pt2=nothing

end with

End function

Function ObjeVarmi(rec,sc)
dim obj
dim test
dim w ,w1

dim i
dim pl
dim Line
dim inter
dim inta
dim rec1
dim rec2

with netcad
  test=0
  set w=rec.limits
 ' sc=sc/1000

 .setfilter w ,array(),array(opline,otext,oline,opline,oshape)     'Kapalı Alanları Almayalım işlemi hızlandırmak için

       do
           set obj=.getnextobject
           if obj is nothing then
              exit do
           else

              if obj.tag=opline then
                  ' Kapalı Alanın Kenarını kesip kesmediğine bak
                 set pl=obj.Getobjectaspline

                 'Çok kırıklı Büyük Parsellerde zaman alıyor .Nasıl Düzeltebiliriz
                  for i=1 to pl.num-1
                     set inta=.newpoly
                     set line=.MakeLine(pl.cor(i), pl.cor(i-1), 0, 0, .CREATELAYER("SILSAGULXXX",0))
                     inter=.IntersectObjects(rec,obj,inta)

                     if inter>0 then
                         test=1
                         exit do
                     end if
                   next
              else

              if obj.tag=otext then
                  set inta=.newpoly
                  set rec1=.MakeRect(obj.limits.cll, obj.limits.cur,"", .CREATELAYER("SILSAGULXXX",0))
                  inter=.IntersectObjects(rec,rec1,inta)
                  if inter>0 then
                      test=1
                      exit do
                   end if
              elseif obj.tag=oline then
                  set inta=.newpoly
                  inter=.IntersectObjects(rec,obj,inta)
                  if inter>0 then
                      test=1
                      exit do
                  end if
              else
                 test=1
                 exit do
              end if

            end if
           end if
       loop
      .resetfilter 
end With

ObjeVarmi=test
   '    keke
End Function
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sub keke
with netcad
  dim alanOBJ ,j ,dy,dx   ,aci
 set alanOBJ = .newobject()
        .setFilter nothing,array(.foundlayer("_SGL_BLOK")),array(opline)
        while .GetNextObject2(alanOBJ)
            .DrawObject alanOBJ, blue
           dim coklu2
          Set coklu2 = alanOBJ.getObjectAsPline()
          dim k1,k2,k3,k4,nok
          For j = 1 to coklu2.num - 1
             k1=  coklu2.cor(j-1).y
             k2=  coklu2.cor(j-1).x
             k3=  coklu2.cor(j).y
             k4=  coklu2.cor(j).x
                set nok = .NewC(0,0,0)
                nok.y= k3
                nok.x= k4
                dim m1,m2
                m1= k2/k1
                m2= k4/k3
    Dim Tampon
    Tampon=3
    dim a,b
    dim pt,enYakinNokta,nokta,Limit,objCizgi,ruhan
   
    set enYakinNokta = .NewC(0,0,0)
    set nokta = .NewC(0,0,0)
    set Limit = .NewWorld(nok.y-(Tampon+1), nok.x-(Tampon+1), nok.y+(Tampon+1), nok.x+(Tampon+1))
    set objCizgi = .NewObject()

    .SetFilter Limit, array(.foundlayer("SAGUL_NOKTA")), array(otext)
                    Do
                        set ruhan= .GetNextObject
                        if ruhan is nothing then exit do
                        a = ruhan.p1.y
                        b= ruhan.p1.x
                            dim cor
                         set cor = .newc(0,0,0)
                        ' dy=  k3- k1
                        ' dx=  k4-k2
                        dy= k1- a
                        dx= k2-b
                         if dx=0 then dx=0.005
                          aci=atn(dy/dx)
                       if  coklu2.InPoly(cor)   then
                      tt=1
                         cor.y = ruhan.p1.y +2*sin(aci)*olcek
                      cor.x = ruhan.p1.x + 2*cos(aci)*olcek
                      end if
                      '   dim tx
                       '  set tx=.MakeText(cor,ruhan.pname ,0,0,1.5,sangle,"M",3)
                        ' tx.cls= aci
                        '  if tt=1 then tx.renk=4
                        ' ruhan.cls= cor.y & "_" & cor.x & "_" & sangle
                        '  ruhan.objname= 123456789012345678901234567890123456789012345678901234567890
                             .PutObject .CurObjPos, ruhan
                        '  .addobject(tx)
                           Loop
                     
                              .Resetfilter
            '   round(aci*200/pi,0)
          Next
               wend
        .Resetfilter
        set alanOBJ = nothing
     
    .BackMessage
 end with
end sub
VB

netcad-nokta-ad-yazdir-duz

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