• Sonuç bulunamadı

AUTOLISP. 7 Dakikada AutoLisp Öğreniyorum El Kitabı. Hazırlayan: Gemi İnş. ve Gemi Mak.Müh.Ali ÖZEN.

N/A
N/A
Protected

Academic year: 2022

Share "AUTOLISP. 7 Dakikada AutoLisp Öğreniyorum El Kitabı. Hazırlayan: Gemi İnş. ve Gemi Mak.Müh.Ali ÖZEN."

Copied!
7
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

AUTOLISP

7 Dakikada AutoLisp Öğreniyorum El Kitabı

Hazırlayan: Gemi İnş. ve Gemi Mak.Müh.Ali ÖZEN

aliozen@gmail.com

(2)

AutoLISP

Sayfa No. 1

1. AutoLisp – Giriş

1.1 Programlama Diline Genel Bakış

AutoLisp programlama dili, AutoCAD yazılımının bünyesinde çalışan bir programlama dilidir. Bu dil yardımıyla AutoCAD programında tanımlı olmayan bazı komutlar

oluşturabilir ve bu sayede sürekli yapılması gereken çoklu işlemleri kolaylaştırarak önemli zaman kazanabilirsiniz.

Bu kitapta AutoLisp programı hakkında temel bilgiler ve dilin kullanımının rahat anlaşılması için örnek kodların adım adım oluşturulmasını bulabilirsiniz.

1.2 AutoLisp Kodlarının AutoCAD’de kullanımı

AutoLisp dilinde yazılan kodlar, LSP uzantılı dosyalar içine not defteri vb. metin düzenleme programı ile kaydedilir. Daha sonra AutoCAD programında,

Tools/AutoLisp/Load... menüsünden veya APPLOAD komutunun komut satırına yazılmasıyla karşınıza gelecek aşağıdaki ekrandan çalıştırılır.

Seçilen LSP uzantılı AutoLisp kodu Load’a tıklanarak çalıştırılır. Kodun daha sonra her AutoCAD açılışında tekrar tekrar APPLOAD yapmadan kendiliğinden yüklenmesi istendiği takdirde, bir defaya mahsus kod dosyası alt tarafta görülen Evrak

Çantası’nın üzerine sürüklenip bırakılır.

(3)

AutoLISP

Sayfa No. 2

2. AutoLisp Dilinin Temelleri

2.1 Komutlar ve Değişkenler

AutoLisp dilinde her komut iki parantez içerisinde tanımlanır. Bir komut

tamamlanmadan başka bir komuta başlanabilir veya komutlar arka arkaya yazılabilir.

Bir komut, diğeri bitmeden başlıyorsa, her iki komutun da bitişlerinin parantezi kapatmak suretiyle ayrı ayrı yapılarak unutulmaması önemlidir.

(DEFUN C:ALI() (SETQ A 3) (PRINC A) (PRINC) )

En temel üç komuttan biri olan DEFUN, yeni bir fonksiyon tanımlamaya yarar. C: ve () arasında yazılan kısım bu fonksiyonun AutoCAD’de çalıştırılması gerektiğinde AutoCAD komut satırına nasıl yazılarak çalıştırılacağını gösterir. Örneğin yukarıdaki kodu AutoCAD’de çalıştırmak için APPLOAD ile LSP dosyası yüklendikten sonra ALI yazmak gerekecektir. Yeni fonksiyonu DEFUN ile tanımlarken, bu fonksiyonun

