1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

AutoLISP Alıştırması- Blokları ve IF İfadesini Kullanma

Sekil-01

Bu alıştırmamızda bir AutoCAD bloğu ile çalışacağız. Kotları etiketleyen bir bir program yazacağız. Fakat bu sefer mevcut bir bloğumuzu kullanacağız. Blok kullanmanın birçok avantajı vardır. Çizmekle zaman harcamayız ve yazıları bloğun özniteliğine “attribute” yerleştirebiliriz.

Blok Dosyasını Hazırlama

Başlamadan önce, bu dosyayı indirmeniz gereklidir. Aşağıdaki şekilde kot etiketi olarak kullanacağımız bloğu görüyorsunuz.

Sekil-02

Dosyayı kütüphane klasörünüze kaydedin. Ben dosyayı D:\acadlib konumunda bulunan kendi kütüphane klasörüme kaydettim. Sizin klasörünüz tabi ki farklı olabilir.

Öncelikle dosyamızın bulunduğu konumu (klasörü) AutoCAD’in destek dosya araştırma klasör yoluna ayarlamamız gerekecektir. AutoCAD’de Seçenekler “Options” iletişim kutusunu (Komut satırına OP yazıp Enter tuşuna basarak) açın ve aşağıdaki şekilde görüldüğü gibi klasörünüzü Dosyalar “Files” sekmesindeki Destek Dosya Araştırma Klasör Yoluna “Support File Search Path” ekleyin.

Sekil-03

Kullanacağımız Komut

Tabi ki, tahmin etmek çok kolay: bloğumuzu yerleştirmek için, INSERT komutunu kullanacağız. Şayet AutoCAD’de komut satırına INSERT yazıp Enter tuşuna basarsanız, AutoCAD Yerleştir “Insert” iletişim kutusunu açacaktır. Bu AutoLISP programımızda işe yaramaz. AutoLISP iletişim kutuları vasıtasıyla değil de sadece komut satırından veya ekrandan girilen verilerle çalışır.

AutoCAD’in iletişim kutusunu açmasını engellemek için, komutun önüne tire ( ) işareti eklememiz gerekir. Komut satırına –INSERT yazın ve Enter tuşuna basın. Neden bahsettiğimi anlıyor musunuz?

Sekil-04

Bu yöntemi kullanacağız.

AutoLISP programımızda tanımlayacağımız –INSERT komutu sadece isim ile bloğu yerleştirecektir. Şayet program bloğu bulamazsa, blokla aynı isimli çizimi araştıracak ve blok olarak yükleyecektir. Daha sonra DWG çizimini blok olarak yerleştirecektir. Dosya konumunu AutoCAD’in destek dosya araştırma yoluna koymamızın sebebi budur. AutoCAD dosyayı o konumdan yükleyecektir.

Gerisi çok kolay; yüksekliği koordinat listesinden alabilir ve bu değeri blok özniteliğine “attribute” yerleştirebiliriz.

Yani temel programımız aşağıdaki gibi olacaktır:

(defun c:  kot (/ labelposition y)
(setq labelposition (getpoint ”
Pick Label Position: “))
(setq y (cadr labelposition))
(setq y (rtos y))
(command “_-insert” “kot” labelposition 1 1 0 y)
)

Daha Fazla Yetenek Ekleme

Şayet AutoCAD’in kullanıcıya loğun ölçeğini değiştirme izni vermesini isterseniz, makalenin ilerilerinde bunu da yapacağız.

Sonraki işimiz kot değeri olarak 0 değeri girildiği zaman, etiketin değerini +0.00 olarak değiştirmek olacak. Mimarlıkta ve inşaat mühendisliğinde sıfır kotu +0 olarak değil de +0.00 olarak gösterilmektedir. Değeri kodumuza ilave bir IF ifadesi ekleyerek değiştireceğiz.

Ölçeği Değiştirme Yeteneğini Ekleme

Şayet bloğu incelerseniz, bloğu 1:1 ölçekte yaratığımı görürsünüz. Şayet bu bloğu 1:100 ölçekli bir çizime yerleştirirseniz, yerleştirdikten sonra tekrar ölçeklemeniz gerekecektir. Bunun bu şekilde olmasını istemeyiz değil mi?

Öyleyse, bir değişken daha ekleyeceğiz. Bu sefer değişken genel değişken olacaktır. Yani AutoCAD programımız sonlandıktan sonra da değişkeni tanımaya devam edecektir. Böylece bu değişkeni diğer LISP programlarımız için de kullanabiliriz.

Programın her kullanıldığında kullanıcıya ölçeği sormasını istemeyeceğimiz için, IF ifadesini kullanacağız.

IF İfadesinin Yapısı

(IF (ifadesi)  (şayet doğruysa, şunu yap) (şayet yanlışsa, bunu yap))

İki adet IF ifadesi ekledim:

