Orhan Toker
Y. Mimar (İTÜ)
Autodesk Yetkili Danışmanı
Programcı

  DERS.8 Seçim Setleri (Selection Sets)
Seviye: İleri Kaynaklar: Autodesk, VisualLISP IDE Help file [12.Nisan.2006]
 

 

Merhabalar,

Bu dersle birlikte AutoLISP'te ileri seviyeye geçeceğiz. AutoLISP ile yapacağınız çoğu programda nesneleri kullanıcının yardımı olmadan da seçmeniz gerekebilecektir. Ya da kullanıcıdan bir seçim oluşturduğunda sizin bu seçim içerisinden sadece istediğiniz nesneleri kullanmak, ya da çizim veri tabanından bir eleme yapmak gibi ihtiyaçlarınız olacaktır. İşte tüm bu bahsettiğim sebeplerden dolayı seçim setleri ve bunları yönetme kavramlarını öğrenmeniz gereklidir.

Önce biraz Autocad'de herhangi bir düzenleme komutuna girdiğimizde neler olduğunu gözden geçirelim. Örneğin ERASE komutuna girdiğinizde hemen komut satırında

Select Objects:

ibaresi belirir. Siz dilediğiniz yöntemle, ister pikleyerek, ister pencere ya da çit açarak seçim yaparsınız ve siz bu seçim modundan çıkana dek sçer ya da çıkarırsınız. İşte bu esnada Autocad, nokta-nokta olarak seçtiğiniz objeleri gösterir. Bu objeler o anda oluşturduğunuz seçim setinin üyeleridir. Yenisini seçtiğinizde seçim setinize bir eleman daha eklemiş, REMOVE seçeneği ile yanlış seçtiğinizi çıkardığınızda seçim setinden bir eleman silmiş olursunuz. Bütün bu faaliyetleri AutoLISP içinde de yapma işine seçim seti oluşturma ve seçim seti yönetimi denir.

  (ssget) Kullanarak yeni seçim seti oluşturmak
 

(ssget) fonksiyonu seçim seti yaratmak için kullanılır. Fonksiyonun kullanım biçimi aşağıdaki gibidir.

(ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list])

Argümanları açıklayacak olursak:

