Ortaklarımız: Ant Mekanik , Teknova Shop , Taliasoft

AutoCAD Gunlugu

Üye Girişi

RSS

Autocad Günlüğü RSS besleyicisine üye ol.


Tem 05
Perşembe
AutoCAD, AutoLISP, DCL, Programlama
AutoLISP’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
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: , ,

Şimdiye kadar 2,098 kere okunmus. Bu hafta: 19 Bu gun: 5 En son: 4 July 2009, 18:48

1 Yıldız2 Yıldız3 Yıldız4 Yıldız5 Yıldız (Henüz oy verilmemiş)
Loading ... Loading ...
Yazı Etiketleri:

7 Yorum to “ AutoLISP’te diyalog kutusu programlama: DCL ”
  1. 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. 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. Ö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ıkara

    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

  5. 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. aga ben bisi anlamadım ben öğrenciim:)ben bunun programını arıorum desrte lazın oluo neden bulabilerim…


Yorum bırakın:



All content and source © 2008 Autocad Günlüğü | News Plus wordpress theme brought to you by Zidalgo.