1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

AutoLISP Dersleri Özeti

Giriş

Bu ders önceki günlerde yayınlamış olduğum AutoLISP Dersleri serisinin özetlenmiş halini talep eden site kullanıcıları için tüm AutoLISP konularını tek bir makale altında toplayarak özetlemektedir. Bu makaleyi AutoCAD Programcıları Başvuru Kılavuzu ile birlikte okumanızı öneririm. Daha sonra, ilgili AutoLisp komutları hakkında daha ayrıntılı bilgi almak için, sitede arama yapabilirsiniz.

Programlama Prensipleri

(RETAN.LSP örneğinde olduğu gibi) tüm AutoLisp programları.LSP uzantısına sahip olmalıdır; aksi takdirde AutoCAD yüklerken AutoLisp program dosyasına erişemez.

Lisp dosyalarınızı oluşturmak ve düzenlemek için Not Defteri “Notepad“ gibi basit bir metin işlemcisi kullanın.

(basit bir program olan) Fonksiyon

AutoLisp’in gerçekleştirmesi gereken bir dizi işlemi açıklayan önceden tanımlanmış talimat seti üç bölüme ayrılmıştır:

  • OPERATöR – Veri Elde Eder.
  • ARGÜMAN – Veriyi değiştirir.
  • KOMUT – Değiştirilmiş veriyi kullanır.

Grafik

Programınızın ne yapmak istediğini İngilizce olarak çizin veya yazın.

Değişkenler

Bunlar, daha sonra kullanılmak üzere, verilerin depolanacağı boş kutular gibidir. AutoLisp’de, değişkenler harfler, harflerle başlayan sayılar veya sayılardan oluşabilirler.

Doğru değişkenörnekleri aşağıdaki gibidir:

  • A
  • ARC1
  • POINT1
  • PNT1
  • D3

Bir AutoLisp değişkeni tek bir değişkende birden fazla değer içerebilir. Bu değer her şey olabilir, örneğin:

  • Reel sayı
  • Dizge
  • Tam sayı
  • Tıklama ile elde edilen seçim seti

Dolayısıyla bir değişken her şeyi depolayabilir.

Yapılandırma

Programınızı, kendiniz ve başkaları tarafından anlaşılması kolay olacak şekilde yapılandırın. Örneğin, veri giriş ifadelerini bir arada tutun. Argümanlarınızı birlikte tutun. Komutlarınızı birlikte tutun. Gerekli olan tüm od satırlarına noktalı virgül (;) ile açıklamalar yazın. Bir satır noktalı virgülle başlayınca, yazdığınız her şey AutoLisp tarafından göz ardı edilecektir. Bu programınızın dokümantasyonu ve açıklaması için kullanılır. Programınız hakkında, ne yaptığınız ve hangi değişkenlerin olduğunu not edin. Noktalı virgülün (;)  satırın başında olmasına gerek yoktur.

(prompt “Bu satır yazdırılacak”) ;Bu bir açıklamadır.

Noktalı virgülden sonra gelenler açıklamadır ve AutoLisp tarafından göz ardı edilecektir.

Parantezleme ( )

Parantezler, AutoLisp programlarını yazmak için hayati öneme sahiptir. Tüm komutlar parantezlerle çevrilidir. AutoLisp, başka bir komutu işleyen (değerlendiren) bir komut yazmanıza izin vererek, iç içe konumlanmak için parantez kullanır. Parantez ekledikçe, komutları iç içe geçmiş konuma getirirsiniz. Bu iç içe geçmiş konumdan eşit sayıda parantez kapatarak çıkacağınızı unutmayın.

Not: Her zaman açtığınız kadar parantez kapamalısınız.

Defun (Define Fonksiyonu)

AutoLisp’de, programın veya fonksiyonun adı, ilk ifadede tanımlanmalıdır; bu komut kullanılarak yapılır:

(defun fonksiyon_ismi ()

Programın gövdesi

)

