Reklam ver...

AutoLISP’te diyalog kutusu programlama: DCL



Yazar Muharrem Koçyiğit
Mesleği Makine Teknikeri
  AutoCAD, AutoLISP, Visual LISP
  Prosteel Uzmanı
e-mail  

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

  1. Title“: Pencerenin adı; açılan pencerenin başlık çubuğunda görüntülenen isimdir. Veri tipi ‘STR‘ (String)
  2. Prompt“: Kullanıcıya iletmek istediğiniz mesaj verilir. Veri tipi ‘STR‘ (String)
  3. Flag” Girilen değerlere ek bir kontrol görevini üstlenir 
    1. Bit 1 = Boş değer kabul edilmez 
    2. Bit 2 = Değeri sıfır olan veriler kabul edilmez
    3. Bit 4 = Sıfırdan küçük sayılar (Negatif) kabul edilmez
    4. Veri tipi ‘INT (Integer / tamsayı) yada gerek duyulmuyorsa Nil.
  4. 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 duyulmuyorsa Nil.
  5. Max“: Kullanıcının maximum (en fazla) verebileceği tamsayı belirlenir
    Veri tipi ‘INT (Integer / tamsayı) yada gerek duyulmuyorsa Nil.
  6. Min“: Kullanıcının minimum (en az) verebileceği tamsayı belirlenir.
    Veri tipi ‘INT (Integer / tamsayı) yada gerek duyulmuyorsa Nil.

 (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
Fig.2 - Alt Fonksiyon “UTL:INIT:GLOBAL:VALUE

DCL:GETINT-TEST fonksiyonu (Fig.3) programı teste tabi tutar.

Fig.3
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-1
Fig.4-2
Fig.4-3
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
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
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
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
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
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
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
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
Fig.12 - Alt Fonksiyon “UTL:IS:NUMERIC
Fig.13
Fig.13 - Dialog Control Language “DCL-GETINT.dcl

Programda kullanılan DCL komutları:

  • new_dialog
  • load_dialog, unload_dialog
  • start_dialog
  • set_tile

Konu hakkında soru ve yorumlarınızı bekliyorum. Programı buradan indirebilirsiniz.

Kolay gelsin.

İlgili Yazılar: AutoLISP dersleri

Technorati Tags: , ,

Benzer Yazılar

3 Votes | Average: 5 out of 53 Votes | Average: 5 out of 53 Votes | Average: 5 out of 53 Votes | Average: 5 out of 53 Votes | Average: 5 out of 5 (3 oy, ortalama: 5)
Loading ... Loading ...

7 yorum “AutoLISP’te diyalog kutusu programlama: DCL”

  • 1
    Orhan TokerNo Gravatar
    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

  • 2
    HüseyinNo Gravatar
    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…?

  • 3
    MuharremNo Gravatar
    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

  • 4
    halil sırtıkaraNo Gravatar
    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

  • 5
    MuharremNo Gravatar
    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 …

  • 6
    MuharremNo Gravatar
    10 July 2007, Tuesday 21:50

    Bir yazı daha buldum
    http://www.autocadgunlugu.com/?p=72

  • 7
    ertanNo Gravatar
    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…

Yorum bırak