1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

AutoLISP Dersleri #10-Veri Girişi ve Çıkışı

Programların en önemli kısmı, veri giriş / çıkış kısmıdır. Bu kısımlar programınızın kullanıcıdan bilgi aldığınız ve depolama alanında bilgileri (verileri) depoladığınız veya depolama alanındaki bilgileri (verileri) elde ederek kullandığınız kısımlarıdır. Programlamanın çok önemli bir parçası olan İletişim Kontrol Dili (İKD) “Dialog Control Language (DCL)” konusunu Autolisp konusu içerisinde kullanımı olsa da kendi başına ayrıca incelenmesi gerektiğinden bu makale dizisinde incelemeyeceğiz.
Kullanıcı Arayüzü
Programınızın kullanıcı arayüzü programınızın en önemli kısmıdır. Şayet programınız kullanıcılar tarafından kolayca çalıştırılıp kullanılmıyorsa, kullanıcılar tarafından kullanılmayacaktır. Kullanılmayan bir program da değersizdir ve siz o programı yazarak vaktinizi ve şirketinizin parasını boşa harcamışsınız demektir.
Yazacağınız her program kullanıcı arayüzünün nelere ihtiyaç duyacağını belirlemek için, denenmelidir. Yazdıkları tüm programlar için DKD (Diyalog Kontrol Dili) “DCL (Dialog Control Language)” kullanan programlar yazmak kod yazanlara cazip gelir; fakat bu genellikle yazılan programın ne yapacağı ile alakalıdır. AutoCAD’in özelleştirilmesinden elde edilecek en büyük fayda muhtemelen menüden seçildiğinde ve birkaç komut istemiyle arayüzü oldukça güzel hale getirecek olan küçük görevlerdedir. Bir sürü küçük programı birlikte tek bir programda toplamaya çalışmayın; bu, programınızı kimsenin kullanmayacağı bir hale getirebilir.
Kullanıcı arayüzü ile uğraşmak için önceden tanımlanmış birçok AutoLISP fonksiyonu vardır, böylelikle çok fazla sorun olmadan esnek bir arayüz oluşturulabilir. GETX fonksiyon ailesindeki fonksiyonlar kullanıcıya çok fazla sayıda veri tipi soran fonksiyonlardır. INITGET fonksiyonu bazı tip denetimleri yaparken ve hata yakalama için, giriş sistemini ayarlamada kullanılabilir.
INITGET Fonksiyonunu Kullanma
INITGET fonksiyonu GETX fonksiyon aileleri ile kullanılmak üzere, veri giriş sistemini ayarlamak için kullanılır. GETX fonksiyonlarının sadece belirli veri giriş tiplerini kullanmasını ayarlamak için, birçok tam sayıyı birleştirebilirsiniz.
(initget (+ 1 2))
Yukarıdaki örnek sistemin nasıl ayarlamak için komutun nasıl kullanılacağını göstermektedir. INITGET fonksiyonu argüman olarak aktarılan birçok tamsayı olarak adlandırılır. INITGET fonksiyonu bu tam sayılara ilaveten GETX fonksiyon ailelerinin hangi değerlerin kabulüne izin vereceğini de söyler. Yukarıdaki örnekte görüldüğü üzere, INITGET fonksiyonu 1 ve 2 değerlerini aktarmaktadır; bir (1) değeri INITGET fonksiyonunun boş veri girişini kabul etmeyeceğini söylerken; iki (2) değeri INITGET fonksiyonunun sayı veri girişi için sıfır (0) girişini kabul etmeyeceğini söyler.
GETX Fonksiyonlarını Kullanma
GETX fonksiyonları ile sisteme çeşitli veri türleri girilebilir. Bu veri tipleri reel sayılar (gerçek noktalar), tamsayı sayılar, dizgeler, noktalar, uzaklıklar ve açılardır. Ayrıca bir dikdörtgen (pencere) tanımlamak ve bir dizgeyi elde ederken veri girişi için anahtar kelimelerin kullanımına izin veren bir GETX fonksiyonu da vardır.
Reel sayı ondalık kısmı olan veya devirli bir sayıdır. Reel sayı elde eden fonksiyon GETREAL fonksiyonudur. Kullanıcı veri girişinin boş olmamasını, sıfır (0) olmamasını veya pozitif sayılar olmasını sınırlamak için, INITGET fonksiyonu bu fonksiyonla birlikte kullanılabilir. Tam sayı ondalık kısmı olmayan sayıdır. Tam sayı elde eden fonksiyon GETINT fonksiyonudur. Kullanıcı veri girişinin boş olmamasını, sıfır (0) olmamasını veya pozitif sayılar olmasını sınırlamak için, INITGET fonksiyonu bu fonksiyonla birlikte kullanılabilir.
GETSTRING fonksiyonu kullanılarak bir dizge elde edilir. INITGET fonksiyonunun bu fonksiyon üzerinde herhangi bir etkisi yoktur. Kullanıcının GETKWORD fonksiyonuna aktarılacak olan veri girişini belirli anahtar kelimeler ile sınırlamak için, GETKWORD fonksiyonu kullanılabilir.
GETPOINT fonksiyonu kullanılarak bir nokta elde edilir. Kullanıcının veri girişinin boş olmayan değerler ile sınırlamak için INITGET fonksiyonu bu fonksiyonla birlikte kullanılabilir.
GETDIST fonksiyonu kullanılarak bir mesafe elde edilir. Kullanıcının veri girişinin boş olmayan, negatif olmayan ve sadece 2 boyutlu 2B “2D” değerler ile sınırlamak için INITGET fonksiyonu bu fonksiyonla birlikte kullanılabilir.
GETANGLE fonksiyonu veya GETORIENT fonksiyonu kullanılarak bir açı elde edilir. GETANGLE fonksiyon yatay eksenden ölçülen pozitif bir radyan değeri geri döndürür. GETANGLE fonksiyonu birimlerin ayarlanış şekline göre çalışır. Şayet birimler sıfır (0) derece kuzeyi gösterecek şekilde ayarlı ise, GETANGLE fonksiyonu tarafından geri döndürülecek olan açı bu ayara göre olacaktır. GETORIENT fonksiyonu birimlerde belirtilmiş olan ayarları dikkate almaz ve açıyı her zaman sıfır (0) derece doğuyu gösterecek şekilde ayarlanmış kabul ederek geri döndürür. Kullanıcının veri girişini boş olmayan, sıfır (0) olmayan açı değerler ile sınırlamak için, INITGET fonksiyonu hem GETANGLE fonksiyon ile hem de GETORIENT fonksiyonu ile birlikte kullanılabilir.
GETKWORD fonksiyonu kullanıcının veri girişini belirli anahtar kelimeler listesi ile sınırlamanıza izin verir. INITGET fonksiyonu GETKWORD fonksiyonunun kabul edeceği veriler hazırlanmasında kullanılır.
(INITGET 1 “#4 #5 #6 #8 #10 1/4 5/16 3/8 7/16 1/2 5/8 3/4 7/8 1”)
(GETKWORD “\nSoket başlığının boyut civatası: “)
INITGET fonksiyonuna herhangi sayıda öğe aktarılabilir. Programınızda, INITGET fonksiyonuna aktarılacak olan tüm öğeler aynı satırda olmak zorundalardır; ayrı satırda olan öğeler okunmayacaklardır.
Bir Dosyadan Veri Girme
Dosyayı Açma / Kapatma
OPEN fonksiyonu programınız tarafından kullanılacak olan bir dosyayı açmak için, kullanılır. İster veri almak için olsun, isterse veri yazmak için bir dosyayı kullanmadan önce muhakkak açmanız gerekir.
Dosyalar üç moddan bir tanesi kullanılarak açılabilir: Okuma “Read”, Yazma “Write” veya Ekleme “Append”. OPEN fonksiyonu iki parametreye ihtiyaç duyar. Birinci parametre fonksiyona hangi dosyanın açılacağını söylerken; ikinci parametre dosyanın hangi modda açılacağını söyler.
(setq fp (open “dosyaismi” “r”))
Dosya isimleri AutoLISP‘in ne söylediğinizi anlamasını sağlayacak şekilde olmalıdırlar. Bir önceki 9 numaralı derste de belirttiğim üzere, ters bölü (\) karakterinin AutoLISP‘te özel bir anlamı vardır ve klasör yol yazarken normalde yaptığınız gibi tek başına kullanılamaz. Aşağıdaki örneklerde, çift ters bölü (\\) karakterinin kullanımlarına dikkat edin; bu örnek AutoLISP‘te ters bölü (\) karakteri kullanılarak klasör yollarının nasıl yazılacağını göstermektedir. Şayet belirlediğiniz dosya ismi için klasör yolunu yazacaksanız, aşağıdaki yöntemlerden bir tanesini kullanmak zorundasınız:
(setq fp (open “c:\\acad\\dosyaismi.ext” “r”))
(setq fp (open “c:/acad/dosyaismi.ext” “r”))
(setq fp (open (findfile “dosyaismi.ext”) “r”))
Yukarıdaki son örnek FINDFILE fonksiyonunun kullanımını göstermektedir. Bu fonksiyon AutoCAD’in destek dosya araştırma klasör yolunda olan dosyayı bulmak için, kullanılabilir. Şayet dosya bulunamazsa, fonksiyon hiç bir şey geri döndürmez. Bu yüzden, dosyayı kullanmadan önce dosyanın fonksiyon tarafından bulunup bulunmadığından emin olmalısınız; aksi durumda programınız çalışmayacaktır. Bir dosyayı kullanmayı tamamladığınız zaman, o dosyayı kapatmalısınız. Daha önce açmış olduğunuz herhangi bir dosyayı kapatmak için, CLOSE fonksiyonu kullanılır. Şayet işinizi bitirdiğinizde dosyaları kapatmazsanız, boşuna meşgul etmiş olursunuz.
Bir dosya kapatıldığında tekrar açılıncaya dek artık kullanılamaz. Bu kural programınız içerisinde dosya belirleyicisi hala mevcut olsa bile geçerlidir. Bu yüzden şayet bir dosyayı kapattıysanız, o dosyayı kullanmadan önce dosyayı tekrar açmak zorundasınız.
Bir Dosyadan Veri Okuma
READ-CHAR veya READ-LINE fonksiyonları bir dosya içerisinden veri okumak için kullanılırlar. Dosya ASCII yazı dosyası olmak zorundadır. Bu fonksiyonların her ikisi de dizge tipinde veri geri döndürür.
Şayet her seferinde tek bir karakter okumak istediğiniz bir dosyaya sahipseniz, READ-CHAR fonksiyonunu kullanmalısınız. Bu fonksiyon dosyayı okuyacak ve o karakterin ASCII karakter kodunu geri döndürecektir. Satır başı karakterini tespit ederek bir satırın sonunu tespit edebilirsiniz. Unutmayın ki, işleme başlamadan önce bir sonraki satırda bir veya daha fazla karakteri okumak veya sonraki satırda gelen karakteri elde etmek için, satır başı karakteri tespit edilmelidir. ASCII dosyalarında satırlar başı ve sonraki satıra geç karakter kombinasyonu ile sonlandırılırlar.
Şayet tüm satırı bir seferde okumak istiyorsanız, READ-LINE fonksiyonunu kullanmalısınız.
(setq LineIn (read-line fp))
Bir Dosyaya Veri Yazma
WRITE-CHAR veya WRITE-LINE fonksiyonları ak için, kullanılırlar. Aynen veri okuma fonksiyonlarında olduğu gibi, istenen dosya üzerinde işlem yapabilmek için, o dosya önce açılmak zorundadır.
WRITE-CHAR fonksiyonu yazdığınız karakterlerin ASCII karakter kodlarını o an açık olan dosyaya yazdıracaktır. Bu fonksiyon satır başı veya sonraki satıra geçiş karakterleri olmayan bir karakter dosyası oluşturacaktır. WRITE-LINE fonksiyonu o an açık olan dosyaya bir ASCII karakter dizgesi yazdıracaktır. Adından da anlaşılacağı üzere WRITE-LINE fonksiyonu dosyaya her seferinde yeni bir satır yazdıracaktır. Şayet dosya ekleme “append” modunda açılmışsa, yeni satır dosyanın sonuna eklenecektir. Şayet dosya ekleme “write” modunda açılmışsa, yeni satır dosyanın üzerine yazılacaktır.
(write-line LineOut fp)
Ekrana Yazdırma AutoLISP görüntülemeyi kontrol etmek için, çok güçlü fonksiyonlara sahiptir. PROMPT fonksiyonu AutoLISP ile kullanılan temel çıktı fonksiyonudur. Bu fonksiyon ekrana bir dizgeyi çıktı olarak yazdırır. Bu fonksiyon ekrana çıktı olarak yazdıran tek uyarı (veri isteme) fonksiyonudur.
PRINC fonksiyonu dizgeyi ekrana veya bir dosyaya yazdırmak için kullanılır. Bu fonksiyon bir ifadeyi değerlendirir ve sonuçları ekrana veya bir dosyaya geri döndürür.
PRINT fonksiyonu dizgeyi ekrana veya bir dosyaya yazdırmak için kullanılır. Bu fonksiyon bir ifadeyi değerlendirir ve “\” biçimindeki “format” kontrol karakterleri kullanılmak suretiyle sonuçları ekrana veya bir dosyaya geri döndürür.
PRINT fonksiyonu bir ifadeyi değerlendirir ve sonuçları ekrana veya bir dosyada yeni bir satıra geri döndürür. Bu fonksiyonun yazımında “\” biçimindeki “format” kontrol karakterleri kullanılır. TERPRI fonksiyonu çıktıları sadece yeni bir satıra yazdırır. Bu fonksiyona aktarılacak olan herhangi bir parametre yoktur.
Yukarıda bahsettiğim fonksiyonlar belirli bir çıktıya ihtiyaç duyduğunuz zaman, hangi fonksiyonun istenen sonuçları verdiğini bilmeniz açısından farklı kombinasyonlarda denenmelidir.
Şayet bilgisayarınızın yapılandırma dosyaları içerisinde yüklü ansi.sys dosyası varsa, ekranınızı kontrol etmek için, yapabileceğiniz farklı şeyler de vardır. Genel anlamda ben programlama yaparken ansi.sys dosyasının kullanılması taraftarı değilim. Çünkü sizin yüklü ansi.sys dosyanız yazdığınız programın kullanıcılarındaki ansi.sys dosyasından farklıdır ve bu sebeple programınızın kullanıcılarda yanlış çalışması olasıdır.
(prompt “\e[2J”)
Yukarıdaki kod ekranı temizlemek için, kullanılabilir. ansi.sys komutlarını kullanmayı öğrenmek için, en iyi yol pratik yapmaktır; bu şekilde uygulamaya biraz zaman ayırarak gerçekten konuya hakim olabilirsiniz.
Screen fonksiyonu Ansi.sys Komutları
Ekranı temizleme Esc [2J
Yeni pozisyona taşıma Esc [#,#H
İmleci ileri (sağa) götürme Esc [1C
İmleci geri (sola) götürme Esc [1D
İmleci yukarı götürme Esc [1A
İmleci aşağı götürme Esc [1B
Burada görülen fonksiyonların kombinasyonlarını kullanarak, kullanıcı ara yüzünüzün istediğiniz gibi olmasını ayarlayabilirsiniz.

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Görüş Aralığını Değiştirme

Revit’te plan görünüşlerinde bir nesnenin görünürlüğünü kontrol eden yatay düzlemleri oluşturabilir veya değiştirebilirsiniz. Bir plan …

Bir cevap yazın

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

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.