1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

AutoLISP Öğreticisi-Tabakalar “Layers” ile Çalışma

Sekil-01

AutoLISP programı zor ve karmaşık olmamak zorundadır. Çok basit bir LISP programı yaratabilir ve bu programdan çok fazla verim alabiliriz. AutoLISP programlarını sadece çizimlerimizin yaratılmasını hızlandırmak için değil; aynı zamanda standartlarımızı sağlamak için de kullanabiliriz.

AutoLISP Öğreticisi-Sistem Değişkenleri ve COND İfadesi isimli makalemizde, etiketleri yaratmak için, bloğu nasıl kullanacağımızı öğrenmiştik. O makalemizde yarattığımız AutoLISP programı kullanıcıya her çizim için aynı bloğu kullanmayı garanti ediyordu.

Şimdi kontrol etmeniz gereken diğer özelliklerin nasıl kontrol edileceğini görelim. Bu özellikler: tabakalar “layers” ve stiller “styles” dir. Çizim standartlarımızı oluşturmamız için, bu iki özelliği kontrol etmek zorundayızdır.

Tabakalar “Layers” ile Çalışma

Sekil-02

Tabakalar “Layers” çizimlerinizi yönetmede en önemli şeylerden bir tanesidir. Şayet CAD standartları konusuna yabancıysanız, Kendi CAD Standartlarınızı Oluşturma isimli makalemizi okumanızı şiddetle tavsiye ederim.

O anki Geçerli (Aktif) Tabakayı “Current Layer” Değiştirme

O anki geçerli (Aktif tabakayı “Current layer” setvar fonksiyonunu kullanarak değiştiririz. Bunu daha önce AutoLISP Öğreticisi-Sistem Değişkenleri ve COND İfadesi isimli makalemizde yapmıştık. O anki geçerli (Aktif tabaka “Current layer” değişkeni CLAYER sistem değişkeni tarafından kontrol edilmektedir.

(setvar “CLAYER” “TABAKAİSMİ”)

Yazı Yaratma

Haydi, bir örnek üzerinde çalışalım. Bir isim yaratan ve bu ismi ön tanımlı tabaka “layer” ismi olarak kullanan bir LISP programı yazmak istiyoruz. Yapmamız gereken işin algoritması aşağıdaki gibi olacaktır:

  1. O anki geçerli (Aktif) tabakayı “current layer” elde etme ve bunu bir değişkene kaydetme.
  2. O anki geçerli (Aktif) tabakayı “current layer” başka bir tabaka olarak ayarlama. Bu örnekte başka tabaka olarak açıklama isimli tabakayı kullanacağız.
  3. We ask for required data for creating text. In this sample we ask for text content and position. You may want to consider ask for height and rotation angle. But it’s not necessary in this sample.
  4. Set the o anki geçerli (aktif) tabakayı “current layer” to previous layer.

Tüm bunları bir araya getirdiğimizde kodumuz aşağıdaki gibi olur:

(defun c:abtext ()
(setq oldlayer (getvar “CLAYER”)) ; o anki geçerli (aktif) tabakayı “current layer” elde eder.
(setvar “CLAYER” “Açıklama”)        ; tabakayı açıklama isimli tabaka olarak değiştirir.
(setq textcontent (getstring ”
Type Text: “))
(setq textloc (getpoint ”
Text Position: “))
(command “_TEXT” textloc “” “” textcontent) ;yazıyı yaratır.
(setvar “CLAYER” oldlayer) ;aktif tabakayı eski haline getirir.
)

Açıklama İsimli Tabakanın Mevcudiyetini Kontrol Etme

Yukarıdaki kod çalışacaktır; fakat hala bir sorunumuz var. Şayet açıklama isimli tabaka “layer” mevcut değilse, ne olacak? AutoCAD aşağıda gördüğünüz hata uyarısını geri döndürecektir.

hata: AutoCAD değişken ayarı rededildi: “clayer” “tabakaismi”

error: AutoCAD variable setting rejected: “clayer” “layername”

Öncelikle tabakanın mevcut olup olmadığını kontrol etmeliyiz. Aşağıdaki kodu kullanarak bunu yapabiliriz:

(setq flag (tblsearch “LAYER” “Açıklama”))

Daha sonra aşağıdaki gibi bir IF ifadesi ekleriz:

(if flag

(AUTOCAD’İN YAPMASINI İSTEDİKLERİNİZİ BURAYA KOYUN)

(DEĞİLSE BUNU YAP)

)

IF ifadesinin kullanımını AutoLISP Alıştırması- Blokları ve IF İfadesini Kullanma isimli makalemde anlatmıştım. Problem IF ifadesinin sadece tek bir işlem yapmaya izin vermesiydi. Bu yüzden birçok işlem yapmak için, progn (YAPILACAK İŞLER GRUBU) fonksiyonunu eklememiz gerekiyordu.

Kodumuzun tamamlanmış hali aşağıdaki gibi olacaktır:

(defun c:abtext ()
(setq flag (tblsearch “LAYER” “Açıklama”)) ; Açıklama isimli tabakayı arar.
;şayet mevcutsa, aşağıdaki işlemleri yapar.
(if flag
(progn ;yapılacak işler grubu
(setq oldlayer (getvar “CLAYER”))
(setvar “CLAYER” “Açıklama”)
(setq textcontent (getstring ”
Type Text: “))
(setq textloc (getpoint ”
Text Position: “))
(command “_TEXT” textloc “” “” textcontent)
(setvar “CLAYER” oldlayer)
) ;yapılacak işler grubunun bitişi
;mevcut değilse ve uyarı veriyorsa
(alert ” Açıklama tabakası mevcut değil. Önce tabakayı yaratın.”)
) ; end if
)

Artık, AutoCAD komutumuzu çalıştırmadan önce Açıklama isimli tabakayı bulmayı deneyecek; Şayet Açıklama isimli tabaka mevcut değilse, bize aşağıdaki uyarıyı verecektir.

Sekil-03

Şayet Açıklama isimli tabaka mevcutsa, programımızı çalıştıracaktır.

 

 

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Bir Bölge Planı “Plan Region” Oluşturma

Revit’te plan görünüşünün geri kalanı için kullanılan kesme düzleminden farklı bir yükseklikte bir kesme düzlemi …

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.