15 Mart 2025 Cumartesi

AutoLISP: Kullanıcı girişi sağlayan fonksiyonlar - 1

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ı

  1. getint
  2. getreal
  3. getstring
  4. getpoint
  5. getcorner
  6. getdist
  7. getangle
  8. getorient
  9. initget
  10. getkword
  11. getfiled
  12. getenv
  13. getvar
  14. entsel
  15. nentsel
  16. nentsel
  17. 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