|
Orhan Toker |
| DERS.7 Kendi fonksiyonlarımızı tanımlamak ve fonksiyonları etkili kullanmak. Seviye: Orta Kaynaklar: Autodesk, VisualLISP IDE Help file [4.Nisan.2006] |
|
Merhaba, Bu dersimizde AutoLISP projelerimiz içinde kendi fonksiyonlarımızı tanımlamayı öğreneceğiz. Daha önceki derslerimizde farkına varmış olabilirsiniz, uygulamalarımız ve örneklerimizin içinde zaten fonksiyonlar tanımladık. Ancak bu derste sizlere vermek istediğim şey, her programlama dilinde olduğu gibi fonksiyon tanımalamanın önemini kavratmak ve bu işi profesyonel projeleri yapabilecek düzeyde anlatmak. Ayrıca fonksiyonları etkili kullanım tekniklerini de bu derste bulacaksınız. AutoLISP içinde kendi fonksiyonlarımızı (defun) fonksiyonu ile tanımlarız. Bir kez kendi fonksiyonumuzu tanımladıysak, Autocad komut satırından, VisualLISP konsolundan ya da kendi projelerimiz içinden bu fonksiyona rahatlıkla erişebiliriz. Kendi tanımladığımız fonksiyonlar da tıpkı AutoLISP fonksiyonları gibi birer fonksiyon olurlar. (defun) fonksiyonunu kullanarak kendi komutlarımızı da yaratabildiğimizi unutmayın. |
|
Yeni fonksiyon yaratmak (defun fonksiyon adı (argümanlar / lokal değişkenler)) |
|
(defun) fonksiyonu, bir grup eşitliği ve AutoLISP fonsiyonunu arka arkaya çalışacak şekilde bir araya getirip fonksiyon ya da komut yapar. Defun fonksiyonu en azından 3 tane argümana ihtiyaç duyar. Bunlardan birincisi yeni tanımlayacağınız fonksiyonun ismidir. Defun fonsiyonunun ikinci argümanı fonsiyon çağrıldığında ihtiyaç duyulacak argümanların listesidir. BU boş da olabilir birden fazla argüman da olabilir. Üçüncü ve son argüman ise fonksiyon içinde kullanılacak lokal değişkenlerin listesidir. Şimdi basit bir fonksiyon tanımlayalım:
Artık fonksiyonunuz tanımlandı. Aşağıdaki gibi kullanılır
Komut tanımlama için
Merhaba dünya fonksiyonunu çağıran md komutunu yarattık. |
|
| Argümanlı fonksiyonlar tanımlamak ve kullanmak | |
AutoLISP içinde argümanla çağrılan fonksiyonlar tanımlayabilirsiniz. Yerlerşik AutoLISP fonksiyonlarının aksine, opsiyonel argümanlı fonksiyon tanımı yapamazsınız. Yani tanımladığınız argümanlı fonksiyonu çağırırken tüm argümanlarını pas etmelisiniz.
Yukarıdaki örnekte bir sayını karesini alan fonksiyon yaptık ve denedik. Tanımladığımız karesi fonksiyonu sayi argümanını kullanıyor ve dönüş değeri olarak kensisiyle çarpım sonucunu veriyor. Bu fonksiyonu başka bir fonksiyon içinde çağırabiliriz.
Gördüğünüz gibi tanımladığımız kare_al komutunun içinden karesi fonksiyonunu çağırabiliyoruz. |
|
| Fonksiyonların içinde kullanılan lokal değişkenler | |
Döngü sayaçları, nokta ve mesafe gibi kullanıcı giriş değerleri vb. değişkenler her fonksiyonun içinde kullanılır ve fonksiyon dışında işe yaramazlar. Fonksiyonların içinde kullanacağınız değişkenlerin, uygulamanız tarafından etkilenmesini önlemek için fonksiyon tanımında bunları deklare etmelisiniz. Böylece aynı değişkenleri bir başka fonksiyon içinde rahatlıkla kullanabilir ve karışıklıkları önlersiniz.
Böylece a değişkeni başka bir yerde kullanılsa bile sizin için sakınca oluşturmaz. Lokal değişkenleri deklare etmenin bir başka avantajı da yorumlayıcı için ayrılan sistem hafızasını çok meşgul etmemektir. |
|
| AutoCAD komutlarını değiştirmek. (redifining) | |
Her ne kadar benim hiç kullanmadığım bir yöntem olsa da Autocad komutlarını (defun) fonksiyonu kullanarak kendinize göre değiştirebilir, bir anlamda yeniden tanımlayabilirsiniz.
Autocad LINE komutunu yeniden tanımlamış olduk. Şimdi
Bu küçük kodla Autocad LINE komutunu devre dışı bıraktık ve bizimkini kullanacağımızı belirttik. Tekrar eski duruma dönmek için:
Dediğim gibi bu yeniden tanımlama işlemini sadece zorunlu durumlarda yapmanızı öneririrm. |
|
| S::STARTUP fonksiyonu | |
Çizime başlamadan önce otomatik olarak yapılmasını istediğiniz işleri S::STARTUP fonksiyonu içinda tanımlayabilirsiniz. BU fonksiyonu Autocad çizimi açıldığında otomatik olarak yüklenmesi için "ACAD.LSP" "ACADDOC.LSP" ya da ilgili MNL dosyasının içine yazmalısınız. Ben örneğimde acad.lsp dosyasını düzenleyeceğim: (Bu dosyayı support dizininin altında bulacaksınız. Autocad 2006 için: \support\acad2006.lsp) Dosyayı açın ve en sonuna aşağıdaki kodu ekleyin.
Bu kodu acad.lsp dosyasının sonuna eklediğinizde S::STARTUP fonksiyonunun içine koyduğunuz tüm işleri yeni çizim açar açmaz icra edecektir. Biz örnekte otomatik olarak layer açtırdık. Bu ders bu kadar. Hoşçakalın.
|
|
| (c) Copyright 2006 Taliasoft, by Orhan Toker |