Youtube koni açınımları videolarında kullandığım çizgiye nokta VBA makrosunun geliştirmeye devam ediyorum.
Makro çalıştırıldığında bir çizgi seçilerek çizginin uzunluğu alınır. Sonra bir çizgi daha seçilir 2. seçilen çizgiye 1. çizgi uzunluğu mesafesinde nokta konulur.
Bu videoda makro kodları geliştirildi. Komutun 1. aşamasında çizgi ile beraber yay, daire ve polyline çizgilerinin uzunlukları uzunluk değeri olarak alınıyor.
CizgiyeNokta makrosunu komut satırından çalıştırmak için Autocad'de CN komutu oluşturulur. CN komutunu oluşturmak için CN_komutu prosedürünün bir kere çalıştırılması yeterlidir.
Videoda kullanılan kodlar:
Sub CizgiyeNokta() 'Seçilen çizgi uzunluğu mesafesinde sonraki seçili çizgiye nokta ekler '19/03/2022 'Mesut Akcan 'makcan@gmail.com 'mesutakcan.blogSpot.com Dim cizgi1 As AcadEntity, cizgi2 As AcadEntity Dim p As AcadPoint 'nokta nesnesi Const tdene = " Tekrar deneyin" Const gecersizNesne = "Geçerli nesne değil!" & tdene Const nesneSecilmedi = "Nesne seçilmedi!" & tdene On Error Resume Next 'bir hata olursa sonraki satırdan devam et Do With ThisDrawing.Utility NESNE_SEC: Err.Clear 'hatayı temizle .InitializeUserInput 0, "Uzunluk Çıkış" 'Nesne Seç .GetEntity cizgi1, tn, vbLf & "Uzunluğu alınacak çizgiyi seç veya [Uzunluk/Çıkış]: " If iptal Then Exit Do 'döngüden çık If Err Then 'hata varsa 'hata açıklamasında keyword geçiyorsa If Err.Description Like "*keyword*" Then Select Case .GetInput() 'komuttan girilen seçeneği al Case "Uzunluk" 'seçenek Uzunluk ise .InitializeUserInput 1 + 2 'boş ve 0 değeri girişini engelle c1uz = .GetDistance(, vbLf & "Uzunluk:") 'uzunluk değerini gir Case "Çıkış" 'seçenek Çıkış ise Exit Do 'döngüden çık End Select Else 'diğer hatalarda Call mesaj(nesneSecilmedi) GoTo NESNE_SEC 'NESNE_SEC satırına git End If Else c1uz = Uzunluk(cizgi1) '1. çizgi uzunluğu If c1uz = Empty Then 'hata varsa Call mesaj(gecersizNesne) GoTo NESNE_SEC End If If Err Then Exit Do 'hata varsa cizgi1.Highlight True 'çizgiyi vurgulu yap vurguVar = True 'vurgu olduğunda End If NESNE_SEC2: Err.Clear 'hatayı temizle 'Nesne seç .GetEntity cizgi2, tn, vbLf & "Nokta konulacak çizgi:" If iptal Then Exit Do 'ESS tuşuna basılırsa döngüden çık If Err.Number = -2147352567 Then 'nesne seçilmediğinde Call mesaj(nesneSecilmedi) GoTo NESNE_SEC2 End If c2uz = cizgi2.Length '2. çizgi uzunluğu If Err Then 'hata varsa Call mesaj(gecersizNesne) GoTo NESNE_SEC2 End If uzSp = Uzaklik(cizgi2.StartPoint, tn) 'tıklanan noktadan başlangıç noktasına uzaklık uzEp = Uzaklik(cizgi2.EndPoint, tn) 'tıklanan noktadan bitiş noktasına uzaklık If uzEp < uzSp Then c1uz = c2uz - c1uz 'tıklanan nokta bitiş noktasına yakınsa 'çizgideki konuma nokta ekle Set p = ThisDrawing.ModelSpace.AddPoint(.PolarPoint(cizgi2.StartPoint, cizgi2.Angle, c1uz)) p.Layer = "Nokta" 'noktanın katmanını değiştir End With Loop 'vurgu varsa çizim nesneleri yeniden çiz If vurguVar Then ThisDrawing.Regen acAllViewports End Sub Sub mesaj(metin As String) 'komut satırına mesaj yaz ThisDrawing.Utility.Prompt vbLf & "*" & metin & "*" End Sub Function iptal() 'Komut satırındaki son mesajda *Cancel* varsa (ESC tuşu basılmışsa) iptal = IIf(ThisDrawing.GetVariable("LASTPROMPT") Like "*Cancel*", True, False) End Function Function Uzaklik(p1, p2) As Double 'iki nokta arası mesafe Const X = 0, Y = 1 Uzaklik = Sqr((p2(X) - p1(X)) ^ 2 + (p2(Y) - p1(Y)) ^ 2) End Function Function Uzunluk(ent As AcadEntity) Select Case ent.ObjectName 'nesne adı Case "AcDbLine", "AcDbPolyline", "AcDb2dPolyline" 'çizgi ve polyline ise Uzunluk = ent.Length 'nesne uzunluğu Case "AcDbArc" 'yay Uzunluk = ent.ArcLength 'yay uzunluğu Case "AcDbCircle" 'daire Uzunluk = ent.Circumference 'daire çevre uzunluğu Case Else 'diğer nesnelerde Uzunluk = Empty 'boş End Select End Function Sub CN_komutu() 'AutoCADe CN komutunu ekler ThisDrawing.SendCommand "(defun c:CN()(vl-vbarun ""CizgiyeNokta"")(princ))" & vbCr End Sub Sub NesneAdiYaz() On Error Resume Next 'hata olursa sonraki satırdan devam et Do Dim obj As AcadEntity 'Nesne seç ThisDrawing.Utility.GetEntity obj, tn, "Nesne Seç:" 'tıklanan konuma nesne adını yaz Set yazi = ThisDrawing.ModelSpace.AddText(obj.ObjectName, tn, 4) 'Immediate penceresine nesne adını yaz (editörde CTRL+G ile açılır) Debug.Print obj.ObjectName yazi.color = acMagenta 'yazı rengini değiştir If Err Then Exit Do 'hata olursa döngüden çık Loop End Sub
Hiç yorum yok:
Yorum Gönder