Ekranda seçilen noktanın yanına koordinatlarını yazan AutoLISP programı.
![]() |
Yazar | Suphi Tunalı |
| Mesleği | Harita ve İnşaat Teknikeri | |
| AutoLISP ve VBA programcısı | ||
| web | ||
Merhaba AutoCAD Günlüğü dostları;
Bugün sizlere AutoLISP programlama dili ile hazırladığım üç programdan bahsedeceğim. Aslında bu üç programın yaptığı işlev ve sonuç çıktısı aynı, fakat kod yazım aşamasında farklı yöntemler izlediğim için ortaya üç program çıktı. Programın ana işlevi, AutoCAD ekranından gösterilen yere “POINT” nesnesi ekleyip yanına da eşzamanlı olarak koordinat bilgilerini dökmektir. Şimdi sırası ile bu üç programın kodlarını inceleyelim.
1. Program “Nokta.lsp”

Kod.1 (Nokta.lsp)
Kod.1′deki kodlardan söz edecek olursak “defun” fonksiyonu ile programı çalıştıracak olan komut ve program içerisinde kullanılacak olan değişkenler tanımlanıyor. Takip eden kodlarda ise sistem değişkenlerinin mevcut durumları değişkenlere atanıyor. Bu adımı, programı kullanıp işimizi bitirdikten sonra sistem değişkenlerini eski durumlarına getirmek amacı ile yapıyoruz. Bu konu ile ilgili olarak Muharrem Bey’in “Sistem Değişkenleri” yazısını inceleyebilirsiniz. Bu küçük bilgiyi de verdikten sonra yazımıza devam edelim.

