2014-06-16

Formül Tabanlı Geometrinin Gücü: Tekillik

Revit sıfır uzunluklu elemanları sevmemesine rağmen Adaptive Component'lerde müsade eder.
Fakat bir Adaptive'i referans olarak kullanırsanız, sıfır uzunluk verdiğinizde bu referans patlar.

Adaptive'in kendi Family dosyasında referans olarak kullansanız bile, sıfır uzunluk evresinde referans patlar.
Fakat başka değerler girildiğinde tekrar düzelir. Yani Revit bu durumda:
"Tamam Family patladı. Ben mevzuyu büyütmeden başka değerler girmesini bekleyeyim" diyor :)

Bu konuda denemeler yaparken Tekillik (Büyük Patlamadan önceki gibi herşeyin tek bir noktada olması gibi)
yakalamanın oldukça güç olduğunu görmüştüm.
Pozitif ve negatif değerlere gitmek kolay olmasına rağmen.. Elbette programın kullanılış amacı göz önüne alındığında bu durumda hiç bir problem yok. Önemli olan referansların kaybolmaması ve Revit bu konuda çok başarılı.

Tabi insan programı zorlamadan da edemiyor. Geometrik referanslar için formülasyon kullanmak (ve ya dış refere edici kullanmak) tekilliğe giden tek yol gibi görünüyor.

Bu fikri denemek için formül tabanlı bir Arşimet Geometrisi modelledim. Evdeki (yazık) i7 930'u üzmesin diye fazla karmaşık olmayan, beni de baymasın diye çok ta basit olmayan bir geometri seçtim.

Snub Dodecahedron (wikipedia) da ne?

Family'yi indirmek için:

Archimedean Solids - Snub Dodecahedron.rfa (2015)


Snub Dodecahedron family'si bir veri giriş parametresi, iki visibility parametresi ve beş instance bilgilendirme parametresine sahip.

e parametresine pozitif değer verildiğinde:


e'ye sıfır değeri verildiğinde Revit bizi uyarıyor. Aynı yerde bir sürü instance var diyor..


Olacak tabi. Zaten olsun diye kastırıyoruz. Bütün instance'lar tek bir noktada!


Ve Family'nin hala çalıştığını görmek için Negatif bir değer denemesi..


Yaptım oldu.. Atımı getirin..

2014-06-12

BIM Bilgi Demektir.. Peki ya?

İkinci kattaki duvarı vurmak için asabi bir kuşun atış açısı ve atış hızı bilgisi gerekirse?

Korkmayın!

Asabi bir kuşun atış açısı ve atış hızını hesaplayıcı family emrinizde!

Angry.rfa (Revit 2015)


Angry family'sinde 3 veri giriş parametresi, bir bilgi ve bir visibility parametresi var.


θo = Atış açısı
Vo = Atış hızı
t = Tahmin edilen çarpışma süresi
tflight = Toplam uçuş süresi
cheat = Zorlananlara hile visibility parametresi


cheat parametresi aktif hale getirildiğinde yukarıdaki gibi görünüyor.

Uyarmadı demeyin! Birşeyler vurmak göründüğü kadar kolay değil!
Özellikle karmaşık BIM projelerinde..
Bir de workshared ortamlarda pis bağımlılık yapıyor :)

2014-06-02

İki Tarih Arasındaki Gün Sayısını Hesaplama

revitforum.org'da takvim family'si ile ilgili dedim ki:

-Şu an iyilik ve kötülük için kullanabilirsiniz. Comments label'ı oluşturun, bir tarih ayarlayın, workshared bir projede view'lara koyun..
İyilik: "Ofis partisini unutma!"
Kötülük: "Evet. Bunların teslim tarihi dündü!

Cevap:
-Yes, for Evil. I have also been thinking about doing some kind of project planning in Revit. For example if you make "Comment Objects" that a project manager or lead designer, with very little Revit experience, can place on drawings and fill in with date and actions they can be scheduled. This gives a clear overview of what needs to be done, by whom, when and if actions have been completed or not. It would be very useful to have Date and Time available as parameters in Revit so that actions approaching deadlines could be shown in ever brighter colours as the moment of death or glory approaches...

Yani kötülük kazandı..


Ya arkadaşım meydan okumayın! Yaparım :)

D_GEN_DEADLINE.rfa (Revit 2015)


Deadline family'sinin 2 veri girme parametresi var:
DateA ve DateB. Family DateA'nın DateB'den önce gerçekleşmesini bekliyor.

2 kontrol parametresi var:
DateAcheck ve DateBcheck. Bunlar girdiğimiz parametrelerin Family tarafından nasıl yorumlandığını gösteriyor.

Ve 6 farklı sonucu olan txtMessage parametresi.


Çözüm için bakınırken wikipedia'da şunu buldum:
Julian Day özellikle astronomlar tarafından kullanılan, Julian döneminden itibaren günlerin kesintisiz sayımıdır.

Her gün için bir sayım demek, bunları birbirinden çıkarır aradaki gün sayısını bulurum demek. Bu seferki tahmin ettiğimden de kolay olacak!

Ayrıca iki tarih için toplamda 6 adet(y/m/d) veri giriş parametresi olsun istemedim. Bu sebeple 2 tane Integer parametresi yaptım. Bunlar y/m/d olarak parse oluyor, DRV(drive) parametreleri ile düzeltiliyor ve check parametrelerinde tekrar birleştiriliyor.

DateA (Integer Parameter)

yıl(en az 1 basamak)ay(2 basamak)gün(2 basamak). Yani girilebilecek en erken tarih 10101.
(Bu tarihten önce bir teslim tarihiniz varsa haberim olsun :)

Parsing  doğru ondalık basamakları alarak yapıldı.

AyearParse = rounddown(DateA / 10000)
AmonthParse = rounddown(DateA / 100) - (AyearParse * 100)
AdayParse = DateA - (AyearParse * 10000) - (AmonthParse * 100)

day / month / yearDRV(drive) parametrelerini Revit Takvimi family'sinden aldım.

Julian Day Number

Önce Julian dönemi başlangıcından itibaren ay ve yılı hesaplamak gerekiyor.


Aa = rounddown((14 - AmonthDRV) / 12)
Ay = AyearDRV + 4800 - Aa
Am = AmonthDRV + (12 * Aa) - 3

Sonra Julian Day bulunuyor:


AJulianDay = AdayDRV + rounddown(((153 * Am) + 2) / 5) + (365 * Ay) + rounddown(Ay / 4) - rounddown(Ay / 100) + rounddown(Ay / 400) - 32045

DateB için aynı işlemleri tekrarladım.
BJulianDay - AJulianDay bize aradığımız gün sayısını veriyor!

Normalde formüller oturduğunda fazla parametre olmaması adına birbirlerinin içine gömerim.
Burada anlaşılır olması için yapmadım.