İlk gerçek komut Defun dır ve onu fonksiyonun (veya programın) adı takip eder. Defun, tüm programı kapsar ve kapanış parantezi, programın ana gövdesinden gelir. Bir fonksiyonu başlatmanın farklı yolları vardır. Örneğin:

  1. (defun drawline ()
    Birinci yol, programda kullanmayı planladığınız tüm değişkenlerin program bittikten sonra değerlerini kaybetmeyen değişkenler olduğu GLOBAL değişkenler olduğunu söyler.
  2. (defun drawline (/ pntl pnt2)
    İkinci yol, kullandığınız değişkenlerin yalnızca bu program için değerler alacak ve bu program çalışırken geçerli olan değişkenler olan LOCAL değişkenler olduğunu söyler.
  3. (defun C:drawline ()
    Üçüncü yol ise, ilk olarak C: ifadesi ile AutoCAD‘e bu fonksiyonu diğer herhangi bir AutoCAD komutu gibi algılamasını ve o şekilde davranmasını söyler.
  4. (defun C:drawline (/ pntl pnt2)
    Dördüncü yol, ikinci yola benzemekle birlikte fonksiyonu diğer herhangi bir AutoCAD komutu gibi algılamasını ve o şekilde davranmasını da söyler.
  5. (defun drawline (a / pntl pnt2)
    Son yol a değişkeninin ilk değerini programın dışından alacağını söyler.

Veri Tipleri

Tam sayılar

-32768 ile +32767 arasındaki ondalıksız sayılardır, örneğin: 1

Reel sayılar

Ondalık basamaklı sayılardır, örneğin: 1.0

Dizgeler

Dizeler metin parçalarıdır ve maksimum 100 karakter uzunluğunda olabilir, örneğin: Nokta 1 karakter uzunluğundadır.

Listeler

Bir liste, birden fazla öğeye sahip bir değişkendir. Çiziminizdeki bir nokta, X koordinatının değeri ve Y koordinatının değeri ile tanımlanır. AutoLisp’de bu nokta tek bir değişkenle tanımlanabilir, iki elemanın bir listesi, birincisi X değeri ve ikincisi Y değeri örneğin: (7 10). Aşağıdakiler de listelere örnektirler:

(5 9 7 2) ve

(1.5 2.3 4.9).

Atomlar

Şayet bir değişkenin bölünemez bir değeri varsa, bu atomtur. Örneğin, yukarıdaki listelerdeki her bir eleman atomdur.

Type fonksiyonu, bir değişkenin veri tipini geri döndürür. Örneğin:

 (type “ismim”)

Bu fonksiyon dizge anlamına gelen STR geri döndürecektir. Aslında bunu kendiniz de deneyebilirsiniz. Yukarıdaki kodu AutoCAD komut satırına yazın ve Enter tuşuna basın.

(Kullanıcıdan Bilgi Alan) Veri Giriş Komutları

AutoLisp, kullanıcıdan farklı veri türleri almak için çeşitli seçenekler sunar.

Veri Giriş Komutları
getpoint Ekranda bir noknınta tıklayarak seçilmesine ihtiyaç duyar.
getint Örneğin, 1 gibi bir tam sayıya ihtiyaç duyar.
getreal Örneğin, 10.00 gibi bir reel sayıya ihtiyaç duyar.
getcorner Ekranda ikinci bir noktaya ihtiyaç duyar ve bir önceki noktadan elastik bir pencere açar.
getstring Bir metin dizgesine ihtiyaç duyar.
getdist Ya ekranda bir noktanın tıklayarak seçilmesine ya da klavyeden bir sayı girilmesine ihtiyaç duyar.
getangle Ya ekrandan tıklanarak seçilmesine ya da klavyeden yazılarak girilen radyan olarak geri döndürülecek bir açıya ihtiyaç duyar.
getkword Kullanıcı tarafından girilecek bir anahtar kelimeye ihtiyaç duyar.
getvar Bir AutoCAD sistem değişkeninin değerini elde eder.
initget Bir sonraki getxxx fonksiyonutarafından kullanılacak olan çeşitli seçenekler oluşturur.
getorient GETANGLE komutuna benzemekle birlikte; ancak sıfır derece yönü farklıdır. olarak 0 derece tabanını EAST kullanarak daima mutlak açıyı verecektir.

Veri Giriş Komut Örnekleri

Aşağıdaki örneklerin her birinde, ne olduğunu görmek için AutoCAD komut satırına kodu girin.

  1. (getpoint “\nEkranda bir noktayı tıklayarak seçin:”) Veri istemi (uyarı) geldiğinde bir noktayı tıklayın. AutoCAD tıkladığınız noktanın (X Y Z) koordinat değerlerini geri döndürecektir.

İpucu: \n sizi bir sonraki satıra götüren (satır başı gibi) özel bir kaçış karakteridir. Ters bölü (\) karakteri AutoLisp’e “n” harfinden sonra gelen karakterleri özel bir karakter olarak yorumlamasını söyler. “n” her zaman küçük olmalıdır.

Uyarı: Veri isteğiniz her zaman tırnak işaretleri arasında olmalıdır; aksi takdirde hata mesajı alırsınız.

2. (getint “\nYaşınızı girin :”) (45 gibi) bir tam sayı girin. AutoLisp o sayıyı geri döndürecektir.

3. (getreal “\nBir sayı girin :”) T (20.18 gibi) bir reel sayı girin. AutoLisp o sayıyı geri döndürecektir.

4. (getcorner pnt1 “\nİkinci noktayı tıklayarak seçin :”) Önceden tanımlanmış olması gereken “pnt1” değişkeninden esnek bir pencere oluşturacaktır.

5. (getstring “\nBugün günlerden ne? :”) Bir metin yazın ve Autolisp o metni geri döndürecektir.

6. Veya… (getstring T “\nİsminiz ve Soy isminiz nedir? :”) Bu veri istemi (uyarı), boşluklarla ayrılmış bir kelime dizisi girmenizi sağlar. Normalde, AutoCAD boşlukları satır başı olarak yorumlama gibi yorumlayacaktır. T, dize girdisinde boşluklara izin vermek için kullanılan “gerçek” anlamına gelen özel bir AutoLisp sembolüdür. Aslında, T yerine (1 gibi) herhangi bir pozitif tam sayı kullanabilirsiniz; ancak T sembolü kodu daha anlaşılır hale getirmeye yardımcı olur.

7. (getdist “\nÇizginin uzunluğu kaçtır? :”) Ekranda iki noktayı tıklayarak seçin veya klavyeden bir uzunluk değeri girin AutoLisp o uzunluğu geri döndürecektir.

8. (getangle “\nAçı nedir? :”) Ekranda iki noktayı tıklayarak seçin veya klavyeden bir açı değeri girin. AutoLisp o açıyı radyan olarak geri döndürecektir.

9. (initget 1 “Evet HAYIR”)

10. (getkword “\nDevam edilsin mi? (Evet veya HAYIR):”) Initget fonksiyonu bir sonraki getxxx fonksiyonunu kontrol eder ve geçerli seçeneklerin veya anahtar kelimelerin bir listesini belirtmek için kullanılır, getkword fonksiyonu initget fonksiyonu kullanarak belirlenen kelimelerin yalnızca birini kabul eder. Bu durumda, seçenekler “Evet” veya “Hayır” dır. 1, bir initget bit kodu olup; boş bir yanıta izin verilmediği anlamına gelir. Daha fazla bilgi için aşağıdaki Initget Bit Kodları bölümüne bakın.

İpucu: Yerleşik AutoCAD komutlarında olduğu gibi, geçerli herhangi bir seçenek anahtar kelimesi, anahtar kelimenin büyük harf kısmını yazarak girilebilir. Öyleyse, yukarıdaki örnekte, veri istemini Evet olarak yanıtlamak için yalnızca “E” yazmanız; ancak HAYıR olarak ı cevaplamak için “HAYIR” yazmanız gerekecektir. Bu, 2 veya daha fazla seçenek aynı harfle başladığında potansiyel belirsizlikleri önlemek için kullanılır.

11. (getvar “FILLETRAD”) FILLETRAD sistem değişkeninin ayarlanmış değerini geri döndürecektir.

12. (getorient “\nAçı ne kadardır? :”) Ekranda iki noktayı tıklayarak seçin veya klavyeden bir açı değeri girin. AutoLisp o açıyı 0 dereceyi Doğu “East” yönünde kabul edip; radyan olarak geri döndürecektir.

Initget Bit Kodları

Yukarıdaki 8 numaralı kod örneğinde initget fonksiyonundan sonraki 1 sayısı bir initget bit kodu olarak bilinir. Initget bit kodları, izin verilen giriş türlerini kontrol etmek için kullanılabilir. Bu örnekte, boş veri girişini engellenmek için 1 kullanılır. Bu, kullanıcıyı yalnızca Enter tuşuna basmak yerine belirtilen seçenek anahtar kelimelerinden birini girmeye zorlar.

Initget Bit Kodları
1 Boş veri girişini engeller.
2 Sıfır (0) değeri girişini engeller.
4 Negatif değer girişini engeller.
8 LIMECHECK sistem değişkeni açık durumda olsa bile limitleri kontrol etmez.
16 2 boyutlu 2B “2D” noktalar yerine 3 boyutlu 3B “3D” noktalar geri döndürür.
32 Esnekbant veya kutu çizerken kesik kesik çizgiler kullanır.

Örnekler:

(initget (+ 1 2 4))

(getint “\nYaşınız kaç?:”)

Yukarıdaki getint fonksiyonu sadece pozitif sıfır (0) olmayan (örneğin 45 gibi) bir tam sayıyı kabul edecektir.

Setq Komutu

Set Equal komutunun kısaltılmış halidir ve bir şeyi başka bir şeye eşit yapar.

setq bir atama komutu olup;  örneğin, bir değişkenin veya sabitin değerini başka bir değişkene atar.

Not: setq, AutoLisp’deki birincil atama komutudur. Eşittir karakteri (=), AutoLisp’te bir atama olarak kullanılmaz. Tabi ki, AutoLisp’te eşittir karakteri (=) kullanılmaktadır; ancak bir atama deyimi değildir. Bir değişkeni diğer bazı programlama dillerinde olduğu gibi eşit derecede yapma yeteneği yoktur (değişkenlerin, sayıların veya dizelerin karşılaştırılması için kullanılır).

(setq a b)
Bu ifade b nin değerini a değişkenine atar ve böylece a b ile aynı olur ve b değişmez.

Not: Setq komutundan sonraki ilk değişken, değeri alan bir değişkendir. Bubir karışıklık nedeni olduğu için, dikkat edin.

Yazdırma “Print” Komutları

Prompt

(prompt “Belki bir molaya ihtiyacınız vardır”)

Bu komut, basitçe komut satırına bir mesaj yazdırmak için kullanılır. Sonraki satıra geçme \ n dahil edilmez; bu nedenle, iki ardışık veri isteme komutu her iki iletiyi aynı satıra ve aralarında boşluk bırakmadan yazdırır. Bu nedenle, veri isteminden sonraki herhangi bir yazdırmada terpri fonksiyonu veya öncesinde \ n olmalıdır.

Terpri

Bu, sonraki yazdırılacak metnin bir sonraki satırda görünmesine neden olan bir satır başı komutudur. Genellikle prompt komutundan sonra gelir. Örneğin:

(prompt “Merhaba, nasılsın?”)(terpri)
veya
(prompt “\nMerhaba, nasılsın?”)

Prin1

Bu fonksiyon ifadeyi ekranda yazdırır ve ayı ifadeyi geri döndürür. İfade herhangi bir ifade olabilir ve bir dizge de olması gerekmez. İfade bir dosyaya da yazılabilir ve dosyada tam olarak ekranda göründüğü gibi görünür.

(prin1 “Merhaba”) Ekrana “Merhaba” yazdırır.

(prin1 a) Ekrana a değişkeninin değerini yazdırır.

(prin1 a f) a değişkeninin değerini ismi f değişkeninde depolanmış dosyaya yazdırır.

Princ

Kontrol karakterleri (“”) yazdırılmaması haricinde prin1 komutu ile aynıdır. Ayrıca, princ komutundan sonra boş bir ifade kullanılarak sonraki satıra yazdırmak için kullanılabilir.

(princ “Merhaba”) Merhaba yazdırır.

Print

İfadeden önce yeni bir satır ve ifade sonrasında bir boşluk yazdırılması haricinde prin1 komutu ile aynıdır.

Setvar

Bu fonksiyon, AutoCAD sistem değişkenini belirli bir değere ayarlar ve bu değeri geri döndürür. Değişken adı çift tırnak içinde olmalıdır. Örneğin:

 (setvar “blipmode” 0) 0 geri döndürür ve tıklama artıları modunu “blipmode” kapalı duruma getirir. Şayet sıfır (0) yerine bir (1) girilseydi, tıklama artıları modunu “blipmode” tekrar açık duruma getirilirdi.

Matematiksel İşlem Yapma

AutoLisp, çeşitli aritmetik fonksiyonlar sunar ve bu fonksiyonların biçimi diğer AutoLisp işlevleriyle (önce fonksiyon, ardından değerler) tutarlı olsa da, ilkokuldan hatırladığınız işlemler gibi değildir. Hatırlanması gereken önemli nokta, değerlerin sırasının zaten bildiklerimizle aynı olmasıdır. Başka bir deyişle (/ 27 3) 27’nin 3’e bölünmesi ile aynı olduğudur.

(+ 1 1) 2 olarak döner.

(- 2 1) 1 olarak döner.

(* 2 2) 4 olarak döner.

(/ 2 1) 2 olarak döner.

(1+ 1) 2 olarak döner (arttırma).

(1- 2) -1 olarak döner (azaltma).

Polar

Bu fonksiyon noktayı verilen bir noktadan olan mesafe ve  (radyan cinsinden) açıya dönüştürür.

(polar nokta1 açı1 mesafe1) burada nokta1, açı1 ve mesafe1 önceden belirlenmiş 3 değişkentir.

Inters

İki çizgiyi inceler ve birbirleriyle fiziksel olarak kesişmeseler bile uzatıldıklarında olası kesişim noktasını geri döndürür.

(inters nokta1 nokta2 nokta3 nokta4) burada nokta1ve nokta2 bir çizginin uç noktalarıdır ve nokta3 ile nokta4 de diğer çizginin uç noktalarıdır.

 

AutoLISP’te AutoCAD Komutları

Herhangi bir yerleşik AutoCAD komutunu lisp programınızda kullanılabilirsiniz.  Fakat bu komutların tam olarak AutoCAD‘de olduğu gibi kullanılmaları gerektiğinini ve Enter tuşuna basılması gereken yerde çift tırnak işareti (“”) kullandığınızdan emin olmanız gerekir. Örneğin:

(command “line” nokta1 nokta2 “”) nokta1’den nokta2’ye bir çizgi çizer ve çift tırnak işareti (“”) ile LINE komutunu bitirir.

CIRCLE gibi bazı komutlar kendi kendine sonlandıklarından, tüm komutların sonlandırılması gerekmemektedir.

(command “circle” cen cir) burada cen çemberin merkezi ve cir çemberin çevresi üzerinde bir noktadır.

Bunun nasıl çalıştığını görmek için komut satırına aşağıdaki kodu farklı sayılar ile girerek deneme yapabilirsiniz:

(command “circle” “100,100” “150,150”)

Not: değişken isimleri olmadıkları için, ifadedeki değerler tırnak içine alınmalıdır.

Aşağıdaki kod, bir polyline kullanarak 4 noktayı kullanarak bir kare çizip, şekli kapatmak için C (kapat “close”) komut seçeneğini kullanacaktır:

(command “pline” “50,50” “50,70”  “70,70” “70,50” “c”)

Bir Listedeki Elemanlar

(setq a (getpoint)) fonksiyonunu kullandığınız zaman, X ve Y koordinat değerlerini a değişkenine atamış olursunuz. Bu değişken artık (5 10) gibi görünebilecek bir listedir. Şayet a değişkenindeki listeye bakmak istiyorsanız, AutoLISP bunu komut satırından yapmanın kolay bir yolunu sunmaktadır.

! a Değişkenin önüne bir ünlem işareti (!) koyma o değişkenin değerini veya değerleri görüntüler.

Car (X koordinatı veya 1. eleman)

Bir listeyi ayıran birincil komut olan, (car) size bir listenin birinci öğesini verir. Şayet a değişkeninin değeri  (5 10) listesi ise, o zaman:

(setq b (car a)) b değişkenine a değişkeninin birinci elemanın değerini olan 5 değerini atar.

Cdr (2. ve geri kalan elemanlar)

Bu, bir listeyi ayıran ikinci komuttur. cdr komutu size listenin ikinci ve kalan öğelerini; diğer bir deyişle listenin birinci elemanından sonraki tüm elemanlarını verir. Şayet a değişkeninin değeri (2 5 7 9 11) listesi ise, o zaman:

(setq b (cdr a)) b değişkenine a değişkeninin birinci elemanından sonraki elemanları olan (5 7 9 11) elemanlarını atar.

Cadr (Y koordinatı veya 2. eleman)

Bu komut her zaman bir listenin ikinci öğesini verir. Şayet a değişkeninin değeri  (5 10) listesi ise, o zaman:

(setq b (cadr a)) b değişkenine a değişkeninin ikinci elemanın değerini olan 10 değerini atar.

Caddr (Z koordinatı veya 3. eleman)

Bu komut her zaman bir listenin üçüncü öğesini verir. Şayet a değişkeninin değeri  (3 7 5) listesi ise, o zaman:

(setq c (caddr a)) c değişkenine a değişkeninin üçüncü elemanın değerini olan 5 değerini atar.

Örnek Programlar

Bir şeyler Çizme

;Bu program girilen 2 nokta arasına bir dikdörtgen çizer

(defun c:retan (/ pl p2 p3 p4)(setq pl

(getpoint “\nDikdörtgenin birinci köşesini girin: “))

(setq p3 (getcorner “\nDikdörtgenin ikinci köşesini girin: “))

(setq p2 (list (car pl)(cadr p3)))

(setq p4 (list (car p3)(cadr pl)))

(command “line” pl p2 p3 p4 “c”)(princ)

)

Veri Dönüştürme

;(dtr) lispi derece birimleri radyan birimlere çevirir.

(defun dtr (a)

(* pi (/ a 180)) ) 

(rtd) lispi radyan birimleri derecebirimlere çevirir.

(defun rtd (a)

(/ (* a 180) pi)

Bir şeyleri Dizgeleme

 strcase (string case)

Bir metin dizgesindeki küçük harfleri büyük harfe değişir ve büyük harf harfleri aynen bırakır. Örneğin:

(strcase “Merhaba”) “MERHABA” olarak geri döndürür.

(strcase a) a değişkenindeki alfabetik karakterleri küçük harflerden büyük harfe çevirir.

strcat (string cat)

İki veya daha fazla ayrı dizgeyi tek bir dizge olarak döndürür. Örneğin:

(strcat “Mer” “haba”) “Merhaba” olarak geri döndürür.”

(strcat a b) a ve b değişkenlerindeki disgeleri tek bir dizge haline getirir.

strlen (dizge uzunluk)

Bir dizgedeki karakterlerin uzunluğunu döndürür. Örneğin:

(strlen “Merhaba”) 7 olarak geri döndürür.

(strlen a) a değişkenindeki dizgenin karakterlerinin uzunluğunu geri döndürür.

substr (dizgenin yerine koyma)

Dizgenin belirlenen konumdan sonuna kadar olan veya belirlenen konumdan diğer belirli konuma kadarki kısmını geri döndürür.

Returns a part of a string, from a specified position, ending either at the end or another specified position. eg:

(substr “Merhaba 2) “erhaba” olarak geri döndürür.

(substr “Merhaba 2 1) “e” olarak geri döndürür.

(substr “Merhaba” 3 2) “re” olarak geri döndürür.

Liste Manipulasyonu

Kesme işareti () karakteri, AutoLISP’de özel bir işlev görür. Örneğin, bir öğe grubunun önünde kesme işareti () varsa, liste olarak kabul edilir. Örneğin:

(20 10 5) bir liste olarak değerlendirilir.

Angle

İki nokta arasındaki radyan radyan cinsinden bir açı döndürür. AutoCAD‘de bu açıyı kullanmak için ondalık dereceye geri döndürmeniz gerekir. Örneğin:

 (setq a (angle nokta1 nokta2)) nokta1 ve nokta2 arasındaki açıyı a değişkenine atar.

a değişkenini kullanabilmek için

(command “text” pnt1 “40” a t) Yüksekliği 40 birim olan metin yaratacak olan TEXT komutu, a değişkenine atanmış olan dönüş açısını ve t değişkenine atanmış olan metin dizgesini kullanacaktır. Ancak, dönüş açısı radyan cinsinden olduğu için, doğru değildir.

Append

Belirli sayıda listeyi alır ve tek bir liste halinde bir araya getirir. Örneğin:

(append ‘(10 20) ‘(30 40)) (10 20 30 40) listesini geri döndürür.

(append a b) a değişkenindeki listeyi ve b değişkenindeki listeyi tek bir liste olarak geri döndürür.

Distance

Bilinen iki nokta arasındaki mesafeyi ölçer. Örneğin:

(setq dist1 (distance nokta1 nokta2)) nokta1 ve nokta2 arasındaki mesafeyi geri döndürür ve bu değeri dist1 değişkenine atar.

Length

Bir listenin eleman sayısını geri döndürür. Örneğin:

(length ‘(a b c d)) 4 olarak geri döner.

Member

Bir elemana bakar ve listedeki o elemandan sonraki elemanları geri döndürür. Örneğin:

(member ‘c ‘(a b c d e)) (c d e) olarak geri döner.

Nth

Listedeki n. elemanı geri döndürür, burada n döndürülecek elemanın numarasıdır. (Sıfır ilk elemandır). Örneğin:

 (nth 3 ‘(a b c d)) d olarak geri döner.

Assoc (ilişkili “associative”)

Genellikle subst fonksiyonu ile kullanılır; assoc fonksiyonu, belirli bir öğeyi aramanın ardından o öğeyi bir değişkene atamanızı sağlar.

b değişkeninin ((10 5.5 2.7) (40 5)) listesi olduğunu ve 40 değerini aradığınızı varsayalım. Tüm elemanları dışarı çekip c değişkenine atamak istiyorsunuz. Örneğin:

(setq c (assoc 40 b))

Bu b listesindeki 40 elemanını içeren öğenin tamamını c değişkenine atar. Şimdi c aşağıdaki gibi görünen bir listedir:

(40 5).

Subst (yerine “subsitute”)

Bir öğenin yerine başka bir öğe koymanıza izin verir. Yerine koyarken DAİMA listedeki eski öğenin yerine yeni bir öğe koyun. Şimdi, c değişkenindeki 5 öğesinin yerine 20 öğesini koyalım

(setq b1 (subst ‘(40 20) c b))

Artık b1 yeni bir listedir.

‘(40 20) elemanı b listesindeki eski (40 5) c elemanının yerine konmuş olan yeni bir elemandır.

Şayet bir değeri temsil eden bir değişken kullanmak istiyorsanız …

(setq bl (subst ‘(40 h) c b)) … İşe yarayacakmış gibi görünüyor; ama işe yaramıyor. Yeni eleman şöyle görünecektir: (40 h).

subst fonksiyonu değişkenleri yorumlayamaz. Tüm liste öğesini içeren yeni bir değişken oluşturmanız ve ardından subst fonksiyonunda yeni değişkeni kullanmanız gerekir.

Cons (oluşturma “construct”)

Başlangıçta yeni eleman yerleştirilerek yeni bir liste oluşturur. Değişken c aşağıdaki listeyi içerdiğini varsayalım:

(40 5).

Ayrıca, h değişkeni gerçek sayı 20.0 içerdiğini varsayalım:

Cons fonksiyonu yeni elemanı başa koyarak yeni bir liste oluşturur. c değişkeninin (40 5) listesini ve h değişkeninin de 20.0 reel sayısını içerdiğini kabul edelim.

(setq d (cons (car c) h)) (car c) fonksiyonunun size 40 sonucunu verdiğini hatırlayın. Bu yüzden, (car c) sonrasında h değişkeninin değerinin geldiği yeni birinci elemandır. Bu sebeple ifademiz, (40 20.0) elemanlarına sahip yeni d listesini üretecektir.

Şimdi elemanları değiştirelim:

(setq b1 (subst d c b)) bu ifade c değişkeninde bulunan eski eleman d değişkeninde bulunan yeni eleman ile yer değiştirecek ve (b değişkenin bulunduğu) yeni listeyi b1 değişkenine atayacaktır.

Dönüştürücüler

Angtos (açılar “angle” dizgeye “string”)

Radyan cinsinden bir açı alır ve belirli bir biçimlendirmeyi kullanarak bir dizgeye dönüştürür. Angtos fonksiyonunun iki bağımsız argümanı vardır; ilk argüman biçimlendirmeyi “format” kontrol ederken; ikinci argüman hassasiyeti “precision“ denetler.

Angtos Mod Biçimleri
0 Derece
1 Derece/dakika/saniye
2 Grad
3 Radyan
4 Harita birimi

a değişkeninin radyan olarak bir açıya sahip olduğunu varsayalım. Örneğin:

(angtos a 0 4) Bu ifadede 0 biçimlendirme (derece) ve 4 hassasiyet “precision“ olduğu için, (virgülden sonra 4 basamak olacak şekilde) 180.0000 olarak geri döner.
(angtos a 0 0) 180 olarak geri döner.
(angtos a 1 4) 180d0″0″” olarak geri döner.

Fix

Bu fonksiyon, reel sayının tam sayıya dönüştürülmesini geri döndürür ve reel sayının kalanını bırakır. Örneğin:

(fix 8) 8 olarak geri döner.
(fix 8.6) returns 8

Float

Bu fonksiyon tamsayının reel sayıya dönüştürülmesini geri döndürür. (reelya da tam sayı kullanabilir.) Örneğin:

(float 8) 8.0000 olarak geri döner.
(float 8.6) 8.6000 olarak geri döner.

Ascii

Bir dizgenin ilk karakterinin ASCII karakter koduna dönüştürülmesini döndürür. örneğin:

(ascii “a”) 97 olarak geri döner.
(ascii “A”) 65 olarak geri döner; büyük ve küçük harf karakterleri farklı farklı ascii karakter kodlarına sahiptir.
(ascii “BEYİN”) 66 olarak geri döner.
(ascii “BABA”) sadece ilk karakter değerlendirileceği için, 66 olarak geri döner.

Chr

Bir ASCII karakter kodunu temsil eden bir tamsayının tek karakterlik dizge dönüşümü geri döndürür. Örneğin:

(chr 65) A olarak geri döner.
(chr 66) B olarak geri döner.

Atof (ascii kodu reel sayıya dönüştürme)

Bir dizgenin reel sayıya dönüştürülmesini geri döndürür. Örneğin:

(atof “9.3”) 9.3000 olarak geri döner.
(atof “2”) 2.0000 olarak geri döner.

Rtos ((reel sayıyı dizgeye dönüştürme)

Gerçek bir sayının, belirtilen biçimde biçimlendirilmiş bir dizgeye dönüştürülmesini geri döndürür.

Rtos Mod Biçimleri
1 Bilimsel “Scientific”
2 Ondalıklı “Decimal”
3 Mühendislik “Engineering “ (fit “feet” & ondalıklı inç “inches”)
4 Mimari “Architectural” (fit “feet” & kesirli inç “inches”)
5 Keyfi kesirli “fractional” birimler

Reel sayı moda “mod”ve hassasiyete “precision“ göre ayarlanabilir. Örneğin:

(rtos 7.2 1 4) 7.200OE+00 olarak geri döner.
(rtos 7.2 2 2) 7.20 olarak geri döner.

Itoa (tam sayıyı ascii koda dönüştürme)

Bir tamsayının dizgeye dönüşümünü geri döndürür. Örneğin:

(itoa 25) 25 olarak geri döner.

Atoi ascii kodu tam sayıya dönüştürme)

Bir dizgenin tam sayıya dönüşümünü geri döndürür. Örneğin:

(atoi “25”) 25 olarak geri döner.

Şartlı İfadeler

AutoLisp’de, eşittir (=) karakteri bir atama fonksiyonu değildir. Başka bir deyişle, bir değişkene bazı diğer programlama dillerinde olduğu gibi bir değer atamak için kullanılmaz. AutoLisp, bu görevi yerine getirmek için (setq) fonksiyonunu kullanır. AutoLisp’de eşittir (=) karakteri, öğeleri eşitlemek için değil; öğelerin eşit olup olmadığını kontrol etmek için kullanılır. Bazı koşulları test etmeye çalışıtığımız zaman, bu çok yararlıdır. Örneğin, “bir şey başka bir şeyle eşit ise, bir şeyler yapın” gibi sonuçlarla testler yapmaya başlayabiliriz. Yani şayet tüm koşullar sağlanıyorsa, eşittir (=) karakteri programınızın karar vermesine izin verir.

If

(if) standart if-then-else ifadesidir. AutoLISP’de bir if ifadesini yalnızca tek bir then ifadesi ile eşleştirebilirsiniz. Örneğin:

(if (= a b) (setq b 5 (setq b 6))

Yukarıdaki ifadede şayet a b’ye eşitse, sonrasında b’ye 5 değeri atanacaktır. Şayet a b’ye eşit değilse, sonrasında b’ye 6 değeri atanacaktır.

Cond (conditional)

Bu fonksiyon, herhangi bir sayıda listeyi argüman olarak kabul eder. Bu öğelerden biri boştan “nil” başka bir değere gelinceye kadar (sağlanan sırayla) her listedeki ilk öğeyi değerlendirir. Örneğin: Kullanıcının yanıt dizesi s değişkeninde depolandığını kabul edersek:

(cond

  ((= s “Y”) 1)

  ((= s “y”) 1)

  ((= s “N”) 0)

  ((= s “n”) 0)

  (t nil)

)

Yukarıdaki bu kod kullanıcının yanıtını denetler ve kullanıcının “Y” veya “y” ise 1; aksi halde “N” veya “n” ise 0, aksi takdirde boş “nil” geri döndürür.

Repeat

Bir döngüye benzemekle birlikte; yineleme, komutların yalnızca belirtildiği kadar tekrarlanacağı anlamına gelir. Örneğin:

(setq a 10)

(setq b 100)

(repeat 3

(setq a (+ a 10))

)

(setq b (+ b a))

)

140 olarak geri döner.

While

AutoLISP’deki başka bir döngü kontrol komutudur. Bir komutu tekrarlamak isterseniz bir döngü gereklidir. Bununla birlikte, kontrol etme yönteminiz yoksa, program sonsuza kadar çalışır ve programı çalışmaz hale getirir. Örneğin:

(setq a “w”) Kontrol değişkenini boştan “nil” farklı bir değere ayarlar.

(while a döngüsü, takip eden komutlarla başlayarak, a değişkeni nil olarak ayarlanıncaya dekdevam edecektir.

(… bazı fonksiyonlar …) Döngünün içinde gerçekleştirilen fonksiyonlardır.

   (if (= c d) (setq a nil)) c‘nin d‘ye eşit olup olmadığını değerlendirir ve eğer eşitse, döngü kontrol değişkeni olan a değişkenini döngüyü sonlandırmak için boş “nil” olarak ayarlar.

) Bir kapatma parantezi olan bu kapat parantez ()) döngüyü kapatır ve program bundan sonraki komutlarla devam eder.

Varlıklar

Varlık, çizim alanınıza yerleştirebileceğiniz LINE, CIRCLE, ARC, TEXT, POLYLINES gibi en küçük nesnelerdir. Varlıklar, çizim veritabanında saklanır ve veri tabanından başvurulur. İhtiyaçlarınızı karşılamak için AutoLISP kullanılarak değiştirilebilir ve manipüle edilebilirler. Her varlık, AutoCAD‘in veritabanında büyük bir tanımlamaya sahiptir. Örneğin: Tek bir çizginin verileri aşağıdaki bilgileri içerir:

  • Varlık ismi “name”
  • Varlık tipi “type”
  • Tabaka “Layer”
  • Renk “Color”
  • Başlangıç X Y koordinatları
  • Bitiş X Y koordinatları
  • Çizgi tipi “Line type”

Yukarıdaki hususlardan herhangi birini değiştirebilirsiniz. Ağağıda varlık listesine bir örnek görebilirsiniz:

( – 1 <Entity name: 60000014) (0 “CIRCLE”) (8 . “LAYER1”)(10 . 50.000 100.000) (40 . 60.000)

Bu LAYER1 tabakayı “layer” üzerindeki merkez noktası 0,0, 50.0,100.0 koordinatında olan ve 60.0 birim yarıçaplı bir çemberin varlık listesidir.

Entsel and Ssget (varlıkları ve seçim setlerini elde etme)

Her iki fonksiyon da seçim seti için varlıkları seçmenin bir yolunu sunmaktadır. entsel fonksiyonu her seferinde yalnızca bir varlık seçer. Varlıkları seçmek için içine alan Pencere veya değen Pencere yöntemlerini kullanamazsınız. Bununla birlikte ssget fonksiyonu diğer nesne seçim tekniklerinin yanı sıra içine alan Pencere veya değen Pencere yöntemlerini kullanmanıza olanak sağlar. Çoğunlukla ssget fonksiyonu kullanacaksınız.

(setq a (ssget)) ifadesi nesne seçmeniz için, sizi uyaracaktır. Böylece, <Selection set:l>özel ismi ile bir seçim seti yaratmış oldunuz ve bu seçim setini a değişkenine atadınız.

Ssname (varlık ismini elde etme)

Varlığın adını güvence altına almanıza yardımcı olur. Varlığın adı gerçekte onaltılık bir sayıdır, bu nedenle ÇİZGİ “LINE” veya ÇEMBER “CIRCLE” gibi nesne isimleri görmeyi beklemeyin. Kimliğinizin adı 60000018 olabilir.

Şimdi a değişkeninin bir seçim kümesi olduğunu ve i değişkeninin 0 olarak ayarlandığını varsayalım. (setq i 0) ifadesi sayaç değişkenini ayarlamak için olup;  (setq na (ssname a i)) ifadesi, bu seçim kümesinde bulunan na varlık adını dizin numarası i‘ye atar. Bir seçim kümesinin birden fazla varlık adı içerebileceğini unutmayın. Her bir varlığı, seçim kümesindeki göreli numarasını kullanarak işaretleyebilirsiniz. Örneğin: varlık 1, endeks 0, varlık 2, endeks 1’dir.

Entget (varlık listesini elde etme)

Bu komut aslında varlık listesini çıkarır veya varlık listesini süzer. Varlık listesi bir değişkene atanabilir. (setq b (entget na)) ifadesi bu varlık adı için tüm varlık listesini b değişkenine atar.

Subst (yeniyi eskinin yerine koyma)

Bir varlığı başka bir varlık ile değiştirmenize izin verir. b değişkeninin listenin adı ve c değişkeninin öğenin değerini içerdiğini varsayalım: (40.60.0000) listesi (setq bl (subst. (40.30.0000) c b)) ifadesinden sonra bl artık yeni listedir. ‘(40.30.0000) elemanı, önceden b listesinde bulunan c eski elemanın yerini alan yeni elemandır.

Sslength

Yapılan seçimin uzunluğunu veya sayısını verir.

Entmod (varlık düzenleme)

Size yeni düzenlenmiş varlık listesini alıp çizimi güncellemek için veritabanına geri yazma olanağı verir. Artık b1 değişkeninde yeni bir listeye sahip olduğunuza göre, çizim veritabanınızdaki bl listesini kalıcı hale getirmek istersiniz. (entmod bl)  fonksiyonu ile değişikliği çizim alanınızda hemen görürsünüz.

İlave Örnekler

1. İmleç Kılının Açısını Değiştirme

Bu program, diğer çizgilere dik çizgiler çizmenize imkan sağlar. Program, seçilen çizginin açısını ölçer ve ÇITÇITLANMA “SNAP” açısını bu çizginin açısına kaydırır. Diklik “Ortho” modunu açık duruma getirin ve seçtiğiniz çizgiye dik çizin.

(defun c:perpdon (/ a b noktal nokta2 angl)

(graphscr)

(setq a (entsel))

(setq b (entget (car a)))

(setq noktal (cdr (assoc 10 b)))

(setq nokta2 (cdr (assoc 11 b)))

(setq angl (angle noktal nokta2))

(setvar “snapang” ang1)(princ))

(defun c:perpdoff(setvar “snapang” 0)

(princ)

)

2. Ekranı Silme (Temizleme)

Çizim ekranında her şeyi siler. Şayet çiziminizde Herşeyi Görüntüle “Zoom All yaptıysanız, program çizim sınırları “drawing limits” dahilinde her şeyi siler.

Not: şayet yanlışlıkla bu komutu çalıştırdıysanız, OOPS komutu ile yapılan tüm değişiklikleri geri alabilirsiniz.

(defun c:erasescr (/ l u)

(setq l (getvar “limmin”))

(setq u (getvar “limmax”))

(command “erase” “w” l u “”)

(princ)

)

3. Tabaka Değiştirme

Bu program herhangi bir seçim yöntemiyle seçilen nesnelerin tabakalarını “layer” değiştirmenize olanak sağlar. Hedef tabaka “layer”, yalnızca istenilen tabakadaki “layer” bir nesne seçilerek belirlenir. Seçilen tüm nesneler daha sonra bu hedef tabaka“layer” üzerine alınacaktır. Bu programı test etmek için, öncelikle nesnelerin farklı katmanlarda bulunduğu bir çizim oluşturmanız gerekecektir.

(defun c:chlayer (/ a1 a2 n index b1 b2 d1 d2 b3)

(graphscr)

(prompt “\nDeğiştirilecek varlıkları seçin: “)

(setq a1 (ssget))

(prompt “\nHedef tabaka üzerindeki varlığı seçin: “)

(setq a2 (entsel))(setq n (sslength a1))

(setq index 0)

(setq b2 (entget (car a2)))

(setq d2 (assoc 8 b2))

(repeat n  (setq b1 (entget (ssname a1 index)))

  (setq d1 (assoc 8 b1))

(setq b3 (subst d2 d1 b1))  (entmod b3)

(setq index (+ index 1))

)

(princ)

)

Şimdi programı satır satır inceleyelim.

(defun c:chlayer (/ a1 a2 n index b1 b2 d1 d2 b3)

Tüm yerel değişkenler ile fonksiyonu tanımlar.

(graphscr)

Grafik ekranına geçiş yapar.

(prompt “\nTabakası değiştirilecek nesneleri seçin: “)

Bu veri isteme (uyarı) ifadesidir.

(setq a1 (ssget))

Değiştirilecek nesneleri seçmenize izin verir. Seçim kümesi, a1 değişkenine atanır.

(prompt “\nHedef tabaka üzerinde bulunan bir nesneyi seçin: “)

Bu veri isteme (uyarı) ifadesidir.

(setq a2 (entsel))

Bu, yalnızca bir öğe seçmenize izin veren özel bir seçim bildirimi türüdür.

(setq n (sslength a1))

a1 değişkenine atanmış olan seçim setindeki varlıkların adedini sayar.

Measures the number of entities in the selection set in variable a1.

(setq index 0)

Index adlı değişkeni 0 olarak ayarlar.

(setq b2 (entget (car a2)))

Bu ifade, a2 değişkenine atanmış olan varlık listesini alır.

(setq d2 (assoc 8 b2))

Bu kod, a2 değişkenine atanmış olan varlık listesinde kod 8’i arar ve sonra alt listeyi d2 değişkenine atar.

(repeat n

Bu kod, seçim kümesindeki sayfaların döngüsü başlatır.

(setq bl (entget (ssname a1 index)))

Bu kod, varlık listesini alır ve o listeyi b1 değişkenine atar.

(setq d1 (assoc 8 b1))

8 kod numaralı (tabaka) alt listeyi elde eder.

(setq b3 (subst d2 d1 b1))

Eski d1 tabakası “layer” için yeni d2 tabakasını “layer”, a1 varlık listesinde değiştirir ve yeni varlık listesini b3 değişkenine atar.

(entmod b3)

Veritabanındaki yeni varlık listesini günceller.

(setq index (+ index 1))

İndeks değişkenini 1 arttırarak bir sonraki döngüye hazır hale getirir. İlk kapa parantez ()) tekrarlama döngüsünü kapatır.

(princ)

sessizce çıkar.

İkinci kapa parantez ())

fonksiyonu kapatır.

4. Metni Değiştirme

Bu program, bir satır metin seçmenizi ve bu metnin içeriğini başka bir metnin içeriği ile değiştirmenizi sağlar.

(defun c:subtext (/ a b d e d1 b1 y)

(prompt “\nSelect text line: “)

(setq a (entsel))

(setq b (entget (car a)))

(setq d (assoc 1 b))

(prompt (cdr d))

(terpri)

(setq e (getstring 1))

(setq d1 (cons (car d) e))

(setq b1 (subst d1 d b))

(entmod b1)(setq y (getstring “\nBu doğru mu? – E : “))

(if (= (srtcase y) “N”) (entmod b))

(princ)

)

5. Yazı – Kendi Mesafesi, Kendi Yüksekliği

u program, çok satırlı yazılarda satırlar arasındaki mesafeyi değiştirmenizi sağlar. Yazının standart başlangıç noktasına ve yüksekliğine ek olarak, metin satırları arasındaki mesafenin de girmeniz istenir. İstediğiniz sayıda metin satırı girebilirsiniz. Programı durdurmak için yıldız (*) girin.

(defun tex (/ p1 a b c d e f)(setq pl

(getpoint “\nBaşlangıç noktası: “))

(setq a (getdist p1 “\nYüksekliği girin: “))

(setq c (getdist p1 “\nSatır aralığı: “))

(setq d “T”)(while d  (setq e (getstring 1 “Text: “)) 

(command “text” pl a “0” e)  (setq pl (list (car p1)(- (cadr p1) c)))  (setq f (getstring))  (if (= f “*”)(setq d nil))

)

(princ)

)

6. Genel Yazı Yüksekliğini Değiştirme

Bu program, başka öğeleri etkilemeden bir içine alan Pencere veya değen Perncere içindeki metnin boyutunu genel olarak değiştirmenize olanak sağlar.

(defun chtext (/ a ts n index b1 b c d b2)

(setq a (ssget))

(setq ts (getreal “\nYeni yazı ebadını girin”))

(setq n (sslength a))(setq index 0)

(repeat n 

(setq b1 (entget (ssname a index))) 

(setq index (1+ index)) 

(setq b (assoc 0 b1)) 

(if (= “TEXT” (cdr b))   

(progn

      (setq c (assoc 40 b1))

      (setq d (cons (car c) ts))

      (setq b2 (subst d c b1))

      (entmod b2)

    )

  )

)

(princ)

)

 

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Referans Kesit Oluşturma

Revit’te mevcut bir görünüşe başvuran kesitleri yerleştirebilirsiniz. Referans kesitlerini plan, cephe, kesit, detay ve açıklama …

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

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.