AutoCAD Günlüğü | » Visual LISP: Open DCL ile kolay DCL arayüzler programlamak > AutoCAD, AutoLISP, AutoCAD Dersleri, Mekanik Tesisat, Bilgisayar, Yazılım, Özel Yazılım

Visual LISP: Open DCL ile kolay DCL arayüzler programlamak


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

Visual LISP ve open DCL

Fig.0Merhaba arkadaşlar,

DCL ile ilgili ilk yazıma başlarken, sizlere bundan sonra nasıl kolay ve çabuk bir şekilde arayüz tasarlama tekniğini öğretirim diye düşünüyordum. Bu nedenle bu yazımda, uzun bir zamandır Açık kaynak yazılımı (open source) olarak gündemde olan Open DCL paketine biraz açıklık getirmek istiyorum. OpenDCl, Visual LISP ile programlama yaparken DCl arayüzlerini daha kolay tasarlamanız için geliştirilmiş açık kaynak kodlu bir AutoCAD eklentisidir. Önceleri Object DCL ile satışa sunulan programı denedim, fakat hatalarla dolu olduğu icin kullanmaktan vazgeçmiştim. Open DCL projesinin başında bulunan Owen Wengerd, David Robinson ve diğer arkadaşları paketi mükemmel bir araç haline getirmişler. Kendilerine buradan Teşekkürler.

Programı kullanmak için Runtime ve Studio sürümünü indirmek zorundasınız. Runtime versiyonu AutoCAD için gerekli olan ARX programlarını “OpenDCL.16.arx” ve “OpenDCL.17.arx” barındırır. AutoCAD 2008 - 64 Bit sürümü için gerekli olan “OpenDCL.x64.17.arx” dosyasıda bulunmakta. Runtime paketin ismi “OpenDCL.Runtime.ENU.4.0.3.1.msi” olarak geçer ve Şekil.1′deki görüntüye benzer kişisel arayüzleri göstermeye yarar. OpenDCL Studio arayüz tasarımı için gerekli olan programdır. Visual Basic™ veya Microsoft Studio™ .Net kullanıcıları için yabancı gelmeyecektir.

Programın ana sayfası www.opendcl.com download için bir link bulundurur. (Not: SourceForge sitesinde hazır bulundurulan install paketleri karşınıza çıkmıyorsa Firewall ile Port 443 kapatılmış olabilir!. Bunu açık tutmalısınız)

Gelelim Orhan beyin önceden yazdığı ilkel :) Find-Replace uygulamasının Visual Lisp ile uyarlanmış sürümüne. Farenizin sağ tuşunda bulunan kısayol menüdeki Find komutunun bir basit uygulaması olarak düşünebilirsiniz. Maksat basit bir şekilde sizlere AutoLisp dilini öğretebilmek. Örneğin seçim seti nasıl kullanılır?. Özellikle VisuaLisp dilinde biraz tecrübe gerektiren alt fonksiyonları da hazır bir şekilde sunuyoruz. Gerisi sizlerin azminize kalmış :)

Fig.1
Fig.1 - Ana (main) Fonksiyon “C:FR_ODCL” veya “C:X

Kontrol nesneleri icin seçilen olaylar (Event) program tarafından şablon olarak fonksiyonların ismi oluşturulur. Aşağıda kırmızı ile yazılmış kısmı kopyalayıp AutoLisp koduna kolaylıkla ekliyebilirsiniz (Şekil.2)

Fig.2
Fig.2 - TextBox için gerekli olan Event - EditChanged

Form üzerinde kullanılan kontrol nesnelerini ve kullanıcının hangi olayda (Event) ne tür AutoLISP fonksiyonu ile bağlantılı oluşunu bir tablo haline getirip konuya biraz açıklık getirmek istedim (Şekil.3) Find-Replace formumuzda üç değişik nesneler bulunmakta.

  • Komut butonu (Command Button)
  • Metin Kutusu (Text Box)
  • Etiket (Label)
Fig.3
Fig.3 - FR.ODCL dosyasında bulunan methodlar.

Aşağıda gördügünüz gibi “_OpenDCLUtils.lsp” programını yükleyip, LoadRuntime fonksiyonunu ilk önce devreye sokuyoruz (Şekil.4). LoadRuntime ile gerekli olan ARX dosyası böylelikle otomatikmen kullanıma hazır olacak ve Open DCL ayıt olan fonksiyonları hata vermeden kullanacağız.

