AutoLISP’te diyalog kutusu programlama: DCL
![]() |
Yazar | Muharrem Koçyiğit |
| Mesleği | Makine Teknikeri | |
| AutoCAD, AutoLISP, Visual LISP | ||
| Prosteel Uzmanı | ||
AutoCAD 12 ve üzeri sürümler AutoLISP
Merhaba arkadaşlar,
Uzun bir aradan sonra AutoLISP ile yazılıma devam etmek istiyorum. Bugünkü konumuz diyalog kutusu programlama (DCL dialog control language) ile ilgili bir örnek fonksiyonu açıklamak. DCL:GETINT fonksiyonu kullanıcıdan bir tamsayı girmesini ister (Fig.1). Program portatif şekilde hazırlanmıştır. Lisp diliyle ilgilenen kişiler için kütüphane niteliğindedir.
![]() |
| Fig.1 - DCL - Kutusu |
DCL:GETINT fonksiyonu çalıştırmak için 6 argümana ihtiyaç vardır. Fonksiyonu çağırırken tüm argümanlarını pas etmelisiniz, yani gerek duyulmayan argümanlara Nil olarak vermeniz gerekiyor.
- “
Title“: Pencerenin adı; açılan pencerenin başlık çubuğunda görüntülenen isimdir. Veri tipi ‘STR‘ (String) - “
Prompt“: Kullanıcıya iletmek istediğiniz mesaj verilir. Veri tipi ‘STR‘ (String) - “
Flag” Girilen değerlere ek bir kontrol görevini üstlenir- Bit 1 = Boş değer kabul edilmez
- Bit 2 = Değeri sıfır olan veriler kabul edilmez
- Bit 4 = Sıfırdan küçük sayılar (Negatif) kabul edilmez
- Veri tipi ‘
INT(Integer / tamsayı) yada gerek duyulmuyorsaNil.
- “
Default“: Bir başlangıç değer sunulur. Örneğin en son verilen değeri kullanıcıya hatırlatılır. Veri tipi ‘INT‘ (Integer / tamsayi) yada gerek duyulmuyorsaNil. - “
Max“: Kullanıcının maximum (en fazla) verebileceği tamsayı belirlenir
Veri tipi ‘INT(Integer / tamsayı) yada gerek duyulmuyorsaNil. - “
Min“: Kullanıcının minimum (en az) verebileceği tamsayı belirlenir.
Veri tipi ‘INT(Integer / tamsayı) yada gerek duyulmuyorsaNil.
(DCL:GETINT “MOTOR” “1. Dişli” nil nil nil nil)(Herhangi bir sınırlanma olmadan tamsayı girilmesi istenilir)
(DCL:GETINT “MOTOR” “1. Dişli” nil 4 20 5)(Baslangıç değeri 4. Kullanıcı dişli sayısını 5 ile 20 arasında
girilmesi istenilir)
(DCL:GETINT “MOTOR” “2. Dişli” 6 nil nil nil)(Sıfır ve sıfırdan küçük sayılar dışında tüm değerler girilebilir)
Diğer programlarda olduğu gibi bugün gördüğünüz fonksiyonlar içinde global değişkenlere ihtiyacımız olacak. Global değişkenler, adından da anlaşılabileceği gibi; uygulama içerisinde her hangi bir yerden direk olarak erişime sahip olan değişkenlerdir. Bir değişkeni global düzeyde tanımlamak için GLV: önekini kullanıyoruz. Lisp dosyasını bir araştırmacı gözüyle incelerseniz, dosyanın en sonunda (DCL:INIT:GLOBAL:VALUE) eklenmiştir (Fig.2). Bu yöntemle Lisp dosyası yüklendiği an otomatik olarak bu fonksiyonu işleme sokacak ve içinde bulunan değişkenleri ilklendirecektir (initialize).
![]() |
Fig.2 - Alt Fonksiyon “UTL:INIT:GLOBAL:VALUE“ |
DCL:GETINT-TEST fonksiyonu (Fig.3) programı teste tabi tutar.
![]() |
Fig.3 - Ana (main) Fonksiyon “C:DCL-GETINT-TEST” yada “C:X“ |
DCL:GETINT fonksiyonu (Fig.4) programın temelini oluşturmakta. Diyalog kontrolün ismi “KML_EDITBOX” olarak dcl_name değiskeninde yer almakta (1). Diyaloglar ingilizcede tiles diye tanımlanan mozaiklerden oluşur. Bir ev yapmak istediğiniz zaman nasıl tuğla kullanıp şekil veriyorsanız diyalog programlamada bu tür etiketlere ihtiyaç vardır. Bu etiketlere ulaşabilmek için bir isim (anahtar) vermeniz gerekiyor. Bu değiskenlere öneki key: yazarak diğer değişkenlerden ayırt edebilirsiniz (2).
![]() |
![]() |
![]() |
Fig.4 - Alt Fonksiyon “DCL:GETINT“ |
DCL:USER:INPUT:INTEGER fonksiyonu (Fig.5) girilen değerin kriterlere uygun olup olmadığını kontrol eder. Bu kriterler programın çagrılmasına yani argümanlara bağlı.
![]() |
Fig.5 - Alt Fonksiyon “DCL:USER:INPUT:INTEGER“ |
DCL:USER:CHECK:IS:NUMERIC fonksiyonu (Fig.6) girilen değerin sadece rakamlardan oluşmasına kontrol eder. Aksi halde kabul edilmeyen değer düzenleme kutusunda silinir ve yeniden grilmesi istenilir.
![]() |
Fig.6 - Alt Fonksiyon “DCL:USER:CHECK:IS:NUMERIC“ |
DCL:USER:CHECK:FLAG fonksiyonu (Fig.7)girilen değerlerin boş, sıfır veya sıfırdan küçük olmamasına dikkat eder.
![]() |
Fig.7 - Alt Fonksiyon “DCL:USER:CHECK:FLAG“ |
DCL:USER:CHECK:MIN-VALUE fonksiyonu (Fig.8) girilen değerin minimum sınırını aşılmamasını kontrol eder. Aksi halde kabul edilmeyen değer düzenleme kutusunda silinir ve yeniden grilmesi istenilir.
![]() |
Fig.8 - Alt Fonksiyon “DCL:USER:CHECK:MIN-VALUE“ |
DCL:USER:CHECK:MAX:VALUE fonksiyonu (Fig.9) girilen değerin maximum sınırını aşılmamasını kontrol eder. Aksi halde kabul edilmeyen değer düzenleme kutusunda silinir ve yeniden grilmesi istenilir.
![]() |
Fig.9 - Alt Fonksiyon “DCL:USER:CHECK:MAX-VALUE“ |
DCL:SET:DIALOG fonksiyonu (Fig.10) dosya uzantısı .dcl olan arayüzü AutoCAD sistemine yükler. Dosya bulunmadığı halde hata mesaji verir ve vl-exit-with-value komutuyla programı durdurulur. AutoCAD genelde “Support file search path” bölümünde tanımlanan klasörleri gezerek arama yapar. Autocad de tools->options yolunu kullanarak tanımlanan klasörleri görmek mümkün.
![]() |
Fig.10 - Alt Fonksiyon “UTL:SET:DIALOG“ |
DCL:LOAD:DIALOG fonksiyonu (Fig.11) dosya uzantısı .dcl olan arayüzü AutoCAD sistemine yükler. Dosya bulunmadığı halde hata mesaji verir ve vl-exit-with-value komutuyla programı durdurur. AutoCAD genelde “Support file search path” bölümünde tanımlanan klasörleri gezerek arama yapar. Autocad de tools->options yolunu kullanarak görmek mümkün.
![]() |
Fig.11 - Alt Fonksiyon “UTL:LOAD:DIALOG“ |
UTL:IS:NUMERIC fonksiyonu (Fig.12) kullanıcının girdiği verinin tamamen sayılaradan ibaret olup olmadığını kontrol eder. Veri sayı olarak girilmişse T aksi takdirde Nil geri dönüş değeri verir. Bu değerler bir mantık veri tipidir ve igilizcede Boolean olarak gecer. T‘ nin anlamı True, 1 yani doğru demektir. Nil (Not in List) genelde Lisp dilinde kullananılır False yada 0 olarak eş anlamdadır.
![]() |
Fig.12 - Alt Fonksiyon “UTL:IS:NUMERIC“ |
![]() |
Fig.13 - Dialog Control Language “DCL-GETINT.dcl“ |
Programda kullanılan DCL komutları:
new_dialogload_dialog, unload_dialogstart_dialogset_tile
Konu hakkında soru ve yorumlarınızı bekliyorum. Programı buradan indirebilirsiniz.
Kolay gelsin.
İlgili Yazılar: AutoLISP dersleri
Technorati Tags: AutoCAD, AutoLISP, DCL
Benzer Yazılar


















