Arkitera Forum  
Geri Git   Arkitera Forum > Mimarlık ve Bilişim > Yazılımlar > AutoCAD

Yanıt
 
Konu Araçları Modları Görüntüle
Eski 17-05-2005, 19:34   #1
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
Autolisp Derslerİ

Giriş

AutoCAD’de çizimi hızlandıran ve kolaylaştıran makrolar mevcuttur. Bunlarla çeşitli bloklardan oluşan kütüphaneler hazırlayabilir ve bunları çizimlerinizde kullanabilirsiniz.

Çizimi hızlandıran bu tip komut ve blokların yanında, rutin bazı tasarlama hesaplarının da bilgisayara yaptırma imkanları vardır. Bu sayede parametrik tasarlama ve otomatik çizim yapmak mümkün olur.

AutoCAD ‘de Parametrik tasarım için iki ana yol mevcuttur.
1. Script ile çalışma: AutoCAD’in icra etmesi istenen komutların yazılı olduğu bir dosyanın (*.scr) hazırlanması ve okutulmasıdır. Bir çözüm için gerçekleştirilir. Farklı parametrelerle çalışma için kesintili bir çalışma imkanı verir
2. İnteraktif çalışan, AutoLISP veya AutoCAD Development System (ADS) ile hazırlanmış programlar: AutoCAD’de çalışırken kullanıcı ile diyaloğa girebilen ve sonuçları programdan çıkmadan verebilen programların hazırlanmasıdır. İnteraktif çalışan programlarda, kullanıcı AutoCAD’de çalışırken, hatta bir çizimin ortasında önceden programda tanımlanmış fonksiyon veya komutları çalıştırabilir. İyi hazırlanmış, interaktif programlarda AutoCAD ile kullanıcı diyalog kutuları ile etkileşime girer ve kullanıcının işi rutin işlemlerde oldukça kolaylaşır.

En son otokoc tarafından düzenlendi : 18-05-2005 12:21.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 17-05-2005, 19:36   #2
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
Script Dosyaların Yapısı ve Programlama Dilleri ile Hazırlanması

Script dosyalar, çeşitli komutların yazılı olduğu dosyalardır. AutoCAD bu dosyaları iki şekilde yükleyebilir. AutoCAD açılırken komuta script dosya ismi eklenirse AutoCAD script dosyanın içinde yazılı komutları sırasıyla icra eder ve durur. İkinci bir yol da, çizimin yarısında script komutu ile dosyanın çağırılmasıdır. Bu takdirde dosyadaki komutlar sona erdiğinde kullanıcı çalışmaya devam edebilir. Script dosyalarla çalışmada, dosya belirli bir hal için hazırlanmıştır ve eğer farklı parametrelerle çalışmak isteniyorsa dosyanın tekrar hazırlanarak çağırılması gereklidir. Bu durum kesintili bir çalışmaya sebep olacaktır.


Bu dosyaların belirli parametrelere bağlı olarakhazırlanmasını farklı programlama dillerinde yazılmış programlara yaptırılması halinde, bu işlem kolaylaşacaktır. Fakat yine de interaktif bir çalışmadan bahsedilemez.

Script dosyaların yapısı oldukça basittir. İlk satırda yeni çizim için 1 rakkamı, ikinci satırda ise çizim ismi yazılır. Sonraki satırlarda AutoCAD komutları , opsiyon ve argümanları yazılır.

Misal: P1(1,1) ve P2(2,2) noktaları arasına bir çizgi çizen bir script dosyası hazırlansın.


1
deneme
line
1,1
2,2



Çizgiyi ortaya çıkaran noktaların koordinatlarını P1(x1,y1) ve P2(x2,y2) hesaplayarak dosyaya yazacak bir program yazılsın.
...
main()
{
...
FILE *dene;
...
dene=fopen(“deneme.scr”, “w+”);
fprintf(dene,”1\n”);
fprintf(dene,”deneme\n”);
/* Burada x1,x2,y1,y2 hesaplanabilir.*/
fprintf(dene,”line\n”);
fprintf(dene,”%f, %f\n%f, %f \n”,x1,y1,x2,y2);
...
fclose(dene);
}


Yukarıdaki programa giriş fonksiyonları eklenerek ve programın defalarca çalıştırlması ile parametrik dizayn gerçekleştirilebilir. Bu yöntem kolay gerçekleştirilebildiği için en çok kullanılan parametrik dizayn yöntemidir.

