Poly Nesnelerde Bağlantı Noktası ve Yüz Index Numarası Oluşturma
Bu çalışmada standart basit 3 boyutlu poly nesnelerin alt nesnelerinin index numaraları gösterilmiştir. Burada nesne tipi, kenar sayısı ve görünüm biçimi değişken olarak verilmiştir.
Bu script'le poly nesnelerin alt nesnelerinin index numaralarının nasıl verildiği anlaşılabilir. Poly nesnelerle çalışırken alt nesnelerin index numaralandırmasının nasıl yapıldığı bilinmelidir. Böylece poly modelleme ve canlandırma kodlamaları kolaylıkla yazılabilir.
Utility penceresi ile vertex ve face indeks numarası oluşturma
nokNoRen = orange --
yuzNoRen = black --
noBoy = 2 --
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. -- Belirtilen değerde ve zKon isminde bir değişken tanımla (Buradaki sabit değer için de rollout elemanı (spinner ya da slider) kullanılabilir.).
nesUz = [1+(0.35/noBoy),1+(0.1/noBoy),1+(0.15/noBoy)] -- Belirtilen değerde ve nesUz isminde bir değişken tanımla (Buradaki sabit değerler için de rollout elemanı (spinner ya da slider) kullanılabilir.).
noKal = 0.1 -- Değeri 0.1 olan noKal isminde bir değişken tanımla (Bu değişken için de rollout elemanı (spinner ya da slider) kullanılabilir.).
kal = extrude amount:noKal --
nesRen = [30,120,70] -- Belirtilen değerde ve nesRen isminde bir değişken tanımla (Bu değişken için de rollout elemanı (colorpicker) kullanılabilir.).
utility nokYuzNo "Noktalar ve Yuzler" -- nokYuzNo isminde ve panel başlığında Noktalar ve Yuzler yazan bir utility oluştur.
( -- nokYuzNo isimli utility başı
group "Yeni Nesne" -- Yeni Nesne başlıklı bir bölüm oluştur ve aşağıda tanımlanan panel elemanları bu bölümde yer alsın.
( -- Yeni Nesne başlıklı group başı
radiobuttons yeNesSec labels:#("Prizma", "Koni", "Kure 1", "Kure 2", "Silindir", "Piramit") columns:2 --
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. -- uzSegs isminde ve sol yanında Uzun. Segm. Sayisi: yazan, en küçük değeri 1, en yüksek değeri 4, varsayılan değeri, 1 olan, bulunduğu konumdan, yatay eksende (x) 0 birim, düşey eksende (y) 6 birim aşağıya ötelenmiş yatay olarak yerleştirilmiş (varsayılan) bir spinner oluştur (Aşağıda yer alan diğer tüm spinner’lar için ilgili değerler belirtilmiştir.).
spinner genSegs "Gen. Segm. Sayisi: " type:#integer range:[1,12,1] fieldWidth:30 --
spinner yukSegs "Yuks. Segm. Sayisi: " type:#integer range:[1,16,1] fieldWidth:30 --
spinner kenSay "Kenar Sayisi: " type:#integer range:[3,16,12] offset:[0,-63] fieldWidth:30 visible:false --
spinner seg1 "Segment Sayisi: " type:#integer range:[4,16,12] offset:[0,-21] fieldWidth:30 visible:false --
spinner seg2 "Segment Sayisi: " type:#integer range:[2,4,2] offset:[0,-21] fieldWidth:30 visible:false --
spinner derSegs "Derin. Segm. Sayisi: " type:#integer range:[1,4,2] offset:[0,-21] fieldWidth:30 visible:false --
on yeNesSec changed state do --
( -- yeNesSec isimli radiobuttons’un davranışının başı
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. --
If yeNesSec.state == 2 then (uzSegs.visible = false; genSegs.visible = false; yukSegs.visible = false; kenSay.visible = true; seg1.visible = false; seg2.visible = false; derSegs.visible = false) --
If yeNesSec.state == 3 then (uzSegs.visible = false; genSegs.visible = false; yukSegs.visible = false; kenSay.visible = false; seg1.visible = true; seg2.visible = false; derSegs.visible = false) --
If yeNesSec.state == 4 then (uzSegs.visible = false; genSegs.visible = false; yukSegs.visible = false; kenSay.visible = false; seg1.visible = false; seg2.visible = true; derSegs.visible = false) --
If yeNesSec.state == 5 then (uzSegs.visible = false; genSegs.visible = false; yukSegs.visible = false; kenSay.visible = true; seg1.visible = false; seg2.visible = false; derSegs.visible = false) --
If yeNesSec.state == 6 then (uzSegs.visible = false; genSegs.visible = true; yukSegs.visible = true; kenSay.visible = false; seg1.visible = false; seg2.visible = false; derSegs.visible = true) --
) -- yeNesSec isimli radiobuttons’un davranışının sonu
button nokYuzNoOl "Nokta ve Yuz No Olustur" pos:[15,150] --
) -- Yeni Nesne isimli group sonu
spinner nokNoBoy "Nokta No Boyutu" range:[0.5,20,noBoy] fieldWidth:40 --
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. --
fn yeNesYap = -- yeNesYap isminde bir fonksiyon tanımla.
( -- yeNesYap isimli fonksiyonun başı
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. -- İçeriği, yeNesSec radiobuttons’un, isaretine göre degisecek olan yeNes isminde bir değişken tanımla.
( -- case başı
1: box name:"prizma" LengthSegs:uzSegs.value WidthSegs:genSegs.value HeightSegs:yukSegs.value wirecolor:nesRen --
2: cone name:"koni" radius1:25 radius2:15 Height:25 HeightSegs:2 sides:kenSay.value smooth:off wirecolor:nesRen --
3: sphere name:"kure" segs:seg1.value smooth:off wirecolor:nesRen --
4: geosphere name:"kure" segs:seg2.value smooth:off wirecolor:nesRen --
5: cylinder name:"silindir" Height:25 sides:kenSay.value smooth:off wirecolor:nesRen --
6: pyramid name:"piramit" WidthSegs:genSegs.value depthsegs:derSegs.value HeightSegs:yukSegs.value wirecolor:nesRen --
) -- case sonu
yeNes -- yeNes isimli değişkene atanan nesneyi oluştur.
select yeNes -- Sahnede, yeNes isimli değişkenle oluşturulan nesneyi seç.
) -- yeNesYap isimli fonksiyonun sonu
fn kopya = -- kopya isminde bir fonksiyon tanımla.
( -- kopya isimli fonksiyonun başı
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. -- model isimli nesneyi mesh modele çevir.
) -- kopya isimli fonksiyonun sonu
fn nokNoYap = -- nokNoYap isminde bir fonksiyon tanımla.
( -- nokNoYap isimli fonksiyonun başı
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. -- 1’den seçili olan nesnenin bağlantı noktasi sayısına kadar bir siralama oluştur ve değerleri nok isimli değişkene ata.
( -- for nok başı
nokKon = polyop.getVert $ nok -- Değeri, sahnede seçili olan nesnenin, nok isimli değişkende toplanan değerlere eşit olan indeks numaralarına sahip olan bağlantı noktalarının konum bilgileri olan nokKon isminde bir değişken tanımla.
nokNo = text name:(uniqueName($.name+" "+"Nokta ")) alignment:2 wirecolor:nokNoRen size:nokNoBoy.value pos:(zKon+(nokKon*nesUz)) -- Ismi nokNo, sahnedeki ismi, sahnede seçili olan nesnenin ismine, bosluk karakteri, Nokta ifadesi eklenmis ve 01, 02, …. biçiminde devam eden, ortada yazılı, renk değerini nokNoRen değişkeninden, boyut değerini nokNoBoy spinner’ından alan ve konum değeri, nokKon ve nesUz isimli değişkenlerin değerlerinin çarpım sonucuna, zKon isimli değişkenin değerinin eklenmesi ile elde edilen değer kadar olan bir text oluştur (Bu komut for komutu içinde yazıldığından ……. (Sahnede seçili olan nesnenin sahip olduğu bağlantı noktası kadar).).
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. -- nokNo isimli nesne (text) render edilebilir olsun.
nokNo.text = nok as string -- nokNo isimli text’in içeriğinde, nok isimli değişkende toplanan değerler metin ifadesi olarak (as string) yazsın.
addModifier nokNo kal -- nokNo isimli nesneye, (yukarıda tanımlanan) kal isimli (shell) değiştiriciyi ata.
rotate nokNo 90 x_axis -- nokNo isimli text’i 90 derece x ekseninde döndür.
) -- for nok sonu
) -- nokNoYap isimli fonksiyonun sonu
fn yuzNoYap = -- yuzNoYap isminde bir fonksiyon tanımla.
( -- yuzNoYap isimli fonksiyonun başı
for yuz in 1 to polyop.getNumFaces $ do --
( -- for yuz başı
yuzKon = polyop.getFaceCenter $ yuz -- Değeri, sahnede seçili olan nesnenin ($), yuz isimli değişkende toplanan değerlere eşit olan indeks numaralarına sahip olan yüzlerinin konum bilgileri olan yuzKon isminde bir değişken tanımla.
yuzNo = text name:(uniqueName($.name+" "+"Yuz ")) alignment:2 wirecolor:yuzNoRen size:yuzNoBoy.value pos:(zKon+(yuzKon *nesUz)) -- Ismi yuzNo olan, sahnedeki ismi, sahnede seçili olan nesnenin ismine, sırasıyla boşluk karakteri, Yuz ifadesi eklenmis ve 01, 02, …. biçiminde devam eden (uniqueName) merkeze hizalanmış (1 - left, 2 - center, 3 - right, 4 - justify), renk değerini yuzNoRen isimli değişkenden alan, boyut değerini yuzNoBoy isimli spinner’dan alan ve konum değeri, nokKon ve nesUz isimli değişkenlerin değerlerinin çarpım sonucuna zKon isimli değişkenin değerinin eklenmesi ile elde edilen değer kadar olan bir text oluştur (Bu komut for komutu içinde yazıldığından for komutunda tanımlanan değişkende toplanan değerler kadar (sahnede seçili olan nesnenin sahip olduğu yüz sayısı kadar) tekrarlanacak ve belirtilen konumlarda text’leri oluşturacaktır.).
yuzNo.baseobject.renderable = true -- yuzNo isimli nesne (text) render edilebilir olsun.
yuzNo.text = yuz as string --
addModifier yuzNo kal -- yuzNo isimli nesneye, (yukarıda tanımlanan) kal isimli (shell) değistiriciyi ata.
rotate yuzNo 90 x_axis -- yuzNo isimli text’i 90 derece x ekseninde döndür.
) -- for yuz sonu
) -- yuzNoYap isimli fonksiyonun sonu
on nokNoBoy changed val do $*nok*.size = val -- nokNoBoy isimli spinner’ın değeri değiştiğinde, ismi, sahnede seçili olan nesnenin ismi ile başlayıp herhangi bir grup karakterle devam eden, nok ifadesinden sonra yine herhangi bir grup karakterle biten isme sahip olan tüm nesnelerin (textlerin) boyutları da değişsin.
on yuzNoBoy changed val do $*yuz*.size = val -- yuzNoBoy isimli spinner’ın değeri değiştiğinde, ismi, sahnede seçili olan nesnenin ismi ile başlayıp herhangi bir grup karakterle devam eden, yuz ifadesinden sonra yine herhangi bir grup karakterle biten isme sahip olan tüm nesnelerin (textlerin) boyutları da değişsin.
fn gor = -- gor isminde bir fonksiyon tanımla.
( -- gor isimli fonksiyonun başı
max tool zoomextents all --
viewport.zoom 0.7 -- Aktif viewport’da belirtilen oranda yakınlaşma sağla.
max pancamera --
) -- gor isimli fonksiyonun sonu
group "Toplam Sayi Bilgileri" -- Toplam Sayi Bilgileri başlıklı bir bölüm oluştur ve aşağıda tanımlanan panel elemanları bu bölümde yer alsın.
( -- Toplam Sayi Bilgileri başlıklı group başı
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. -- nokSayBil isminde ve içeriğinde, Baglanti noktasi: ifadesi olan ve yatay eksende (x) 10 birim sağda, düsey eksende (y) ortada bir etiket oluştur. Bu etiketin (label) yanında, aşağıda tanımlanan bir (across:2) rollout elemanı (etiket) daha olsun (Seçilen nesnenin bağlantı noktalarının sayısını yazan etiketin başlığı olarak kullanılacaktır.).
label nokSay offset:[5,0] -- nokSay isminde ve içeriğinde, nokSay isimli değişkenin değeri olan ve yatay eksende (x) 5 birim sağda, düsey eksende (y) ortada bir etiket oluştur.
label yuzSayBil "Yuz: " offset:[38,0] across:2 -- yuzSayBil isminde ve içeriğinde, Yuz: ifadesi olan ve yatay eksende (x) 38 birim sağda, düşey eksende (y) ortada bir etiket oluştur. Bu etiketin (label) yanında, aşağıda tanımlanan bir (across:2) rollout elemanı (etiket) daha olsun.
label yuzSay offset:[5,0] -- yuzSay isminde ve içeriğinde, yuzSay isimli değişkenin değeri olan ve yatay eksende (x) 5 birim sağda, düşey eksende (y) ortada bir etiket oluştur.
) -- Toplam Sayi Bilgileri isimli group sonu
group "Gorunum" -- Gorunum başlıklı bir bölüm oluştur ve aşağıda tanımlanan panel elemanları bu bölümde yer alsın.
( -- Gorunum başlıklı group başı
checkBox nokNoGos "Nokta numaralarını goster" checked:true --
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. -- nokNoGos isimli Checkbox’in durumu değiştiğinde, eğer bu Checkbox’ isaretli değilse, ismi, sahnede seçili olan nesnenin ismi ile başlayıp herhangi bir grup karakterle devam eden, nok ifadesinden sonra yine herhangi bir grup karakterle biten isme sahip olan tüm nesneleri (text’leri) gizle.
checkBox yuzNoGos "Yuz numaralarını goster" checked:true -- yuzNoGos isminde ve sağ yanında Yuz numaralarını göster yazan, varsayılan olarak isaretli durumda bulunan ve sola (varsayılan) hizalanmış bir checkbox oluştur.
on yuzNoGos changed State do if yuzNoGos.checked != true then hide $*yuz* else unhide $*yuz* --
) -- Gorunum isimli group sonu
fn onay = -- onay isminde bir fonksiyon tanımla.
( -- onay isimli fonksiyonun başı
nokNoGos.checked = true --
yuzNoGos.checked = true --
) -- onay isimli fonksiyonun başı
on nokYuzNoOl pressed do -- nokYuzNoOl isimli button’a basildiginda;
( -- nokYuzNoOl isimli buton’un davranışının başı
delete geometry; delete shapes -- Geometri (üç boyutlu) ve sekil (iki boyutlu) sınıfında bulunan nesneleri (gizli (hide) ya da dondurulmuş (freeze) bile olsa) sahneden sil.
-- Bu kod satırı E posta ile gönderilen dosyada yer almaktadır. -- Aktif görüş penceresinde kenar çizgilerini görünür yap.
yeNesYap() -- yeNesYap isimli fonksiyonu çalıştır.
kopya() -- kopya isimli fonksiyonu çalıştır.
nokSay.text = getNumVerts $ as string -- nokSay isimli text’in içeriğinde, sahnede seçili olan nesnenin bağlantı noktasi sayısı, metin ifadesi olarak yazsın.
yuzSay.text = getNumFaces $ as string -- yuzSay isimli text’in içeriğinde, sahnede seçili olan nesnenin yüz sayısı metin ifadesi olarak (as string) yazsın.
nokNoYap() -- nokNoYap isimli fonksiyonu çalıştır.
yuzNoYap() -- yuzNoYap isimli fonksiyonu çalıştır.
gor() -- gor isimli fonksiyonu çalıştır.
onay() -- onay isimli fonksiyonu çalıştır.
) -- nokYuzNoOl isimli button’un davranışının sonu
label yaz "Yazan: " across:2 -- İçeriğinde Yazan: ifadesi olan yaz isminde bir etiket oluştur. Bu etiketin yanında, aşağıda tanımlanan bir (across:2) utility elemanı (label) daha olsun.
hyperlink baglan "Nadir AKSOY" color:(color 0 0 255) address:"http://www.nadiraksoy.com" offset:[-15,0] --
label surum "Surum: 1.0 (05-03-2010)" --
) -- nokYuzNo isimli utility sonu |