5 July 2007, Thursday 8:47
Muhteşem bir yazı olmuş Muharrem bey,
Ellerinize sağlık. Ne zamandır okuyucular DCL bekliyorlardı iyi bir giriş yaptık.
Kolay gelsin
5 July 2007, Thursday 11:07
Bu bilgileri bizlerle paylaştığınız teşekkürler Muharrem bey.
Lisp konusunda kaynak sıkıntısı çekiyoruz. A’dan Z’ye geniş anlatımlı bir e-kitap düzenleseniz, biz de engin bilginizden faydalabilsek.
Ayrıca sizinle özel iletişim kurmak isterdim mümkünse…?
6 July 2007, Friday 9:51
Övgüleriniz için, hepinize Teşekkürler. Boşuna yazmadığıma sevindim. Konular birikince elbette bir E-Kitab yayınlayacağız.
Elektronik adressim “m.kocyigit@online.de”.
Sevgi ve saygılarımla
8 July 2007, Sunday 13:21
selam…
hocam şuana kadar attribute komutu hakkında fazla açıklama bulamadım
kitaplarda yüzeysel geçiyor
bildiklerinizi paylaşırsanız sevinirim
teşekkürler Halil
10 July 2007, Tuesday 21:44
Merhaba Halil Bey,
Kıltekin hocamızın yazısını okumuşmuydunuz?
“Bloklarda ATTRIBUTE kullanımı:”
http://www.autocadgunlugu.com/bloklarda-attribute-kullanimi/
anlamadıgınız, takıldıgınız bir konu varsa yardım etmeye çalısırım. Lütfen bana tekrar bildirin,
Görüsmek üzere, saygılarımla …
10 July 2007, Tuesday 21:50
Bir yazı daha buldum
http://www.autocadgunlugu.com/?p=72
7 May 2008, Wednesday 11:01
aga ben bisi anlamadım ben öğrenciim:)ben bunun programını arıorum desrte lazın oluo neden bulabilerim…