Reklam ver...

AutoLISP ile İki Nokta Arasındaki Eğimi Ölçmek ( Visual LISP Alternatifi )



Yazar Erhan Toker
Mesleği Y. Mimar İTÜ
  Autodesk Yetkili Danışmanı
web Programcı
e-mail  

Tüm Visual LISP sürümleri için

Bu yazıda Sn.Muharrem Koçyiğit Bey’in bize gönderdiği bir LISP örneğini açıklamaya çalışacağım.

Bu yazı, daha önce benim yazdığım 1/3 Eğimli çatıyı 3 boyutlu çizmek ve AutoLISP ile İki Nokta Arasındaki Eğimi Ölçmek yazılarının devamı niteliğinde; bunun da ötesinde tal_slope.lsp dosyasında verilen programcığın Visual LISP uyarlaması ( tal_slope-ax.lsp ). Visual LISP ile LISP arasındaki farkı  Muharrem Bey daha önce bize anlatmıştı. Böylesine güzel yazılmış bir örnek ve aynı amaca hizmet eden iki programcık ile detayı daha iyi göreceğiz. Yazıya başlamadan önce, bu örneğin, üstadımız Sn.Muharrem Koçyiğit tarafından hazırlandığını hatırlatmak isterim.

 Fig.1
Fig.1

Dosyanın en başında ( vl-load-com ) fonksiyonu ile VB COM nesnelerini başlatıyoruz ( initializing ). Genel bir kod yazım tekniği olarak dosyaların başına açıklama satırları ve kimin tarafından yazıldığı konulur. Bu vesile ile bunu da görmüş olduk :).
İlk yazımızda tanıttığımız ( ut-get-object ) fonksiyonuna karşılık üç ayrı fonksiyon hazırlanmış: ( 1 ) ( ax:EntSel ), ( 2 ) ( ax:GetPoint ), ( 3 ) ( ax:Get:Object ) ( Şekil 2 ).

 Fig 2
Fig.2

Her üç fonksiyonda da hata tutma ( error handling ) fonksiyonları VL formatında hazırlanmış. Bu fonksiyonlar dışındaki hatalar geleneksel AutoLISP ile kontrol ediliyor.
Şimdi bu ana fonksiyonumuzu incelemeye başlayalım ( Şekil 3 ).

Fig.3
Fig.3

Tanımlamada gördüğünüz gibi komutumuzun ismi SLOPEX olacak. ( get_sys_vars ) birkaç tane sistem değişkenini saklar ve ( set_sys_vars ) ta CMDECHO, OSNAP değişkenlerini komut işleyişine göre ayarlar. 3. satırda ise hata ayıklama rutinimizi ayarlayarak devam ediyoruz. İlk programdan farklı olarak, ACAD-Object, ActiveDocument ve Utility COM nesenelerini, ilgili VL fonksiyonları ile birer değişkene alıyoruz. Bu değişkenleri Şekil 2’de gösterilen fonksiyonlarda kullanacağız.
Seçilen iki nokta arasındaki eğimi bulmak için, program tasarımcısı olarak iki metod önermiştik. Birincisi iki nokta seçmek, ikincisi ise bir çizgi seçerek bu çizginin iki noktasını kullanmak. Bu sebeple, AutoCAD komut satırı yapısını kullanarak nokta alma fonksiyonunu seçenekli kullanacağız ve kullanıcı isterse seçimin LINE olarak düzeltebilecek ( Şekil 4 ).

 Fig.4
Fig.4

Kullanıcı nokta işaretlemek yerine ENTER tuşuna basma seçimini yaparsa p1 değişkeni null değerini alacaktır ( VL’ te nil yerine null geldiğine dikkat ediniz ). Kullanıcı bir çizgi seçerek devam etmek isterse ( ax:Get:Object ) ile bir çizgi seçtirip VL nesne özelliklerinden başlangıç ve bitiş noktalarını  p1 ve p2 ye yükleriz. Eğer kullanıcı ilk soruya bir nokta seçerek cevap vermişse p1 zaten ilk seçtiği nokta olacaktır ve ( while ) döngüsü ile kullanıcıya ikinci nokta seçtirilecektir. Bu değer de p2 ye yerleştirilecektir. Artık elimizde iki adet 3 boyutlu nokta var. Şimdi ihtimallerimiz şunlar, bu iki nokta yer düzleminde olabilir ( p1.z = p2.z ) ya da Z koordinatları farklı olabilir. Eğer her iki nokta da yer düzleminde ise Y koordinatları ile diğer durumda da Z koordinatları ile hesap yapacağız ( Şekil 5 ).

 Fig.5
Fig.5

Önceki örnekteki gibi koordinat bileşenlerini x, y, z olarak ayırmak yerine p1 ve p2 yi safearray listesi olarak kullanıyor ve buna göre hesaplarımızı tamamlıyoruz. Daha sonraki aşamada ise eğimi ekrana yazdırıyoruz ( Şekil 6 ).

Fig.6
Fig.6

Muharrem Bey’in yazdığı kodun seçkinliğine dikkatinizi çekerim. VL’ in bütün incelikleri kullanılmış. İşte ekrandaki sonuç ( Şekil 7 ).

Fig.7 
Fig.7

İlgili yazılar: http://www.autocadgunlugu.com/autolisp-ogreticisi/, AutoLISP Uygulamalarını Otomatik Yüklemek, AutoLISP ile İki Nokta Arasındaki Eğimi Ölçmek, tal_slope.lsp, tal_slope-ax.arx

Technorati Tags: , ,

Editörün Notu: Bu konuyla ilgili Muharrem Bey’in bir yazısını yakında yayınlayacağız.

Benzer Yazılar

1 Votes | Average: 5 out of 51 Votes | Average: 5 out of 51 Votes | Average: 5 out of 51 Votes | Average: 5 out of 51 Votes | Average: 5 out of 5 (1 oy, ortalama: 5)
Loading ... Loading ...

2 yorum “AutoLISP ile İki Nokta Arasındaki Eğimi Ölçmek ( Visual LISP Alternatifi )”

  • 1
    hasan selduzNo Gravatar
    10 May 2007, Thursday 15:22

    hocam merhaba,
    bir sorum olacak
    diyelim 3boyutlu bir dişli veya başka bir nesne çizdik bunu çalışır halde autocadde nasıl gösterebiliriz …mpeg olarak nasıl kayıt edebiliriz cevaplayabilirseniz memnun olurum
    saygılarımla
    hasan selduz

  • 2
    Erhan TokerNo Gravatar
    11 May 2007, Friday 10:42

    Hasan Bey,
    Sitemiz bilgi paylaşım esaslıdır. Soru cevap şeklimiz yoktur. Ancak bu tip soruları, öneri olarak alıp, zamanla yayınlama yoluna gidebiliriz.

Yorum bırak