Seçim Metodu [sel-method]

  • Seçim şeklini belirleyen bir alfanümerik değerdir.
  • "C" crossing (dörtgen çit) seçim tipi
  • "CP" crossing polygon (poligon çit) seçim
  • "F" fence (çit) seçim
  • "I" implied (önceden seçilmiş) set
  • "L" last (en son) çizilen nesne
  • "P" previous (önceki) seçim seti
  • "W" window (pencere) seçim
  • "WP" window polygon (poligon çerçeve) seçim
  • "X" çizimdeki tüm nesneleri seçer (kapalı LAYER'lardaki ve gizli objeler dahil)
  • ":E" çizim kursörünün pikleme kutusu içine giren nesneleri seçer
  • ":N" Çizimdeki BLOCK ya da POLYLINE gibi karmaşık bir objenin alt objelerini seçer.
  • ":S" Kullaınıcıyı sadece bir tek obje seçmeye zorlar.

[pt1 [pt2]]

  • Seçim seti bir çerçeve ile oluşturulacaksa çerçevenin iki köşesi için pt1 ve pt2 değerleri girilir.

[point-list] Nokta Listesi

  • "CP" "WP" ve "F" için nokta listesi

[filter-list]

  • Seçim seti içinde filtreleme yapacaksanız buna ait listeyi pas etmelisiniz.

Örnekler:

Command:(ssget)
<Selection Set: 2>

Bu kullanıcıdan bir seçim yapmasını ister ve seçim bittiğinde sonuç olarak yeni seçim setini döner.

Command: (ssget '(2 2))
nil

2,2 Noktasından geçen bir obje varsa onu seçer.

Command: (ssget "_P")
<Selection set: 4>

Bir önceki seçim seti ile yeni bir seçim seti oluşturur.

Command: (ssget "_C" '(0 0) '(1 1))
<Selection set: b>

0,0 ve 1,1 noktalarının oluşturduğu crossing penceresinin değdiği ve içine aldığı tüm obleri seçim setine koyar

Command: (ssget "_W" '(0 0) '(5 5))
<Selection set: d>

0,0 ve 5,5 penceresinin içine giren objlerle seçim seti yaratır.

Command: (ssget "_I" '((0 . "LINE") (62 . 5)))
<Selection set: 4>

Bu örnek önceden seçilmiş objelerin içinde rengi mavi olan çizgileri seçer. '((0 . "LINE") (62 . 5)) bu kısım rengi mavi objeleri filtrelemek için kullanılır.

Command: (setq pt_list '((1 1)(3 1)(5 2)(2 4)))
((1 1) (3 1) (5 2) (2 4))
Command: (ssget "_CP" pt_list)
<Selection set: 13>

Bu örnekte 1,1 3,1 5,2 2,4 noktalarının oluşturduğu çit poligonun değidiği ve kapsadığı objeler seçilir. ssget fonksiyonuna nokta listesinin nasıl pas edildiğini görebilirsiniz.

  Seçim setlerini işlemek
 

Bir kez seçim seti yarattığınızda, ona nesneler ekleyebilir ya da çıkartabilir, içinde dolaşabilir, nesneleri sorgulayabilirsiniz. Örnekte entnext ve entlast fonksiyonlarını kullanarak çizimdeki ilk ve son nesneleri aldık Eğer çiziminizde hiç varlık yoksa örnek çalışmayacaktır.
Örneğimiz çizimde varlık varsa ilk elemandan bir seçim seti yaratır ve son elemanı bu seçim setine ekler.

(ssdel fname ourset)

kodu seçim setinden çizimin ilk nesnesini siler. Eğer çizimde 1 eleman varsa ilk eleman ve son elaman aynı olacaktır ve kod seçim setini tamamen silmiş olacaktır.

(sslength) fonksiyonu seçim setinin içinde kaç elaman olduğunu sayar. Eğer çizimde birden fazla eleman varsa yukarıdaki örneğimiz (sslength ourset) dediğimizde 2 sonucunu verecektir.

  Seçim setinin içinde ilerlemek (ssname)
 

Seçim setinizin içindeki nenseleri ssname kullanarak çağırırsınız. Aşağıdaki örnek ssname fonksiyonunun kullanımını anlatıyor.

  Seçim setinden nesne çıkartmak
 

ssdel fonksiyonu ile seçim setinden nesne çıkartabilirsiniz. Kullanım şekline örnek olarak yukarıdaki seçim setinden ent1 nesnesini çıkartabiliriz.

(ssdel ent1 sset)

  Seçim setini filtrelemek
 

Seçim seti oluştururken içinden istediğimiz özelliğe göre filtreleme yapabiliriz. Bunun için seçim seti oluşturma esnasında bir filtre listesi pas geçmeliyiz. Oluşturacağımız liste, tıpkı DXF kod listesi gibi noktalı çift listesi olmalıdır. Aşağıda size bir kaç örnek veriyorum:

(setq ss1 (ssget '((0 . "TEXT"))))

Bir seçim seti oluşturmanız için bekler, seçtiğiniz nesnelerden sadece TEXT nesnelerini seçim setine koyar.

(setq ss1 (ssget "P"'((0 . "LINE"))))

Bir önceki seçim setinin içinden LINE olan nesneleri alarak bir seçim seti oluşturur.

(setq ss1 (ssget "W" pt1 pt2 '((8 . "KAT9"))))

pt1 ve pt2 noktalarının oluşturduğu pencerenin içindeki LAYER'i KAT9 olan tüm nesneleri seçer ve bir seçim seti oluşturur.

(setq ss1 (ssget "X" '((0 . "CIRCLE") (62 . 5))))

Çizimdeki tüm mavi çemberlerden bir seçim seti yaratır.

Bu dersimiz bu kadar. İleride yapacağımız uygulamalarda seçim setlerine örnekler vermeye çalışacağım.

Kolay gelsin.

  (c) Copyright 2006 Taliasoft, by Orhan Toker