Bulunduğunuz Yer: Anasayfa » AutoLISP » 3- AutoLISP Veri Tipleri ve Geometrik Dönüşümler
AutoLISP

3- AutoLISP Veri Tipleri ve Geometrik Dönüşümler

AutoLISP’e Giriş dersimizde fonksiyon yapısından (Operatör, İşlemciler, Komutlayıcılar) bahsetmiştik.

(Fonksiyon Değişken [Değer]) şeklinde ki program yapılandırmasında Değişken grubunda; tamsayılar, ondalık sayılar, metin parçaları veya pickset (seçim seti) tabaka, çizgi tipi, metin stilleri veya Dimension Style gibi tanım nesneleri de yer alabilir.

Not olarak, (;) noktalı virgül işareti, fonksiyonun başına eklenirse noktalı virgülden sonra fonksiyon niteliğini kaybedip yorum metnine dönüşür.
Örnek:
(setq a 1); a değişkenine 1 değerini verdim.” İle “;(setq a 1) a değişkenine verdim.” Cümlelerinde noktalı virgül gelen birinci örnekte
;a değişkenine 1 değerini verdim.” Cümlesi yorum metni olarak okunur.
 İkinci cümlede ki “;(setq a 1) a değişkenine verdim.” İfadesinin tamamı yorum metni hâline dönüşür.

Değişken isimlerinin ingilizce karakter şeklinde ifade etmeniz fonksiyonun işleyişi açısından sağlıklı olacaktır. Yazdığınız fonksiyon komutlarının başında ve sonunda muhakkak parantez kullanılır. Açılan her parantez kapatılmalıdır aksi taktirde fonksiyonunuz çalışmayacaktır. Şekil -1- “()

A- DEFUN (Fonksiyon/İşlev Tanımlama)

Her program ve fonksiyonu, komutunuzun başında bir isim vererek tanımlarsınız.

(defun fonksiyon ismi ()
programın diğer iskeleti
)

Şeklinde ki bir programda; defun, program içerisinde diğer fonksiyonları da kapsar, genelliği ifade eder. Örneklerle açıklayalım.