OpenDCLUtils.lsp isimli programı \Program Files\Open DCLStudio\Examples dosyasında görmek mümkün (Not: Önek “_” karaketrini ben ilave ettim. Diğer dosyalardan ayırabilmek için işime yarıyor).

Fig.4
Fig.4 - Ana (main) Fonksiyon “C:FR_ODCL” veya “C:X

AutoCAD ekranında arayüz görüntülenmeden önce değişkenler için gerekli olan verileri girmeniz gerekir. Form için gerekli olan Initialize methodu bu işe yarar. (Şekil.5)

Fig.5
Fig.5 - Alt Fonksiyon “C:FR_frmFndRep_OnInitialize

Metin kutusunda veriler herhangi bir değişikliğe uğradığı takdirde EditChanged olayı kullanılır (Şekil.6)

Fig.6
Fig.6 - Alt Fonksiyon “C:FR_frmFndRep_txtRep_OnEditChanged

Farenizle Tamam dügmesine (OK-Button) tıkladığınız zaman devereye giren alt fonksiyon (Sekil.7)

Fig.7
Fig.7 - Alt Fonksiyon “C:FR_frmFndRep_cmdOK_OnClicked

İptal / vazgeç düğmesine bağlı olan olay OnClicked (Şekil.8)

Fig.8
Fig.8 - Alt Fonksiyon “C:FR_frmFndRep_cmdCancel_OnClicked

C:FR_LispExe fonksiyonu tüm TEXT nesnelerini filtreler ve değiş tokuş işlevini görur. Eğer işlem başarıyla bitirilmiş ise ne kadar nesnelerin değerleri değistiğini bir sayı olarak geri verir (Return Value).

Fig.9
Fig.9 - Alt Fonksiyon “C:FR_LispExe”

Bazen arayüzü kullanmak işimize yaramaz ve komut satırı ile girilmesi daha uygun olur. Örneğin AutoCAD Script’i ile otomatik şekilde bir uygulamanız var ise. C:FR komutu (Şekil.10) yukarıdaki C:FR_ODCL (Şekil.4) gibi ortak bir yönü vardır. Her ikiside alt fonsiyonu C:FR_LispExe‘yi kullanır. Komut satırı veya arayüz ile çalısmak istiyorsanız sistem değişkeni FILEDIA‘nın değerini kontrol edip ona göre programı yönlendirmek mümkün (1=Arayüz,0=Satır komutu).

Fig.10
Fig.10 - Ana Fonksiyon “C:FR”

AutoLisp’de bulunan getstring‘e benzer bir alt fonsiyon (UTL:GET:STRING)

Visual Lisp olarak uyarlanmışdır (Sekil.11).

Fig.11
Fig.11 - Alt Fonksiyon “UTL:GET:STRING

Bundan önceki yazdığım C:DelPtX programında bulundurulan alt fonsiyonları aşağıda tekrar görülmekte. UTL:ADD:SELECTIONSET (Şekil.12) ve UTL:SEL:SET-FILTER (Şekil.13) bugünkü örneğimizde yine kullanacağız.

Fig.12
Fig.12 - Alt Fonksiyon “UTL:ADD-SELECTIONSET
Fig.13
Fig.13 - Alt Fonksiyon “UTL:SEL:SET-FILTER

Programda kullanılan VisualLisp komutları:

  • vl-catch-all-error-p, vl-catch-all-apply
  • vlax-for, vla-Add, vla-item
  • vlax-Select, vla-SelectOnScreen, vla-Highlight
  • vlax-SafeArray-Fill, vlax-Make-SafeArray

Kolay gelsin,

Technorati Tags: , ,

Benzer Yazılar

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

