VBA İle AutoCAD için yazılım geliştirme
![]() |
Yazar | Suphi Tunalı |
| Mesleği | Harita ve İnşaat Teknikeri | |
| AutoLISP ve VBA programcısı | ||
| web | ||
AutoCAD 12 ve üzeri
Merhaba arkadaşlar,
Yeni bir yazı ile yine birlikteyiz, sizlere bu yazımda AutoCAD ortamında program geliştirmemize olanak sağlayan VBA programlama dilinden bahsedeceğim. VBA, AutoCAD ortamında makrolar geliştirmemize imkân sağlayan üç yazılım dilinden biridir. VBA Makroları, AutoCAD’e entegre çalışan VBA Manager ortamında Visual Basic programlama araçlarını kullanarak geliştirilir. Visual Basic, Microsoft yazılım firması tarafından geliştirilmiştir ve Windows™ platformunda, bağımsız çalışan programlar üretmeye olanak sağlayan bir yazılım geliştirme aracıdır. VBA Makroları ise, Visual Basic ile üretilmiş yazılımlara nazaran biraz daha kısıtlı bir çalışma yapısına sahiptirler. Bunu biraz açacak olursak; VBA Makroları bağlı olarak geliştirildiği, yazılımların (AutoCAD, Microstation, Ms Excel, Ms Access, vb.) dışında çalışmaları mümkün değildir.
Visual Basic görsel programlama dilleri içinde en yaygın biçimde kullanılan yazılım dildir. Görsel programlama dilleri, adından da rahatlıkla anlaşılacağı gibi, programın görsel öğeler kullanılarak tasarlanması esasına dayanmaktadır. Bu açıdan bakıldığında, AutoLISP’e nazaran oldukça kolay ve daha esnek programlama seçenekleri sunmaktadır. Kod yazılımı da en aza indirilmiştir. Visual Basic dilinin bu kadar kolay ve anlaşılır bir yapıda olması birçok kullanıcının kafasında, sadece basit ve karmaşık olmayan problemlerin çözümünde kullanılacaktır kanısını doğurmuştur. Sanılanın aksine en karmaşık ve en kapsamlı problemlerin çözümü de Visual Basic ile yapılabilir.
VBA ile Makro geliştirmeye yeni başlayanlar için genellikle ilk adım olarak verilen örneklerde AutoCAD ortamına, ya bir “Text” objesi yazdırılır ya da bir “Line” objesi çizdirilir. Bu yazıda tasarımını ve kodlarının yapısını anlatacağım program biraz daha kapsamlı özellikler içermektedir. Bu çalışmayı anlayabilmek için, Visual Basic’te değişken ve döngü tanımı gibi bazı temel işlevleri bilmek gerekmektedir.
Tasarım aşamalarını ve kod yapısını anlatacağım program, içerisinde temel olarak iki işlev barındırmaktadır. Birinci işlevde, AutoCAD’in grafiksel ortamından cursor yardımı ile nokta seçimi yapılır. Bu işlevle birlikte eş zamanlı olarak, kullanıcının belirlediği seçenekler doğrultusunda seçilen noktalara, seçim sırasını belirten sıra no ve kullanıcı tarafından girilen metin eklenir. İkinci işlevde ise seçilen noktaların koordinat bilgilerini içeren bir tablonun AutoCAD’in grafiksel ortamına eklenmesi işlemini gerçekleştirir. Böylelikle tasarımını anlatacağım programın işlevlerinden de bahsetmiş oldum. Programlama adımlarının aşağıdaki sıralama ile takip edebiliriz.
İlk olarak “Tools\Macro\Visual Basic Editor” yolunu izleyerek, programı geliştireceğimiz Visual Basic Editörüne (Şekil 1) ulaşıyoruz.

Şekil 1: Visual Basic Editörü
Visual Basic Editörü, “Insert\UserForm” yolu izlenerek programın ana yapısını oluşturacak UserForm nesnesi oluşturulur (Şekil 2).

Şekil 2: Visual Basic Editörü - UserForm & Toolbox
UserForm1 nesnesi oluşturulduğunda, programlama esnasında kullanacağımız diğer kontrol nesnelerini içeren Toolbox’ta (Şekil 3) ekrana yüklenmiş oldu.

