You are on page 1of 5

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

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

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

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

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

Ö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

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

You might also like