AutoLİSP NUTSHELL Fonksiyonları Define  [defun]

Hepimiz böyle bir şey görmüşüzdür:

(defun C:SERCELIK ( / t1 t2 h1 h2 ang)

Elbette, bu bir AutoLISP rutininin ilk satırıdır.

Ancak, bunun ne anlama geldiğini biliyor musunuz?

AutoLISP’te  kod yazmaya başladığım ilk zamanlarda tamamen kafam karışmıştı!

Ne kadar çok okursam okuyayım bu kafa karışıklığı da o kadar artıyordu.

Genel “Global”, Yerel” Lokal”, Argüman “Argument”, Tanımlama “Define”, Offfff …

Yani, benim kadar kafanız karıştıysa da, okumaya devam edin.

En iyisi, En başından başlayalım.

Bir programın veya fonksiyonun adı, ilk ifadede tanımlanmalıdır; bu, aşağıdaki komut kullanılarak yapılır:

(defun [Define Fonksiyonu]

Neden (defun komutundan sonra) bir kapatma parantezi bulunmuyor?

Var! Aslında programdaki son parantez ile komut kapatılıyor.

Her neyse, devam edelim.

Sonrasında defun programın adını vermelidir:

(defun SERCELIK

AutoLISP dosyasının adının mutlaka programın adı ile aynı olmadığını fark ettiniz mi?

Aslında, bir AutoLISP dosyası içerisinde birden fazla program da olabilir.

Hey, çok iyi bir özellik değil mi? Şimdi zor kısım geliyor !!

Programınızı adlandırdıktan sonra üç seçeneğiniz var:

  • İlk olarak, () (aç parantez kapa parantez) kullanın:

 (defun SERCELIK ( )

Burada söylediğimiz, fonksiyonumuzda kullandığımız her değişkenin KÜRESEL “GLOBAL“ olacağıdır. KÜRESEL “GLOBAL“ bir değişken, program sona erdiğinde değerini kaybetmeyen değişkendir. Örneğin, PT3 değişkenini programınızda 45.2 olarak tanımlandıysanız, programınız bittiğinde PT3 değişkenini 45.2 değerine sahip olacak ve siz onu başka bir değerle değiştirene veya yeni bir çizime başlaya değerini koruyacaktır.

  • İkinci olarak, değişkenlerinizi YEREL “LOCAL“ olarak bildirebilirsiniz.

Bunu yapmak için, aşağıdaki örnekte görüldüğü gibi  değişkenlerinizden önce / (bölü) işaretini kullanın:

(defun SERCELIK ( / p1 p2 p3)

Aşağıdaki örnek YEREL “LOCAL“ sembollerin kullanımını göstermektedir:

(defun TEST ( / ANG1 ANG2)

(setq ANG1 “Pazartesi”)

(setq ANG2 “Salı”)

               (princ (strcat “\nANG1 has the value ” ANG1))

               (princ (strcat “\nANG2 has the value ” ANG2))

               (princ)

               )     ;defun fonksiyonunun sonu

Şimdi,  AutoCAD’in komut satırında, aşağıdaki iki kod satırını kullanarak ANG1 ve ANG2 değişkenleri için TEST fonksiyonunun kullandığı değerlerden farklı değerler atayın:

Command: (setq ANG1 45)
Command: (setq ANG2 90)

ANG1 ve ANG2 değişkenlerinin değerlerini kontrol etme:

AutoCAD’in komut satırına, aşağıdaki iki komutu yazarak değişkenlerin değerini kontrol edebilirsiniz:

Command: !ANG1          [45.0 sonucu geri dönmelidir.] Command: !ANG2         [90.0 sonucu geri dönmelidir.]

Şimdi fonksiyonu çalıştırın :

Command: (load “TEST”)
Command: (TEST)

Fonksiyon aşağıdaki sonuçları geri döndürmelidir :

ANG1 Pazartesi değerine sahiptir.
ANG2 Salı değerine sahiptir.

Şimdi, AAutoCAD’in komut satırına, aşağıdaki iki komutu yazarak ANG1 ve ANG2 değişkenlerinin akktif değerlerini kontrol edin:

Command: !ANG1
Command: !ANG2

Değişkenlerin sırasıyla hâlâ 45.0 ve 90.0 değerlerine sahip olduklarını göreceksiniz.

YEREL “LOCAL” bir değişken, program çalışırken yalnızca o program için bir değere sahip olan değişkendir.

  • Üçüncü seçenek, bir değişkeni / (bölü) işareti olmadan listelemektir. Bu, bir değişkenin, programın dışından gelen bir değeri alacak şekilde ayarlandığı anlamına gelir. Örneğin :

 

(defun DTR (a)

 (* PI (/a 180.0))

)

Bunu kullanmak için, argümanın değerini fonksiyona iletmeliyiz:

(DTR 90.0)

İşte başka bir örnek daha:

Bir dairenin alanını hesaplayan bir fonksiyon yazalım.

Bir dairenin alanını hesaplamak için formüller şöyledir:

Alan = PI x yarıçapın karesi veya, PI x r x r

Programımızda aşağıdaki şekilde görünecektir :

(defun acirc (r)                

(setq a (* (* r r) PI))              

(setq a (rtos a))              

(princ (strcat “\nAlan = ” a))

(princ)

)

Şimdi bu kodu deneyelim:

Command: (load “acirc”)
Command: (acirc 24)

Sonuç aşağıdaki şekilde olmalıdır :

Alan  = 1809.6

Tabi ki, üç seçeneği de birlikte de kullanabilirsiniz, örneğin:

 

(defun SERCELIK ( a / b c d)

SERCELİK fonksiyonun adıdır. Değişken a bir argümandır ve programın dışından iletilen ilk değeri alır.

b, c ve d değişkenleri yereldir ve program sona erdikten sonra değerlerini kaybederler.

Kullanılabilir bir başka seçenek te defun  ile fonksiyonun ismi arasında C: koymaktır.

(defun C:SERCELIK ()

C: kullandığınız için, fonksiyonu çağırmak için parantez kullanmanız gerekmez.

AutoCAD artık bu fonksiyonun bir AutoCAD komutu olduğunu düşünecektir.

Bu, yalnızca fonksiyonu AutoCAD komut satırından çağırırsanız geçerlidir.

Eğer fonksiyonu başka bir fonksiyon içinden çağırırsanız, fonksiyonun isminden önce C: ile koymalısınız:

(C:SERCELIK)

Yazarken tüm değişkenleri küresel “global” değişken olarak kullanmanız iyi bir fikirdir.

Böylece hata ayıklama sırasında değişkenlerin değerlerini kontrol edebilirsiniz.

 

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Kompozit Yapıda Katmanları Düzenleme

Revit’te kompozit yapıdaki katmanların fonksiyonlarını, malzemesini ve kalınlığını belirleyebilirsiniz.  Video: Bileşik Yapıları Düzenleme (İngilizce) Kompozit …

Bir cevap yazın

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.