Şekil 3: Toolbox
Formu tasarlamaya başlamadan önce, programda kullanacağımız Visual Basic kontrol nesneleri ve bunların özelliklerinden bahsetmek yerinde olacaktır (Tablo 1).

Tablo 1: Visual Basic kontrol nesneleri & Toolbox
Şimdi formumuzu tasarlamaya başlayabiliriz, Tablo 2’de verilen kontrolleri UserForm’un üzerine ekleyelim. Bilgi vermesi amacıyla Şekil 4’de bakabilirsiniz.

Şekil 4: Tasarım halindeki UserForm Görünümü

Tablo 2: Formda Kullanılacak Kontroller & Özellikleri
UserForm üzerine eklediğimiz kontrollerin özelliklerini Tablo 2’deki gibi değiştirdiğimizde Şekil 5’deki form görüntüsünü elde ederiz. Böylece programın görsel tasarım aşaması bitmiş oldu.

Şekil 5: Tasarımı Tamamlanmış UserForm Görünümü
Görsel tasarım aşamasından sonra kod yazım aşamasına geçebiliriz. İlk başta değişkenleri tanımlayım ve tanımladığımız değişkenlerin veri türlerini inceleyelim.
Değişkeni, programın çalışma esnasında değeri değişebilen bilgi alanıdır diye tanımlayabiliriz. Değişkenleri tanımlarken belli kurallara uymak zorundayız. Kısaca bu kurallardan bahsetmek gerekirse; değişken isimleri en fazla 255 karakterden oluşabilir. Bir değişkenin ismi alfabetik ve sayısal değerlerden oluşabilir ancak birinci karakter mutlaka alfabetik olmalıdır. Değişken adı, yordam adı ile aynı olmamalıdır ve değişken içinde nokta olmamalıdır.
Veri türleri ise, değişkenin içinde ne türde veri depolayabileceğimizi belirlemede kullanılır. Programda kullanacağımız veri tiplerini Tablo 3’de görebiliriz.

Tablo 3: Bildirim deyimleri ve temsil ettikleri veri tipleri
Aşağıdaki kodlar ile tasarlamış olduğumuz program için değişkenleri tanımlıyoruz.

Kod.1
Program için değişkenleri tanımladıktan sonra, yukarıda bahsetmiş olduğum programın ilk kısmı olan AutoCAD’in grafiksel ortamından nokta seçme işlevini aşağıdaki kodlar ile gerçekleştiriyoruz. Kodları incelediğimizde, değişkenlere veri atama, karar işlemlerini ve döngüleri görebiliriz. Karar verme ve döngü işlemlerini kısaca açıklayacak olursak.
Programın çalışması esnasında, yapacağı bazı karşılaştırma işlemleri sonucunda; bir eylemin gerçekleşmesine karar vermelidir. Visual Basic’te bu işlemi “IF” deyimini kullanarak gerçekleştiriyoruz. Verilen koşulun doğruluk değeri “-1” ise, yani “doğru” ise “Then” kelimesini takip eden kodlar işlem görecektir. Eğer koşul gerçekleşmez ise “Else” kelimesini izleyen satırlardaki kodlar işlem görecektir. IF deyimini, “End if” deyimi ile sonlandırırız.
Programın belirli bölümlerinin defalarca işlenmesini sağlamak amacı ile döngüler oluşturulmuştur. Tasarladığımız programda iki farklı tip döngü kullanılmıştır. Bunlardan ilki “For…Next” döngü tipidir. For…Next döngü ifadeleri belirli süreklilik miktarı kadar bir ifadeyi çalıştırmak için kullanılır. For döngüleri, belirli bir sayaç yardımıyla döngü sayısını denetim altında tutarlar. Kullandığımız ikinci döngü türü ise “Do…Loop” dur. Do…Loop döngüleri koşulsuz döngülerdir. Döngü dışına Exit Do deyimini kullanarak çıkarız. Eğer döngünün başında bir koşul ileri sürerek döngü içindeki deyimlerin bu koşulun geçerli olduğu sürece işlem görmesini istiyorsak döngü Do While…Loop şeklini alır. Tasarladığımız programda da bu şekilde kullanılmıştır.
AutoCAD ortamından verilerin alınması ve tekrar eklenmesi işlevleri için kullanmış olduğumuz kullanıcı girdileri ile nesne oluşturma yöntemlerini inceleyecek olursak. Bunların başında “GetPoint” metodu gelir. GetPoint metodu kullanıcının AutoCAD komut satırından veya mause ile grafiksel ortamın herhangi bir yerine tıklayarak bir nokta girmeyi sağlar. Örnek olarak
KOOR = ThisDrawing.Utility.GetPoint(, vbCrLf & "Select First point: ")
kodu verilebir. Tasarladığımız programda LAYER, LINE, POINT ve MTEXT AutoCAD nesneleri kullanılmıştır. Kod açıklamalarını, kod yazımı ile birlikte yaptım. Böylece, açıklamaların altında yer alan kodlarla neyin yapılmak istendiği ve hangi yolun takip edildiği daha kolay anlaşılacaktır. Şimdi kodları inceleyerek programımızı kod yazımı aşamasını tamamlayalım.
Select Points Butonu için aşağıdaki kodlar kullanılacaktır.