1- (defun cizgiciz() ;yazdığınız programda ki tüm değişkenlere cizgiciz fonksiyonunu uygular.

2- (defun cizgiciz (/ nokta1 nokta2) ; kullandığımız değişkeni (cizgiciz) sadece belirttiğimiz noktalarda (nokta1 nokta2) local olarak kullanılmasını sağlar.

3- (defun C:cizgiciz() ; cizgiciz fonksiyonunu AutoCAD komutu şeklinde kullanmanızı sağlar.

4- (defun C:cizgiciz (/ nokta1 nokta2) ;İkinci örnekte ki gibi çizgi çizmesini söyler bunu yaparken AutoCAD komutu olarak belirtebileceğinizi söyler.

5- (defun cizgiciz ( a / nokta1 nokta2)) ; son değişkene programın dışından a değerini almasını söyler.

B- VERİ TİPLERİ (DATA TYPES)

Tamsayı:                         -1,-2,-3,1,2,3,4,5 vs.
Gerçek (Ondalık) Sayı:  1.0, 4.5, 8.3 vs.
Strings(Metin):               Çizgi, veri, nokta 1 vs. *Maksimum 100 karakter uzunluğu alabilir.
Listeler:                             (135.00 4656.33 1.1) X Y Z değerini gösterir, ( 1 a “umut” 455) vb.
Dotted Pairs:                    Birbirinden nokta (.) ile ayrılmış liste çiftleridir.
                                            Örn. ((KatmaAdi . “TAS_DUVAR” ) (CizgiKal . 0.5))
Entity Names(Nesne İsimleri): AutoCAD nesneleri, < Obje ismi: Lispler >
Nil(Sıfır, boş):                 Değişkene atanmayan değerleri gösterir ve kontrol eder.

B-1 Veri Giriş Komutları

Getpoint: Sizden AutoCAD ekranından bir noktaya tıklamanızı ister.
Getint: Sizden bir tamsayı girmenizi ister.
Getreal: Sizden bir reel sayı girmenizi ister.
Getcorner: Sizden bir önceki noktaya bağlı olarak pencerenin diğer köşesini seçmenizi ister
Getstring: Sizden bir metin girmenizi ister
Getdist: Sizden ekranda iki noktaya tıklamanızı veya bir sayı girmenizi ister
Getangle: Ekranda tıklama yaparak bir açı girmenizi ister. Birimi radyandır.
Getkword: Kullanıcıdan kelime ister.
Getvar: AutoCAD sistem değişkeni değeri verir.
Initget: Boş ve sınır girdilerini belirlemek için kullanılır.

C- VERİ TİPLERİ VE GEOMETRİK VERİLERİN DÖNÜŞÜMÜ

1- Açısal (Angular) Dönüşümler

Matematiksel işlemlerde açısal değerlerin dönüşümünü sağlayan fonksiyonlar mevcuttur. Bu fonksiyonlardan “angtos” ve “angtof” işlevlerinden bahsedecek olursak: Angtos, verilen açısal değerin istenilen biçimde metinsel değere (strings) çevrilmesini sağlar. Angtof ise verilen metinsel değerin istenilen biçimde açısal değere çevrilmesini sağlar. Angtos ve Angtof birbirinin zıttıdır. Ayrıca iki bağımsız değişkeni vardır bunlardan biri biçimi diğeri hassaslığı belirtir.
( angtos a 0 4) -> *(angtos a 0 4) örneğinde 0 biçimi, 4 ise ondalık kısmı belirtir.

0             Dereceler
1             Dereceler / dakika / saniye
2             Grad
3             Radyan
4             Surveyor üniteleri ( 3 ve daha fazla ondanlık kısmı)

Örnek;
Komut satırına sırasıyla:
(setq PI-YARISI (/ PI 2)) yazıp enter girdiğinizde 1.5708, (Pi değerinin yarısını verir)
(setq angstr (angtos PI-YARISI 0 2)) yazıp enter girdiğinizde “90.00”, (açı değeri virgülden sonra iki hane olacak şekilde derece cinsine çevrilmiş)
(setq deg (atof angstr)) yazıp enter girdiğinizde 90.0 (atof fonksiyonu diziyi reel sayı değerine dönüştürerek geri döndürür -> (90)=90.0 gibi)
(setq angstr (angtos 1.5708 1 6)) yazıp enter girdiğinizde “90d0’0.76\””,
(setq rad (angtof angstr 1)) enter girdiğinizde 1.5708 değerini tekrar verecektir.

a- Radyan-Derece ve Derece-Radyan Açısal Dönüşümler

**( Radyan / PI) * 180 = Derece’yi verir.

Örnek:
Komut Satırına:
(defun Radyan->Derece (nbrOfRadians)
(* 180.0 (/ nbrOfRadians pi)))

Radyan->Derece

Komut satırına: (Radyan->Derece PI) enter yaptığınızda  180.0 sonucunu verecektir.

** (Derece / 180) * PI = Radyan’ı verir.

Örnek:
Komut Satırına:
(defun Derece->Radyan (numberOfDegrees)
(* pi (/ numberOfDegrees 180.0)))

Derece->Radyan

Komut satırına: (Derece->Radyan 180.0)  enter yaptığınızda 3.14159 sonucunu verecektir.

2- Dizi (Strings) Dönüşümler

Sayısal değerler, metinsel veri veya çıktı olarak dizi dönüşümü şeklinde tanımlanmasını sağlar. Aşağıda ki fonksiyonlar gerçek sayı ve açısal değerlerin dönüştürülmesinde kullanılır:

rtos -> Sayısal değerlerin istenilen türde metinsel ifadelere (strings) çevrilmesini sağlar.
(rtos 175.41 2 3); “175.410” *İki değişken mevcut.

distof -> Metin biçimindeki değeri istenilen birimde gerçek sayıya çevirir.
(distof “12.3” 2); 12.3

angtos -> Verilen açısal değerin istenilen biçimde metinsel değere çevrilmesini sağlar.

angtof -> Verilen metinsel değerin istenilen biçimde açısal değere çevrilmesini sağlar.

RTOS Fonksiyon Formatları;

1             Bilimsel
2             Ondalık
3             Mühendislik (fit ve ondalık inç)
4            Mimari (fit ve kesirli inç)
5             Arbitalasyon fraksiyonel birimleri

a-1- Sayısal değerlerin dizi ve birimlere dönüştürülmesi

Örnek:

(setq x 17.5)
(setq str “\nBiçimlendirilen değer “) (setq fmtval (rtos x 1 4)) ; Mod 1 = bilimsel
(princ (strcat str fmtval))
Biçimlendirilen değer:  1.7500E+01

(setq fmtval (rtos x 2 2)) ; Mod 2 = ondalik
(princ (strcat str fmtval))
Biçimlendirilen değer:  17.50

(setq fmtval (rtos x 3 2)) ; Mod 3 = muhendislik
(princ (strcat str fmtval))
Biçimlendirilen değer:  1′-5.50″

(setq fmtval (rtos x 4 2)) ; Mod 4 = mimarlık
(princ (strcat str fmtval))
Biçimlendirilen değer:  1′-5 1/2″

(setq fmtval (rtos x 5 2)) ; Mode  = kesirli
(princ (strcat str fmtval))
17 ½ biçimlendirildi.

İlk iki örnek aynı şekilde görüntülenirken son üç  örnek görüntüsü aşağıda ki gibi olacaktır.

Biçimlendirilen değer:  1’5.50″

Biçimlendirilen değer:  1’5-1/2″

Biçimlendirilen değer:  17-1/2”

a-2- Dizi değerlerinin sayısal değerlere ve birimlere dönüştürülmesi

(distof “1.7500E+01” 1) ; Mod 1 = bilimsel

(distof “17.50” 2)      ; Mod 2 = ondalik

(distof “1′-5.50\”” 3)  ; Mod 3 = muhendislik

(distof “1′-5 1/2\”” 4) ; Mod 4 = mimarlık

(distof “17 1/2” 5)     ; Mod 5 = kesirli

3 ve 4’te ki fonksiyonlarda (\) kullanılması gerekiyor.

b- Sayısal değerlerin dizi ve açısal birimlere dönüştürülmesi

(setq ang 3.14159 str2 “\nBiçimlendirilen açı: “)
(setq fmtval (angtos ang 0 0)) ; Mod 0 = derece
(princ (strcat str2 fmtval))
Biçimlendirilen açı: 180

(setq fmtval (angtos ang 1 4)) ; Mod 1 = derece/dakika/saniye
(princ (strcat str2 fmtval))
Biçimlendirilen açı: 180d0’0″

(setq fmtval (angtos ang 2 4)) ; Mod 2 = grad
(princ (strcat str2 fmtval)) ; görüntülen açı değeri
200.0000g

(setq fmtval (angtos ang 3 4)) ; Mod 3 = radyan
(princ (strcat str2 fmtval))
Biçimlendirilen açı: 3.1416r

(setq fmtval (angtos ang 4 2)) ; Mod 4 = surveyor
(princ (strcat str2 fmtval))
Biçimlendirilen açı: W

b-1- Dizilerin (Strings) sayısal değerlere ve açısal birimlere dönüştürülmesi

(angtof “180” 0)              ; Mod 0 = derece
(angtof “180d0’0\”” 1)   ; Mod 1 = derece/dakika/saniye
(angtof “200.0000g” 2) ; Mod 2 = grad
(angtof “3.14159r” 3)      ; Mod 3 = radyan
(angtof “W” 4)                  ; Mod 4 = surveyor

3- ASCII Kodlarının Dönüşümleri

Komut satırına: (ascii “A”) yazıp enter yapın, daha sonra (chr 65) yazıp enter yapınca “A” değerini verdiğini görürsünüz.

4- Koordinat Sistemleri Dönüşümleri

Bu başlıkta “trans” fonksiyonunu kullanacağız. Trans, noktayı bir koordinat sisteminden diğer koordinat sistemine dönüştürmeye yarıyor.

0  World (WCS) -> (World Coordinate System – Dünya Koordinat Sistemi)

1  User (current UCS) -> (User Coordinat System – Kullanıcı Koordinat Sistemi)

2  Display;  0 ile 1 kodu ile kullanıldığında mevcut görüntü portunun DCS’si, 3 kodu ile kullanıldığında mevcut alan modelinin görüntüsünün DCS’si yansıtılır.

3  Kağıt Alanı DCS’si, PSDCS (sadece 2 kodu ile kullanılır.)

Örnek: WCS’den UCS’ye çevirme örneğidir.

(setq pt ‘(1.0 2.0 3.0))
(setq cs_from 0) ; WCS
(setq cs_to 1) ; UCS
(trans pt cs_from cs_to 0) ; disp = 0 PT’nin nokta olduğunu belirtir.

Geçerli UCS Dünya Z ekseni çevresinde saat yönünün tersine 90 derece döndürülürse, trans çağrısı bir noktaya (2.0, -1.0,3.0) döndürür. Bununla birlikte, değerleri to ve from değerleriyle değiştirirseniz, sonuç aşağıdaki kodda gösterildiği gibi farklılık gösterir.

(trans pt cs_to cs_from 0) ; sonuç (-2.0,1.0,3.0)

5- Geometrik Fonksiyonlar

Aşağıda, sıkça kullanılan geometrik fonksiyonların bazıları listelenmiştir:

angle;      Verilen iki nokta arasındaki açıyı radyan cinsinden verir.
distance; Verilen iki nokta arasındaki mesafeyi verir.
polar;       Başlangıç noktasına göre yeni bir noktanın tanımlanmasına yarar.
inters;      Verilen dört noktanın kesişim noktaların bulmak kullanılır.
osnap;     Nokta seçiminde AutoCAD’te ki osnap komutunun kullanılmasını sağlar.
textbox;   Yazı varlığının çevresindeki sınırlama kutusunun çapraz köşelerini geri döndürür.

(setq pt1 ‘(3.0 6.0 0.0))
(setq pt2 ‘(5.0 2.0 0.0))
(setq base ‘(1.0 7.0 0.0))
(setq rads (angle pt1 pt2))   ; Mevcut UCS’nin XY düzlemindeki açısı – değeri

                              ; radyan cinsinden döndürülür

(setq len (distance pt1 pt2)) ; 3D uzaydaki mesafe
(setq endpt (polar base rads len))

Kutup setlerine yapılan çağrı, pt1 pt2’den itibaren (1,7) ile aynı mesafede olan bir noktaya ve pt1 ile pt2 arasındaki açı olarak X ekseni ile aynı açıda sona erer.

6- Birim Dönüşümleri

Bir değeri bir birimden başka bir birime çevirmek için “cvunit” fonksiyonu kullanılır.

Örnek -1- Santimetre cinsinde ki değeri inc birimine çevirmek için;
Komut satırına:
(cvunit 1.0 “inch” “cm”)
Sonuç: 2.54

Örnek -2-
Komut satırına:
(cvunit 32 “fahrenheit” “celsius”)
3.46317e-009

Fahrenheit’den Celsius’a döndürdükten sonra döndürülen değer tam olarak 0.0 değil, cvunit tarafından döndürülen değerin hassasiyetini kontrol etmek için rtos değerlerini kullanabilirsiniz. Hâlâ gerçek bir değere ihtiyacınız varsa, rtos tarafından döndürülen dizgeyi, atof ile değiştirebilirsiniz.

(setq temp (cvunit 32 “fahrenheit” “celsius”))
3.46317e-009

(setq temp (rtos temp 2 2))
“0.00”

(setq temp (atof temp))
0.0

Bir sonra ki dersimizde AutoCAD komut satırı ile öğrenmeye/çalışmaya devam edeceğiz.

 İyi çalışmalar.