Pazartesi
AutoCAD, Download, Programlama, VBAVBA ile iki nokta arasındaki eğimi ölçmek
Merhaba arkadaşlar,
Bu yazıda; Erhan ağabey tarafından AutoLISP ile geliştirilen ve Muharrem ağabey tarafından da VisualLISP uyarlaması yazılan “İki Nokta Arasındaki Eğimin Ölçülmesi” işleminin VBA ile nasıl programlanacağını anlatacağım.
Bu işlemi gerçekleştirebilmek için bazı geometrik bağıntılara ihtiyacımız olacak, bu bağıntılar ve Visual Basic’teki karşılıkları Tablo.1’de verilmiştir.

Tablo.1 Geometrik Bağıntılar ve Visual Basic’teki Karşılıkları
Bağıntıları ve VB’ deki karşılıklarını verdikten sonra, program için değişkenleri tanımlayabiliriz. Değişken tiplerinden ve depolayabileceği veri türlerinden daha önceki yazımda bahsetmiştim, bundan dolayı aynı konuları tekrar tekrar anlatıp zaman kaybetmeyelim.

Kod.1 Değişkenlerin Tanımlanması
Değişken tanımlamalarının yapıldığı kodları verdikten sonra programlama adımlarına geçebiliriz. İki nokta arasındaki eğimin ölçülmesi işlevini gerçekleştirecek olan programda form kullanımına gerek yoktur. Böylece form tasarım aşaması da form olmadığı için geçmiş olduk. Çıktı verileri ise bir “MsgBox” nesnesi ile kullanıcıya bildirilmektedir. Form nesnesi olmadığından kodlarımızı “Private Sub UserForm_Activate() ….. End Sub” bloğunun içerisine yazmalıyız.
Şimdi bu kodları inceleyelim;

Kod.2 Programlama Adımları
İşimize yaramayacak olan formun ekran üzerinde görünmesini engellemek için “Me.hide” kodu ile bloğumuzu yazmaya başlıyoruz. Programın çalışması esnasında oluşacak bir hata veya kullanıcı tarafından işlemin iptal edilmesi durumunda programı sonlandırılması için, “On Error GoTo HATA” kodu ile programın çalışmasının “HATA:” satırından devam etmesini sağlıyoruz. “ReDim pntI(2,0)” kodu ile pntI() dizisinin boyutunu değiştiriyoruz. Yeri gelmişken dizi türlerinden bahsetmek sanırım yerinde olacaktır. Visual Basic’de iki farklı dizi türü vardır, bunlar;
1) STATİK DİZİLER:
Bu tip dizilerde dizinin eleman sayısı önceden belirlenir ve eleman sayısı sabittir. Örneğin programımıza Dim Points(20) as Integer diye bir kod yazarsak, projemizde toplam 21 elamanlı ve sayısal bir veri türünü tutacak bir dizi tanımlamış oluruz. Eğer dizimizin 20 elamanlı yani Points(1)‘den başlamasını istiyorsak, Form’un veya Modülün General / Declarations kısmında Option Base 1 deyimini kullanmamız gerekir. Option Base 0 ise dizinin ilk elemanının 0′dan başlayacağını bildirir. Zaten bu da standart biçimidir dolaysıyla kullanmaya gerek yoktur.
2) DİNAMİK DİZİLER:
Bu tip dizilerde ise dizinin eleman sayısını program akışı içerisinde kontrol edebiliyoruz. Bu tip diziyi ise, Dim Points() as Integer şeklinde dizinin eleman sayısı hakkında herhangi bir değer vermeden belirtiyoruz. Sonra ReDim Points(10) as Integer şeklinde dizinin eleman sayısını program akışı içerisinde tanımlıyoruz. Ancak bazı durumlarda diziyi yeniden boyutlandırmak gerekebilir. Bu durumda diziyi yeniden boyutlandırırken unutulmaması gereken nokta ise, dizinin içindeki verilerin silineceğidir. Eğer verilerin silinmesini istemiyorsak diziyi yeninden boyutlandırırken ReDim Preserve Points(10) As Integer şeklinde belirtmemiz gerekir. Burada Redim deyimine, Preserve deyimi eklenerek eski verilerin korunması sağlanıyor.
Kısaca dizi türelerinden de bahsettikten sonra kod yazmaya devam edebiliriz. Aşağıdaki kod, “GetPoint” kullanıcı girdi metodu ile AutoCAD ortamından cursor yardımı ile seçilen noktanın veya komut satırına girilen koordinat değerlerinin tanımlamış olduğumuz “coor” dizisine atanması işlemini gerçekleştiriliyor. Seçilen noktanın koordinat bilgileri coor dizisinin içerisinde depolanıyor. Burada coor dizisinin ilk elemanı X, ikinci elemanı Y, ve üçüncü elemanı da Z koordinat değerini tutuyor.

Kod.3 Programlama Adımları
Kod incelendiğinde; pntl() dizisinin boyutunu yeniden tanımladığımız 16. satırda, Redim deyimi ile birlikte Preserve deyimi kullanılmıştır. Böylece pntl() dizisi yeniden boyutlandırılırken içerisinde depolanmış olan verilerde korumuş oluyoruz.

