Autolisp komutları ve açıklamaları

otokoc - 18.05.2005 09:54
Çok kullanılan autolisp komutları:

(prompt);
ekranın mesaj kısmına yazı yazmak için kullanılır. İfade formatı şu şekildedir:

(prompt) "yazı") örneğin (prompt "Bir nokta seç")

(prompt) fonksiyonu ile ayni işlem gören yani ekrana yazı yaıan (princ), (prin1) ve (print) fonksiyonları vardır. (princ) ve (prin1), yazıları tırnak içine alırlar; (print) ise yazıdan sonra boşluk bırakmaktadır.

(getpoint);
bir nokta seçilmesini ister. Nokta seçilinceye kadar ekranda hiç bir şey olmaz. Ancak Ekranda bir nokta gösterildiğinde, noktanın koordinatları mesaj bölgesinde görülür. Komut (setq) ile kullandığında, seçilen noktanın koordinatları (setq) ile belirlenen değişkene atanır; ayrıca ifadeye bir de mesaj eklenebilir. Örneğin:

(setq a (getpoint "Birinci noktayı seç"))

ifadede Birinci noktayı seç mesajı komut bölgesinde görülür ve nokta seçildikten sonra, noktanın koordinatları a değişkenine atanır. Bu şekilde noktanın koordinatları a değişkeninde saklanmış olur. Şöyleki Command: mesajına !a ile yanıt verilirse, noktanın koordinatları mesaj bölgesinde görünür.

(command);
tüm AutoCAD komutlarının kullanma imkanını sağlar; ayrıca takip eden değişkenler komuta aittir. Örneğin yukarıda b maddesindeki ifade ile Birinci noktanın koordinatları a değişkeninde saklanmış olsun. ikinci noktanın koordinatları aşağıdaki ifadeyle:

(setq b (getpoint "İkinci noktayı seç"))

b değişkenine saklansın. Bu durumda:

(command "line" a b)

ifadesi ile yukardaki mesajlarla koordinatları belli olan a ve b noktaları arasında bir çizgi çizilir. Çizgi çizildikten sonra line (çizgi) komutu geçerli kalır. Bu komutu bitirmek için son noktadan sonra, örneğin (command "line" a b "") şeklinde iki çift tırnak yazılır. Çizgi sadece iki nokta arasında değil, koordinaları bilinen bir çok nokta arasında çizilebilir; ayrıca "c" ile çizgi kapatılabilir. Örneğin:

(command "line" a b c d "c")

ifadeyle dört kenarlı bir çizim oluşturulur.

(getcorner);
(getpoint) fonksiyonuna benzemekle beraber esasen seçilen iki nokta arasında bir dikdörtgen oluşturur. Burada ilk nokta daha önce seçilir veya bir değişkene atanır ve ancak ikinci noktanın seçiminde (getcorner) kullanılır; bu durumda kursor ikinci noktaya hareket ettirildiğinde dikdörtgen lastik band şeklinde görünür. İfadeler şöyledir:

(setq pt1 (getpoint "Bir nokta seç"))
(setq pt2 (getcorner pt1 "başka bir nokta seç"))

(getreal);
bir a değişkenine klavyeden gerçek sayı bir değer atanmasını sağlar. İfade:

(setq a (getreal "Bir sayı gir"))

olup, Bir sayı gir mesajı göründükten sonra sayı girilir.

(getdist);
bir uzaklığı sayı olarak girmek veya ekranda iki nokta göstererek, verme imkanını sağlar. İfade şöyledir:

(setq a (getdist "Yükseklik gir"))

(getstring);
bir yazı girilmesini sağlar. İfade:

(setq a (getstring T "Yazı gir"))
şeklindedir. Burada Yazı gir mesajına bir yazı girilir ve daha sonra !a ile yazı tekrar mesaj bölümünde görülür. Buradaki T , dizgi içinde boşluk kullanılabileceği anlamına gelir. T yazılmadığı zaman girilen yazı içinde boşluk kullanılamaz.