8 yorum “Visual LISP: Open DCL ile kolay DCL arayüzler programlamak”

  • 1
    Hüseyin
    20 November 2007, Tuesday 11:09

    Muharrem kardeşim bu bulunmaz bilgileri bizlere sunduğun için önce teşekkür ediyorum…
    Ancak çok değerli bilgiler olmasına rağmen bu konularda yeterli bilgi altyapımız olmadığından dolayı şuan çok yabancı kalıyoruz ve dolayısıyla bu değerli bilgileri birçoğumuz çok önemsemiyoruz…
    Biz sanıyoruz ki autocadi yükleriz. proğramı çalıştırıp çizdik mi yeter…. ama şu bilgileri görünce proğralama diline yabancı olmamama rağmen 14 senelik autocad kullanıcısı olarak ne kadar eksik olduğumu farkediyorum…
    Şahsen bundan sonra bunları öğrenmek mümkün olur mu bilmiyorum ama engin bilginle bizlere ışık olduğun için çok teşekkür ediyorum ve yazılarının devamını bekliyoruz kardeşim…

  • 2
    ahmet odabaş
    20 November 2007, Tuesday 12:54

    valla açık sölicem profosyonel autocad kullanıcısı ve ileri düzey pc kullanıcısı olarak belli başlı kısımlar hariç hiçbişe anlamadım.Bu belkide anlatımınızdan değil bu lisp olayının tamamen programcılıga kaymasından kaynaklanıyor.Ve Autocad kullancılarının ancak %5 i ya kullanıyor ya kullanmıyor lisp konusunda ciddi bir eğitim boşlugu var ve konular resimli anlatımlarla malesef anlaşılamıyor.Yazınıza ve emeğinize tşkrler.

  • 3
    Muharrem Koçyiğit
    20 November 2007, Tuesday 22:25

    Evet Arkdaşlar, konumuz ileri düzeyde programlama tekniğiyle ilgili olduğu için konun girişini biraz değişik anlatmalıydım. Düşüncelerinizi yazdığınız için, sizlere çok teşekkür ediyorum (asıl hiç bir hareket olmayınca insan yılıyor). Ahmet ve Hüseyin bey sağolun.

    Sanırım bu konuyla ilgili daha geniş bilgi vermek için, üç yeni tema daha yazmam gerekecek:

    1. DCL ile Open DCL arasindaki farki cok daha basit bir uygulamayla sizlere yan yana göstermek.
    2. DCL Studio nedir nasıl kurulur (bol resimli)
    3. Olay (Event) nedir ne işe yarar.

    Ne dersiniz?

  • 4
    ahmet odabaş
    21 November 2007, Wednesday 22:15

    evet hocam düzeyi biraz düşürürseniz sanırım altyapım sayesinde daha iyi anlayabileceğim :) özveriniz için tekrar teşekkürler merakla bekliyoruz.

  • 5
    murat
    30 November 2007, Friday 16:20

    muharrem hocam oncelıkle emegınız ıcın tesekkur ederım…
    bu konu hakkında vercegınız genıs bılgıyı sabırsızlıkla beklıyorum saygılarımla..

  • 6
    sinan öztürk
    2 December 2007, Sunday 22:58

    ektiğiniz güller hakkını verecek elbette acizhane ricam biz gibi yeni başlayanların seviyesene inmeniz güzel sonuçlar alınacığa inanıyorum sevgilerimle

  • 7
    sedat
    28 December 2007, Friday 12:32

    Sitenizi mümkün olduğu kadar takip etmeye çalışıyorum. Öncelikle sizlere bilgilerinizi bizimle paylaştığınız için teşekkür etmek istiyorum. Ben aktif bir autocad kullanıcısıyım bu nedenle değişiklikleri takip etmek zorundayım. Bunu genelde kitaptan takip ediyordum fakat kitapta olmayan komutların bu sitede mevcut olduğunu gördüm bundan dolayı sitenizin artık bir üyesi oldum. Sizden ricam yeni çıkan komutları mail adresime göndermeniz. Böylelikle daha kolay takip etmiş olacağım. İşimden dolayı internete girmeye pek vakit bulamıyorum en azından sizin gönderdiğiniz bilgiler doğrultusunda internete girip komutları inceleyeceğim ve böylelikle benim için bir vakit kaybı söz konusu olmayacak. Size tekrar teşekkür ediyor yazılarınızın ve paylaşımlarınızın devamını bekliyorum. Bu arada hepinizin yeni yılını kutluyorum.

  • 8
    Muharrem Koçyiğit
    2 January 2008, Wednesday 22:54

    Merhaba Sedat Bey,

    yenilikleri kaçırmamak için NewsLetter gibi bir abonelik olması gerekiyor. Fakat bu işten ben pek anlamam bunu Orhan Bey’e sormak gerekiyor. Olurmu olmazmı? Internet Explorenize sitemizi Feed’s olarak kayıt edebilirsiniz. Bende herkesin yeni yılını kutluyor, Mutlu bir yaşam geçirmenizi diliyorum.

Yorum bırak