|
Orhan Toker |
|||||||||||||||||||||||||||
| DERS.5 Kullanıcı giriş fonksiyonları Seviye: Orta Kaynaklar: Autodesk, VisualLISP IDE Help file |
||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||
Merhabalar, Bu dersimizde kullanıcıdan veri toplamanın yollarını öğreneceğiz. Autocad ile çizim yaparken kullandığımız komutlar bizden çeşitli verileri girmemizi ister. Örneğin bir çember çizerken AutoCAD sizden merkez noktasını ve yarıçapı soracaktır. Siz de AutoLISP ile program geliştirirken kullanıcıdan bir çok kez veri girmesini isteyeceksiniz. Aşağıda kullanıcıdan girmesini isteyebileceğiniz veri tiplerini ve hangi fonksiyonla bu veririn toplanacağını gösteren tabloyu göreceksiniz.
Şimdi bu fonksiyonları birer örnekle kısaca inceleyeceğiz. |
||||||||||||||||||||||||||||
| (getint) ve (getreal) fonksiyonları | ||||||||||||||||||||||||||||
Bu fonksiyonlar kullanıcıdan reel ya da tamsayı girişi istendiği zaman kullanılır. Örnekle
Gördüğünüz gibi (getint) ve (getreal) fonksiyonları ile birlikte kullanıcıdan veri girişi istemek için bir açıklama mesajı da girebiliyoruz. Önemli: AutoLISP programlarınızda kullanıcıdan veri girişi esnasında yazacağınız mesaj kullanıcıyı yönlendireceği için çok önemlidir. Eğer kullanıcıdan, nokta, açı, mesafe gibi standart Autocad verileri istiyorsanız mesajınızın da Autocad mesaj standardında olması gerekir. Elbette tüm veri girişi mesajlarınızın da belli bir uslüpta olması tercih edilir. Mesajın başına koyduğunuz "\n" kodu mesajınızın yeni satırda çıkmasını sağlar. |
||||||||||||||||||||||||||||
| (getangle) ile açı girişi | ||||||||||||||||||||||||||||
Kullanıcıdan açı girmesini istiyorsanız bu fonksiyonu kullanırsınız. (getangle) fonksiyonu isteğe bağlı iki adet argüman kullanır:
Nokta argümanını girerseniz girdiğiniz nokta referans alınarak açı girişi yaptırırsınız. Bu fazlaca kullanılam bir metot değildir. Biz ikisine de örnek verelim.
Kullanıcının yaptığı açı girişini aci değişkenine radyan olarak girer. Radyanı dereceye çevirmek için
İkinci örneğimiz girilen son noktadan yön tayini istiyor. |
||||||||||||||||||||||||||||
| (getcorner) ile diğer köşeyi tayin etmek | ||||||||||||||||||||||||||||
Bazı durumlarda kullanıcıdan bir çerçeve tayin etmesini isteyebilirsiniz. Örneğin kendi dikdörtgen rutininizi yazıyorsunuz ya da seçim penceresini önceden tayin ettirmek istediniz. İşte böyle durumlarda (getcorner) çok yararlıdır. Lafı uzatmayalım kendi dikdörtgen rutinimizi yazalım.
Bu kodu Autocad vlisp komutu ile açtığınız VisualLISP editöründe oluşturun ve dortgen.lsp diye kaydedin. Sonra CTRL+ALT+E tuşlarına basarak projeyi Autocad'e yükleyin. komut satırından dortgen yazdığınızda dikdörtgen çizen komutunuz işlemiş olacaktır. Bu projede kullandığım car, cadr ve list fonksiyonlarını ileriki derslerimde açıklayacağım. Burada mühüm olan (getpoint) ve (getcorner) fonksiyonlarını nasıl kullandığımıza dikkat etmenizdir. Önemli:Dikkat ederseniz aynı (setq) eşitleme fonksiyonu içerisinde dikdörtgenimizin her iki köşesini de kullanıcıdan almış oldum. Yani (setq) eşitleme fonksiyonunu aynı anda birden fazla değişkenin değerini eşitlemek için kullanabilirsiniz. Kodlama sırasında hizalamaya dikkat edin yeter. Ayrıca c:dortgen fonksiyonumu tarif ederken başına koyduğum "c:" öneki bunun bir Autocad komutu gibi çalışasını sağlayacaktır. Bu ön eki koymadığınızda komut satırından diğer lisp fonksiyonlarını çağırdığınız gibi çağırırsınız.
Fonksiyon tanımında (/) işaretinden sonra tanımladığım değişkenler sadece fonksiyon içinde lokal olarak tanımlandıklarını gösterir. |
||||||||||||||||||||||||||||
| (getdist) ile mesafe girişi yaptırmak | ||||||||||||||||||||||||||||
(getdist) fonksiyonunu kullandığınızda, kullanıcı direkt bir değer girerek, iki nokta belirleyerek, ya da bir noktadan referans alarak mesafe girebilir. (getdist) fonsiyonu ilk girilen noktadan sonra, Autocad'in her türlü nokta belirleme yöntemini kullarak diğer bir nokta girmenizi bekler. Bu bekleme esnasında 1. noktadan kursörünüzün ucuna bir ipcik çizecektir. (setq mesafe (getdist "\nMesafeyi girin:")) |
||||||||||||||||||||||||||||
| (getkword) ile kullanıcıdan seçenek belirlemesini istemek. | ||||||||||||||||||||||||||||
Bazı durumlarda kullanıcıdan komut satırı aracılığı ile seçenek isteyebilirsiniz. Buna örnek olarak Autocad CIRCLE komutunu verebiliriz.
|
||||||||||||||||||||||||||||
Yukarıdaki örnekte [3P/2P/Ttr (tan tan radius)]: birer seçenektir. Kendimiz bir örnek yapalım. Sorduğumuz soruya sadece "Evet" ya da "Hayır" yanıtını giriş olarak kabul eden kod:
Yukarıdaki kod kullanıcıdan sadece "Evet" ve "Hayır" yanıtlarını kabul edecektir. (initget) fonksiyonu veri girişlerini önceden koşullandırmaya yarar. Bu fonksiyonu gelişmiş derslerimizde daha ayrıntılı ele alacağım. |
||||||||||||||||||||||||||||
| (getpoint) ile kullanıcıdan nokta istemek | ||||||||||||||||||||||||||||
Kullanıcının tek bir nokta girmesini istediğinizde (getpoint) fonksiyonunu kullanabilirsiniz. Kullanıcının vereceği nokta yanıtı tüm Autocad nokta tayin etme yöntemleri olabilir.
Yukarıdaki dortgen.lsp örneğimizde bu fonksiyonu zaten kullanmıştık. |
||||||||||||||||||||||||||||
| (getstring) ile kullanıcıdan dize girişi istemek. | ||||||||||||||||||||||||||||
Özellikle etiket ya da mahal adları dolduran rutinlerinizde sıklıkla kullanacağınız bir fonksiyondur. Kullanımı:
cr argümanı ENTER ya da boşluk karakterini kabul edip etmeyeceğinizi belirler. nil ise boşluk karakteri giremezsiniz.
Örnekte görüldüğü gibi, isimde boşluk kabul etmezken, açıklamada boşluklara müsade ediyoruz. |
||||||||||||||||||||||||||||
| Alıştırmalar | ||||||||||||||||||||||||||||
Kendi kendinize yapabileceğiniz alıştırmalar:
|
||||||||||||||||||||||||||||
| (c) Copyright 2006 Taliasoft, by Orhan Toker | ||||||||||||||||||||||||||||