Perşembe
AutoCAD, AutoLISP, DCL, ProgramlamaAutoLISP’te diyalog kutusu programlama: DCL
|
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
Şimdiye kadar 2,098 kere okunmus. Bu hafta: 19 Bu gun: 5 En son: 4 July 2009, 18:48Yazı Etiketleri:
İLGİLİ YAZILAR
POPÜLER
- Çizimlerinizde Kullanabileceğiniz 10 Adet Ağaç Bloğu
07/04/2009 09:10 am
1 Comment - Command: _GROUP
07/04/2009 09:01 am
5 Comments - 289 Adet elektrik sembolü Download köşemizde
07/04/2009 08:34 am
6 Comments - Gerçek mimari planlar üzerinde kanal tasarım usülleri…
07/03/2009 09:50 am
5 Comments - Beyin kanaması
07/02/2009 10:48 pm
96 Comments
ÖNERİLENLER
- Mobilya seçerken dikkat edilmesi gereken püf noktaları
- 3DS Max İle Gerçek Görünümlü Bulut Yapımı
- Halılar hakkında küçük ipuçları
- Gardıropları etkili kullanma yöntemi
- 25 Farklı 3D Tasarım Programı
- Antre mobilyası hakkında bilgi
EN SEVİLENLER
- Atatürk’ün Dış Siyaset Üzerine Sözleri




(5 oy 5.00) - AutoCAD’de Ölçek Kavramı ve Birimleri Anlamak




(4 oy 5.00) - Farenizin Sağ Tuşunu Daha Etkili Kullanın!




(4 oy 5.00) - “Generic Host Process for Win32 Service” Hatası!




(2 oy 5.00) - Autocad 2007′ye ilk Türkçe kitap Gökalp Baykal’dan




(2 oy 5.00)

















Tem 5, 2007
Yanıtla
Muhteşem bir yazı olmuş Muharrem bey,
Ellerinize sağlık. Ne zamandır okuyucular DCL bekliyorlardı iyi bir giriş yaptık.
Kolay gelsin
Tem 5, 2007
Yanıtla
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…?
Tem 6, 2007
Yanıtla
Ö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
Tem 8, 2007
Yanıtla
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
Tem 10, 2007
Yanıtla
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 …
Tem 10, 2007
Yanıtla
Bir yazı daha buldum
http://www.autocadgunlugu.com/?p=72
May 7, 2008
Yanıtla
aga ben bisi anlamadım ben öğrenciim:)ben bunun programını arıorum desrte lazın oluo neden bulabilerim…