En son otokoc tarafından düzenlendi : 18-05-2005 12:04.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 17-05-2005, 19:40   #3
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
Yazım Kuralları

Herhangi bir programlama dilinde olduğu gibi AutoLisp programında da bir takım yazım kurallar vardır. Aşağıda bu kuralların en önemlileri verilmiştir.

· Tüm deyimler, ifadeler veya komutlar parantez ( ) içinde yazılır. Bir komutun başka bir komut üzerine etkisini yazabilmek için parantezler iç içe olabilir. Burada dikkat edilmesi gereken husus, sol ( parantezler, sağ ) parantezlerle eşit sayıda olmalıdır; yani sol parantezlerin toplamından sağ parantezlerin toplamı çıkarılırsa 0 elde edilmesi gerekir. Örneğin:

(xxxx (xx (xxx) (xxx) ) )
1s 2s 3s 1r 4s 2r 3r 4r
satırında sırasıyla s ve r ile ifade edilen 4 sol ve 4 sağ yani eşit sayıda parantez vardır. Eğer parantez sayısında bir eksik varsa, n> mesajı görünür; burada n kapanmayan parantez sayısını gösteren tamsayıdır. Tüm parantezlerin ayni satırda olması gerekmez; örneğin yukarıdaki 4r parantezi alt satırda da olabilir.

· İfadeler birden fazla satıra yazılabilirler. Her deyim, işaret veya sembolden sonra bir aralık bırakılır. Birden fazla aralık, tek bir aralığa eşittir.

En son otokoc tarafından düzenlendi : 18-05-2005 12:04.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 17-05-2005, 19:43   #4
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
AutoLisp'te program adı Define fonction (Fonksiyonu tanımla) anlamına gelen ve ilk satıra yazılan defun fonksiyonu ile belirtilir; ondan sonra program adı yazılır. Programın adı hemen parantezle kapatılmaz; esasen programın son parantezi, (defun’ı kapatan parantezdir. Örneğin bir program adı