AutoCAD’de neler yapacağını anlattığımız kısım, halen DEFUN komutunun içerisinde sayılacağı için dikkat edilirse (DEFUN ile başlayan parantezin en sonda kapandığı görülecektir.

İkinci komut SETQ, bir değişkene bir değer atamaya yarar. Yukarıdaki örnekte A adını verdiğimiz değişkene 3 sayısını atamış oluyoruz. Değişkenler en genel kullanımda üç şekildedir: Tamsayı (INTEGER), gerçek sayı (REAL) veya metin (STRING). Diğer programlama dillerinden farklı olarak, AutoLisp’te değişkenin hangi tür olacağı daha önce bir yerde tanımlanma zorunluluğu yoktur. O değişkene

atanacak ilk değer bunu belirler. Örneğin A değişkeni 3 tamsayısının atanmasıyla bir tamsayı olmuştur.

Son komut PRINC, AutoCAD ekranında bir metin görüntülenmesini sağlayan

komuttur. (PRINC “Goruntulenecek Metin”) şeklinde kullanılabildiği gibi, doğrudan bir değişkenin içeriği de tırnak işaretleri olmadan (PRINC A) şeklinde görüntülenebilir.

AutoLisp dilinde görüntülenen bir metnin çift görüntülenmesini önlemek üzere kod içerisine bir defaya mahsus tüm PRINC komutlarından sonra içeriği boş bir (PRINC) konmalıdır. Bu (PRINC) konmadığı takdirde kod yine çalışır vaziyette olacak ancak görüntülenen tüm metinler çifter kez görüntülenecektir.

Bu bilgiler ışığında, yukarıda yazan dört satırlık kodun ne işe yaradığını özetlersek, öncelikle ALI yazarak çalıştırılacak bir fonksiyon tanımlıyor, bu fonksiyon kapsamında A değişkenine 3 sayısını atıyor ve son olarak ekranda A değişkeninin

görüntülenmesini sağlayıp, fonksiyonu tamamlıyor.

(4)

AutoLISP

Sayfa No. 3 2.2 Kullanıcıdan Veri Alınması ve COMMAND Komutunun Kullanılması

Kodun gereği olarak bazı değerler kullanıcı tarafından girilecek şekilde olacaktır.

Halihazırda AutoCAD fonksiyonlarından örneğin LINE fonksiyonunda çalışırken ilk nokta, uzunluk veya ikinci nokta gibi veriler kullanıcının yazması veya tıklamasına bırakılıyor. Bunun gibi AutoLisp dilinde yazacağımız kodlarda kullanıcıdan veri istemek için aşağıdaki kodları kullanacağız.

(defun C:RR() (setq MYSET(ssget)) (setq PP1(GETPOINT)) (setq PP2(GETPOINT))

(command "ROTATE" MYSET "" PP1 "R" PP1 PP2 "0" "") )

Yukarıdaki kodun yazılmasındaki amaç AutoCAD’de seçilecek nesnelerin tıklanacak ilk nokta etrafında, ikinci nokta doğrultusunu 0 dereceye getirecek şekilde

döndürülmesi (ROTATE)’dir. Nesneleri gruplar halinde belirli alanlara dizmek, düzenlemek vb. görevler yapılacağında, hiç bir parçanın açılı durmuyor olması

gerekebilir. Parçaları seçip ROTATE ile önce ilk noktasına tıklayıp, R (REFERENCE) ile rölatif döndürmeye ayarlayıp sonra tekrar ilk nokta ve ikinci noktaya tıklayıp, 0 yazıp komutu tamamlamak yerine, RR yazıp ilk ve ikinci noktaya basarak işlemi kısaltmış oluyoruz. Bu işlemi onlarca, yüzlerce nesneye yapacak olduğunuzu düşünürseniz, kazanacağınız zaman için bu kodu yazmak değerli hale geliyor.

Bu kod kapsamında kullanıcıdan istenen üç veri bulunuyor. Bunlar seçilecek nesne grubu (örnekte MYSET), ilk nokta (örnekte PP1) ve ikinci nokta (örnekte PP2)’dir.

(SSGET) komutu, Seçim grubu (Selection Set)’nun kullanıcıdan talep edilmesini sağlamakta, (GETPOINT) komutu ise tek bir noktanın kullanıcıdan talep edilmesini sağlamaktadır. Bu örnekte mevcut olmayan bir diğer veri girişi ise bir değişkene kullanıcıdan değer talep eden (GETINT) komutu tamsayılar için, (GETREAL) komutu gerçek sayılar için ve (GETSTRING) komutu metin isteği içindir. Örneğin A

değişkenine kullanıcıdan bir tam sayı atamasını istemek için gerekli kod:

(SETQ A (GETINT) ) şeklinde olacaktır.

(COMMAND) komutu AutoCAD içerisinde komut satırına bir şey yazar gibi bir AutoCAD komutunun çalıştırılmasına yaramaktadır. Kodun amacında tarif ettiğim gereği sağlamak için AutoCAD komut satırına yazı yazmaya başlıyoruz. Öncelikle

“ROTATE” yazarak döndürme fonksiyonunu başlatıyoruz. AutoCAD ROTATE komutu yazılınca ilk olarak neyi döndürmek istediğini kullanıcıya sorar. Kod da bunu

sağlamak için daha önce kullanıcıdan SSGET ile talep ettiği MYSET değişkenine yönlendiriyor bu isteği. Daha sonra seçimin tamamlandığını AutoCAD’e belirtmek amacıyla Enter/Space tuşuna basmak anlamına gelen boş tırnak işaretlerini (“”) kullanıyor. Sonra AutoCAD kullanıcıdan başlangıç noktası isteyeceği için bu isteği de daha önce GETPOINT yoluyla kullanıcıdan istediğimiz PP1 noktasına yönlendiriyor.

Daha sonra AutoCAD’de çalışıyor olsaydık ilk noktayı seçtikten sonra R (REFERENCE)’i seçeceğimizi bildiğimiz için koda “R” ekleyerek bu görevi

gerçekleştiriyoruz. Daha sonra bir ve ikinci noktaları benzer şekilde PP1 ve PP2’ye yönlendirdikten sonra referans açısını “0” olarak tanımlayıp Enter/Space anlamına gelen “” ile komutu tamamlıyoruz.

(5)

AutoLISP

Sayfa No. 4

Bu fonksiyonun çalışması için yukarıdaki kodu bir LSP dosyası içerisine kaydedip AutoCAD’de APPLOAD komutuyla aktif hale getirmek gerekmektedir. Daha sonra komut AutoCAD komut satırına RR yazarak çalıştırılabilecektir. Dosya adının fonksiyon ile aynı ada sahip olması şartı yoktur, herhangi bir dosya adı seçilebilir.

(defun C:KK()

(PRINC "\n Lutfen Parcalari Seciniz: \n") (setq mySet(ssget))

(COMMAND "CHANGE" mySet "" “P” "C" “1” "") (PRINC "\n Renk Kirmiziya Degistirildi \n") (princ)

)

Yukarıdaki örneğin, DEFUN komutuyla fonksiyona KK şeklinde çalışacağını

tanımladığını, SSGET komutu ile mySet değişkenine bir nesne grubu ekleyip, daha sonra COMMAND komutu ile CHPROP AutoCAD komutunu çalıştırıp, mySet değişkenine “P” ve sonra “C” ile renk değiştireceğini belirtip sonra değişecek olan rengi “1” (kırmızı) olarak seçip sonra “” ile fonksiyonu bitirdiğini göreceksiniz. Bu fonksiyon sayesinde nesneleri seçtikten sonra fare vasıtasıyla renklerini kırmızıya ayarlamak yerine tekrarlanabilir (Enter/Space’e tekrar basmak suretiyle) bir komut ile KK yazarak hızlıca renklerini kırmızıya ayarlayabileceğimizi ve bunun sık kullanılan bir durumda ne kadar zaman kazandıracağını düşünebilirsiniz.

2.3 WHILE Döngüleri, IF Şartları ve Dört İşlem Komutları

Diğer programlama dillerindekine benzer döngü ve şartlandırmalar AutoLisp’te de mevcuttur.

Döngüler (WHILE -döngü şartı- -olay-) şeklinde -döngü şartı- sağlandığı sürece -olay-

‘ı gerçekleştirmeye programın devam etmesi şeklindedir. Döngü şartı,

(WHILE (= A B) -olay-) , A değişkeni B değişkenine eşit olduğu sürece -olay- devam eder şeklinde veya (WHILE (> A B) -olay-) , A değişkeni B değişkenden büyük olduğu (< işaretiyle küçük olarak da ayarlanabilir.) sürece -olay- devam eder şeklinde

belirlenir.

Şartlandırma (IF -şart- -olay1- -olay2-) şeklinde, -şart- sağlanıyorsa -olay1-, sağlanmıyorsa -olay2-‘yi gerçekleştirir.

Dört işlem, diğer programlama dillerinde olduğu gibi bildiğimiz matematik yazım şekliyle gerçekleşmiyor, her bir işlem bir komutmuş gibi (-işlem- -sayı1- -sayı2- ...

-sayı n-) şeklinde yazılarak yapılıyor. Örnek vermek gerekirse (SETQ A 5) yazıp A değişkenini doğrudan 5’e eşitlemek yerine (SETQ A (+ 3 2)) şeklinde yazarak A değişkenini 3 ile 2’nin toplamına eşitlemek mümkün. Bunun yanısıra daha önce tanımlanmış bir değişkeni dört işlem komutları içerisinde kullanabiliriz: (SETQ A (- B 3)) şeklinde yazacağımız kod ile A değişkenini, B değişkeninden 3 çıkarma işlemi sonucuna eşitlemiş oluyoruz. Bir değişkeni tanımlarken, o değişkenin o anki değerini yine işlem içerisinde kullanabilir. Örneğin, (SET A (* A 3)), A değişkenini, A

değişkeninin mevcut değerinin 3 katına eşitle anlamına gelmektedir.

(6)

AutoLISP

Sayfa No. 5 (DEFUN C:BUL()

(SETQ AA (GETINT “\n Lutfen 1 ile 10 arasinda bir tamsayi giriniz: \n“)) (SETQ BB 1)

(WHILE (< BB 11)

(PRINC “BB sayisinin su anki degeri: ”) (PRINC BB)

(IF (= AA BB)

(PRINC “ BB su an el ile girdiginiz sayiya esit.”) (PRINC “ BB su an el ile girdiginiz sayiya esit degil.”) )

(PRINC “\n”)

(SETQ BB (+ BB 1)) )

(PRINC “\n BB 10 sayisina ulasti. Program kapatilacak.”) (PRINC)

)

Örnek kod incelendiğinde, AutoCAD’de BUL komutuyla çalışan, kullanıcıdan bir AA sayısı tanımlaması istendiği, BB sayısının program tarafından 1 olarak belirlediği ve 11’den küçük olduğu sürece çalışmaya devam edecek bir döngüye sokulduğu görülmektedir. Döngü içerisinde kullanıcıya BB sayısının kaç olduğu gösteriliyor, daha sonra bir şartlandırmayla BB sayısının o anki değerinin kullanıcı tarafından girilen AA ile aynı olup olmadığının kontrolü yapılıyor ve son olarak BB sayısı olduğu sayıdan 1 artırılarak döngü tamamlanıyor. Bu sayede BB sayısı her döngüde bir artıyor ve en sonunda döngü şartı olan 11’den küçük olma özelliğini kaybedince döngü tamamen bitiyor. Program kullanıcıya BB sayısının 10’a ulaştığını belirten bir metin görüntüleyip programı kapatıyor.

3. AutoLisp İçin Daha Fazla Kaynak

3.1 İnternet Kaynakları

Bu kitaptaki temel bilgiler ile AutoLisp programlama diline yaptığınız başlangıcı ilerletmek ve uzmanlaşmak istediğiniz takdirde internette çok çeşitli kaynaklar bulabilirsiniz.

Bu kaynakların arasında diğerlerine nazaran kolay anlatımı ile

www.jefferypsanders.com/autolisp.html adresinde konumlanmış olan J. P. Sanders’a ait ders notlarını takip edebilirsiniz.

Bir kodu yazmaya başlamadan önce kısmen veya tamamıyla aynı olan bir kod daha önce yazılmış mıdır diye kod kaynaklarını kontrol etmekte fayda olacaktır. Hali hazırda kodlanmış AutoLisp kodları aradığınız takdirde, yine J. P. Sanders’in AutoLisp sayfasına yönlenebileceğiniz gibi http://www.simplecad.com/lisp/lisp.htm adresinde konumlanmış olan lisp kaynakları bağlantılarını takip edebilirsiniz.

(7)

AutoLISP

Sayfa No. 6 3.2 AutoCAD Yardım Dosyaları

AutoLisp programlama dili, resmi olarak Autodesk firmasının AutoCAD programının içeriğine dahil olduğu için AutoCAD programı yardım dosyası içeriğinde ana sayfada aşağıdaki görünen ekranda olduğu gibi sol menüden AutoLISP, Visual LISP and DXF seçeneği seçilerek programlama diline ait gerekli bütün açıklamaları elde

edebilirsiniz.

Önemli Not:

Bu kitapta anlatılan kodlar ve AutoCAD komutları AutoCAD 2004 sürümünde hatasız çalışacak şekilde düzenlenmiştir. AutoCAD komutları ve komutların kullanıcıdan beklediği değişkenler farklılıklar gösterebilir. Kitapta örnek verilen tüm kodlar CD’de mevcuttur.

Bu notlar amatörce hazırlanmış olup, izinsizce kullanımı, kopyalanması, hatta içinden bilgi araklanıp, kaynak göstermeden kullanılmasında hiçbir sakınca yoktur. Faydalı olması dileğiyle.

Referanslar

Benzer Belgeler

a) Artımsal Koordinat S. Line, circle, arc komutlarıyla çizilenleri eşit aralıklarla bölmeyi sağlayan komut aşağıdakilerden hangisidir?. a) Erase b) Divide c) Masure