(angle);
iki nokta arasındaki açı değerini ölçer. Burada önce noktalar belirlenir ve sonra açı ölçme ifadesi yazılır. İfadeler şöyledir:

(setq pnt1 (getpoint "Bir nokta seç"))
(setq pnt2 (getpoint "İkinci noktayı seç"))
(setq a (angle pnt1 pnt2))
(dtr a)

Burada pnt1 ile pnt2 noktalar arasındaki açı radyan olarak a değişkenine atanır; son ifadede, (dtr) programı yüklü ise, açıyı radyandan dereceye çevirir. Açının değerini görmek için !a girilir.

(distance);
iki nokta arasında uzaklığı ölçer; burada da ilkin noktaların belirlenmesi gerekir. Uzaklık ölçme ifadesi şöyledir:

(setq d (distance pnt1 pnt2))

(polar);
bir noktanın polar olarak, yani uzunluk ve açıya bağlı olarak koordinatlarının verilmesini sağlar. İfade şöyledir:

(setq a (polar pnt1 ang1 dst1))

(getangle), (getorient);
her iki fonksiyon iki nokta göstererek bir açının bulunmasını sağlarlar. İfade:

(setq a (getangle "Açıyı seç"))

şeklindedir. (getorient) her zaman 0 derece olarak East (Doğu); (getangle) ise 0 olarak güncel yönünü kabul etmektedir. Örneğin 0‘ın güncel yönü North (Kuzey) ise bunu alır. Bu fonksiyonda açılar klavyeden de girilebilir. Ancak açı derece olarak belirlenmişse, bu otomatik şekilde radyan olarak saklanır

(setvar);
AutoCAD'in Setvar komutu içinde bulunan sistem değişikliklerini ayarlar. İfade şöyledir:

(setvar "orthomode 1")

Kenetleme oluşturmak için:

(setvar "osmode" n)

ifadesi kullanılır. Burada n kenetleme şekline bağlı olan ve aşağıda verilen bir sayıdır.

Center 4 Endpoint 1 İnsert 64 Intersection 32
Midpoint 2 Nearest 512 Node 8 Perpend 128
Quadrant 16 Tangent 256 None 0

(ssget),
(entsel) fonksiyonları nesnelerin seçmesini sağlar. (entsel) bir defada bir tek nesne seçer; (ssget), Window (pencere) ve Crossing (kesişme) dahil olmak üzere çeşitli seçme yöntemlerini kullanarak bir defada bir nesne kümesi seçebilir. Pencere için ifade:

(setq a (ssget "W" pnt1 pnt2))

şeklindedir; kesişme kullanıldığı durumda W yerine C yazılır. Bu şekilde a değişkenine atanan ve adı olan bir seçim kümesi meydana getirilmiş olur. Bundan sonra bu kümeye nesne ile ilgili veriler dahil edilebilir. Bilindiği gibi AutoCAD'de her nesnenin entity type (nesne tipi), layer (tabaka), color (renk) vb. gibi oldukça geniş bir veri tabanı vardır. Bu veri tabanlarına birer kod verilmiştir şöyleki;

