Dynamo'da Python Script Düğümü ile Özel Araç Yazmak
Düğümler yetmediğinde Python Script düğümü, kendi mantığınızı grafiğe sokmanın yoludur. IN ve OUT ile veri alışverişini, Revit belgesine erişimi ve yazdığınız kodu özel düğüme çevirmeyi öğrenin.
Bir bakışta
- Python düğümü, grafikteki herhangi bir düğüm gibi girdi alır ve çıktı verir. Girdiler IN listesinde gelir, sonuç OUT değişkenine atanır.
- Her şey için kod yazılmaz. Önce düğümlerle çözmeyi deneyin; döngü, koşul ve özel mantık gerektiğinde Python devreye girer.
- Revit belgesine DocumentManager üzerinden erişilir. Revit API'nin kuralları, özellikle işlem (transaction) mantığı geçerlidir.
- Kodu özel düğüme çevirmek yeniden kullanımı kolaylaştırır. Python düğümünden Create Custom Node ile kendi düğümünüzü üretirsiniz.
- Küçük parçalarla başlayın. Önce kendi girdinizle çalışan kısa bir betik yazın, sonra Revit'e geçin.
Python düğümü ne zaman gerekir
Dynamo'nun düğümleri çoğu işi karşılar. Ama bazı durumlarda düğüm zincirleri hantallaşır: iç içe döngüler, koşullara bağlı çok adımlı işlemler, bir listeyi özel bir kurala göre ayıklamak, Revit API'nin düğüm olarak sunulmayan bir özelliğine erişmek. Bu noktada Python Script düğümü devreye girer.
Kod yazmak her zaman daha iyi değildir. Düğümlerle okunur biçimde çözülebilen iş için Python eklemek, grafiği yalnızca kod bilenin anlayabileceği hale getirir. İyi bir kural şudur: önce düğümlerle dene; zincir okunmaz hale geldiğinde ya da bir özellik yetmediğinde Python'a geç.
Python düğümü, bir kaçış yolu değil, bir araçtır. Yazdığınız parça küçük, tek işi yapan ve adlandırılmış olursa grafik de anlaşılır kalır. Büyük, tek parça betikler bakım zorluğu yaratır.
Düğümün yapısı: IN ve OUT
Dynamo Primer'e göre Python Script düğümü kitaplıkta Script, Editor, Python Script altında bulunur. Düğüme çift tıklayarak ya da sağ tıklayıp Edit seçeneğiyle betik düzenleyicisi açılır. Düğümün girdileri IN listesinde tutulur: ilk girdi IN[0], sonraki girdi IN[1] ve böyle sürer. Düğümdeki artı simgesiyle girdi eklenir. Sonuç, OUT değişkenine atanarak Dynamo'ya döndürülür.
Varsayılan şablon standart Python ve DesignScript kitaplıklarını yükler. Primer'de görülen başlangıç satırları clr modülünü içe aktarır, ProtoGeometry'ye referans ekler ve Autodesk.DesignScript.Geometry'den her şeyi alır. Bu sayede geometri nesnelerine kod bloğundaki nokta gösterimine benzer biçimde erişilir.
Python'a geometri bilmeden başlamak için saf Python'la kurgulanmış küçük bir örnek, mantığı gösterir. Bu kurgusal örnek, bir değer listesinden eşikten büyük olanları ayıklar:
- esik = IN[0]
- degerler = IN[1]
- secilen = [d for d in degerler if d > esik]
- OUT = secilen
Grafikte ilk girdiye bir sayı, ikinci girdiye bir sayı listesi bağlanır; çıktı yalnızca eşikten büyük olanları içerir. Aynı işi düğümlerle yapmak mümkündür, ama koşul karmaşıklaştıkça Python daha okunaklı hale gelir.
Python düğümü, grafikle kod arasındaki köprüdür
Veri akışı
- Girdiler: INGrafikteki düğümlerden gelen değerler liste olarak okunur.
- BetikKendi mantığınız: döngü, koşul, hesap, API çağrısı.
- Çıktı: OUTSonuç Dynamo'ya döner, sonraki düğümlere bağlanır.
Revit belgesine erişmek
Dynamo Primer'in Python ve Revit bölümü, Revit ile çalışmanın giriş adımlarını gösterir. clr ile RevitNodes ve RevitServices bileşenlerine referans eklenir, Dynamo'nun Revit sarmalayıcı düğümleri içe aktarılır ve DocumentManager üzerinden açık Revit oturumuna erişilir. Aktif belge, DocumentManager.Instance.CurrentDBDocument ile alınır.
Belge başlığını döndüren, kurgusal ve en kısa örnek:
- import clr
- clr.AddReference('RevitServices')
- from RevitServices.Persistence import DocumentManager
- doc = DocumentManager.Instance.CurrentDBDocument
- OUT = doc.Title
Buradan sonrası Revit API bilgisidir: elemanları bulmak, parametrelerini okumak ve yazmak. Dynamo'nun sarmalayıcı elemanları ile Revit API nesneleri farklıdır; gerektiğinde dönüşüm yapılır. Revit'te değişiklik yapan her işlem, Revit API'nin işlem kurallarına tabidir. Dynamo bu işlemleri kendi düğümleri için yönetir, Python'da ise bunu kodda açıkça ele almak gerekir; ayrıntı için Revit API belgelerine ve Primer'e bakın.
Primer, Python ile eleman yerleştirmenin yerleşik düğümlerin sağladığı bağlılığı bozduğunu da belirtir: grafik yeniden çalıştırıldığında önceki elemanların silinmesi gerekebilir. Revit içinde okuma işleri güvenli başlangıçtır; yazma işlerini deneme dosyasında sınayın.
Kodu özel düğüme dönüştürmek
Çalışan bir betiği her grafiğe kopyalamak, sürüm karmaşasının başıdır. Primer, bir Python Script düğümünü özel düğüme çevirmeyi anlatır: çalışma alanında sağ tıklayıp Create Custom Node seçilir, ad, açıklama ve kategori verilir. Özel düğüm çalışma alanında girdi adlarını değiştirebilir, veri türü ve varsayılan değer ekleyebilir, çıktıyı adlandırabilirsiniz. Dosya .dyf olarak kaydedilir.
Anlamlı girdi adları, betiği başkaları için kullanılır hale getirir. "IN[0]" yerine "esik degeri" gibi bir ad, düğümü kullanan kişiye ne bağlayacağını söyler. Açıklama alanına düğümün ne yaptığını, hangi girdi türünü beklediğini ve nelere dikkat edildiğini yazın.
Bu düğümü ekipte paylaşmak, hem Python bilmeyenlere hem de Dynamo Player gibi araçlara kapı açar. Özel düğüm ve paket mantığı için Dynamo paketleri bölümüne bakmak yararlıdır.
Hata ayıklama ve temiz kod alışkanlıkları
Python düğümünde hata aldığınızda Dynamo düğümü uyarı durumuna çevirir ve hata iletisini gösterir. İletiyi satırı ve nesneyi ipucu olarak okuyun. Hata ayıklamanın en basit yolu, ara değerleri OUT ile döndürmek ve Watch düğümüyle izlemektir.
Temiz kod alışkanlıkları burada da geçerlidir: anlaşılır değişken adları, kısa fonksiyonlar, kod yorumları, girdilerin kontrolü. Beklenen türde girdi gelmediğinde sessizce yanlış sonuç vermek yerine anlaşılır bir hata mesajı döndürmek, grafiği kullananların işini kolaylaştırır.
Python altyapısı Dynamo sürümleri arasında değişmiştir; eski betikler yeni sürümde uyarı verebilir. Primer'de bu geçişi anlatan göç belgeleri yer alır. Eski bir betiği alıp kullanmadan önce kullandığınız Dynamo sürümüyle uyumunu denemek gerekir.
Sık yapılan hatalar
En yaygın hata, her şeyi Python'la çözmeye çalışmaktır: düğümle birkaç adımda biten işi bir sayfalık betiğe dönüştürmek bakım yükü yaratır. İkinci hata, Revit belgesini değiştiren kodu doğrudan gerçek projede ilk kez çalıştırmaktır. Üçüncüsü, betiği özel düğüme çevirmeden grafikten grafiğe kopyalamaktır.
Bir başka sorun, girdi doğrulamasının yokluğudur: boş liste ya da yanlış türde değer gelince betik anlaşılmaz bir hatayla durur. Son olarak sürüm uyumunu denetlememek yaygındır; bir bilgisayarda çalışan betik, farklı Dynamo sürümünde beklenmedik biçimde davranabilir.
Python düğümünde sorun çoğunlukla kodun kendisinde değil, düzeninde çıkar
Yaygın yaklaşım ve doğrusu
Örnek: listeden koşula uyanları ayıklayan küçük betik
Revit'e dokunmadan Python düşüncesini oturtmak için kurgusal ve güvenli bir örnek yeterlidir. Elinizde oda adlarının ve oda alanlarının iki ayrı listesi olsun; ortalamanın üzerindeki odaların adlarını isteyelim. Birinci girdiye adlar, ikinci girdiye alanlar bağlanır:
- adlar = IN[0]
- alanlar = IN[1]
- if len(adlar) != len(alanlar):
- OUT = "Listeler aynı uzunlukta olmalı"
- else:
- ortalama = sum(alanlar) / len(alanlar)
- OUT = [ad for ad, alan in zip(adlar, alanlar) if alan > ortalama]
Betik birkaç şey öğretir. Birincisi girdi doğrulamasıdır: listelerin uzunluğu uyuşmuyorsa sessizce yanlış sonuç vermek yerine anlaşılır bir ileti döner. İkincisi zip ile iki listeyi eşleştirmektir; düğümlerle bunu yapmak daha fazla düğüm gerektirir. Üçüncüsü, çıktının her zaman OUT değişkenine atanmasıdır.
Bu betiği önce Watch düğümüyle küçük bir listede deneyin, sonra gerçek veriye bağlayın. Beklenen sonuç elle hesaplanabilen kısa bir listeyle doğrulanırsa betiğe güven artar. Sonra aynı mantığı Revit elemanlarından alınan değerlerle çalıştırmak yalnız veri kaynağını değiştirmek demektir; filtreleme mantığı aynı kalır. Yazma işlemlerine ise bu aşamadan sonra, deneme dosyasında geçin.
Bu beceriyi Mindset programlarında nerede çalışırsınız
Revit'te Dynamo ile Otomasyon Eğitimi, özel araç ve script geliştirme ile uygulamalı proje ve ileri teknikler modüllerini içerir. Düğüm tabanlı otomasyondan kodla genişletmeye geçmek isteyen mimar, mühendis ve BIM uzmanları için bu modüller, hangi işin düğümle, hangisinin kodla çözüleceğini ayırt etmek açısından uygun bir çerçevedir.
İlgili Mindset programı
Revit’te Dynamo ile Otomasyon Eğitimi
Sık sorulan sorular
Dynamo'da Python öğrenmek için önce Python bilmek gerekir mi?
Temel Python bilgisi yardımcı olur: değişkenler, listeler, döngüler, koşullar. Ama Dynamo'nun düğüm mantığını bilmeden Python'a başlamak zordur. Önce düğümlerle veri akışını öğrenin, sonra döngü ve koşul gerektiren küçük parçalarda Python'u deneyin.
Python Script düğümünü nerede bulurum?
Dynamo Primer'e göre kitaplıkta Script, Editor, Python Script altında. Düğüme çift tıklayarak ya da sağ tıklayıp Edit seçerek betik düzenleyicisini açarsınız. Menü adları arayüz diline göre farklı görünebilir.
IN ve OUT ne anlama gelir?
IN, düğüme bağlanan girdileri liste olarak tutar; ilk girdi IN[0] ile okunur. OUT ise betiğin Dynamo'ya geri döndürdüğü sonucu taşır. Sonucu OUT değişkenine atamazsanız düğüm bir çıktı vermez.
Python ile Revit elemanı oluşturmak güvenli mi?
Dikkat gerektirir. Primer, Python ile yerleştirilen elemanların yerleşik düğümlerin sağladığı bağlılığı bozduğunu belirtir; grafik yeniden çalışırken eskilerin silinmesi gerekebilir. Revit API işlem kurallarını da gözetin. Önce deneme dosyasında, küçük bir örnekle sınayın.
Yazdığım Python kodunu başkasına nasıl veririm?
Betiği özel düğüme dönüştürüp .dyf dosyası olarak paylaşın, girdileri anlamlı adlandırın ve açıklamasını yazın. Ekipte ortak klasör kullanıyorsanız herkes aynı sürümü alır. Kodun çalışması için gereken paketleri de belirtin.