Kod.4 Programlama Adımları
18 nci satırda “Do While … Loop” döngü bloğunu oluşturuyoruz. Burada kullandığımız Do… Loop döngü bloğunun döngü koşulu AutoCAD ortamından cursor yardımı ile seçilen noktanın veya komut satırına girilen nokta objesinin X koordinat değerinin boş olmamasıdır. Döngü bloğunun içerisine girdiğimizde, döngünün bir sonraki adımında seçilecek noktanın koordinat değerlerini pntl() dizisine atayabilmek için dizinin boyutunu yeniden tanımlıyoruz. “GetPoint” metodu ile AutoCAD ortamından nokta seçme işlemini yerine getirecek 23. satırın daha önce aynı işlem için kullanmış olduğumuz 08. nolu satırdan farklı olduğunu göreceksiniz. Burada “& CStr(i + 1)” kodu eklenerek döngünün her bir dönüşünde komut satırında “2, 3, 4, 5, …. NOKTAYI SECINIZ:” metninin görünmesi sağlanmıştır. 24, 25 ve 26. satırlarda AutoCAD ortamından seçilen nokta veya komut satırına girilen koordinat değerleri tanımlamış olduğumuz pntl() dizisine aktarılıyor.

Kod.5 Programlama Adımları - Hesap İşlemleri
Hesap işlemlerinin yazıldığı, 28~44 satırları arasındaki kodların karşılıkları Tablo.1 de verilmiştir. Burada sadece, dikkat edilmesi gereken bir nokta var; yatay eğimin hesaplanması aşamasında iki koşul söz konusudur. Bu koşuları kontrol edebilmek için de IF deyimi kullanılmıştır.

Kod.6 Programlama Adımları - Hesap Sonuçları
Sonuç olarak döngünün her adımının sonuna gelindiğinde bir “MsgBox” ile kullanıcı bilgilendiriliyor. Burada tanımlamış olduğumuz mesaj değişkeni içerisine sırası ile 28~44 satırları arasında hesaplamış olduğumuz değerler atanıyor. 46~55 satırları incelendiğinde, birçok metinsel ve sayısal verinin aynı anda mesaj değişkeni içerisinde depolandığı görülecektir. Burada verilerin kullanıcıya düzenli bir formatta MsgBox içerisinde bildirilmesi amacı ile bazı düzenleme kodları kullanılmıştır. Bunlardan “vbCrLf” kodu ile metin bir alt satıra geçer ve sol tarafa bitişik olur, “vbTab” kodu Ms Word programında kullandığımız TAB işlemini yapmaktadır. Format() fonksiyonu ise sayısal veri biçimlendirme için kullanılmıştır.
57 nci satıra gelindiğinde kullanıcının bilgilendirileceği “MsgBox” ekrana yüklenmesi işlemi gerçekleştiriliyor. 57 nci satır incelendiğinde;

Kod.6.1
“vbOKOnly” deyimi ile MsgBox üzerinde sadece Tamam butonun oluşturulması sağlanıyor. “Rapor” metni ise MsgBox’in başlığını oluşturuyor. (Şekil.1)

Şekil.1 Sonuç ifadelerinin görüntülendiği MsgBox bilgilendirme penceresi
58 nci satırda ise Loop deyimi ile 18 nci satırda başlatılan Do While … Loop bloğu tamamlanıyor. Böylece programı tamamlıyoruz. Programın sonuç çıktılarının, kullanıcıya bildirildiği MsgBox in görünümü Şekil.1 de verilmiştir. Şekil.1A ve Şekil.1B’de de programın genel kullanımına ilişkin görüntüler verilmiştir.

Şekil.1A Programın genel kullanımına ilişkin görüntüler.

Şekil.1B Programın genel kullanımına ilişkin görüntüler.
Şimdilik bu kadar bir sonraki yazıda buluşmak üzere hoşça kalın…
Kodun tamamı aşağıdaki gibidir:

![]() |
vba-egim.zip 10.9 KiB | |
| VBA ile iki nokta arasındaki eğimi ölçen, çok detaylı bir program. - Suphi TUNALI 2008 | ||
| Added On | Nisan 14, 2008 and downloaded 410 times. | |
Post Tags: AutoCAD, Download, Programlama, VBA
Related Posts
Popular
- Mobilya maliyet hesabı
11/19/2008 01:00 pm
4 Comments - 3d Rotate komutu ile döndürme
11/19/2008 12:00 am
3 Comments - Renkler ve renk bilgisi
11/15/2008 06:52 pm
60 Comments - Gelecekte yaşam…
11/14/2008 09:29 pm
1 Comment - Çizilen pencerenin içindeki nesneleri temizleyen AutoLISP programı.
11/14/2008 12:17 pm
2 Comments

Nis 14, 2008
Yanıtla
Eline sağlık Suphi,
Çok titiz bir çalışma olmuş
Nis 15, 2008
Yanıtla
oldukça titiz bir yazı…
ellerine sağlık Suphi Bey.