Repeat Objesi
Bazen bir objenin kodunun belirli bir kısmı bir çok kere tekrar edilmesi gerekebilir. Hatta tekrar sayısı kullanıcı tarafından belirlenmesi istenebilir. Kısacası, Repeat Objesi bir dizi objeyi bir çok kez klonlamak için kullanılır.
Birçok yapı yapısal bileşenlerin tekrarından oluşur. Örneğin;
Bir köprüdeki farklı çaprazlama lokasyonlarına sahip çoklu kirişler.
Bir köprüdeki çoklu gövde rijidite çubukları.
Bir kule için çoklu paneller.
Bir bina için çok sayıda kat.
Daha öncesinde tanımlanmış olan bir içerik Repeat Objesi içerisine yerleştirilip belirli geometrik aralıklarla klonlanıp konumlandırılabilir. Repeat objenin içindeki herhangi bir içerik belirlenen parametre kadar tekrar edilir.
Tüm Repeat Objeleri aşağıdaki parametreleri içermesi zorunludur:
- S (başlangıç)
- E (bitiş)
- I (artış)
- CTRL (kontrol parametresi)
Örnek:
<O N="tekrar" T="Repeat" S="0" E="3" I="1" CTRL="j" j="0"> <P N="Sonuc" V="3^j" /> </O> <P N="tekrarObjeListesi" V="tekrar" /> <P N="tekrarSonuc0" V="tekrar[0].Sonuc" /> <P N="tekrarSonuc1" V="tekrar[1].Sonuc" /> <P N="tekrarSonuc2" V="tekrar[2].Sonuc" /> <P N="tekrarSonuc3" V="tekrar[3].Sonuc" />
<P N="Sonuc0" V="3^0" /> <P N="Sonuc1" V="3^1" /> <P N="Sonuc2" V="3^2" /> <P N="Sonuc3" V="3^3" />
Yukarıdaki kodlar aşağıdaki gibi tamamen birbirinin aynısı sonuç verir.
Bknz: https://www.openbrim.org/objid4wf6h9h9k7e4dkrnmsi2wx.libobj
Örnek:
<O T="Repeat" S="0" E="4" I="1" CTRL="index" index="0"> <O N="Kolon" T="Line"> <P N="Guard" V="type .EQ. RECTANGULAR" /> <O T="Point" X="index * 15" Y="0" Z="0" /> <O T="Point" X="index * 15" Y="0" Z="50" /> <O N="Rectangular" T="Section"> <O T="Shape"> <O T="Point" X="-5" Y="-5" Z="0" /> <O T="Point" X="-5" Y="5" Z="0" /> <O T="Point" X="5" Y="5" Z="0" /> <O T="Point" X="5" Y="-5" Z="0" /> </O> </O> </O> </O>
Yukarıdaki örnekte tipi line olan bir kolon objesi oluşturulup repeat döngüsü içerisine konulmuştur. Başlangıç sayısı 1, bitiş sayısı 4 olan ve artışı birer birer olan döngü 4 kere döner ve 4 kere bu 3D obje oluşturulur. Aşağıdaki sistem elde edilir.
Bu örneği library'de incelemek için bakınız: https://www.openbrim.org/objidykp3fi661zspktydj29wxm.libobj
Bir listedeki elemanları saymaya, gerekirse onları ayırmayı sağlar.
Örnek:
<P N="Fn" V="[[1,2],[10,5],[4,8],[2,1]]" Role="Input" /> <O N="Dongu" T="Repeat" S="0" E="length(Fn)-1" I="1" CTRL="j" j="0"> <P N="A" V="Fn[j][0]" /> <P N="B" V="Fn[j][1]" /> </O> <P N="A_Liste" V="map(Dongu,x.A)" /> <P N="B_Liste" V="map(Dongu,x.B)" />
Yukarıdaki örnekte bir liste Repeat objesi içerisine konulmuştur bu objenin başlangıç indeksi S=0 olduğundan j=0 olacak şekilde tekrarı başlatır ve A=Fn[0][0] parametresi ile B=Fn[0][1] parametresini hesaplar. Artış miktarı I=1 olduğundan ikinci tekrarda j, 1 arttırılarak yeni j değeri j=1 olur ve bu
sefer A=Fn[1][0] ve B=Fn[1][1] parametrelerini oluşturur ve böylelikle bitiş sayısına gelene kadar tekrar eder ve E=3 olduğundan(Listenin uzunluğunun bir eksiği) j=3 olduğunda son parametreleri üretir ve daha tekrar etmez. Oluşan A ve B parametresinin tüm değerlerinin liste yapan map
fonksiyonu (Bkz. map ) ile de iki yeni liste elde etmiş olunur:
A=[1,10,4,2]
B=[2,5,8,1]
Örnek:
<O N="Dongu1" T="Repeat" S="0" E="3" I="1" CTRL="i" i="0"> <O N="Dongu" T="Repeat" S="0" E="4" I="1" CTRL="j" j="0"> <O N="daire" T="Volume" Y="20*i" X="20*j"> <O T="Circle" Radius="10" Z="0" /> <O T="Circle" Radius="10" Z="10" /> </O> </O> </O>
Yukarıdaki örnekte iç içe girmiş iki repeat objesi bulunmaktadır. Bu objelerde öncelikle i=0 değeri aldığında içerideki obje j=0'dan j=4'e kadar 5 kere tekrar edecek ve 5 tane içerisindeki 3D objeyi klonlayacaktır. Daha sonradan içerideki tekrarlar tamamlanınca, i=1 olacak ve içerideki obje tekrar 5
kere oluşturulacaktır. Böylelikle her bir i değeri arttığında j değeri 5 kere artacaktır. Bu en dıştaki tekrar sayısı tamamlanana kadar devam edecektir ve aşağıdaki 3D obje oluşacaktır.
Örneği Library'de incelemek için: https://www.openbrim.org/objidspvfh6op46yutcwozwlqr.libobj
Parametreleri:
Sınıfı | Zorunluluk | Adı ve Tipi | Varsayılan değeri ve açıklaması | Öznitelikler | |
1 | Control Variable | Zorunlu | N="CTRL" | D="Kontrol değişkeni: Tekrarlanan objelere göre tekrar sayısını tutan değişkenin adı." | Role="Input" |
2 | Start | Zorunlu | N="S" | D="Start: Tekrar döngüsünün başlangıç sayısı (varsayılan 0)" | Role="Input" |
3 | End | Zorunlu | N="E" | D="Bitiş: Tekrar döngüsünün bitiş sayısı (varsayılan 9)" | Role="Input" |
4 | Increment | Zorunlu | N="I" | D="Artış: başlangıçtan sona giderken artış sayısı(varsayılan 1)" | Role="Input" |