(ssget "x" ' ((0. "text")))

ifadesiyle seçilen nesnelerle ilgili tüm yazı veri tabanı seçim kümesine dahil edilmiş olur. Nesnelerle ilgili veri tabanı kodları şu şekilde tertiplenmiştir.

Entity type 0 Block 2 Line type 6 Text style 7 Color 62
Elevation 38 Layer 8 Thickness 39 Attributes 66
İf
(Koşul) olarak da bilinen bu ifadeler if-then-else üçlüsüne dayanmaktadır. AutoLisp'te bir if’e bir then karşılık gelmektedir. ifadenin formatı şu şeklindedir:

(if (xxx1 ) (xxx2) (xxx3))

Burada if’ten sonra xxx1 kontrol edilmesi gereken deyimdir; örneğin (= a b) şeklinde ifade edilen a=b eşitliği gibi. Eğer bu deyim doğru ise o zaman (then) xxx2 deyimi işlem görür; değilse (else) xxx3 deyimi işlem görür. Örneğin:

(setq a 6)
(setq b 9)
(if (= a b) (setq b "eşit") (setq b "eşit değil"))

programı yazılıp işleme konulursa, !b girildiğinde "eşit değil" sonucu görünür. if ifadesine (progn) fonksiyonu kullanılarak bir çok then (o zaman) atanabilir. Bu fonksiyon xxx1'den
sonra parantezsiz yazılır; eğer if ifadesi sona ererse (progn) parantez içine yazılır. (= a b) 'in yanısıra, şu lojik fonksiyonlar vardır.

(> a b) a b'den daha büyük
(< a b) a b'den daha küçük
(/= a b) a b'ye eşit değil
(<= a b) a b'den küçük veya eşit
(>= a b) a b'den büyük veya eşit
(and a b) a ve b; lojik bağlaç ve
(or a b) a veya b; lojik bağlaç veya
(not ..) lojik hayır
(listp a) a bir liste ise
(null a) a nil ise

Örneğin: (if (> (getvar "FILLETRAD") 0.25) (setvar "GRİDMODE" 0))
ifadesi, eğer getvar fonksiyonunun yuvarlatma yarıçapı (Filletrad) 0.25 ten daha büyükse, ızgara modunu (Gridmode) 0'a eşitle anlamına gelir. Burada aksine yani yuvarlatma çapı 0.25'ten daha küçük olduğu durumda ne yapılacağını belirtilmediği için, hiç bir işlem yapılmaz.

Yazar: otokoc
İçerik:
Tag: Autolisp komutları ve açıklamaları, prompt, getpoint, setq

Yorumlar :
cngzklc   17.02.2015 07:33 #15502  

Teşekkürler güzel bir anlatım olmuş.

efealper   29.08.2012 08:42 #14747  

Anlatım için teşekkürler.
Lisp yazılan dil nedir? Tüm mantığını ve kodlarını öğrenmek mümkünmü acaba?

abayasrin   25.07.2009 06:20 #11505  

TEBRİK EDERİM GERÇEKTEN GÜZEL BİR ANLATIM...

map   26.05.2009 08:39 #11185  

selam bir lisp isteği : Ekranda çizim almadan önce kalem ayarlarını tek tek yazıp uğraşmak yerine kalem kalınlığı değiştireceğimiz objeyi seçtiğimizde tabakayı komple yada sadece o rengimi seçmek istiyorsun seçeneği ile kalem ayarlarını yapabileceğimiz bir lisp varmıdır yada mümkünmüdür böle bişey quick selecet ten falan yapılıyor onu biliyorum ama benim istediğim ekranda tıklayacaz pencere açılacak 0.20 0.30 değeri girecz kaelm ayarı değişmiş olacak şimdiden teşekkürler ...

ybaykan   04.12.2007 08:36 #6642  

projedeki blokları sayacak lisp var mı

kabus_solmyr   05.06.2007 18:51 #4537  

abi elin degmisken autocaktaad den excel e verileri sırayla aktaracak bi program yazsan diyorum.cook kullanıslı olurr,yap bi guzellik?

aticelep   02.12.2006 19:50 #1176  

herseyden önce autocade bakış açımı değiştirdiğiniz için teşekkür ederim.Çalışmlarınızı daha geniş yelpazede görmek isteriz.mesela nsjsfot'un dediği gibi komutları fazlalaştırmak iyi fikir....İyi çalışmalar.

kizdede   21.11.2006 18:53 #1001  

teşekürler güzel bir çalışma olmuş

nsjsfot   25.05.2005 11:33 #62  

sevgili kardeşlerim biraz daha geniş konulara değinirsenbiz sevinirim. komutaları fazlalaştıralım yani.. iyi çalışmalar teşekkürler

celebra   23.05.2005 09:54 #61  

güzel bir çalışma olmuş,
bizimle paylaştığın için teşekkürler...

Copyright © 2004-2022 SQL: 0.073 saniye - Sorgu: 39 - Ortalama: 0.00188 saniye