Türkiye’nin ilk ve tek deney havuzu olan Ata Nutku Gemi Model Deney Laboratuvarı’nın bulunduğu fakültemiz, Gemi Mukavemeti Laboratuvarı, Gemi Makinaları ve

Specify fourth point or [Invisible] &lt;create three-sided face&gt;: Dördüncü noktayı belirtiniz (4) veya ENTER tuşuna basınız (Şekil 2.14).. Şekil 2.14 Yüzey

Draw çubuğu; çizgi, çember, yay, dörtgen, tarama gibi işlemlerin yapılması için kullanılacak komutları içeren araç çubuğudur (Şekil 1.20).. Şekil 1.20 Inquiry

Mönü çubuğu, araç çubukları, çizim alanı, komut penceresi (komut satırı) ve durum çubuğu olmak üzere AutoCAD program penceresi beş ana kısımdan oluşur

Bütün bunlar gözönünde bulundurularak AutoCAD ortamında AutoLISP dili kullanılarak gerçekleştirilen bu özel amaçlı program ile kalıp tasarım, çizim ve modellenmesi çok

This study compared the sealing ability of three root- end filling materials, including GIC, MTA, and BD. The results revealed that MTA presented the least microleakage value

Peyzaj projelerinin çizilmesinde kullanılan CAD programlarının tanıtımı, bunlardan AutoCad programında yaygın olarak kullanılan komutlar, AutoCad programını kullanarak peyzaj