Kod.2 (Nokta.lsp)
Sistem değişkenleri ile işimizi bitirdikten sonra, “while” döngü bloğunu oluşturuyoruz.
(while (/= nil (setq nkt (getpoint (strcat “\n” (rtos nno 2 0) ” Nolu Noktayı Seciniz :”))))
While döngü bloğu kodunu incelediğimizde, döngü koşulunun devamlılığının sağlanması kullanıcı tarafından nokta seçme işlemini “nil” olmaması durumuna bağlıdır. Bunu biraz açacak olursak kullanıcı seçim aşamasındayken klavyeden “ESC” tuşuna basarak veya mause ile “SAĞ TUŞ” tıklayarak işlemi iptal etmemesidir.
While döngüsünün, devam koşulunu sağlayacak olan kriter aynı zamanda AutoCAD ekranında gösterdiğimiz yerin koordinat bilgilerini tanımlamış olduğumuz “nkt” değişkenine atıyor. Bu işlemi AutoLISP programlama dilinin girdi fonksiyonlarından “getpoint” fonksiyonu nu kullanarak gerçekleştiriyoruz. Kodun devamın incelediğimizde “entmake” fonksiyonunu kullanabilmek için tanımladığımız “emk” değişkenine “list” fonksiyonu ile “POINT” nesnesinin “DXF” parametrelerini ve bu parametrelere karşılık gelen değerleri atıyoruz.

Tablo.1 Point Grup Kodları (Kaynak: AutoCAD 2002 DXF Reference Guide)
Tablo.1 de AutoCAD Point nesnesine ilişkin DXF grup kodlarının açıklamaları verilmiştir. Bu doğrultuda verileri “list” ve “cons” fonksiyonları ile tanımlamış olduğumuz “emk” değişkenine atadıktan sonra “entmake” fonksiyonu ile AutoCAD ekranından gösterilen yere “POINT” nesnesini ekliyoruz.

Kod.3 (Nokta.lsp)
Kod.3 incelendiğinde, yine “entmake” komutu kullanılarak sırası ile nokta numarası, x koordinat değeri ve y koordinat değerlerini içeren “TEXT” nesnelerini AutoCAD ekranında gösterilen yere yerleştirildiği görülecektir. Tablo.2 de AutoCAD Text nesnesine ilişkin DXF grup kodlarının açıklamaları verilmiştir.

Tablo.2 Text Grup Kodları (Kaynak: AutoCAD 2002 DXF Reference Guide)

Kod.4 (Nokta.lsp)
While döngü bloğunu bir sonraki seçim için nokta numarası için tanımlamış olduğumuz “nno” değişkeninin değerini 1 arttırarak kapatıyoruz. Programın başında sistem değişkenlerini atamış olduğumuz “cmd” ve “osm” değişkenlerini kullanarak eski hallerine getiriyoruz. Kod.4 incelendiğinde bu adımları görebiliriz. İlk programımız olan “Nokta.lsp” yi böylelikle tanımlamış olduk.
2. Program “Nokta1.lsp”
İkinci program olan “Nokta1.lsp” in birinci programdan farkı “TEXT” nesnelerinin AutoCAD ekranın eklenmesi esnasında aynı kodların 3 defa yazılmasının, yani kod tekrarının önüne geçilmesi amacıyla “entmake” fonksiyonu için bir alt fonksiyon tanımlanmıştır. Aşağıdaki Kod.5 incelendiğinde “defun” fonksiyonu ile “yazi” alt fonksiyonu tanımlandığı görülebilir.

Kod.5 (Nokta1.lsp)
Kod.5 de “Nokta.lsp” deki “TEXT” nesnesi için yazılan kodlar alınmış ve programı tasarlayan tarafından tanımlanan “yazi” fonksiyonu görülmektedir.

Kod.6 (Nokta1.lsp)
Kod.6 incelendiğinde “Nokta.lsp” den tek farkın; (yazi heig text rpnt horz vert) kodu olduğu görülür. Burada tanımlamış olduğumuz “yazi” fonksiyonunu çağırıp tanımlamış olduğumuz değişkenleri de kullanarak “Nokta.lsp” deki her “TEXT” nesnesi için yazmış olduğumuz “entmake” fonksiyonunu yazmaktan kurtuluyoruz. Bence doğru olanda budur çünkü sürekli aynı işlemler için aynı kodları tekrar tekrar yazarak kod karmaşası içerisinde boğuluruz. Böylelikle ikinci programımız olan “Nokta1.lsp” yi de tamamladık.
3. Program “Nokta2.lsp”

Kod.7 (Nokta2.lsp)
Son programımız olan “Nokta2.lsp” te ise ilk iki programdan yazım olarak farkı “entmake” fonksiyonu yerine “command” fonksiyonunun kullanılmasıdır. Programın ilk satırlarında pek değişiklik yoktur sadece AutoCAD ekranından gösterilen yerin koordinat değerleri tanımlanmış olan “xcoor” ve “ycoor” değişkenlerine atandığını Kod.7 i inceleyerek görebiliriz.

Kod.8 (Nokta2.lsp)
Kod.8 incelendiğinde önceki iki programda “entmake” fonksiyonun kullanarak yapmış olduğumuz işlemleri burada “command” fonksiyonunun kullanarak gerçekleştiriyoruz. Bu iki fonksiyon arasındaki farkı Orhan Bey’in “(command …) mı? (entmake …) mi? ” makalesini okuyarak öğrenebilirsiniz.

Kod.9 (Nokta2.lsp)
Kod.9 teki kodlarla üçüncü program olan “Nokta2.lsp” yi tamamlıyoruz.

Şekil.1 Üç Programın Çıktı Sonucu Olan Ekran görtüsü
Arkadaşlar böylelikle aynı işlevi yapan üç programın yazılım aşamalarını incelemiş olduk. Farklı yöntemlerle sonuca ulaşmak ve arasındaki farkları görmek adına umarım faydalı olabilmişizdir. Şimdilik hoşça kalın yeni bir yazıda buluşmak üzere tabii ki.
İlgili Dosyalar:
Noktayaz.zip
»(2.1 KB, 43 hits, 2008 April 16),
Ekranda seçilen noktanın yanına koordinatlarını yazan 3 adet AutoLISP uygulaması - Suphi Tunalı 2008
İlgili Yazılar:
Technorati Etiketleri
Rastgele bir yazı


16 April 2008, Wednesday 10:36
Lispler gerçekten faydalı. Ama noktaların koordinatlarını bir tablo içine nasıl yazdırabiliriz? Bazen koordinatları tablo olarak vermeniz gerekebiliyor.
teşekkürler…