AutoLISP, AutoCAD ortamında özelleştirilmiş komutlar ve araçlar geliştirmek
için kullanılan güçlü bir programlama dilidir. Uygulamalarınızı daha
etkileşimli hale getirmek için, çalışma sırasında kullanıcıdan gerekli
bilgileri almanız gerekebilir. İster bir nokta seçimi, ister bir metin girişi
veya bir sayısal değer olsun, kullanıcıdan bu verileri almak için AutoLISP'te
dahili fonksiyonlar bulunur.
Bu fonksiyonlar sayesinde, kullanıcılar klavye aracılığıyla metin veya sayısal
değerler girebilir ya da fare ile ekranda nokta seçimi, uzunluk girdisi, açı
girdisi, nesne seçimi ve komut alt menü elemanı seçimi yapabilir.
Örneğin, bir çizgi çizmek için başlangıç ve bitiş noktalarını kullanıcıdan
almak veya bir metin etiketi oluşturmak için kullanıcıya metin girişi
yaptırmak mümkündür. Bu tür etkileşimler, uygulamanızın daha esnek ve
kullanıcı dostu olmasını sağlar.
Girdi Fonksiyonları
- getint
- getreal
- getstring
- getpoint
- getcorner
- getdist
- getangle
- getorient
- initget
- getkword
- getfiled
- getenv
- getvar
- entsel
- nentsel
- nentsel
- ssget
1) getint Fonksiyonu: Kullanıcıdan Tamsayı Değeri Alma
getint fonksiyonu, kullanıcıdan bir tamsayı (integer)
değeri almak için kullanılır. Kullanıcı bir değer girdikten sonra
Enter veya Boşluk
tuşuna basarak girişini onaylar. Giriş sağlanana kadar uygulama duraksar.
Bu fonksiyon, özellikle sayısal bir değer girilmesi gereken durumlarda
tercih edilir. Örneğin, bir nesnenin kaç kopyasının oluşturulacağı veya
belirli bir mesafenin kaç birim olacağı gibi işlemlerde kullanılır.
Bu fonksiyona aktarılabilecek değerler -32,768 ile +32,767 arasında bir
tam sayıdır. (16 bit. Bir bit, sayı işareti için kullanıldığı için 15
bitlik sayı. 2^15 = 32768)
Kullanıcı tamsayı dışında bir değer(örneğin ondalıklı sayı veya metin)
girerse, fonksiyon “Requires an integer value" (Bir tamsayı
değeri gerektiriyor) mesajını görüntüler ve kullanıcının tekrar giriş
yapmasına izin verir.
Veri girmeden Entere basılırsa fonksiyon nil
sonucunu verir.
Kullanımı:
(getint [mesaj])
mesaj : Kullanıcıya gösterilecek mesajdır. Kullanılması zorunlu
değildir. Eğer belirtilmezse, fonksiyon herhangi bir mesaj göstermeden sayı
girişi bekler.
Örnekler:
(setq sayi1 (getint))
Mesaj vermeden kullanıcıdan tam sayı girdisi bekler. Girilen tam sayı
sayi1 değişkenine aktarılır.
(setq kopyasayisi (getint "\nKopya sayısı:"))
(princ (strcat "\nGirilen sayı: " (itoa kopyasayisi)))
\n satır başı kodudur. mesaj yeni satırda yazılır.
itoa tam sayıyı metne dönüştürür.
strcat metinleri birleştirir.
princ metni komut satırında yazdırır.
(setq sayi (getint "\nLütfen bir tamsayı girin: "))
(if sayi ; sına: sayi nil değilse?
;doğru ise
(princ (strcat "\nGirdiğiniz sayı: " (itoa sayi)))
;yanlış ise ise
(princ "\nGeçersiz giriş! Lütfen bir tamsayı girin.")
)
2) getreal Fonksiyonu: Kullanıcıdan Ondalıklı Sayı Alma
Bu fonksiyon kullanıcıdan bir reel sayı (floating-point number) değeri almak
için kullanılır. Özellikle kullanıcının ondalıklı bir değer girmesi gereken
durumlarda (örneğin, bir uzunluk, yarıçap veya ölçek faktörü belirtirken)
oldukça kullanışlıdır. getint fonksiyonundan farklı olarak küsuratlı
(ondalıklı, reel) sayılar da girilebilir. Tam sayı girilirse sayı reel sayıya
dönüştürülür. 5 sayısı 5.0 reel sayısına dönüşür.
Veri girmeden
Entere basılırsa
fonksiyon
nil sonucunu verir.
Ondalık ayıracı olarak .(nokta) kullanılır. Virgül kabul edilmez.
Kullanımı:
(getreal [mesaj])
mesaj : Kullanıcıya gösterilecek mesajdır. Kullanılması zorunlu
değildir. Eğer belirtilmezse, fonksiyon herhangi bir mesaj göstermeden sayı
girişi bekler.
Örnekler:
(setq sayi1 (getreal))
Mesaj vermeden kullanıcıdan tam sayı girdisi bekler. Girilen tam sayı
sayi1 değişkenine aktarılır.
(setq r (getreal "\nÇember yarıçapını giriniz:"))
Mesaj ile yarıçap değer girişi istenir.
3) getstring Fonksiyonu: Kullanıcıdan Metin Alma
Bu fonksiyon ile kullanıcıdan metin (string) türünde bir giriş almak için
kullanılır. Kullanıcı, klavyeden bir metin girdikten sonra Enter tuşuna
basarak girişini tamamlar.
Kullanımı:
(getstring [boşluk-izni] [mesaj])
boşluk-izni : Eğer bu parametre
belirtilirse (T veya 1 olarak), kullanıcı boşluk (space)
içeren metinler girebilir.
Bu parametre belirtilmezse veya nil olarak belirtilirse kullanıcı
boşluk içeren metin giremez. Boşluk tuşu Enter yerine geçtiği için girilen
metni onaylar.
mesaj : Kullanıcıya gösterilecek mesajdır. Kullanılması
zorunlu değildir. Bu parametre kullanılmazsa fonksiyon herhangi bir mesaj
göstermeden metin girişi bekler.
Dönüş Değeri : Kullanıcının girdiği metin değerini döndürür.
Eğer kullanıcı girdi yapmadan Entere basarsa sonuç metin içermez("")
ama nil değildir.
Örnek:
(setq adsoyad (getstring T "\nLütfen Adınızı ve Soyadınızı giriniz: "))
(if (= adsoyad "")
(princ "\nMetin girmediniz!")
(princ (strcat "\nGirdiğiniz metin: " adsoyad))
)
4) getpoint Fonksiyonu: Kullanıcıdan Nokta (Koordinat) Bilgisi Alma
Bu fonksiyon kullanıcıdan bir nokta (koordinat) değeri almak için kullanılır.
Kullanıcının çizim alanında bir nokta seçmesi gereken durumlarda (örneğin, bir
çizgi başlangıcı, daire merkezi veya metin yerleşim noktası vb.) oldukça
kullanışlıdır.
(getpoint [referans-noktası] [mesaj])
referans-noktası (isteğe bağlı): Kullanıcının seçeceği noktanın
referans noktasıdır. Bu parametre, kullanıcıya bir çizgi veya işaretçi
göstererek nokta seçimini kolaylaştırır.
mesaj (isteğe bağlı): Kullanıcıya gösterilecek bir istem (prompt)
mesajıdır. Bu mesaj, kullanıcıdan ne tür bir girdi beklendiğini açıklar.
Dönüş Değeri: Kullanıcının seçtiği noktanın koordinatlarını içeren bir
liste döner. Nokta belirtilmeden Entere basılır ya da sağ tıklanırsa
nil döner.
Örnek:
(100 50 0)
Listenin;
1. elemanı, koordinatın X değeri,
2. eleman
Y değeri,
3. eleman Z değeridir.
Değerler UCS'deki(User Coordinate System =
kullanıcı koordinat sistemi) değerlerdir. UCS koordinat bilgisi
WCS'ye(World Coordinate System) dönüştürülmesi
gerekirse trans fonksiyonu kullanılır. Kullanıcı koordinat sistemi
değiştirilmediyse değerler aynı olur.
(trans '(10.0 5.0 0.0) 1 0) ; (60.354 55.4598 0.0) Noktanın WCS'deki konumu
Koordinat fare ile çizim alanında tıklanarak seçilebildiği gibi X,Y,Z
formatında klavyeden de girilebilir. Örneğin: 100,50 veya 100,50,15 gibi.
Koordinat değerleri tam sayı olsa bile reel sayıya dönüşür.
Eğer kullanıcı nokta tıklamadan(girmeden) Entere basarsa veya sağ tıklarsa
sonuç nil döner.
Örnekler:
Örnek 1:
Mesaj vermeden nokta girişi bekler.
(getpoint) ;Sonuç bir listedir: (21.5814 46.0364 0.0)
Örnek 2:
2. nokta istendiğinde 1. nokta ile fare konumu arasında geçici çizgi
çizilir.
(getpoint (getpoint "\n1.nokta:") "\n2.nokta")
Örnek 3:
Girilen noktanın koordinat bilgisi yazdırılır.
(setq nokta (getpoint "\nLütfen bir nokta belirtin:"))
(if nokta
; nokta girilmişse
(princ
(strcat
"\nKoordinat:"
"\nX=" (rtos (car nokta))
", Y=" (rtos (cadr nokta))
", Z=" (rtos (caddr nokta))
)
)
; nokta girilmediyse
(princ "\nGeçerli nokta girilmedi."))
Lütfen bir nokta belirtin:
Koordinat:
X=18.7324, Y=27.5868, Z=0
Örnek 4:
Girilen noktalar arası mesafe yazdırılır.
(setq
n1 (getpoint "\n1.nokta: ")
n2 (getpoint n1 "\n2.nokta: ")
)
(if (and n1 n2)
; Noktalar girildiyse
(princ (strcat "\nNoktalar arasındaki mesafe: " (rtos (distance n1 n2))))
; Nokta(lar) girilmediyse
(princ "\nNokta(lar) girilmedi!")
)
Örnek 5:
Girilen 2 nokta arasına çizgi çizer.
(setq n1 (getpoint "\nÇizginin başlangıç noktası: "))
(if n1 ; n1 nil değilse
; 1. nokta girildiyse
(progn ;blok kodu başlat
(setq n2 (getpoint n1 "\nÇizginin bitiş noktası: "))
(if n2 ; n2 nil değilse
;2. nokta girildiyse
(command "line" n1 n2 "")
;2. nokta girilmediyse
(princ "\nBitiş noktası girilmedi.")
)
);progn
; 1. nokta girilmediyse
(princ "\nBaşlangıç noktası girilmedi.")
);if
5) getcorner Fonksiyonu: Kullanıcıdan Köşe Noktası Alma
getcorner fonksiyonu kullanıcıdan bir köşe noktası (corner point) almak
için kullanılır.
Bu fonksiyon, genellikle bir dikdörtgen veya benzeri bir şekil oluşturmak için
kullanılır.
Kullanıcı, bir referans noktası seçer ve ardından ikinci bir nokta seçerek bu
iki nokta arasında geçici bir dikdörtgen oluşturulur. Bu fonksiyon, özellikle
kullanıcının bir alan seçmesi gereken durumlarda (örneğin, bir seçim kutusu
oluşturma) oldukça kullanışlıdır.
Kullanımı:
(getcorner referans-noktası [mesaj])
referans-noktası: Kullanıcının seçeceği köşe noktasının referans
noktasıdır. Bu nokta, geçici dikdörtgenin başlangıç noktası olarak
kullanılır.
(getcorner (getpoint))
mesaj (isteğe bağlı): Kullanıcıya gösterilecek mesajdır. Bu mesaj,
kullanıcıdan ne tür bir girdi beklendiğini açıklar.
Dönüş Değeri: Kullanıcının seçtiği köşe noktasının koordinatlarını
içeren bir liste döner. Nokta belirtilmeden Entere basılır ya da sağ
tıklanırsa nil döner.
Örnek 1:
Başlangıç ve çapraz köşe noktası belirtilen noktalara dikdörtgen çizer.
(setq n1 (getpoint "\nDikdörtgenin başlangıç noktası: "))
(if n1 ; Başlangıç noktası girildiyse
(progn ; Progn bloğu başlangıcı
(setq n2 (getcorner n1 "\nDikdörtgenin köşe noktası: "))
(if n2 ; Köşe noktası girildiyse
(command "rectang" n1 n2)
; Köşe noktası girilmediyse
(princ "\nKöşe noktası girilmedi.")
)
); Progn bloğu sonu
; Başlangıç noktası girilmediyse
(princ "\nBaşlangıç noktası girilmedi.")
); if bloğu sonu
Örnek 2:
Dikdörtgen seçim alanı oluşturarak alan içindeki nesne sayısını gösterir.
(setq n1 (getpoint "\nDikdörtgen seçim alanının başlangıç noktası: "))
(if n1 ; Başlangıç noktası seçildiyse
(progn
(setq n2
(getcorner n1 "\nDikdörtgen seçim alanının çapraz noktası: ")
)
(if n2 ; Çapraz köşe noktası seçildiyse
(progn
(setq secim (ssget "C" n1 n2))
(if secim ; Nesne seçildiyse
(princ (strcat "\nSeçilen nesne sayısı: " (itoa (sslength secim))))
; Nesne seçilmediyse
(princ "\nSeçim alanında nesne yok.")
); end if
); end progn
; Çapraz köşe noktası seçilmediyse
(princ "\nKöşe noktası girilmedi.")
); end if
); end progn
; Başlangıç noktası seçilmediyse
(princ "\nBaşlangıç noktası girilmedi.")
); end if
6) getdist Fonksiyonu: Kullanıcıdan Mesafe Değeri Alma
getdist fonksiyonu kullanıcıdan bir mesafe (distance) değeri almak için
kullanılır.
Bu fonksiyon, özellikle kullanıcının bir uzunluk veya mesafe belirtmesi
gereken durumlarda (örneğin, bir çizgi uzunluğu, yarıçap veya ofset mesafesi)
kullanışlıdır. Kullanıcı, mesafe değerini klavyeden girebilir veya çizim
alanında iki nokta seçerek belirleyebilir.
Kullanımı:
(getdist [referans-noktası] [mesaj])
referans-noktası (isteğe bağlı): Kullanıcının mesafe belirlemesi için
bir referans noktasıdır. Bu parametre, kullanıcıya bir çizgi veya işaretçi
göstererek mesafe seçimini kolaylaştırır. Bu parametre kullanılmazsa 2 nokta
seçilir.
mesaj (isteğe bağlı): Kullanıcıya gösterilecek mesajdır. Bu mesaj,
kullanıcıdan ne tür bir girdi beklendiğini açıklar.
Dönüş Değeri: Kullanıcının girdiği veya seçtiği mesafe değerini
döndürür. Reel(float) sayıdır. Nokta belirtilmeden ya da klavyeden değer
girilmeden Entere basılır ya da sağ tıklanırsa nil döner.
Örnek 1:
Belirtilen 2 nokta arası mesafeyi yazar.
(princ (rtos (getdist (getpoint))))
Örnek 2:
45 derece açıyla belirtilen uzunlukta çizgi çizer
; 45 derece açıyla belirtilen uzunlukta çizgi çizer
(setq uzunluk (getdist "\nÇizgi uzunluğu: "))
(if uzunluk
; uzunluk değeri girildiyse
(progn
(setq n1 (getpoint "\nÇizginin başlangıç noktasını seçin: "))
(if n1
; başlangıç noktası girildiyse
(progn
; n1 noktasından 45 derece açıyla uzunluk kadar ilerle
; (/ pi 4) = 45 derece
(setq n2 (polar n1 (/ pi 4) uzunluk))
(command "line" n1 n2 "") ; çizgi çiz
);progn
; başlangıç noktası girilmediyse
(princ "\nBaşlangıç noktası girilmedi.")
);if
);progn
; uzunluk değeri girilmediyse
(princ "\nUzunluk girilmedi.")
);if
7) getangle Fonksiyonu: Kullanıcıdan Açı Değeri Alma
getangle fonksiyonu, kullanıcıdan bir açı (angle) değeri almak için
kullanılır. Bu fonksiyon, özellikle kullanıcının bir açı belirtmesi gereken
durumlarda (örneğin, bir çizginin açısı, döndürme açısı veya yönelim açısı)
oldukça kullanışlıdır. Kullanıcı, açı değerini klavyeden girebilir veya
çizim alanında iki nokta seçerek belirleyebilir.
ANGBASE ve ANGDIR Sistem Değişkenleri:
ANGBASE: Açı ölçümünün başlangıç yönünü belirler. Varsayılan değeri 0'dır,
yani 0 derece Doğu yönünü temsil eder.
ANGDIR: Açı ölçümünün yönünü belirler. Varsayılan değeri 0'dır, yani açılar
saat yönünün tersine doğru artar. Eğer ANGDIR değeri 1 olarak ayarlanırsa,
açılar saat yönünde artar.
getangle fonksiyonu, ANGBASE ve ANGDIR sistem değişkenlerinden
etkilenir. Bu değişkenlerin değerleri değiştirildiğinde,
getangle fonksiyonunun döndürdüğü açı değeri de bu değişikliklere
göre hesaplanır.
Kullanımı:
(getangle [referans-noktası] [mesaj])
referans-noktası (isteğe bağlı): Kullanıcının açı belirlemesi için
bir referans noktasıdır. Bu parametre, kullanıcıya bir çizgi veya işaretçi
göstererek açı seçimini kolaylaştırır.
mesaj (isteğe bağlı): Kullanıcıya gösterilecek mesajıdır. Bu mesaj,
kullanıcıdan ne tür bir girdi beklendiğini açıklar.
Dönüş değeri: Kullanıcının girdiği veya seçtiği açı değerini radyan
cinsinden döndürür. Açı belirtilmeden Entere basılır ya da sağ tıklanırsa
nil döner.
Radyan cinsinden değerini dereceye döndürmek gerekirse
derece = radyan-açı / pi * 180
formülü kullanılır.
Örnek 1:
Orijin noktası referans alınarak açı girilir.
(getangle '(0 0))
Örnek 2:
Girilen açı değerini radyan ve derece cinsinden yazar.
(setq aci (getangle "\nAçı girin:"))
(princ
(strcat
"\nGirilen açı:" (rtos aci) " (radyan)"
"\nGirilen açı:" (rtos (* (/ aci pi) 180)) " (derece)"
)
)
Örnek 3:
Girilen açı ve uzunluğa göre çizgi çizer.
; Girilen açı ve uzunluğa göre çizgi çizer
(setq aci (getangle "\nÇizgi açısı: "))
(if aci
; Açı girildiyse
(progn
(setq uzunluk (getdist "\nÇizgi uzunluğu: "))
(if uzunluk
; Uzunluk girildiyse
(progn
(setq n1 (getpoint "\nÇizgi başlangıç noktası: "))
(if n1
; Başlangıç noktası girildiyse
(progn
; Açı ve uzunluğa göre bitiş noktası hesaplanır
(setq n2 (polar n1 aci uzunluk)) ; Çizgi bitiş noktasını hesapla
(command "line" n1 n2 "") ; Çizgi çiz
)
; Başlangıç noktası girilmediyse
(princ "\nBaşlangıç noktası girilmedi.")
)
)
; Uzunluk girilmediyse
(princ "\nUzunluk girilmedi.")
)
)
; Açı girilmediyse
(princ "\nAçı girilmedi.")
)
8) getorient Fonksiyonu : Kullanıcıdan Açısal Yön Belirleme
getorient fonksiyonu, kullanıcıdan bir açısal yön (angular
orientation) değeri almak için kullanılır. Bu fonksiyon, özellikle
kullanıcının bir açısal yön belirlemesi gereken durumlarda (örneğin, bir
nesnenin döndürme açısı veya yönelim açısı) oldukça kullanışlıdır.
getorient ve getangle arasındaki fark:
getorient: Açı değerini, sıfır dereceyi (doğu yönü) referans alarak
hesaplar. Bu, açısal yön belirlemede daha tutarlı sonuçlar verir.
getangle: Açı değerini, AutoCAD'in mevcut açısal referans sistemine
(ANGBASE ve ANGDIR) göre hesaplar.
getorient fonksiyonu, ANGBASE ve ANGDIR sistem değişkenlerinden
etkilenmez. Bu nedenle, mutlak bir açısal yön belirlemek için
getorient kullanılırken, göreli bir dönüş miktarı belirlemek için
getangle kullanılır.
Kullanıcı, bir getorient isteğine yanıt olarak başka bir AutoLISP
ifadesi giremez. Sadece açısal bir değer veya nokta seçimi yapabilir.
Kullanımı:
(getorient [referans-noktası] [mesaj])
referans-noktası (isteğe bağlı): Kullanıcının açısal yön belirlemesi için bir referans noktasıdır. Bu parametre, kullanıcıya bir çizgi veya işaretçi göstererek açı seçimini kolaylaştırır.
mesaj (isteğe bağlı): Kullanıcıya gösterilecek mesajıdır. Bu mesaj, kullanıcıdan ne tür bir girdi beklendiğini açıklar.
Dönüş Değeri: Kullanıcının girdiği veya seçtiği açısal yön değerini radyan cinsinden döndürür. Herhangi bir girdi sağlanmadan Entere basılır ya da sağ tıklanırsa nil döner.
Örnek:
(setq yon (getorient "\nYönelim açısı girin:"))
(princ
(strcat
"\nGirilen açı: " (rtos yon) " (radyan)"
"\nGirilen açı: " (rtos (* (/ yon pi) 180)) " (derece)"
)
)
--- Devamı hazırlanıyor ---
Kaynak:
User Input Functions Reference (AutoLISP)
Hiç yorum yok:
Yorum Gönder