AutoCAD’de Programlama İmkanları

İbrahim KOÇ - 21.06.2005 15:26
AutoCAD’de Programlama İmkanları

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.

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 ”);

fprintf(dene,”deneme ”);

/* Burada x1,x2,y1,y2 hesaplanabilir.*/

fprintf(dene,”line ”);

fprintf(dene,”%f, %f %f, %f ”,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.

AutoLISP ve ADS Programlama

AutoLISP ile programlamada, hazırlanan (*.lsp) dosyaları ile çeşitli fonksiyonlar AutoCAD programına yüklenebilir. Parametrik dizayn imkanı veren programlar hazırlanabilir. Ayrıca bir derleyiciye ihtiyaç duymaması önemli üstünlüğüdür. Fakat çok büyük programların hazırlanmasında bazı dezavantajları mevcuttur.

ADS ile programlamada ise bir derleyiciye ihtiyaç duyulur. Derlenerek (*.exe veya *.exp) dosyaları haline getirilen dosyalar AutoCAD tarafından yüklenerek çalıştırılabilir. Çalıştırılabilir dosyaların hazırlanması biraz güç görünebilir. Fakat C++ dilinin imkanlarından faydalanılarak çok karmaşık ve büyük uygulama programlarının hazırlanması mümkün olur.

AUTOLISP PROGRAMLAMA

AutoLISP Programına Giriş

AutoLisp, Lisp programlama dilinin AutoCAD içine yerleştirilmiş bir uyarlamasıdır. AutoLisp dilinde programlar yazarak, AutoCAD'e komutlar ve menüler eklenebilir, makrolar (birbirine bağlanan bir dizi komutlar) ve parametrik tasarım oluşturulabilir.

AutoLisp programının bir yazma ve bir de AutoCAD'e yükleyip çalıştırma işlemi vardır. AutoLisp programını yazmak için bir kelime işlemci (Tekst editör) programı kullanılır. Bunun için AutoCAD'den çıkmadan kullanılabilen ve DOS içinde bulunan Edit veya bağımsız olarak çalışan Write, WordPerfect veya Word gibi programlar kullanılabilir. Ancak yazılan programlar AutoCAD tarafından anlaşılması için ASCII formatında bir dosyada saklanması gerekir. Edit tamamen ASCII kodunda bir dosya oluşturur. Word ve WordPerfect'te DOS Text File olarak saklanması gerekir. Saklanan dosya .lsp uzantılı olmalıdır. Edit gibi programlar AutoCAD'deki çizim ortamından çıkmadan Shell komutu ile kullanılabilir.

Yazılan bir programın AutoCAD'de çalışması için çalışma beleğinde (RAM) bir yer ayrılması gerekir. Belekte yer ayırma işlemi DOS'un SET komutu altında bulunan lispheap, lispstack ve acadfreeram komutları ile yapılır. Lispheap ana saklama belleği ve lispstack, AutoLisp'in if gibi deyimleri için kulanan bir çalışma beleğidir. Acadfreeram, RAM'da AutoCAd için ayrılan hacimden daha büyük bir hacim kullanılmasını sağlar. Genelde 640KB bilgisayarlarda, acadfreeram'ın 24'e ayarlanması yeterlidir. Tüm bu ayarlamalar AutoCAD bilgisayara ilk defa yüklendiğinde yapılır. Bu yapılmadığı durumda şu üç yöntem önerilir; üçüncü yöntem bilgisayar tekniğiyle alışık olmayan veya AutoLisp’i çok ender kullanılan kullanıcılar içindir.

a. AUTOEXEC.BAT dosyasına şu satırlar ekleyin.

set lispheap=39000

set lispstack=5000

set acadfreeram=24

b. AutoCAD'de girildiğinde kullanılacak olan bir batch (*.bat) dosyasını oluşturun. Eğer AutoCAD programı acad adlı bir dizin (directory)'de bulunursa ilk satır olarak cd acad , ondan sonra yukardaki deyimleri ve son satır olarak acad yazınız.

c. Ekranda C:> işareti göründükten sonra a maddesindeki deyimleri satır satır yazın, ancak her satırdan sonra ENTER'e basın.

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.

· Genelde bir AutoLisp ifadesi

(fonksiyon argüman)

şeklindedir. Fonksiyon, AutoLisp'in hangi işlemin yapılacağını belirten deyimdir. Fonksiyon için AutoLisp'e ait ve AutoLisp fonksiyonları denilen deyimler kullanılır; bu fonksiyonlar açılış parantezinden sonra hemen yazılır. Argüman, fonksiyona veri temin eden deyimdir. Argümanlar değişken, sabit veya başka bir fonksiyon olabilir. Bir fonksiyonun bir çok argümanı olabilir veya hiç argümanı olmayabilir. Eğer fonksiyonun bir argümanı varsa, argüman için fonksiyona bir değer verilmesi gerekir.

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.

· İfadelerde şu kodlar kullanılabilir;

anlamındadır.

ENTER anlamındadır.

" " anlamındadır.

Tab anlamındadır.

e Escape amlamındadır.

nn karakterleri nnn olan oktal kod anlamındadır.

Yeni satır anlamındadır.

AutoLisp Sisteminde Değişkenler

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. Bu husus:

(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.

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.

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.

AutoLisp Programların Yüklenmesi ve Çalıştırılması

AutoLisp programları AutoCAD'de: dolaylı, direkt ve Acad.lsp dosyasını kullanarak yüklenir ve çalıştırılabilirler.

a. Dolaylı yöntem bir Tekst Editörü ile yazılmış programlara uygulanır. Burada önce program yüklenir ondan sonra çalıştırılır. Programın yüklenmesi:

(load "dosya adı") örneğin (load " dtr")

ifadesi ile gerçekleşir. Buna yanıt olarak mesaj kısmında programın yüklendiğini gösteren ve programın adı olan dtr mesajı görünür. Programın çalıştırılması için

Command: mesajına (dtr 20) girilir. Dosya adı çift tırnak arasında (" ") ve uzantısız yazılır. Program adı parantez içinde yazılır.

b. Direkt yöntemde herhangi bir AutoLisp komutu, Command (komut): mesajına parantez içinde yazılarak girilebilir. Örneğin:

Command: (setq a 4) veya (setq parça "segman")

girilirse, mesaj kısmında 4 veya "parça" görünür. Aynı şekilde (/ 180 2 4) girilirse, bu hesabın sonucu olan 22 görünür. Bu şekide değişkene bir değer atadıktan sonra, Command: mesajına değişken, önünde ! işareti ile yazılırsa, değişkenin değeri ekranda görülür. Örneğin !a girilirse 4 görünür; !parça girilirse segman görünür. Bir değişkene bir hesap sonucu da atanabilir. Örneğin (setq b (/ 180 2 4)) girilirse sonuç 22 çıkar, ancak daha sonra !b girilirse yine 22 görülür.

c. Yazılan program Acad.lsp dosya sisteminde Acad.lsp adlı bir dosyada saklanır ve her AutoCAD'in yüklenişinde bu dosya da otomatikman yüklenir. Burada programın başına, bellekte gerekirse bir genişletme meydana getiren (vmon) yazılmasında yarar vardır; Örneğin radyan birimini dereceye çeviren bir program:

; Radyan birimini dereceye çeviren program

(defun rtd (a)

(/ (* a 180.0) pi)

)

şeklinde yazılır ve Acad.lsp bir dosyaya saklanırsa, bu program AutoCAD programı ile beraber yüklenir. AutoLisp'te açılar radyan; AutoCAD de ise derece olarak işlem görür. Bu nedenle bir birimi diğerine çevirmek için yukarıdaki uygulamada verilen (dtr) ve burada verilen (rtd) programlarının Acad.lsp dosyasında saklanmasında yarar vardır.

AutoLisp Fonksiyonları

AutoLisp'in komut da denilen bir çok fonksiyonları vardır. Bunların bazıları, örneğin setvar gibi hem Autolisp'e hem AutoCAD'e aittir. Autolisp için bu komut (setvar) şeklinde yazılır. Bu bölümde sadece çok kullanılan bazı komutlar verilecektir. Diğer komutlar hakkında bilgi için AutoLisp Programcı Referans Kitabı bölümüne bakılması önerilir. Yukarıda AutoLisp'e ait (defun) ve (setq) fonksiyonlar hakkında bilgi verilmiştir; bunlar burada tekrarlanmayacaktır.

a. (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.

b. (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.

c. (terpi); ondan sonra gelen mesajların, ondan sonraki satıra yazılmasını sağlar. Fonksiyon kodu ile eşit anlamındadır.

d. (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.

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 " Birinci noktayı seçin"))

(setq pt2 (getpoint " İ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.

e. (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ç"))

f. Çevirme fonksiyonları. (angtos); radyan cinsinden olan bir açıyı, mevcut durumda olan açı birim sistemine çevirir. Burada dikkat edileçek husus (angtos)'ın değeri olmayan bir dizgi olmasıdır. ifade şöyledir:

(prompt (angtos b)) veya (setq a (angtos b))

ve mevcut birim sistemi degrees, minutes, seconds ise örneğin 23d16'25" şeklinde bir değer görünür. Başka birimlere göre ifade edilmek istenirse AutoCAD'in:

0. degrees 1. degrees, minutes, seconds

2. grads 3. radians 4. survey units

şeklinde gösterilen ve flag adını taşıyan numaralarından faydalanılır. Burada ondalık sayısını gösteren bir ikinci sayı daha eklenir. Örneğin:

(prompt (angtos ang1 0 3))

ifadesi örneğin 46.234 şeklinde bir açı değerini gösterir.

(rtos); (angtos) fonksiyonunun benzeri olup uzunluk birimlerini istenilen birim sistemine çevirir ve sonucu dizgi olarak verir. Daha öncede belirtildiği gibi AutoCAD de çizimler çizim birimleri (unit) ile çizilir ve bunlar metrik veya inç sistemine göre ifade edilebilir. Örneğin belirli bir a değişkeninin değeri 45 ve mevcut birim mm ise (prompt (rtos a)) ile 45 mm bir çıkış görünür. Burada da AutoCAD’in.

1. scientific 2. decimal 3. engineering

4. architectural 5. fractional

şeklinde gösterilen birim sisteminin numaralarından yararlanarak:

(prompt (rtos d 1 3))

ifadesi ile uzunluk bilimsel (scientific) sisteme göre ifade edilebilir. Burada da ikinci sayı, ondalık sayısını gösterir.

g. Giriş fonksiyonları. (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.

h. Geometrik fonksiyonlar. (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.

i. (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

(graphscr) fonksiyonu, tek ekranlı sistemlerde alfanümerik ekrandan grafik ekrana geçilmesini sağlar.

j. Nesneleri seçin fonksiyonları. (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

(sslength); seçim kümesindeki nesne sayısını verir. İfade: (setq n (sslength a)) şeklindedir.

(ssname); seçim kümesindeki nesnenin adını verir; ancak bu ad örneğin 70000012 şeklinde, onaltılı (hexadecimal) sayı sistemine göre verilir. İfade: (setq na (ssname a i)) şeklindedir; burada a seçim kümesinin atandığı değişken; i nesnenin indis sayısıdır. Bir seçim kümesinde bir çok nesne olabilir; bu nesneler, seçim kümesi içindeki konumunu gösteren sayılarla indekslenebilir. Örneğin #1 nesne 0, #2 nesne 1 vb. şeklinde indekslenebilir.

(enget); nesneleri listeler. ifade na nesnenin adı olmak üzere: (setq b (entget na)) şeklindedir; !b girerek nesneler kod numaralarına göre listelenir.

(assoc); bir nesnenin belirli bir özelliğini listelemek için kullanılır. Bu özelliğin değeri daha sonra (subst) ile değiştirilebilir.

(const); yeni nesne başa yazılmak üzere yeni bir liste meydana getirir. (entmod), (const) ile oluşturulan listeyi kalıcı yapar.

7. Lojik İfadeler

İ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.

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.

tag: AutoCAD’de Programlama İmkanları, autocad programlama, autocad ile program yapma, autocadi programlamak

Yazar: İbrahim KOÇ
İçerik:
Tag: AutoCAD’de Programlama İmkanları, autocad programlama, autocad ile program yapma, autocadi programlamak

Yorumlar :
eminakbas63   01.12.2017 15:51 #15831  

Hocam öncelikle iyi günler yazınız için teşekkürler. Size bi sorum olacaktı. Acaba autocad te çıktı ekranını c# windows formda görüntüleme imkanımız varmı. Örneğin belediye onayına gönderilecek pafta çiziminin köşe noktalarından yakalayıp sadece paftayı görüntüleme imkanımız varmı?

xmemetx   26.01.2010 20:55 #12364  

ya biz autocad görmeye başladık ama okulda ii göstermiyorlar

karamürselli   04.12.2009 15:23 #12119  

anlaşılabilirlik açısından keşke daha açık bir türkçe kullansak....yazılanlar herkese hitap etsin

hozbelen   11.07.2009 12:04 #11410  

çizim içinde bir layerda oluşturulan nesnelerin giriş sıralamasını düzenleye bilirmiyiz?(ehandle) Yardımlarınız için teşekkürler

duran76   07.02.2009 14:09 #10342  


[img][/img]

duran76   07.02.2009 14:08 #10340  

:yes:no

duran76   07.02.2009 14:08 #10339  

:yes:pkak

107F   07.05.2008 23:14 #8120  

çok güzel bilgiler .... fakat, lisp te 3 boyutlu faturalı kare başlı civata çizmemde bana yardımcı olurmusunuz acaba...projem var ve bu proje yi 3 hafta içinde teslim etmem gerekiyorrr..

xxxmehmet   09.10.2007 13:32 #5905  

eline sağlık ii olmuş

demirtarik   11.12.2006 22:44 #1286  

elınıze saglık guzel olmusta bısı soracaktım bu c deryıcısınde mı yazılıyo ? yazıldıktan sonra bu komutlar cızıme mı donusuyor solersenız sevınırım ??

Selcuklu   22.08.2006 17:48 #489  

Eline sağlık çok Güzel olmuş

Copyright © 2004-2022 SQL: 0.101 saniye - Sorgu: 35 - Ortalama: 0.0029 saniye