(if (= cnglobalscale nil)
(setq cnglobalscale (getreal ”
Etiketin Gösterimi için Genel Ölçeği Ayarlayın <1/1>: “))
)
(if (= cnglobalscale nil)
(setq cnglobalscale 1)
)

Şimdi bu kodu inceleyelim:

  • Birinci IF ifadesi genel ölçeğin ayarlı olup olmadığını (değerin boş olup olmadığını) kontrol edecektir. Şayet boş ise, kullanıcıdan ölçek verisini isteyecektir.
  • İkinci IF ifadesi kullanıcının veri girip girmediğini kontrol edecek ve sadece Enter tuşuna basacaktır. Kullanıcı bir değer girmezse, ölçek değeri hala boş olacağı için; kullanıcının ön tanımlı ölçek değeri olan 1:1 değerini kullanmak istediğini kabul edeceğiz. Bu yüzden <1/1> gösterimini yazıyoruz. Böylece kullanıcıya şayet herhangi bir değer girmezse, ön tanımlı değer olan 1:1 ölçeğini kullanacağımızı bildiriyoruz. Bu AutoCAD’de ön tanımlı değeri sunmanın genel yoludur.

Artık program aşağıdaki hale gelecektir:

(defun c: kot (/ labelposition y)
(if (= cnglobalscale nil)
(setq cnglobalscale (getreal ”
Etiketin Gösterimi için Genel Ölçeği Ayarlayın <1/1>: “))
)
(if (= cnglobalscale nil)
(setq cnglobalscale 1)
)
(setq labelposition (getpoint ”
Etiketin konumunu Tıklayın: “))
(setq y (cadr labelposition))
(setq y (rtos y))
(command “_-insert” “kot” labelposition cnglobalscale cnglobalscale 0 y)
)

(defun c:cnkotscale ()
(setq cnglobalscale (getreal ”
Etiketin Gösterimi için Genel Ölçeği Ayarlayın “))
)

Kullanıcılar istedikleri zaman ölçeği değiştirebilsinler diye bir fonksiyon daha ekledim. Genel ölçek boş olduğu zaman, ölçeği sadece bir kez sorduğumuzu hatırlayın. Fakat artık programı çalıştıran KOT komutu girildiğinde önce ölçek sorulacaktır.

Sıfır Kotunda Yazıyı Değiştirme

Yukarıda da değindiğim gibi, sıfır kotu için sıfır ( 0) kotu için,  + 0.00 gösterimini kullanmayı tercih ediyoruz. Bu değişikliği yapmak oldukça basit değil mi?

(setq y (rtos y)) ifadesini kullanmak yerine

(if (= y 0) (setq y “%%p 0.00”) (setq y (rtos y))) ifadesini kullanacağız.

Kod Y değerinin sıfır (0 )olup olmadığını kontrol edecek ve şayet öyleyse bu sıfır (0 ) değerini(  + 0.00 ) değeri ile değiştirecektir. Şayet değilse, orijinal değeri kullanacaktır.

Kodun Son Hali

Bu özellikleri ekledikten sonra kodumuzun son hali aşağıdaki gibi olacaktır:

; AutoCADBeyni.com açıklama araçları
; by: Sertan Türkan

(defun c:kot (/ labelposition y)
(if (= cnglobalscale nil) ; this will check if user already has defined the drawing scale
(setq cnglobalscale (getreal ”
Etiketin Gösterimi için Genel Ölçeği Ayarlayın <1/1>: “))
)
(if (= nglobalscale nil) ; bu kullanıcının ön tanımlı değeri seçip seçmediğini kontrol edecektir
(setq cnglobalscale 1)
)

(setq labelposition (getpoint ”
ETIKETIN KONUMUNU TIKLAYIN: “))
(setq y (cadr labelposition))
(if (= y 0) (setq y “%%p 0.00”) (setq y (rtos y))) ; bu sıfır kotunda olduğu zaman, yazıyı değiştirecektir
(command “_-insert” “kot” labelposition cnglobalscale cnglobalscale 0 y)
(princ)
)

(defun c:nscale () ; bu kullanıcıya ölçeği değiştirebilme olanağı veren fonksiyondur
(setq nglobalscale (getreal ”
Etiketin Gösterimi için Genel Ölçeği Ayarlayın: “))
)

Bu program sorunsuz çalışır. Fakat etiketin değerinin otomatik olarak güncellenmemesi bir sorundur. İlerleyen günlerde yayımlayacağım varlık seçimlerini ele alacağım makalemde bu değerleri nasıl güncelleyeceğinizi de anlatacağım.

 

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

2.1.3 – Bodrum Kat – İç Duvarlar

Bodrum katının dış ve iç duvarlarının son düzeni, aşağıdaki bodrum katının çiziminde gördüğünüz gibi olacaktır …

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.