AutoLİSP NUTSHELL Fonksiyonları [SET & SETQ]

AutoLISP’de bir sembol için bir değer oluşturma işlemi atama olarak adlandırılır. Atama yapmak için ortak yöntem SETQ fonksiyonunu kullanmaktır. Atama, ikinci argümanının değerini, bir simge olması gereken argümanının birinci değeri haline gelmesine neden olur. Sembol, örtük olarak bildirilen bir sözcük olan değişkendir.

SET fonksiyonu, SETQ fonksiyonunun yaptığı gibi ilk argümanı değerlendirmenin haricinde SETQ fonksiyonu gibidir. Bu nedenle, birinci argüman, dinamik bir değişkenin (değeri dinamik olarak oluşturulan değişken) değeri olarak değerlendirilmelidir. Diğer fark, SET fonksiyonu yalnızca iki argüman almasıdır.

Aşağıdaki atamaları inceleyin:

 (setq a var)     a sembolünü var olarak ayarlar. var sembolü tanımlı değildir.

(set a 2)   a sembolünün değerini değerlendirir ve bu değerlendirmenin sonucunu 2 olarak ayarlar.

(princ var)  2 olarak geri döner. var sembolü artık tanımlanmış ve 2 olarak ayarlanmıştır.

SET fonksiyonunu kullanarak atama yapmanın ortak kullanımı; simgeleri çalışma anında tanımlamaktır ve öğe sayısı önceden bilinmiyorsa, bazen liste oluşturma yönteminden daha etkilidir. Bunun bir örneği olarak, aşağıdaki lisp rutini değişken sayıda nokta alır; bu noktaları Y koordinatlarına göre sıralar ve sıralanmış noktaları kullanarak bir çizgi çizer.

(defun c:test ( / j lpt symb)

(setq j 1)

(while (set (read (strcat “point_” (itoa j)))

(getpoint “\nNokta : “)

)

(setq j (1+ j))

)

; Son nokta boş tur “nil”.

(setq j (1- j))

;Noktaları sıralar. Aşağıdaki ” sortpoints” fonksiyonuna bakın.

(sortpoints j)

;(command “_line”) fonksiyonuna aktarılacak noktalar listesini hazırlama

(setq lpt (list “”))

;Listeyi oluşturma ve;sembolleri anında boş “nil” olarak ayarlama

(while (> j 0)(setq

         symb (read (strcat “point_” (itoa j)))

         lpt (cons (eval symb) lpt))

(set symb nil)(setq j (1- j)))

; çizgiyi çizme(command “_line”)(mapcar ‘command lpt)

(princ)

)   

 

;Bu fonksiyon noktaları Y koordinatlarına göre sıralar.

(defun sortpoints (j / i cur_y prev_y cur_symb prev_symb point)(setq i 2)

(while (<= i j)

(setqcur_symb (read (strcat “point_” (itoa i)))

prev_symb (read (strcat “point_” (itoa (1- i))))

cur_y (cadr (eval cur_symb))

prev_y (cadr (eval prev_symb))

)

(if (> cur_y prev_y)(progn

(setq   point (eval prev_symb))

(set    prev_symb (eval cur_symb))

(set    cur_symb point)

(if (/= i 2) (setq i (1- i))))(setq i (1+ i))

)

)

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Nesne Stilleri için Alt Kategoriler Hakkında

Bir model öğeleri kategorisindeki ayrık geometrinin görünürlüğünü ve grafiklerini kontrol etmek için, alt kategoriler “subcategories“ …

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.