(defun design

şeklinde olabilir. Not: eğer AutoCAD programı Türkçe karakterler kabul ederse program adı Türçe de yazılabilir. Program adından sonra üç seçenek vardır. Bunlardan birincisi addan sonra () şeklinde parantez eklenmesidir; yani (defun design (). Bu yazılış şekli programda kullanmayı düşündüğünüz tüm değişkenlerin global sayıldığı anlamına gelir. Glogal değişkenler program bittikten sonra da değerini saklarlar ve bu değerler onda sonra gelen programlar için de geçerli olur. () parantezleri aşağıda açıklanacak olan yerel değişkenlerin olmadığını da gösterir. lkinci bir seçenek, değişkene yerel (local) yani sadece o programda geçerli olan bir değer vermektir. Bu amaç, addan sonra / slaş işaretinin eklemesi ile gerçekleştirilir; örneğin
(defun design (/ pt1 pt2)

gibi; burada pt1 ve pt2 fonksiyona atanan değişkenlerdir. Üçüncü bir seçenek, değişkene dışardan bir değer vermektir; bu durumda program:

(defun design (a)

şeklinde yazılır. Tabi dördüncü bir seçenek tüm bu seçenekleri birarada yazmak yani:

(defun design (a / r d)

şeklinde yazmaktır. Burada a, değerini dişardan alan; r ve d ise yerel değişkenlerdir. (defun fonksiyonunun bir başka kullanma şekli (defun C: dir. Bu durumda fonksiyon çağrıldığında parantez kullanılmaz; yani AutoCAD bu ifadeyi Command: deyimi olarak kabul eder ve buna göre işlem yapar. Başka bir deyişle, fonksiyondan sonra C: gelirse AutoCAD'in Line, Arc vb. komutları gibi işlem görür. Buradaki C:, DOS'un C: sürücüsü ile bir ilişkisi yoktur. Örneğin:
(defun c: design ()

ifadesi design adlı bir fonksiyonu tanımlar ve bu fonksiyon normal AutoCAD komutları gibi işlem görür. () parantezler, programda kullanılan tüm değişkenlerin global olduğunu gösterir.

Programla ilgili açıklamalar noktalı virgül ; işareti ile başlar; örneğin ; Bir daire çizen program. Bu durumda ifade program tarafından dikkate alınmaz ve işleme konulmaz; dolayısıyla Türkçe de yazılabilir. ; işareti BASIC dilindeki REM ile eşdeğerdir
otokoc offline   Alıntı Yaparak Yanıtla
Eski 17-05-2005, 20:16   #5
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
AutoLisp'te değişkenler: tamsayı (3 45), gerçek sayı (2.34), dizgi (turbin) veya nokta olabilir. Tam sayılar örneğin 67 girilse dahi 67.0'a dönüştürülür ve öyle işlem görür. Ayrıca gercek sayılar .7 şeklinde değil de 0.7 şeklinde verilmelidir. Değişkenler, yeni bir değer verilinceye veya çizim oturumu bitinceye kadar değerlerini korurlar. İlk karakter bir harf olması koşuluyla, değişkenlere istenilen ad verilebilir; ancak pi deyimi değeri ile eşittir. Dizgi değerleri çift tırnak (" ") içine yazılır. AutoCAD'de değişkenlere sembol denilmektedir. Autolisp fonksiyonlarını, AutoCAD komutlarından ayırt etmek için parantez içinde gösterilir.

Değişkenlere bir değer atamak için (setq) fonksiyonu kullanılır. Bunun kullanma formatı şöyledir:

(setq değişkenin-adı değer)

Burada değer: sabit, değişken veya dizgi olabilir. Örneğin:

(setq a 4) (setq x a) (setq parça "segman")

AutoCAD'de Command (komut): mesajına (setq) ile yanıt verildiğinde, değişken verilen değere ayarlanır ve bu değer ekranda görülür. Nokta (point) değişkeni bir noktanın x,y ve gerektiğinde z koordinatlarını ifade eder. Bu koordinatlar liste (list) adını taşıyan ve parantez içinde yazılan 2D için iki sayı ve 3D için üçsayıdan oluşur; örneğin:

(4.35 6.05) (13.2 56.0 4.0)

Burada birinci sayı x'i, ikincisi y'i ve varsa üçüncüsü z'i temsil etmektedir. Bu koordinatlar (list) fonksiyonu ile örneğin
list 4.35 6.05) (list 13.2 56.0 4.0)

şeklinde de ifade edilebilir. Buna göre bir noktanın değişkenlerine belirli değerler atamak için:

(setq pt (list 4.35 6.05) (setq pt (list ac 6.0)
ifadeleri kullanılır. Son ifadede ac değişkenine x koordinatın değeri atanır. Ayrıca koordinatları (1.0 2.0) ve (3.0 4.0) olan pt1 ve pt2 noktaları ele alınırsa, bu noktaların x koordinatı (car), y koordinatı (cadr) ve z koordinatı (caddr) fonksiyonları ile, başka bir noktanın kordinatları olarak atanabilir. Örneğin bir dikdörtgenin sol-alt ve sağ-üst noktalarını ifade eden ve koordinatları (1.0 2.0) ve (3.0 4.0) olan pt1 ve pt2 noktaları ele alınırsa, dikdörtgenin sol-üst yani pt3 noktasının koordinatları, pt1'in x ve pt2'in y koordinatı olacaktır.
(setq pt3 (list (car pt1) (cadr pt2)))

şeklinde ifade edilir. Bu ifade ile pt3'ün koordinatları (1.0 4.0) olacaktır. AutoCAD'in bir mesajına bir değişkenin değerini vermek istenildiğinde, ünlem ! işaretinden sonra değişkenin adı yazılır. Örneğin bir çizginin başlangıç noktası olarak yukarıda ifade edilen pt1'in koordinatları verilmek istenirse, işlem:

Command (komut): Line (Çizgi)
From point (Başlangıç noktası): !pt1

şeklinde gerçekleştirilir.

Değişkene 0 dahil hiç bir değer verilmediği durumda nil olarak ifade edilir; burada 0 bir sayı sayılır. Buna göre hiç bir değeri olmayan a değişkeni, !a olarak girildiğinde nil mesajı görünür.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 17-05-2005, 20:18   #6
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
Aritmetik İfadeler

AutoLisp ifadeleri ile çeşitli aritmetik, trigonometrik ve geometrik işlemler yapılabilir. Bu ifadelerde tüm değerler tam sayı olarak verilirse sonuç tam sayı; değerlerden biri gerçek sayı ise sonuç gerçek sayı olur. Aritmetik fonksiyonların ifade şekli şöyledir:

(+ a b) a ve b değerlerini toplar.
(- a b) b değerini a değerinden çıkarır.
(* a b) a ve b değerlerini çarpar.
(/ a b) a değerini b değerine böler.
(max a b) a ve b değerlerinden en büyük olanını seçer.
(min a b) a ve b değerinden en küçük olanını seçer.

Esasen yukarıdaki ifadeler ikiden fazla değişken örneğin:

(+ 23 4 15) (- 234 2 16) (* 3 6 2) (/ 142 4 5)

şeklinde içerebilir ve sırasıyla 32; 216; 34 ve 7.1 sonuçları verir. Bunların yanısıra şu fonksiyonlar da vardır:
(abs a) a'nın mutlak değerini verir.
(sqrt a) a'nın kare kökünü verir.
(expt a p) a'nın p kuvvetini verir.
(exp p) e'nin p kuvvetini verir.
(log a) a'nın doğal logaritmasını verir.
(float a) tamsayı a'nın gerçek sayı halini verir.
(fix a) a gerçek sayısının tam sayı kısmını verir.


Trigonometrik fonksiyonlar şöyledir:
sin açı) açı'nın sinüsünü verir; açı radyan cinsindedir.
(cos açı) açı'nın cosinüsünü verir; açı radyan cinsindedir.
(atan a) a'nın arktanjantını verir (radyan cinsinden).
(1+ x) 1 ve x'in toplamını verir; (+ x 1) gibi.
(1- x) 1 ve x'in farkını verir.
(angle p1 p2) p1 ve p2 noktaları arasında açıyı verir.
(distance p1 p2) p1 ve p2 noktaları arasında uzaklığı verir.
(polar p1 ang d) p1 noktasından d uzaklıkta ang açısını (radyan cinsinden) yapan noktayı verir.
(type a) a'nın tipini (tamsayı, gerçel, dizi, liste) verir.

Yukarıdaki fonksiyonlar böyle yazıldığı durumda, hesapları yapıp sadece sonucu verirler. Ancak bir değişken üzerinde yapılan bir işlemin sonucu yine değişkene atanmak istenirse şu ifade kullanılır:

(setq x (- x 2))

Burada x değişkeninden 2 çıkarılır ve sonuç tekrar x'e atanır.

En son otokoc tarafından düzenlendi : 18-05-2005 12:05.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 17-05-2005, 20:22   #7
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
Uygulama.

Bu uygulamada derece cinsiden açıları radyana çeviren bir program yazılacaktır. Programın yazılması için örnek olarak DOS'un Edit Tekst editörü kullanılacaktır. Bilindiği gibi derece cinsinden bir açı a ile ifade edilirse bunun radyan olarak değeri a.pi/180 bağıntısından bulunur.

Çizim ortamına girin. Command (komut): mesajına shell ve sonra edit deyip editöre girin. Program alfanumerik ekrana geçer. Burada menüyü aktif duruma geçirmek için Esc ve Alt tuşuna, File menüsüne girmek için Enter veya aşağı-yukarı ok tuşlarına basın. Burada New (Yeni) üzerindeyken Enter tuşuna basılarak yeni bir dosya sayfası başlatılır. Burada şu programı yazın:

; açıları dereceden radyana çevirir
(defun dtr (a)
(* pi (/ a 180.0))
)

Program bittikten sonra, menüyü yeniden aktif duruma geçirmek için Alt tuşuna basın ve File menüsüne girmek için Enter veya aşağı-yukarı ok tuşlarına basın. Burada Save (Sakla) üzerindeyken Enter tuşuna basılarak dosya saklanır. Yine aynı şekilde menüden eXit ile çıkılarak AutoCAD ortamına geri dönülür

En son otokoc tarafından düzenlendi : 18-05-2005 12:06.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 18-05-2005, 11:59   #8
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
(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.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 18-05-2005, 12:01   #9
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
Uygulama.
Aşağıda iki nokta arasında bir çizgi çizen bir program verilmiştir.

; İki nokta arasında çizgi çizen program
(defun drawline (/ pt1 pt2)
(setq pt1 (getpoint "\nBirinci noktayı seçin"))
(setq pt2 (getpoint "\nİkinci noktayı seçin"))
(command "line" pt1 pt2 "")
)

Programı herhangi bir Tekst Editörü ile yazın, uyg1.lsp adlı bir dosyada saklayın, yukarıda gösterildiği gibi AutoCAD'e yükleyin, çalıştırın, birinci noktayı seçin mesajına bir nokta gösterin, daha sonra ikinci noktayı seçin mesajına bir başka noktayı gösterin; ekranda çizgi çizilir.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 18-05-2005, 12:09   #10
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
(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.

En son otokoc tarafından düzenlendi : 18-05-2005 12:52.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 18-05-2005, 12:13   #11
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
(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.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 18-05-2005, 12:18   #12
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
(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ı <Selection set: 1> 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ı <Selection set: 1> 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
otokoc offline   Alıntı Yaparak Yanıtla
Eski 18-05-2005, 12:20   #13
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
İ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.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 18-05-2005, 12:23   #14
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
Uygulama

Aşağıda küçük çapta iki program verilmiştir; bunları herhangi bir text editörü ile yazıp Acad.lsp veya .lsp uzantılı bir dosyaya saklayın ve daha sonra çizim sırasında kullanın. Programlar defun c: ile meydana getirilmiştir; dolayısıyla program adları AutoCAD'in birer komutu olmuşlardır. Buna göre program yükledikten ve örneğin birinci programda, programın yüklendiğini gösteren c: ekransil göründükten sonra sadece ekransil yazılması yeterlidir.

a. Tüm ekranı silme programı.

(defun c: ekransil (/ v u)
(setq v (getvar "limmin"))
(setq u (getvar "limmax"))
(command "erase" "w" v u "")
)

b. Çizgi tipi ölçeği (Line type scale).

(defun c: lscale (/ v u d sc)
(setq v (getvar "limmin"))
(setq u (getvar "limmax"))
(setq d ( - (car u) (car v)
(setq sc (/ d x))
(command "ltscale" sc)
)

Burada x yerine istenilen ölçek yazılabilir.
otokoc offline   Alıntı Yaparak Yanıtla
Eski 18-05-2005, 12:32   #15
Forum Üyesi
 
Kayıt Tarihi: 28-02-2005
Mesaj: 78
KULLANILAN VERİ TİPLERİ

AutoLISP programlarında kullanılabilecek veri tipleri aşağıdaki gibi sıralanabilir.

· Tamsayılar,
· Reel sayılar,
· Yazı dizileri (strings),
· AutoCAD Değişkenleri,
· AutoCAD Objeleri (entities),
· AutoCAD ortamından seçilmiş objeler.

Tamsayılar,

-32768 ile +32767 arasında olabilir.
1 17 -378 65 24572 -793 350

Reel sayılar,

4.982 -8.015 3.14 225.68 -114.5 0.45
şeklinde gösterilen sayılardır. Reel sayıların fonksiyonlar içinde kullanılırken 1'den küçük değerlere sahiplerse ondalık noktanın soluna 0 'ın yazılması program akışı içinde meydana gelebilecek karışıklıkları önleyecektir.

Hatalı Doğru

.25 0.25
.1 0.1
.285 0.285

Yazı dizileri,

tırnak içinde yazılması gereken karakter dizileridir. Diziler herhangi bir uzunlukta olabilir. Bellekte yerleri dinamik olarak ayrılır.

"BIRINCI NOKTA"
"uzaklık"
"Ad Soyad" gibi

Listeler, değişkenlerden oluşan gruplardır. ( ) içinde yazılırlar. Değişik amaçlar için kullanılabilirler. En fazla kullanım alanı nokta koordinatlarının tanımlanmasındadır.

(X Y) (X Y Z)
(5 13) (10 4 0)
(3.1 0) (2.75 0.0 8.2)

AutoLISP'de çok kullanılan iki fonksiyon vardır. Bunlardan biri pi fonksiyonu diğeri de nil fonksiyonudur. Pi fonksiyonunun değeri önceden belirlenmiştir. Bu değer 3.1415926 'ya eşittir. Yazdığınız programlarda bu değeri kullanmak isteğinizde pi yazmanız yeterli olacaktır.

Nil fonksiyonu "hiç" değerine eşittir. Yani boştur. Program içinde setq fonksiyonu kullanılarak değer atanmamış tüm değişkenlerin değeri nil'dir. Setq fonksiyonu kullanılarak değer atanmış bir değişkene programın daha sonraki satırlarında yine setq fonksiyonu kullanılarak nil değeri atanırsa, değişkenin önceki değeri boşaltılmış, değişken nil'e eşitlenmiş olur. Prompt gibi fonksiyonlar da görevlerini yaptıktan sonra nil değerini verirler.
otokoc offline   Alıntı Yaparak Yanıtla
Yanıt

Yerimi olarak kaydedin


Şu an bu konuyu izleyen aktif kullanıcılar: 1 (0 üye ve 1 misafir)
 
Konu Araçları
Modları Görüntüle

Mesaj Yazma Hakları
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Kapalı


Tüm saatler GMT +3. şu anda saat 08:01.


Powered by vBulletin® |Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177