Kod.2 Draw Table Butonu kodları.

Kod.3
Form Aktive (yüklenirken) edilirken kullanılacak kod

Kod.4
Hücre genişlik değerini azaltmak için kullandığımız SpinButton kodu.

Kod.5
Hücre genişlik değerini arttırmak için kullandığımız SpinButton kodu.

Kod.6
Hücre yükseklik değerini azaltmak için kullandığımız SpinButton kodu.

Kod.7
Hücre yükseklik değerini arttırmak için kullandığımız SpinButton kodu.

Kod.8
Bu son kodun yazımını da bittirdikten sonra programımız şimdilik tamamlanmış oldu. Programın çıktı görüntülerini Şekil 6a ve 6b de görebilirsiniz. Bir sonraki buluşmamızda, seçilen noktaların Excel’e aktarılması fonksiyonunu anlatacağım. Şimdilik hoşçakalın…

Şekil 6.a. Programın çıktı görüntüleri

Şekil 6.b. Programın çıktı görüntüleri
Bir dahaki yazımda görüşmek üzere.
İlgili dosyalar:
Project1.zip
»(17 KB, 129 hits, 2008 March 4),
Örnek VBA uygulaması - Suphi TUNALI / (c)2007 AutoCAD Günlüğü
İlgili Yazılar:
Rastgele bir yazı



5 March 2008, Wednesday 10:09
Çok güzel bir konu, teşekkür ederim arkadaşım. Acaba bu tür programlamada veri tabanı da kullanabilirmiyiz? Buna da bir örnek verirseniz süper olacak. Selamlar Türkiyeden…
5 March 2008, Wednesday 18:52
Sayın Tunalı,
Paylaşımınız için teşşekkür ederim. Özellikle kod satırlarındaki açıklamalar çok yararlı olacak. Yazılarınızın devamını bekliyoruz.
Hoşçakalın..
27 March 2008, Thursday 17:37
ya tam benim aradım ama bir türlü çalıştıramadım ilk defa macro kullanıyorum yarcımcı olursan sevinirim
5 April 2008, Saturday 0:25
paylasımınız icin tesekkur ederım. ve devamını dilerim
16 April 2008, Wednesday 17:27
Oldukça açıklayıcı bir yazı olmuş. Ben de AutoCAD ile başlangıç düzeyindeyim. Hem de çok yeni. Öğrenecek çok şey var. Devamını beklerim.
İyi çalışmalar.
17 April 2008, Thursday 16:50
autocad tasarım programında ihtiyaç duyduğum bir makroya ihtiyacım var
18 April 2008, Friday 16:26
merhaba suphi bey
biz asma germe membran sistemleri konusunda çalışıyoruz. bir poligondaki noktaların koordinatların
excele aktarımı konusunda yazılarınızı okudum. ama
basarılı olamadım aktarmada. macroyu aktif ettikten sonra hangi komutları kullanarak excele atmamız konusunda daha basit dille bize yardımcı olursanız
seviniriz.
iyi çalışmalar ve esenlikler dileğiyle