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:
Code Block | ||||
---|---|---|---|---|
| ||||
<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" /> |
...
Code Block | ||||
---|---|---|---|---|
| ||||
<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:
Code Block | ||||
---|---|---|---|---|
| ||||
<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 libraryde library'de incelemek için bakınız: https://www.openbrim.org/objidykp3fi661zspktydj29wxm.libobjÖrnek:
Bir listedeki elemanları saymaya, gerekirse onları ayırmayı sağlar.
Örnek:
Code Block | ||||
---|---|---|---|---|
| ||||
<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 (Bknz:Fonksiyonlar: Bkz. map ) ile de iki yeni liste elde etmiş olunur:
A=[1,10,4,2]
B=[2,5,8,1]
Örnek:
Code Block | ||||
---|---|---|---|---|
| ||||
<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 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" |